summaryrefslogtreecommitdiff
path: root/Build/source/utils/vlna
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-04-27 18:16:27 +0000
committerKarl Berry <karl@freefriends.org>2011-04-27 18:16:27 +0000
commitbc57a75463ee492cf7eedeb31291cb0b07681cd8 (patch)
tree3ce231cb3ca0a50cbed012275ad59bb383d935e6 /Build/source/utils/vlna
parente6fdf875e91bf1013e861b2ef46db6b43dda1a61 (diff)
import vlna-1.5 from ftp://math.feld.cvut.cz/pub/olsak/vlna
git-svn-id: svn://tug.org/texlive/trunk@22221 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/vlna')
-rw-r--r--Build/source/utils/vlna/ChangeLog4
-rw-r--r--Build/source/utils/vlna/Makefile.am4
-rw-r--r--Build/source/utils/vlna/Makefile.in2
-rw-r--r--Build/source/utils/vlna/README11
-rwxr-xr-xBuild/source/utils/vlna/configure20
-rw-r--r--Build/source/utils/vlna/configure.ac4
-rw-r--r--Build/source/utils/vlna/vlna-cz.man131
-rw-r--r--Build/source/utils/vlna/vlna.c389
-rw-r--r--Build/source/utils/vlna/vlna.man212
-rw-r--r--Build/source/utils/vlna/vlna.txt12
-rw-r--r--Build/source/utils/vlna/vlna.w125
11 files changed, 619 insertions, 295 deletions
diff --git a/Build/source/utils/vlna/ChangeLog b/Build/source/utils/vlna/ChangeLog
index 5c803b83b27..90598edeca0 100644
--- a/Build/source/utils/vlna/ChangeLog
+++ b/Build/source/utils/vlna/ChangeLog
@@ -1,3 +1,7 @@
+2011-04-27 Karl Berry <karl@tug.org>
+
+ * Import 1.5 from ftp://math.feld.cvut.cz/pub/olsak/vlna.
+
2009-08-22 Peter Breitenlohner <peb@mppmu.mpg.de>
Avoid maximal compiler warnings.
diff --git a/Build/source/utils/vlna/Makefile.am b/Build/source/utils/vlna/Makefile.am
index b836ac31ddb..3511292221a 100644
--- a/Build/source/utils/vlna/Makefile.am
+++ b/Build/source/utils/vlna/Makefile.am
@@ -1,6 +1,6 @@
## Makefile.am for the TeX Live subdirectory utils/vlna/
##
-## Copyright (C) 2008, 2009 Peter Breitenlohner <tex-live@tug.org>
+## Copyright (C) 2008-2011 Peter Breitenlohner <tex-live@tug.org>
## You may freely use, modify and/or distribute this file.
##
ACLOCAL_AMFLAGS = -I ../../m4
@@ -15,7 +15,7 @@ CSMAC = csmac.tex
CWEB_TEX = vlna.tex vlna.idx vlna.scn
CWEB_DVI = vlna.dvi
-DOCS = README README.en vlna.txt
+DOCS = README README.en vlna.txt vlna-cz.man
EXTRA_DIST = $(CWEB_SRC) $(CSMAC) $(CWEB_TEX) $(CWEB_DVI) $(DOCS)
diff --git a/Build/source/utils/vlna/Makefile.in b/Build/source/utils/vlna/Makefile.in
index 6407a545cac..094cd4a38cd 100644
--- a/Build/source/utils/vlna/Makefile.in
+++ b/Build/source/utils/vlna/Makefile.in
@@ -200,7 +200,7 @@ CWEB_SRC = vlna.w
CSMAC = csmac.tex
CWEB_TEX = vlna.tex vlna.idx vlna.scn
CWEB_DVI = vlna.dvi
-DOCS = README README.en vlna.txt
+DOCS = README README.en vlna.txt vlna-cz.man
EXTRA_DIST = $(CWEB_SRC) $(CSMAC) $(CWEB_TEX) $(CWEB_DVI) $(DOCS)
CLEANFILES = vlna.log vlna.toc
all: all-am
diff --git a/Build/source/utils/vlna/README b/Build/source/utils/vlna/README
index fe8833775b7..5c4e09d1f02 100644
--- a/Build/source/utils/vlna/README
+++ b/Build/source/utils/vlna/README
@@ -1,5 +1,5 @@
-VLNA v1.2
+VLNA v1.3
=========
Program vlna přidává vlnky (místo původních mezer) za neslabičné předložky
@@ -59,8 +59,15 @@ Děkuji panu Rudolfu Čejkovi za vytvoření Makefile a manuálové stranky
k programu. Rovněž mu děkuji za odstranění drobných chyb programu, které
se vyskytly ve verzi 1.0.
-28. 2. 1995 Petr Olšák
+Děkuji pánům Peteru Breitenlohnerovi a Zdeňku Wagnerovi za úpravu
+nástojů k sestavení programu a za další dokumentaci, což pomohlo zařadit
+program do TexLive.
+18. 7. 2008 Petr Olšák
+
+
+verze 1.3 (18. 7. 2008):
+ viz Changelog
verze 1.2 (20. 5. 2002):
oprava chyby "v<space><cr>lese" -> "v~~lese"
a přidání patternu pro "\uv{v lese}" -> "\uv{v~lese}".
diff --git a/Build/source/utils/vlna/configure b/Build/source/utils/vlna/configure
index 483302afb37..ffa6816acd3 100755
--- a/Build/source/utils/vlna/configure
+++ b/Build/source/utils/vlna/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for vlna for TeX Live 1.3.
+# Generated by GNU Autoconf 2.68 for vlna for TeX Live 1.5.
#
# Report bugs to <tex-live@tug.org>.
#
@@ -559,8 +559,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='vlna for TeX Live'
PACKAGE_TARNAME='vlna-for-tex-live'
-PACKAGE_VERSION='1.3'
-PACKAGE_STRING='vlna for TeX Live 1.3'
+PACKAGE_VERSION='1.5'
+PACKAGE_STRING='vlna for TeX Live 1.5'
PACKAGE_BUGREPORT='tex-live@tug.org'
PACKAGE_URL=''
@@ -1212,7 +1212,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures vlna for TeX Live 1.3 to adapt to many kinds of systems.
+\`configure' configures vlna for TeX Live 1.5 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1279,7 +1279,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of vlna for TeX Live 1.3:";;
+ short | recursive ) echo "Configuration of vlna for TeX Live 1.5:";;
esac
cat <<\_ACEOF
@@ -1370,7 +1370,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-vlna for TeX Live configure 1.3
+vlna for TeX Live configure 1.5
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -1425,7 +1425,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by vlna for TeX Live $as_me 1.3, which was
+It was created by vlna for TeX Live $as_me 1.5, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2244,7 +2244,7 @@ fi
# Define the identity of the package.
PACKAGE='vlna-for-tex-live'
- VERSION='1.3'
+ VERSION='1.5'
# Some tools Automake needs.
@@ -4078,7 +4078,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by vlna for TeX Live $as_me 1.3, which was
+This file was extended by vlna for TeX Live $as_me 1.5, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -4135,7 +4135,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-vlna for TeX Live config.status 1.3
+vlna for TeX Live config.status 1.5
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
diff --git a/Build/source/utils/vlna/configure.ac b/Build/source/utils/vlna/configure.ac
index 16837a25174..9d177c53ca1 100644
--- a/Build/source/utils/vlna/configure.ac
+++ b/Build/source/utils/vlna/configure.ac
@@ -1,12 +1,12 @@
dnl Process this file with autoconf to produce a configure script.
dnl
-dnl Copyright (C) 2009 Peter Breitenlohner <tex-live@tug.org>
+dnl Copyright (C) 2009-2011 Peter Breitenlohner <tex-live@tug.org>
dnl
dnl This file is free software; the copyright holder
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl
-AC_INIT([vlna for TeX Live], [1.3], [tex-live@tug.org])
+AC_INIT([vlna for TeX Live], [1.5], [tex-live@tug.org])
AC_PREREQ([2.65])
AC_CONFIG_SRCDIR([vlna.w])
AC_CONFIG_AUX_DIR([../../build-aux])
diff --git a/Build/source/utils/vlna/vlna-cz.man b/Build/source/utils/vlna/vlna-cz.man
new file mode 100644
index 00000000000..334b683572b
--- /dev/null
+++ b/Build/source/utils/vlna/vlna-cz.man
@@ -0,0 +1,131 @@
+.\" $Id$
+.TH VLNA 1 "4. unora 1998"
+.nh
+.SH NAZEV
+vlna \- pridani vlnek za neslabicne predlozky v TeXu
+.SH POUZITI
+.B vlna
+[\fIvolby\fP]
+[\fIsoubory\fP]
+.SH POPIS
+Program
+.B vlna
+pridava vlnky (misto puvodnich mezer) za neslabicne predlozky
+ve vstupnich souborech pro TeX, coz zabrani zlomu radku v nezadoucich mistech.
+.PP
+Veskere aktivity programu je mozne vypnout sekvenci \fB%~-\fP a zapnout
+sekvenci \fB%~+\fP (mezi uvedenymi znaky muze byt libovolne mnozstvi mezer).
+.PP
+Pred predlozkou se muze nachazet libovolne mnozstvi oteviracich zavorek,
+pred kterymi se musi nachazet mezera nebo zacatek radku. Pred
+oteviraci svorkou muze byt take misto mezery TeXova
+\(lq\\sekvence\(rq (od verze 1.2).
+Napr. za \(lq([{(V\(rq na pocatku radku bude vlnka pridana.
+Stejne tak se text \(lq\\uv{V lese}\(rq promeni na
+\(lq\\uv{V~lese}\(rq.
+.PP
+Program kontroluje konzistenci matematickych prostredi (neni-li uveden
+parametr \fB\-m\fP).
+Vstup do \fIdisplay\fP rezimu (\fB$$\fP) uvnitr \fItext\fP rezimu (\fB$\fP)
+(napr. \fB$\fP...\fB$$\fP...\fB$\fP) znamena varovani a prechod do
+\fIdisplay\fP.
+Podobne prazdny radek uvnitr \fItext\fP nebo \fIdisplay\fP rezimu znamena
+vypis varovani a prechod do nematematickeho (standardniho) rezimu.
+Uvnitr rezimu \fIdisplay\fP se ignoruji vyskyty samostatneho znaku \fB$\fP,
+jelikoz byva vetsinou soucasti konstrukce \fB\\hbox\fP.
+.PP
+Program kontroluje konzistenci verbatim rezimu na konci souboru.
+Nebyl-li ukoncen, vypise se varovani.
+Kontrola se neprovadi, pokud je pouzita volba \fB\-n\fP nebo \fB\-w\fP.
+.PP
+Program nedoplnuje vlnky za samostatna pismena, ktera jako predlozky vypadaji,
+ale nasleduji bezprostredne za sekvencemi \fB\\TeX\fP nebo \fB\\LaTeX\fP.
+Napr. do textu \(lq\fBVlastnosti \\TeX u jsou\fP\(rq nebude zadna vlnka
+doplnena.
+.SH VOLBY
+Volby jsou nepovinne a mohou byt uvedeny v libovolnem poradi, ale nemohou
+byt spojovany.
+.TP
+.B \-f
+Filtr. Jmena souboru jsou interpretovana takto:
+.RS
+.TP 4
+.B vlna \-f \fIsoubor1 soubor2\fP
+Vstup je \fIsoubor1\fP, vystup \fIsoubor2\fP.
+.TP 4
+.B vlna \-f \fIsoubor1\fP
+Vstup je \fIsoubor1\fP, vystup \fIstdout\fP.
+.TP 4
+.B vlna \-f
+Vstup je \fIstdin\fP, vystup \fIstdout\fP.
+.TP 4
+\fBvlna\fP \fIsoubor1\fP [\fIsoubor2\fP [\fIsoubor3\fP ...]]
+Neni-li uveden parametr \fB\-f\fP, kazdy soubor je zpracovavan samostatne.
+.RE
+.TP
+.B \-s
+Tichy rezim. Program potlaci vypis uvodni zpravy, varovnych zprav a
+statistik o zmenach v souborech
+(bez uvedeni parametru jsou zpravy vypisovany na \fIstderr\fP).
+V tichem rezimu se vypise jen chyba, ktera predcasne ukonci
+cinnost programu.
+.TP
+.B \-r
+Nevytvaret (mazat) zalohy.
+Parametr \fB\-r\fP nema vliv, pokud je uveden spolu s \fB\-f\fP.
+V opacnem pripade se ke kazdemu souboru vytvari zaloha s vlnkou na konci jmena
+a parametr \fB\-r\fP zpusobi, ze na konci zpracovani jsou tyto zalohy mazany.
+.TP
+.B \-v \fIznaky\fP
+Znaky povazovane za neslabicne predlozky, za ktere ma byt pridavana
+vlnka. Implicitni hodnota je \fB\-v\ KkSsVvZzOoUuAI\fP. (Mezi
+\fB\-v\fP a skupinou znaku musi byt mezera.)
+.TP
+.B \-x \fIkod\fP
+vymezuje string (kod je hexadecimalni zapis stringu),
+ktery bude vkladan misto implicitni vlnky na vyhledana mista.
+Priklad \fB\-x C2A0\fP vymezuje dvouznakovy string: misto kazde vlnky budou
+vlozeny dva byty, prvni s kodem C2 a druhy s kodem A0. Podle unicodove tabulky
+tento priklad tedy zpusobi nahrazovani znakem NO-BREAK SPACE pri kodovani UTF8.
+Jine priklady: \fB\-x 00A0\fP nahrazovani znakem NO-BREAK SPACE pri
+kodovani UTF16, \fB\-x 41484F4A\fP nahrazovani textem AHOJ.
+Mezi \fB\-x\fP a kodem musi byt mezera.
+.TP
+.B \-m
+Ignorovani prechodu do matematickych prostredi
+(\fB$\fP...\fB$\fP a \fB$$\fP...\fB$$\fP).
+Parametr \fB\-m\fP zpusobi vlnkovani i v matematickych prostredich, ktera
+se implicitne vynechavaji.
+.TP
+.B \-n
+Ignorovani verbatim rezimu (\fB\\verb\fP\fI<znak>\fP...\fI<znak>\fP,
+\fB\\begtt\fP...\fB\\endtt\fP).
+Parametr \fB\-n\fP zpusobi vlnkovani i ve verbatim rezimu, ktery se
+implicitne vynechava.
+.TP
+.B \-l
+LaTeX. Pro rozpoznani matematickeho rezimu jsou pridana prostredi
+\fB\\begin{display}\fP...\fB\\end{display}\fP a
+\fB\\begin{equation}\fP...\fB\\end{equation}\fP.
+Pro rozpoznani verbatim rezimu je pridano LaTeXove prostredi
+\fB\\begin{verbatim}\fP...\fB\\end{verbatim}\fP.
+.TP
+.B \-w
+Web. Pro rozpoznani verbatim rezimu jsou pridany sekvence
+\fB@<\fP, \fB@d\fP...\fB@*\fP, \fB@\fP\fImezera\fP nebo \fB@>|\fP.
+Ve zdrojovem kodu se tedy nevlnkuje program, ale jen komentare.
+.SH PRIKLADY
+.TP
+.B vlna \-m \-n \-s \-r \fIsoubor\fP
+Volani priblizne odpovida volani puvodniho programu \fBvlnka\fP.
+(Navic se neprovadi vlnkovani za sekvencemi \fB\\TeX\fP a \fB\\LaTeX\fP.)
+.TP
+.B vlna *.tex
+Vlnkovani vsech souboru s priponou \fBtex\fP.
+(Pouze na UNIXu.)
+.TP
+.B vlna \-f soubor > /dev/null
+Test konzistence matematickeho a verbatim rezimu bez provedeni zmen.
+(Pouze na UNIXu.)
+.SH AUTOR
+Petr Olsak <olsak@math.feld.cvut.cz>. Manualovou stranku a Makefile vytvoril Rulolf Cejka
diff --git a/Build/source/utils/vlna/vlna.c b/Build/source/utils/vlna/vlna.c
index 76998053f81..ab95587c8d1 100644
--- a/Build/source/utils/vlna/vlna.c
+++ b/Build/source/utils/vlna/vlna.c
@@ -1,4 +1,4 @@
-#define BANNER "This is program vlna, version 1.2, (c) 1995, 2002 Petr Olsak\n" \
+#define BANNER "This is program vlna, version 1.5, (c) 1995, 2002, 2009, 2010 Petr Olsak\n" \
#define OK 0
#define WARNING 1
@@ -21,33 +21,39 @@
#define DISPLAYMODE 2
#define VERBMODE 3
/*1:*/
-#line 19 "vlna.w"
+#line 19 "./vlna.w"
/*3:*/
-#line 39 "vlna.w"
+#line 39 "./vlna.w"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*:3*/
-#line 20 "vlna.w"
+#line 20 "./vlna.w"
/*4:*/
-#line 56 "vlna.w"
+#line 56 "./vlna.w"
char*prog_name;
int status;
/*:4*//*7:*/
-#line 131 "vlna.w"
+#line 136 "./vlna.w"
int isfilter= 0,silent= 0,rmbackup= 0,nomath= 0,noverb= 0,web= 0,latex= 0;
char charsetdefault[]= "KkSsVvZzOoUuAI";
char*charset= charsetdefault;
-/*:7*//*15:*/
-#line 289 "vlna.w"
+/*:7*//*8:*/
+#line 146 "./vlna.w"
+
+unsigned char tiestr[MAXLEN];
+int tiestrlen;
+
+/*:8*//*17:*/
+#line 327 "./vlna.w"
typedef struct PATITEM{
char*str;
@@ -60,8 +66,8 @@ void(*proc)(void);
struct PATTERN*next;
}PATTERN;
-/*:15*//*16:*/
-#line 341 "vlna.w"
+/*:17*//*18:*/
+#line 379 "./vlna.w"
PATITEM*lapi[MAXPATT];
PATTERN*lapt[MAXPATT];
@@ -71,21 +77,27 @@ char c;
char buff[MAXBUFF];
int ind;
-/*:16*//*20:*/
-#line 411 "vlna.w"
+/*:18*//*19:*/
+#line 398 "./vlna.w"
+
+char buffnz[8];
+int inz;
+
+/*:19*//*23:*/
+#line 463 "./vlna.w"
char strings[512];
int i;
-/*:20*//*25:*/
-#line 496 "vlna.w"
+/*:23*//*28:*/
+#line 548 "./vlna.w"
char*filename;
long int numline,numchanges;
int mode;
-/*:25*//*33:*/
-#line 626 "vlna.w"
+/*:28*//*36:*/
+#line 686 "./vlna.w"
char tblanks[]= " ~\t";
char blanks[]= " \t";
@@ -100,11 +112,11 @@ char openbrace[]= "{";
char letters[]= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
PATTERN*vlnkalist,*mathlist,*parcheck,*verblist;
-/*:33*/
-#line 21 "vlna.w"
+/*:36*/
+#line 21 "./vlna.w"
/*6:*/
-#line 108 "vlna.w"
+#line 112 "./vlna.w"
static void printusage(void)
{
@@ -117,6 +129,7 @@ fprintf(stderr,
" -s : silent: no messages to stderr\n"
" -r : rmbackup: if nofilter, removes temporary files\n"
" -v charset : set of lettres to add tie, default: KkSsVvZzOoUuAI\n"
+" -x code : code for tie symbol, default: 7E, example -x C2A0\n"
" -m : nomath: ignores math modes\n"
" -n : noverb: ignores verbatim modes\n"
" -l : LaTeX mode\n"
@@ -124,15 +137,36 @@ fprintf(stderr,
}
/*:6*//*10:*/
-#line 166 "vlna.w"
+#line 174 "./vlna.w"
+
+unsigned char hexnum(char c){
+if(c>='0'&&c<='9')return c-'0';
+if(c>='A'&&c<='F')return c-'A'+10;
+if(c>='a'&&c<='f')return c-'a'+10;
+printusage(),exit(BAD_OPTIONS);
+}
+void settiestr(char*s){
+int i,j,c;
+i= strlen(s);
+if((i> 2*MAXLEN)||i%2==1)printusage(),exit(BAD_OPTIONS);
+tiestrlen= i/2;
+j= 0;
+for(i= 0;i<tiestrlen;i++){
+tiestr[i]= hexnum(s[j++])<<4;
+tiestr[i]+= hexnum(s[j++]);
+}
+}
+
+/*:10*//*12:*/
+#line 204 "./vlna.w"
static void ioerr(char*f)
{
fprintf(stderr,"%s: cannot open file %s\n",prog_name,f);
}
-/*:10*//*17:*/
-#line 354 "vlna.w"
+/*:12*//*20:*/
+#line 406 "./vlna.w"
static void*myalloc(int size)
{
@@ -146,8 +180,8 @@ exit(BAD_PROGRAM);
return p;
}
-/*:17*//*18:*/
-#line 371 "vlna.w"
+/*:20*//*21:*/
+#line 423 "./vlna.w"
static PATTERN*setpattern(void(*proc)(void))
{
@@ -162,8 +196,8 @@ lastpi= NULL;
return pp;
}
-/*:18*//*19:*/
-#line 389 "vlna.w"
+/*:21*//*22:*/
+#line 441 "./vlna.w"
static void setpi(char*str,int flag)
{
@@ -176,8 +210,8 @@ else lastpi->next= p;
lastpi= p;
}
-/*:19*//*22:*/
-#line 422 "vlna.w"
+/*:22*//*25:*/
+#line 474 "./vlna.w"
static PATTERN*normalpattern(void(*proc)(void),const char*str)
{
@@ -198,8 +232,8 @@ j++;
return pp;
}
-/*:22*//*23:*/
-#line 458 "vlna.w"
+/*:25*//*26:*/
+#line 510 "./vlna.w"
static int match(PATITEM*p)
{
@@ -211,8 +245,8 @@ case ANY:return 0;
case ONE:if(p->next==NULL)return FOUND;
return 1;
case ONE_NOT:return NOFOUND;
-case ANY_NOT:/*24:*/
-#line 476 "vlna.w"
+case ANY_NOT:/*27:*/
+#line 528 "./vlna.w"
switch(m= match(p->next)){
case NOFOUND:return NOFOUND;
@@ -220,61 +254,70 @@ case FOUND:return FOUND;
default:return 1+m;
}
-/*:24*/
-#line 469 "vlna.w"
+/*:27*/
+#line 521 "./vlna.w"
;
}
return 0;
}
-/*:23*//*36:*/
-#line 659 "vlna.w"
+/*:26*//*39:*/
+#line 727 "./vlna.w"
static void vlnkain(void)
{
-char p;
+int i;
+char p,z;
ind--;
p= buff[ind--];
-while(strchr(blanks,buff[ind])!=NULL)ind--;
-ind++;
-buff[ind++]= '~';
+z= buff[ind];
+while(!buff[ind]||(strchr(blanks,buff[ind])!=NULL))ind--;
+if(!buff[++ind]&&tiestr[0])ind++;
+for(i= 0;i<tiestrlen;i++)buff[ind++]= tiestr[i];
+i= tiestrlen;
+if(!tiestr[0])i--;
+if(!z&&(i%2))buff[ind++]= 0;
buff[ind++]= p;
numchanges++;
}
-/*:36*//*38:*/
-#line 698 "vlna.w"
+/*:39*//*41:*/
+#line 771 "./vlna.w"
static void vlnkacr(void)
{
-char p;
+char p,z;
int i,j;
ind--;
p= buff[ind--];
-while(strchr(blankscr,buff[ind])!=NULL)ind--;
+z= buff[ind];
+while(!buff[ind]||(strchr(blankscr,buff[ind])!=NULL))ind--;
i= ind;
while(i>=0&&(strchr(blankscr,buff[i])==NULL))i--;
j= i;
-while(i>=0&&(strchr(blanks,buff[i])!=NULL))i--;
+while(i>=0&&(!buff[ind]||(strchr(blanks,buff[i])!=NULL)))i--;
if(i>=0&&buff[i]=='\n')j= -1;
if(j>=0)buff[j]= '\n';
else numline--;
-ind++;
-buff[ind++]= '~';
+if(!buff[++ind]&&tiestr[0])ind++;
+for(i= 0;i<tiestrlen;i++)buff[ind++]= tiestr[i];
+i= tiestrlen;
+if(!tiestr[0])i--;
+if(!z&&(i%2))buff[ind++]= 0;
buff[ind++]= p;
numchanges++;
}
-/*:38*//*41:*/
-#line 764 "vlna.w"
+/*:41*//*44:*/
+#line 841 "./vlna.w"
static void tielock(void)
{
c= 1;
}
-/*:41*//*42:*/
-#line 773 "vlna.w"
+/*:44*//*45:*/
+#line 850 "./vlna.w"
static void printwarning(void)
{
@@ -285,8 +328,8 @@ filename,numline-(c=='\n'?1:0));
status= WARNING;
}
-/*:42*//*44:*/
-#line 798 "vlna.w"
+/*:45*//*47:*/
+#line 875 "./vlna.w"
static void mathin(void)
{
@@ -301,12 +344,12 @@ mode= TEXTMODE;
normallist= listpatt= vlnkalist;
}
-/*:44*//*45:*/
-#line 816 "vlna.w"
+/*:47*//*48:*/
+#line 893 "./vlna.w"
static void onedollar(void)
{
-if(buff[ind-3]=='\\'||(buff[ind-3]=='$'&&buff[ind-4]!='\\'))return;
+if(buffnz[inz-3]=='\\'||(buffnz[inz-3]=='$'&&buffnz[inz-4]!='\\'))return;
if(mode==DISPLAYMODE)printwarning();
else{
if(mode==TEXTMODE)mathin();
@@ -314,8 +357,8 @@ else mathout();
}
}
-/*:45*//*47:*/
-#line 835 "vlna.w"
+/*:48*//*50:*/
+#line 912 "./vlna.w"
static void checkmode(void)
{
@@ -326,8 +369,8 @@ normallist= listpatt= vlnkalist;
}
}
-/*:47*//*49:*/
-#line 861 "vlna.w"
+/*:50*//*52:*/
+#line 938 "./vlna.w"
static void displayin(void)
{
@@ -341,13 +384,13 @@ mode= TEXTMODE;normallist= listpatt= vlnkalist;
}
static void twodollars(void)
{
-if(buff[ind-3]=='\\')return;
+if(buffnz[inz-3]=='\\')return;
if(mode==DISPLAYMODE)displayout();
else displayin();
}
-/*:49*//*51:*/
-#line 910 "vlna.w"
+/*:52*//*54:*/
+#line 987 "./vlna.w"
int prevmode;
PATTERN*prevlist,*verboutlist[4];
@@ -363,8 +406,8 @@ listpatt->next= NULL;
mode= VERBMODE;
}
-/*:51*//*52:*/
-#line 931 "vlna.w"
+/*:54*//*55:*/
+#line 1008 "./vlna.w"
static void verbin(void)
{
@@ -376,7 +419,7 @@ case't':i= 1;break;
case'm':i= 2;break;
case'<':;
case'd':i= 3;
-if(buff[ind-3]=='@')return;
+if(buffnz[inz-3]=='@')return;
break;
}
listpatt= normallist= verboutlist[i];
@@ -385,13 +428,13 @@ if(c!='<'&&c!='d')listpatt->next= NULL;
mode= VERBMODE;
}
-/*:52*//*53:*/
-#line 951 "vlna.w"
+/*:55*//*56:*/
+#line 1028 "./vlna.w"
static void verbout(void)
{
if(mode!=VERBMODE)return;
-if(web&&buff[ind-2]=='@'&&buff[ind-3]=='@')return;
+if(web&&buffnz[inz-2]=='@'&&buffnz[inz-3]=='@')return;
mode= prevmode;
normallist->next= prevlist;
switch(mode){
@@ -401,8 +444,8 @@ case TEXTMODE:normallist= listpatt= vlnkalist;break;
}
}
-/*:53*//*55:*/
-#line 973 "vlna.w"
+/*:56*//*58:*/
+#line 1050 "./vlna.w"
static void tieoff(void)
{
@@ -413,11 +456,11 @@ static void tieon(void)
normallist= vlnkalist;
}
-/*:55*/
-#line 22 "vlna.w"
+/*:58*/
+#line 22 "./vlna.w"
-/*26:*/
-#line 505 "vlna.w"
+/*29:*/
+#line 557 "./vlna.w"
static void tie(FILE*input,FILE*output)
{
@@ -427,35 +470,48 @@ int ic;
PATTERN*pp;
PATITEM*pi;
-/*27:*/
-#line 535 "vlna.w"
+/*30:*/
+#line 593 "./vlna.w"
for(k= 0;k<MAXPATT;k++)lapi[k]= NULL;
c= '\n';
-buff[0]= mode= ap= 0;ind= 1;
+buff[0]= 1;mode= ap= 0;ind= 1;
+for(inz= 0;inz<4;inz++)buffnz[inz]= 0;
+inz= 4;
numline= 1;numchanges= 0;
mode= TEXTMODE;
-/*:27*//*35:*/
-#line 656 "vlna.w"
+/*:30*//*38:*/
+#line 716 "./vlna.w"
listpatt= normallist= vlnkalist;
-/*:35*/
-#line 514 "vlna.w"
+/*:38*/
+#line 566 "./vlna.w"
;
while(!feof(input)){
-/*30:*/
-#line 580 "vlna.w"
+if(ap==0&&ind> BUFI&&c!='\\')/*31:*/
+#line 611 "./vlna.w"
+
+{
+fwrite(&buff[1],ind-1,1,output);
+ind= 1;
+}
+
+/*:31*/
+#line 569 "./vlna.w"
+;
+/*33:*/
+#line 640 "./vlna.w"
pp= listpatt;
-while(pp!=NULL){
+if(c)while(pp!=NULL){
switch(m= match(pp->patt)){
case FOUND:(*pp->proc)();
case NOFOUND:break;
-default:/*31:*/
-#line 595 "vlna.w"
+default:/*34:*/
+#line 655 "./vlna.w"
pi= pp->patt;
while(m--)pi= pi->next;
@@ -474,27 +530,15 @@ exit(BAD_PROGRAM);
lapt[k]= pp;lapi[k]= pi;ap++;
}
-/*:31*/
-#line 586 "vlna.w"
+/*:34*/
+#line 646 "./vlna.w"
;
}
pp= pp->next;
}
-/*:30*/
-#line 517 "vlna.w"
-;
-if(ap==0&&ind> BUFI&&c!='\\')/*28:*/
-#line 550 "vlna.w"
-
-{
-buff[ind]= 0;
-fputs(&buff[1],output);
-ind= 1;
-}
-
-/*:28*/
-#line 518 "vlna.w"
+/*:33*/
+#line 570 "./vlna.w"
;
if(ind>=MAXBUFF){
fprintf(stderr,"Operating buffer overflow, is anything wrong?\n");
@@ -503,10 +547,16 @@ exit(BAD_PROGRAM);
if((ic= getc(input))==EOF)
break;
buff[ind++]= c= ic;
+if(c==0)continue;
+if(inz>=8){
+for(inz= 0;inz<4;inz++)buffnz[inz]= buffnz[inz+4];
+inz= 4;
+}
+buffnz[inz++]= c;
if(c=='\n')numline++,listpatt= normallist;
-if(c=='%'&&mode!=VERBMODE&&buff[ind-2]!='\\')listpatt= commentlist;
-/*29:*/
-#line 563 "vlna.w"
+if(c=='%'&&mode!=VERBMODE&&buffnz[inz-2]!='\\')listpatt= commentlist;
+/*32:*/
+#line 623 "./vlna.w"
n= ap;k= 0;
while(n){
@@ -520,56 +570,57 @@ default:while(m--)lapi[k]= lapi[k]->next;
k++;n--;
}
-/*:29*/
-#line 528 "vlna.w"
+/*:32*/
+#line 586 "./vlna.w"
;
}
-/*28:*/
-#line 550 "vlna.w"
+/*31:*/
+#line 611 "./vlna.w"
{
-buff[ind]= 0;
-fputs(&buff[1],output);
+fwrite(&buff[1],ind-1,1,output);
ind= 1;
}
-/*:28*/
-#line 530 "vlna.w"
+/*:31*/
+#line 588 "./vlna.w"
;
if(!web)checkmode();
-if(!silent)/*32:*/
-#line 614 "vlna.w"
+if(!silent)/*35:*/
+#line 674 "./vlna.w"
fprintf(stderr,"~~~ file: %s\t lines: %ld, changes: %ld\n",
filename,numline,numchanges);
-/*:32*/
-#line 532 "vlna.w"
+/*:35*/
+#line 590 "./vlna.w"
;
}
-/*:26*/
-#line 23 "vlna.w"
+/*:29*/
+#line 23 "./vlna.w"
/*5:*/
-#line 61 "vlna.w"
+#line 61 "./vlna.w"
int main(int argc,char**argv)
{
-/*9:*/
-#line 159 "vlna.w"
+/*11:*/
+#line 197 "./vlna.w"
FILE*infile,*outfile;
char backup[MAXLEN];
int j;
-/*:9*/
-#line 64 "vlna.w"
+/*:11*/
+#line 64 "./vlna.w"
;
prog_name= argv[0];status= OK;
-/*8:*/
-#line 136 "vlna.w"
+/*9:*/
+#line 150 "./vlna.w"
+tiestr[0]= '~';
+tiestrlen= 1;
while(argc> 1&&argv[1][0]=='-'){
if(argv[1][2]!=0)printusage(),exit(BAD_OPTIONS);
switch(argv[1][1]){
@@ -578,6 +629,8 @@ case's':silent= 1;break;
case'r':rmbackup= 1;break;
case'v':if(argc<2)printusage(),exit(BAD_OPTIONS);
argv++;argc--;charset= argv[1];break;
+case'x':if(argc<2)printusage(),exit(BAD_OPTIONS);
+argv++;argc--;settiestr(argv[1]);break;
case'm':nomath= 1;break;
case'n':noverb= 1;break;
case'l':latex= 1;break;
@@ -588,19 +641,19 @@ default:printusage(),exit(BAD_OPTIONS);
argc--;argv++;
}
-/*:8*/
-#line 66 "vlna.w"
+/*:9*/
+#line 66 "./vlna.w"
;
if(!silent)fprintf(stderr,BANNER);
-/*21:*/
-#line 416 "vlna.w"
+/*24:*/
+#line 468 "./vlna.w"
for(i= 0;i<256;i++){
strings[2*i]= (char)i;strings[2*i+1]= 0;
}
-/*:21*//*34:*/
-#line 646 "vlna.w"
+/*:24*//*37:*/
+#line 706 "./vlna.w"
vlnkalist= setpattern(vlnkain);
setpi(tblankscr,ONE);
@@ -611,8 +664,8 @@ setpi(blanks,ONE);
setpi(blanks,ANY);
setpi(nochar,ONE_NOT);
-/*:34*//*37:*/
-#line 674 "vlna.w"
+/*:37*//*40:*/
+#line 747 "./vlna.w"
setpattern(vlnkacr);
setpi(tblankscr,ONE);
@@ -624,8 +677,8 @@ setpi(cr,ONE);
setpi(blanks,ANY);
setpi(nochar,ONE_NOT);
-/*:37*//*39:*/
-#line 720 "vlna.w"
+/*:40*//*42:*/
+#line 797 "./vlna.w"
setpattern(vlnkain);
setpi(tblankscr,ONE);
@@ -654,16 +707,16 @@ setpi(nochar,ONE_NOT);
-/*:39*//*40:*/
-#line 753 "vlna.w"
+/*:42*//*43:*/
+#line 830 "./vlna.w"
normalpattern(tielock,"\\TeX");
setpi(blankscr,ONE);
normalpattern(tielock,"\\LaTeX");
setpi(blankscr,ONE);
-/*:40*//*43:*/
-#line 787 "vlna.w"
+/*:43*//*46:*/
+#line 864 "./vlna.w"
if(!nomath){
mathlist= setpattern(onedollar);
@@ -675,16 +728,16 @@ normalpattern(mathout,"\\end.{math}");
}
}
-/*:43*//*46:*/
-#line 829 "vlna.w"
+/*:46*//*49:*/
+#line 906 "./vlna.w"
parcheck= setpattern(checkmode);
setpi(cr,ONE);
setpi(blanks,ANY);
setpi(cr,ONE);
-/*:46*//*48:*/
-#line 850 "vlna.w"
+/*:49*//*51:*/
+#line 927 "./vlna.w"
if(!nomath){
normalpattern(twodollars,"$$");
@@ -696,8 +749,8 @@ normalpattern(displayout,"\\end.{equation");
}
}
-/*:48*//*50:*/
-#line 882 "vlna.w"
+/*:51*//*53:*/
+#line 959 "./vlna.w"
if(!noverb){
verblist= normalpattern(verbinchar,"\\verb");
@@ -723,21 +776,21 @@ normalpattern(verbout,"@>|");
}
-/*:50*//*54:*/
-#line 968 "vlna.w"
+/*:53*//*57:*/
+#line 1045 "./vlna.w"
lastpt= 0;
commentlist= normalpattern(tieoff,"%.~.-");
normalpattern(tieon,"%.~.+");
-/*:54*/
-#line 68 "vlna.w"
+/*:57*/
+#line 68 "./vlna.w"
;
-/*11:*/
-#line 173 "vlna.w"
+/*13:*/
+#line 211 "./vlna.w"
-if(isfilter)/*12:*/
-#line 185 "vlna.w"
+if(isfilter)/*14:*/
+#line 223 "./vlna.w"
{
if(argc> 3)printusage(),exit(BAD_OPTIONS);
@@ -753,18 +806,18 @@ if(outfile!=stdout)fclose(outfile);
if(infile!=stdin)fclose(infile);
}
-/*:12*/
-#line 174 "vlna.w"
+/*:14*/
+#line 212 "./vlna.w"
-else/*13:*/
-#line 208 "vlna.w"
+else/*15:*/
+#line 246 "./vlna.w"
{
if(argc==1)printusage(),exit(BAD_OPTIONS);
while(argc> 1){
argc--;argv++;
-/*14:*/
-#line 239 "vlna.w"
+/*16:*/
+#line 277 "./vlna.w"
infile= NULL;
j= strlen(argv[0])-1;
@@ -780,8 +833,8 @@ j= rename(argv[0],backup);
if(j==0)infile= fopen(backup,"r");
}
-/*:14*/
-#line 213 "vlna.w"
+/*:16*/
+#line 251 "./vlna.w"
;
if(infile==NULL){
ioerr(argv[0]);continue;
@@ -800,18 +853,18 @@ if(rmbackup)remove(backup);
}
}
-/*:13*/
-#line 175 "vlna.w"
+/*:15*/
+#line 213 "./vlna.w"
-/*:11*/
-#line 69 "vlna.w"
+/*:13*/
+#line 69 "./vlna.w"
;
return status;
}
/*:5*/
-#line 24 "vlna.w"
+#line 24 "./vlna.w"
/*:1*/
diff --git a/Build/source/utils/vlna/vlna.man b/Build/source/utils/vlna/vlna.man
index c132823f40c..691b3cb7128 100644
--- a/Build/source/utils/vlna/vlna.man
+++ b/Build/source/utils/vlna/vlna.man
@@ -1,121 +1,163 @@
.\" $Id$
-.TH VLNA 1 "4. unora 1998"
+.TH VLNA 1 "March 30 2009"
.nh
-.SH NAZEV
-vlna \- pridani vlnek za neslabicne predlozky v TeXu
-.SH POUZITI
+.SH NAME
+vlna \- adds tilde after each non-syllabic preposition
+.SH USAGE
.B vlna
-[\fIvolby\fP]
-[\fIsoubory\fP]
-.SH POPIS
-Program
+[\fIoptions\fP]
+[\fIfilenames\fP]
+.SH PREFACE
+There exists a special Czech and Slovak typographical rule: you cannot
+leave the non-syllabic preposition on the end of one line and continue
+writting text on next line. For example,
+you cannot write down the text "v lese" (in a forest) like
+"v<new-line>lese". The program vlna adds the asciitilde
+between such preposition and the next word and removes the space(s) in
+this place. It means, the program converts "v lese" to "v~lese". You
+can use this program as a preporcessor before TeXing. Moreower, you
+can set another sequence to store instead asciitilte (see the
+\fB\-x\fP option).
+.SH DESCRIPTION
+The program
.B vlna
-pridava vlnky (misto puvodnich mezer) za neslabicne predlozky
-ve vstupnich souborech pro TeX, coz zabrani zlomu radku v nezadoucich mistech.
+processes one or more files, searches the non-syllabic prepositions
+followed by space(s) in these files and converts this/these space(s)
+to asciitilde for each such occurrence.
.PP
-Veskere aktivity programu je mozne vypnout sekvenci \fB%~-\fP a zapnout
-sekvenci \fB%~+\fP (mezi uvedenymi znaky muze byt libovolne mnozstvi mezer).
+In the processed file, the activity of the program can be blocked by
+\fB%~-\fP sequence and the activity can be restored again by the
+\fB%~+\fP sequence. These sequences can include spaces, it means that
+\fB% ~-\fP is a correct sequence too.
.PP
-Pred predlozkou se muze nachazet libovolne mnozstvi oteviracich zavorek,
-pred kterymi se musi nachazet mezera nebo zacatek radku. Pred
-oteviraci svorkou muze byt take misto mezery TeXova
-\(lq\\sekvence\(rq (od verze 1.2).
-Napr. za \(lq([{(V\(rq na pocatku radku bude vlnka pridana.
-Stejne tak se text \(lq\\uv{V lese}\(rq promeni na
-\(lq\\uv{V~lese}\(rq.
+The rule to recognize a preposition follows:
+The arbitrary number of opening parentheses can be written before the
+preposition and before these (optional) parentheses must be the space,
+tabelator or new-line. The preposition itself is one-letter word, the letters
+have to be from this set: {KkSsVvZzOoUuAI}. See the \fB\-v\fP option if you
+want to change this set of letters. From version 1.2, the TeX sequence
+can be written before preposition and before the brace. Example:
+"<new-line>([V lese" is converted to "<new-line>([V~lese".
+Another example: "\\uv{V lese}" is converted to "\\uv{V~lese}".
.PP
-Program kontroluje konzistenci matematickych prostredi (neni-li uveden
-parametr \fB\-m\fP).
-Vstup do \fIdisplay\fP rezimu (\fB$$\fP) uvnitr \fItext\fP rezimu (\fB$\fP)
-(napr. \fB$\fP...\fB$$\fP...\fB$\fP) znamena varovani a prechod do
-\fIdisplay\fP.
-Podobne prazdny radek uvnitr \fItext\fP nebo \fIdisplay\fP rezimu znamena
-vypis varovani a prechod do nematematickeho (standardniho) rezimu.
-Uvnitr rezimu \fIdisplay\fP se ignoruji vyskyty samostatneho znaku \fB$\fP,
-jelikoz byva vetsinou soucasti konstrukce \fB\\hbox\fP.
+One or more blank-spaces have to be included after preposition
+before next word. The blank-space means space or tabelator.
+One <new-line> can be here too.
+All these characters are removed and replaced by asciitilde (or by
+another string, see \fB\-x\fP option). If <new-line> is deleted, another
+<new-line> is created before preposition (and before optional parentheses)
+in order to the number of lines is kept unchanged.
+Example: "... V<new-line><tabelator>lese" is converted to
+"...<new-line>V~lese".
.PP
-Program kontroluje konzistenci verbatim rezimu na konci souboru.
-Nebyl-li ukoncen, vypise se varovani.
-Kontrola se neprovadi, pokud je pouzita volba \fB\-n\fP nebo \fB\-w\fP.
+The program checks the consintence of TeX's math environments
+(if \fB\-m\fP option isn't used). For example the "$...$$...$" sequence
+(it means the display mode switch inside the text-math mode)
+generates a warning. Empty line inside display mode generates
+a warning too and the program processes next text like
+in normal (non-math) mode. The existence of the "$" inside display mode
+are accepted because the constructions like
+$$..\\hbox{..$..$}..$$ are allowed and common.
.PP
-Program nedoplnuje vlnky za samostatna pismena, ktera jako predlozky vypadaji,
-ale nasleduji bezprostredne za sekvencemi \fB\\TeX\fP nebo \fB\\LaTeX\fP.
-Napr. do textu \(lq\fBVlastnosti \\TeX u jsou\fP\(rq nebude zadna vlnka
-doplnena.
-.SH VOLBY
-Volby jsou nepovinne a mohou byt uvedeny v libovolnem poradi, ale nemohou
-byt spojovany.
+The consistence of verbatim mode is checked on the end of the file.
+If the file ends but the verbatim mode does not end the warning is printed.
+This behavior can be switched off by \fB\-n\fP or \fB\-w\fP options.
+.PP
+The program suppresses the tilde changing after letters like prepositions
+but they are not prepositions because the \fB\\TeX\fP or \fB\\LaTeX\fP
+sequence precedes. Example: "vlastnosti \\TeX u jsou" is not converted to
+"vlastnosti \\TeX u~jsou", because this text is printed (after TeX
+processing) like "vlastnosti TeXu jsou". The letter "u" is a suffix here,
+no preposition.
+.SH OPTIONS
+The options are optional and can be written in arbitrarty order separated
+by space.
.TP
.B \-f
-Filtr. Jmena souboru jsou interpretovana takto:
+Filter. The [\fIfilenames\fP] are treated as follows:
.RS
.TP 4
-.B vlna \-f \fIsoubor1 soubor2\fP
-Vstup je \fIsoubor1\fP, vystup \fIsoubor2\fP.
+.B vlna \-f \fIfilename1 filename2\fP
+Input is \fIfilename1\fP, output is \fIfilename2\fP.
.TP 4
-.B vlna \-f \fIsoubor1\fP
-Vstup je \fIsoubor1\fP, vystup \fIstdout\fP.
+.B vlna \-f \fIfilename1\fP
+Input is \fIfilename1\fP, output is \fIstdout\fP.
.TP 4
.B vlna \-f
-Vstup je \fIstdin\fP, vystup \fIstdout\fP.
+Input is \fIstdin\fP, output is \fIstdout\fP.
.TP 4
-\fBvlna\fP \fIsoubor1\fP [\fIsoubor2\fP [\fIsoubor3\fP ...]]
-Neni-li uveden parametr \fB\-f\fP, kazdy soubor je zpracovavan samostatne.
+\fBvlna\fP \fIfilename1\fP [\fIfilename2\fP [\fIfilename3\fP ...]]
+If the \fB\-f\fP option is omitted then each file is processed
+independently and it is re-written.
.RE
.TP
.B \-s
-Tichy rezim. Program potlaci vypis uvodni zpravy, varovnych zprav a
-statistik o zmenach v souborech
-(bez uvedeni parametru jsou zpravy vypisovany na \fIstderr\fP).
-V tichem rezimu se vypise jen chyba, ktera predcasne ukonci
-cinnost programu.
+The silent mode. No messages, warnings, statistics are printed.
+Only errors which terminates the program untimely are printed.
+If this parameter is omitted then banner, warnings and statistics
+are printed to \fIstderr\fP.
.TP
.B \-r
-Nevytvaret (mazat) zalohy.
-Parametr \fB\-r\fP nema vliv, pokud je uveden spolu s \fB\-f\fP.
-V opacnem pripade se ke kazdemu souboru vytvari zaloha s vlnkou na konci jmena
-a parametr \fB\-r\fP zpusobi, ze na konci zpracovani jsou tyto zalohy mazany.
+Do not create the backups. The option \fB\-r\fP is irrelevant if
+the \fB\-f\fP option is used. If the \fB\-f\fP and \fB\-r\fP options
+aren't used then each re-written file is stored with its original contents
+to a backup file (the name of backup file is the same as filename, only
+the tilde is used instead of the last character).
+.TP
+.B \-v \fIcharacters\fP
+The set of characters treated as non-syllabic prepositions is declared
+by this option. Default: \fB\-v\ KkSsVvZzOoUuAI\fP.
+The space between \fB\-v\fP and \fIcharacters\fP is required.
.TP
-.B \-v \fIznaky\fP
-Znaky povazovane za neslabicne predlozky, za ktere ma byt pridavana
-vlnka. Implicitni hodnota je \fB\-v\ KkSsVvZzOoUuAI\fP. (Mezi
-\fB\-v\fP a skupinou znaku musi byt mezera.)
+.B \-x \fIcode\fP
+The \fIcode\fP is a string written in hexadecimal notation
+(even hexa digits is required). This string will be saved after prepositions
+instead asciitilde which is default.
+The example: \fB\-x C2A0\fP two bytes are stored after each
+non-syllabic preposition, first byte has C2 code and second byte
+has A0 code. This example means that
+NO-BREAK SPACE in UTF8 encoding will be used after prepositions.
+Another example: \fB\-x 00A0\fP the NO-BREAK SPACE in UTF16 encoding.
+Another example: \fB\-x 48454C4C4F\fP the string HELLO will be used.
+The space between \fB\-x\fP and \fIcode\fP is required.
.TP
.B \-m
-Ignorovani prechodu do matematickych prostredi
-(\fB$\fP...\fB$\fP a \fB$$\fP...\fB$$\fP).
-Parametr \fB\-m\fP zpusobi vlnkovani i v matematickych prostredich, ktera
-se implicitne vynechavaji.
+The math-modes (\fB$\fP...\fB$\fP and \fB$$\fP...\fB$$\fP) are ignored.
+It means that non-syllabic prepositions is searched in math-mode too.
+Default (without \fB\-m\fP option): no changes in math modes are done
+because (for example) "v" is variable in math-mode, no preposition.
.TP
.B \-n
-Ignorovani verbatim rezimu (\fB\\verb\fP\fI<znak>\fP...\fI<znak>\fP,
-\fB\\begtt\fP...\fB\\endtt\fP).
-Parametr \fB\-n\fP zpusobi vlnkovani i ve verbatim rezimu, ktery se
-implicitne vynechava.
+The verbatim mode (\fB\\verb\fP\fI<char>\fP...\fI<char>\fP,
+\fB\\begtt\fP...\fB\\endtt\fP) is ignored, it means the program can
+do a changes in verbatim environment.
+Default (without \fB\-n\fP option): no changes in verbatim mode are done.
.TP
.B \-l
-LaTeX. Pro rozpoznani matematickeho rezimu jsou pridana prostredi
-\fB\\begin{display}\fP...\fB\\end{display}\fP a
-\fB\\begin{equation}\fP...\fB\\end{equation}\fP.
-Pro rozpoznani verbatim rezimu je pridano LaTeXove prostredi
+The LaTeX mode. The following environments are treated as display mode:
+\fB\\begin{display}\fP...\fB\\end{display}\fP and
+\fB\\begin{equation}\fP...\fB\\end{equation}\fP and the following
+environment is treated as verbatim mode:
\fB\\begin{verbatim}\fP...\fB\\end{verbatim}\fP.
.TP
.B \-w
-Web. Pro rozpoznani verbatim rezimu jsou pridany sekvence
-\fB@<\fP, \fB@d\fP...\fB@*\fP, \fB@\fP\fImezera\fP nebo \fB@>|\fP.
-Ve zdrojovem kodu se tedy nevlnkuje program, ale jen komentare.
-.SH PRIKLADY
+The web mode (Knuth's web, no www:-). The following sequences are
+treated as verbatim:
+\fB@<\fP, \fB@d\fP...\fB@*\fP, \fB@\fP\fIspace\fP or \fB@>|\fP.
+It means program code is unchanged in *.w or *.web files, only
+web-comments are processed.
+.SH EXAMPLES
.TP
-.B vlna \-m \-n \-s \-r \fIsoubor\fP
-Volani priblizne odpovida volani puvodniho programu \fBvlna\fP.
-(Navic se neprovadi vlnkovani za sekvencemi \fB\\TeX\fP a \fB\\LaTeX\fP.)
+.B vlna \-m \-n \-s \-r \fIfile\fP
+The program has a behavior similar to the old \fBvlnka\fP program.
.TP
.B vlna *.tex
-Vlnkovani vsech souboru s priponou \fBtex\fP.
-(Pouze na UNIXu.)
+All files with .tex suffix in current directory will be processed
+(and possibly changed). (The "*" is UNIX-shell feautre).
.TP
-.B vlna \-f soubor > /dev/null
-Test konzistence matematickeho a verbatim rezimu bez provedeni zmen.
-(Pouze na UNIXu.)
-.SH AUTOR
-Petr Olsak <olsak@math.feld.cvut.cz>. Manualovou stranku a Makefile vytvoril Rulolf Cejka
+.B vlna \-f file > /dev/null
+Only the consistence checking of math and verbatim modes is processed.
+No changes are done.
+.SH AUTHORS
+Petr Olsak <olsak@math.feld.cvut.cz>.
+Man page (Czech original) and Makefile is created by Rulolf Cejka
diff --git a/Build/source/utils/vlna/vlna.txt b/Build/source/utils/vlna/vlna.txt
index 2e50fab9e73..0546f828207 100644
--- a/Build/source/utils/vlna/vlna.txt
+++ b/Build/source/utils/vlna/vlna.txt
@@ -1,7 +1,7 @@
Program VLNA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- verze 1.2 Petr Olšák
+ verze 1.4 Petr Olšák
Program vlna přidává vlnky (místo původních mezer) za neslabičné předložky
ve vstupních souborech pro TeX. To zabrání zlomu řádku v nežádoucím místě.
@@ -45,6 +45,16 @@ PŘEPÍNAČE:
-v znaky : Definice znaků, které budeme považovat za neslabičné předložky,
tj. k ovlnkování. Implicitní hodnota -v KkSsVvZzOoUuAI je použitím
tohoto parametru přepsána. Mezi -v a skupinou znaků musí být mezera.
+-x kód : Vyhledané místo se implicitně nahrazuje vlnkou. Místo toho jej
+ můžete nechat nahrazovat libovolným stringem. Kód za parametrem
+ -x je hexadecimálně vyjádřený string, nula je ve stringu
+ povoleným znakem. Takže -x C2A0 vymezuje dvouznakový string:
+ místo každé vlnky budou vloženy dva byty, první s kódem C2 a
+ druhý s kódem A0. Podle unicodové tabulky tento pžíklad tedy
+ způsobí nahrazování znakem NO-BREAK SPACE při kódování UTF8.
+ Jine příklady: -x 00A0 nahrazování znakem NO-BREAK SPACE při
+ kódování UTF16, -x 41484F4A nahrazování textem AHOJ. Mezi -x a
+ kódem musí být mezera.
-m : Ignoruje přechody do matematického režimu ($...$ a $$...$$) a vlnkuje
i v těchto prostředích. Imlicitně v matematických prostředích nevlnkuje.
-n : Ignoruje přechody do verbatim režimu (\verb<zn>...<zn>, \begtt...\endtt)
diff --git a/Build/source/utils/vlna/vlna.w b/Build/source/utils/vlna/vlna.w
index da84b8711b6..6d1ff5c2536 100644
--- a/Build/source/utils/vlna/vlna.w
+++ b/Build/source/utils/vlna/vlna.w
@@ -32,7 +32,7 @@ v~kódu programu, cestinou v~/* komentářích */ a češtinou jinde.
Tu cestinu si vynutil fakt, že DOS-ovská varianta \.{tangle} a
\.{weave} se nesnáší s~akcentovanými písmeny v~/* komentářích */.
A~nyní už slíbený (vícejazyčný) |BANNER|.
-@d BANNER "This is program vlna, version 1.2, (c) 1995, 2002 Petr Olsak\n"
+@d BANNER "This is program vlna, version 1.5, (c) 1995, 2002, 2009, 2010 Petr Olsak\n"
@ V programu jsou použity knihovní funkce, jejíchž prototypy jsou
definovány ve třech standardních hlavičkových souborech.
@@ -89,6 +89,10 @@ souborů.
interpretovány jako neslabičné předložky.
Např. \.{-v KkSsVvZzOoUuAI}. Pokud není parametr uveden, je použita
skupina uvedená v tomto příkladě.
+* \.{-x} \dots\ parametr vymezuje pomocí hexadecimálního zápisu string,
+ který program vkládá na vyhledaná místa. Implicitně vkládá vlnku.
+ Například \.{-x C2A0} způsobí, že program bude vkládat místo vlnky dva byty,
+ první s kódem \.{C2} a druhý s kódem \.{A0}.
* \.{-m} \dots\ program neprovádí kontrolu math/text módů, tj. vlnkuje i
uvnitř matematického módu \TeX{}u. (Implicite tam nevlnkuje).
* \.{-n} \dots\ prorgram neprovádí kontrolu verbatim módu, tj. vlnkuje i
@@ -101,7 +105,7 @@ souborů.
vlnkuje dokumentační část každé sekce, ale nikoli kód.
\enditems
-Definujeme funkci |printusage|, které tiskne (při chybě) stručný přehled
+Definujeme funkci |printusage|, která tiskne (při chybě) stručný přehled
možných parametrů. Nepodařilo se mi zjistit, jak se ve WEBu napíše
kulturně dlouhý string obsahující \.{\char92n} s formátovacími
požadavky. Byl jsem nucen to takto nehezky zapsat.
@@ -117,6 +121,7 @@ static void printusage (void)
" -s : silent: no messages to stderr\n"
" -r : rmbackup: if nofilter, removes temporary files\n"
" -v charset : set of lettres to add tie, default: KkSsVvZzOoUuAI\n"
+ " -x code : code for tie symbol, default: 7E, example -x C2A0\n"
" -m : nomath: ignores math modes\n"
" -n : noverb: ignores verbatim modes\n"
" -l : LaTeX mode\n"
@@ -133,7 +138,18 @@ int isfilter=0, silent=0, rmbackup=0, nomath=0, noverb=0, web=0, latex=0;
char charsetdefault[]="KkSsVvZzOoUuAI";
char *charset=charsetdefault;
+@ String |tiestr| obsahuje string, kterým se má nahradit vyhledané
+místo. Pokud není použit parametr \.{-u}, je tento string jadnoznakový
+a obsahuje vlnku. Jinak obsahuje string konvertovaný z parametru \.{-u}.
+String má délku |tiestrlen| bez ohledu na to, zda obsahuje nebo
+neobsahuje nulové znaky (C-čková konvence pro stringy není použita).
+@<Globální deklarace@>=
+unsigned char tiestr[MAXLEN];
+int tiestrlen;
+
@ @<Načtení parametrů ...@>=
+tiestr[0] = '~';
+tiestrlen = 1;
while (argc>1 && argv[1][0] == '-') {
if (argv[1][2] != 0) printusage (), exit (BAD_OPTIONS);
switch(argv[1][1]) {
@@ -142,6 +158,8 @@ while (argc>1 && argv[1][0] == '-') {
case 'r': rmbackup = 1; break;
case 'v': if (argc<2) printusage (), exit (BAD_OPTIONS);
argv++; argc--; charset = argv[1]; break;
+ case 'x': if (argc<2) printusage (), exit (BAD_OPTIONS);
+ argv++; argc--; settiestr(argv[1]); break;
case 'm': nomath = 1; break;
case 'n': noverb = 1; break;
case 'l': latex = 1; break;
@@ -152,6 +170,26 @@ while (argc>1 && argv[1][0] == '-') {
argc--; argv++;
}
+@ Vyřešíme konverzi kódu zapsaného za parametrem \.{-x} na string |tiestr|.
+@<Pomocné funkce@>=
+unsigned char hexnum(char c) {
+ if (c >= '0' && c <= '9') return c - '0';
+ if (c >= 'A' && c <= 'F') return c - 'A' + 10;
+ if (c >= 'a' && c <= 'f') return c - 'a' + 10;
+ printusage (), exit (BAD_OPTIONS);
+}
+void settiestr(char *s) {
+ int i, j, c;
+ i = strlen(s);
+ if ((i > 2*MAXLEN) || i%2 == 1) printusage (), exit (BAD_OPTIONS);
+ tiestrlen = i/2;
+ j = 0;
+ for (i=0; i<tiestrlen; i++) {
+ tiestr[i] = hexnum(s[j++]) << 4;
+ tiestr[i] += hexnum(s[j++]);
+ }
+}
+
@* Zpracování souborů. Parametr |MAXLEN| definuje maximální možnou
délku jména souboru, který vytvoříme jako přechodný, nebo zálohový.
Dále deklarujeme proměnné typu \uv{stream}.
@@ -347,6 +385,20 @@ char c; /* zrovna nacetny znak */
char buff[MAXBUFF]; /* prechodny buffer */
int ind; /* aktualni pozice prechodneho bufferu */
+@ Dne 30. 4. 2009 jsem přidal možnost čtení vstupu, který obsahuje nulové byty.
+Takové nuly se přepisují do výstupu, ale program si jich nevšímá při
+procházení patternů. Tím je možno program použít na soubory kódované
+v UTF16, ačkoli patterny obsahují jen jednobytové ASCII znaky.
+Buffer |buff| může obsahovat i nulové byty, které je třeba přepsat do výstupu.
+Na druhé straně buffer |buffnz| obsahuje jen nenulové byty, na které se
+někdy ptáme při pohledu dozadu. Nejdelší pohled dozadu je o čtyři byty.
+Udělám tedy |buffnz| osmibytový, začnu jej plnit od |buffnz|[4]
+a kdykoli je buffer zcela zaplněn, přesunu horní čtyři byty na spodní a dále
+pokračuji v plnění bufferu od pozice |buffnz|[4].
+@<Globální deklarace@>=
+char buffnz[8];
+int inz;
+
@ Nyní definujeme pomocné funkce |setpattern|, |setpi| a |normalpattern|.
Tyto funkce alokují paměť pomocí standardní funkce |malloc|. Abychom mohli
ohlídat případnou chybu při alokaci, budeme allokovat paměť zprostředkovaně
@@ -514,8 +566,8 @@ static void tie (FILE *input, FILE *output)
@<Inicializace proměnných při startu funkce |tie|@>;
while (!feof(input)) {
- @<Otevři nové patterny@>;
if (ap == 0 && ind > BUFI && c !='\\') @<Vyprázdni buffer@>;
+ @<Otevři nové patterny@>; /* 1. 2. 2010: prohozene poradi */
if (ind >= MAXBUFF) {
fprintf (stderr, "Operating buffer overflow, is anything wrong?\n");
exit (BAD_PROGRAM);
@@ -523,8 +575,14 @@ static void tie (FILE *input, FILE *output)
if ((ic = getc(input)) == EOF) /* opravil Cejka Rudolf */
break;
buff[ind++] = c = ic;
+ if (c == 0) continue; /* 30. 4. 2009 */
+ if (inz>=8) {
+ for (inz=0; inz<4; inz++) buffnz[inz] = buffnz[inz+4];
+ inz=4;
+ }
+ buffnz[inz++] = c;
if (c == '\n') numline++, listpatt = normallist;
- if (c == '%' && mode!=VERBMODE && buff[ind-2] != '\\') listpatt = commentlist;
+ if (c == '%' && mode!=VERBMODE && buffnz[inz-2] != '\\') listpatt = commentlist;
@<Projdi otevřené patterny@>;
}
@<Vyprázdni buffer@>;
@@ -535,7 +593,9 @@ static void tie (FILE *input, FILE *output)
@ @<Inicializace proměnných při ...@>=
for (k=0; k<MAXPATT; k++) lapi[k] = NULL;
c = '\n';
-buff[0] = mode = ap = 0; ind = 1;
+buff[0] = 1; mode = ap = 0; ind = 1;
+for(inz=0; inz<4; inz++) buffnz[inz] = 0;
+inz = 4;
numline = 1; numchanges = 0;
mode = TEXTMODE;
@@ -546,11 +606,11 @@ zda tam není symbol \uv{\.{\char92}} (například na výskyt sekvence
\.{\char92\char37} je třeba reagovat jinak, než na výskyt obyčejného
procenta). Kdybychm zazačali od |buff[0]|, v některých situacích
bychom se ptali, zda |buff[-1]=='\\'|, tj. sahali bychom na neošetřené
-místo v paměti.
+místo v paměti. Od 30. 4. 2009 tento problém pominul, protože se ptáme dozadu pouze
+v~|buffnz|, ale vlastnost dříve implementovanou v |buff| jsem ponechal beze změny.
@<Vyprázdni buffer@>=
{
- buff[ind] = 0;
- fputs (&buff[1], output);
+ fwrite (&buff[1], ind-1, 1, output);
ind = 1;
}
@@ -579,7 +639,7 @@ typu |FOUND| nebo |NOFOUND|. V takových případech ani nezanášíme ukazatel
na pozici do pole |lapi|.
@<Otevři nové patterny@>=
pp = listpatt;
-while (pp != NULL) {
+if (c) while (pp != NULL) {
switch (m = match (pp->patt)) {
case FOUND: (*pp->proc)(); /* spustit proceduru */
case NOFOUND: break;
@@ -656,15 +716,28 @@ setpi (nochar, ONE_NOT);
@ @<Inicializace proměnných při ...@>=
listpatt = normallist = vlnkalist;
-@ @<Pomocné funkce@>=
+@ Vložení vlnky znamená vykonat následující práci: Zapamatovat si znak za skupinou mezer
+(do proměnné |p|). Pokud před tímto znakem předchází nulový byte, použijeme ho později, proto
+si jej uložíme do proměnné |z|. Dále se posuneme v bufferu vlevo přes všechny mezery, tabelátory
+(přesněji |blanks|) a přeskakujeme přitom všechny nulové byty. Index |ind| se zastaví
+na předložce. Posuneme jej doprava za předložku (++|ind|) a pokud tam je nulový byte a první znak
+|tiestr| není nulový, posuneme se až za tento nulový byte. Dále vložíme string |tiestr|,
+neboli vlnku. Nakonec připojíme zapamatovaný znak |p|, ovšem pokud před ním byla nula,
+vložíme ji ještě před znak |p|.
+@<Pomocné funkce@>=
static void vlnkain(void)
{
- char p;
+ int i;
+ char p, z;
ind--;
p = buff[ind--];
- while (strchr(blanks, buff[ind]) !=NULL) ind--;
- ind++;
- buff[ind++] = '~';
+ z = buff[ind];
+ while (!buff[ind] || (strchr(blanks, buff[ind]) !=NULL)) ind--;
+ if (!buff[++ind] && tiestr[0]) ind++;
+ for (i=0; i<tiestrlen; i++) buff[ind++] = tiestr[i];
+ i = tiestrlen; /* nulu pred p vlozime, pokud je z==0 a */
+ if (!tiestr[0]) i--; /* pocet vlozenych znaku z tiestr */
+ if (!z && (i%2)) buff[ind++] = 0; /* je sudy */
buff[ind++] = p;
numchanges++;
}
@@ -698,20 +771,24 @@ nebudeme vytvářet nové. Na výstupu bude soubor o jeden řádek kratší.
@<Pomocné funkce@>=
static void vlnkacr(void)
{
- char p;
+ char p, z;
int i, j;
ind--;
p = buff[ind--];
- while (strchr(blankscr, buff[ind]) !=NULL) ind--;
+ z = buff[ind];
+ while (!buff[ind] || (strchr(blankscr, buff[ind]) !=NULL)) ind--;
i = ind; /* misto predlozky, kterou chceme vazat */
while (i >= 0 && (strchr(blankscr, buff[i]) == NULL)) i--;
j = i;
- while (i >= 0 && (strchr(blanks, buff[i]) != NULL)) i--;
+ while (i >= 0 && (!buff[ind] || (strchr(blanks, buff[i]) != NULL))) i--;
if (i >= 0 && buff[i] == '\n') j = -1;
if (j >= 0) buff[j] = '\n';
else numline--;
- ind++;
- buff[ind++] = '~';
+ if (!buff[++ind] && tiestr[0]) ind++;
+ for (i=0; i<tiestrlen; i++) buff[ind++] = tiestr[i];
+ i = tiestrlen;
+ if (!tiestr[0]) i--;
+ if (!z && (i%2)) buff[ind++] = 0;
buff[ind++] = p;
numchanges++;
}
@@ -757,7 +834,7 @@ normalpattern (tielock, "\\LaTeX");
setpi (blankscr, ONE);
@ Procedura |tielock| obsahuje nečistý trik. Při provádění procedury je
-právě načten znak z |blankscr| a je uložen do buff. Testy na otevírání
+právě načten znak z |blankscr| a je uložen do |buff|. Testy na otevírání
nových patternů pro tento znak teprve budou následovat a testují se na
hodnotu proměnné |c|. Stačí tedy změnit hodnotu |c| a vlnkovací patterny se
neotevřou.
@@ -816,7 +893,7 @@ display módu. V takovém případě také nic neděláme.
@<Pomocné funkce@>=
static void onedollar (void)
{
- if (buff[ind-3]=='\\' || (buff[ind-3]=='$' && buff[ind-4]!='\\')) return;
+ if (buffnz[inz-3]=='\\' || (buffnz[inz-3]=='$' && buffnz[inz-4]!='\\')) return;
if (mode==DISPLAYMODE) printwarning ();
else {
if (mode==TEXTMODE) mathin();
@@ -871,7 +948,7 @@ static void displayout (void)
}
static void twodollars (void)
{
- if (buff[ind-3]=='\\') return;
+ if (buffnz[inz-3]=='\\') return;
if (mode==DISPLAYMODE) displayout ();
else displayin ();
}
@@ -939,7 +1016,7 @@ static void verbin (void)
case 'm': i = 2; break;
case '<': ;
case 'd': i = 3;
- if (buff[ind-3]=='@@') return; /* dvojity @@ ignorovat */
+ if (buffnz[inz-3]=='@@') return; /* dvojity @@ ignorovat */
break;
}
listpatt = normallist = verboutlist[i];
@@ -952,7 +1029,7 @@ static void verbin (void)
static void verbout (void)
{
if (mode!=VERBMODE) return;
- if (web && buff[ind-2] == '@@' && buff[ind-3] == '@@') return;
+ if (web && buffnz[inz-2] == '@@' && buffnz[inz-3] == '@@') return;
mode = prevmode;
normallist->next = prevlist;
switch (mode) {