summaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-03-29 03:00:35 +0000
committerNorbert Preining <norbert@preining.info>2022-03-29 03:00:35 +0000
commitfed9dbe9efe10955aefb7687a15de45404cc76f4 (patch)
tree056a7157fcf92e74592f51aebfa3cd17da8645ca /support
parent5f80d92d8bebc775b30e2b212e33b08089517654 (diff)
CTAN sync 202203290300
Diffstat (limited to 'support')
-rw-r--r--support/lug/README12
-rw-r--r--support/lug/README.md15
-rw-r--r--support/lug/images/bg.pngbin237 -> 0 bytes
-rw-r--r--support/lug/images/br.pngbin1163 -> 0 bytes
-rw-r--r--support/lug/images/cn.pngbin529 -> 0 bytes
-rw-r--r--support/lug/images/cz.pngbin412 -> 0 bytes
-rw-r--r--support/lug/images/de.pngbin231 -> 0 bytes
-rw-r--r--support/lug/images/dk.pngbin306 -> 0 bytes
-rw-r--r--support/lug/images/ee.pngbin188 -> 0 bytes
-rw-r--r--support/lug/images/es.pngbin570 -> 0 bytes
-rw-r--r--support/lug/images/esc.pngbin992 -> 0 bytes
-rw-r--r--support/lug/images/fr.pngbin240 -> 0 bytes
-rw-r--r--support/lug/images/gb.pngbin1570 -> 0 bytes
-rw-r--r--support/lug/images/hu.pngbin194 -> 0 bytes
-rw-r--r--support/lug/images/ie.pngbin239 -> 0 bytes
-rw-r--r--support/lug/images/in.pngbin440 -> 0 bytes
-rw-r--r--support/lug/images/is.pngbin328 -> 0 bytes
-rw-r--r--support/lug/images/it.pngbin241 -> 0 bytes
-rw-r--r--support/lug/images/kr.pngbin1183 -> 0 bytes
-rw-r--r--support/lug/images/lt.pngbin236 -> 0 bytes
-rw-r--r--support/lug/images/mx.pngbin597 -> 0 bytes
-rw-r--r--support/lug/images/nl.pngbin242 -> 0 bytes
-rw-r--r--support/lug/images/no.pngbin413 -> 0 bytes
-rw-r--r--support/lug/images/pl.pngbin242 -> 0 bytes
-rw-r--r--support/lug/images/pt.pngbin697 -> 0 bytes
-rw-r--r--support/lug/images/ru.pngbin236 -> 0 bytes
-rw-r--r--support/lug/images/si.pngbin577 -> 0 bytes
-rw-r--r--support/lug/images/us.pngbin915 -> 0 bytes
-rw-r--r--support/lug/images/vn.pngbin556 -> 0 bytes
-rw-r--r--support/lug/images/za.pngbin1045 -> 0 bytes
-rwxr-xr-xsupport/lug/lug2856
-rw-r--r--support/lug/lug.199
-rw-r--r--support/lug/lug.html196
-rw-r--r--support/lug/lug.pdfbin51001 -> 59035 bytes
-rwxr-xr-xsupport/lug/lugs.rb110
-rw-r--r--support/lug/lugs/bg47
-rw-r--r--support/lug/lugs/br47
-rw-r--r--support/lug/lugs/cn47
-rw-r--r--support/lug/lugs/cz47
-rw-r--r--support/lug/lugs/de47
-rw-r--r--support/lug/lugs/dk47
-rw-r--r--support/lug/lugs/ee47
-rw-r--r--support/lug/lugs/es47
-rw-r--r--support/lug/lugs/esc47
-rw-r--r--support/lug/lugs/fr47
-rw-r--r--support/lug/lugs/gb47
-rw-r--r--support/lug/lugs/hu47
-rw-r--r--support/lug/lugs/ie47
-rw-r--r--support/lug/lugs/is47
-rw-r--r--support/lug/lugs/it47
-rw-r--r--support/lug/lugs/kr47
-rw-r--r--support/lug/lugs/lt47
-rw-r--r--support/lug/lugs/mx47
-rw-r--r--support/lug/lugs/nl47
-rw-r--r--support/lug/lugs/no47
-rw-r--r--support/lug/lugs/pl47
-rw-r--r--support/lug/lugs/pt47
-rw-r--r--support/lug/lugs/us47
-rw-r--r--support/lug/lugs/vn47
-rw-r--r--support/lug/lugs/za47
60 files changed, 2228 insertions, 2235 deletions
diff --git a/support/lug/README b/support/lug/README
deleted file mode 100644
index 704454f5a6..0000000000
--- a/support/lug/README
+++ /dev/null
@@ -1,12 +0,0 @@
- script: lug - create and edit TeX Local User Group web pages
- type: bash
- author: Wybo Dekker
- email: wybo@dekkerdocumenten.nl
-version: 2.02
-license: Released under the GNU General Public License
---------------------------------------------------------------------------------
-lug can be used to to (re-)create the web pages of the LUG database.
-This script must be executed in its own directory. After the script has
-been executed, this directory will contain the web site for the Electronic
-LUG Database, currently: U{www.ntg.nl/lug}{www.ntg.nl/lug}.
-
diff --git a/support/lug/README.md b/support/lug/README.md
new file mode 100644
index 0000000000..05112b02e1
--- /dev/null
+++ b/support/lug/README.md
@@ -0,0 +1,15 @@
+# lug
+| key | description
+| ---:|:---
+| script | lug - manage TeX Local User Group web pages
+| type | bash
+| author | Wybo Dekker
+| email | wybo@ntg.nl
+| version | 3.00
+| license | GNU General Public License
+
+lug(1) can be used to to (re-)create the web pages of the LUG database.
+This script must be executed in its own, otherwise empty, directory.
+After the script has been executed with the -f option, this directory will
+contain the web site for the [Electronic LUG Database](www.ntg.nl/lug).
+
diff --git a/support/lug/images/bg.png b/support/lug/images/bg.png
deleted file mode 100644
index 2cf4b55118..0000000000
--- a/support/lug/images/bg.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/br.png b/support/lug/images/br.png
deleted file mode 100644
index d6b9d62dd2..0000000000
--- a/support/lug/images/br.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/cn.png b/support/lug/images/cn.png
deleted file mode 100644
index c47a2dc100..0000000000
--- a/support/lug/images/cn.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/cz.png b/support/lug/images/cz.png
deleted file mode 100644
index 0b9083da67..0000000000
--- a/support/lug/images/cz.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/de.png b/support/lug/images/de.png
deleted file mode 100644
index 8671ca659f..0000000000
--- a/support/lug/images/de.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/dk.png b/support/lug/images/dk.png
deleted file mode 100644
index 8a4e1295e7..0000000000
--- a/support/lug/images/dk.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/ee.png b/support/lug/images/ee.png
deleted file mode 100644
index e566845f54..0000000000
--- a/support/lug/images/ee.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/es.png b/support/lug/images/es.png
deleted file mode 100644
index 7301563cd9..0000000000
--- a/support/lug/images/es.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/esc.png b/support/lug/images/esc.png
deleted file mode 100644
index ad9639a19c..0000000000
--- a/support/lug/images/esc.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/fr.png b/support/lug/images/fr.png
deleted file mode 100644
index cb7597c9e9..0000000000
--- a/support/lug/images/fr.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/gb.png b/support/lug/images/gb.png
deleted file mode 100644
index 7e6569780d..0000000000
--- a/support/lug/images/gb.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/hu.png b/support/lug/images/hu.png
deleted file mode 100644
index 29ff7f06f8..0000000000
--- a/support/lug/images/hu.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/ie.png b/support/lug/images/ie.png
deleted file mode 100644
index 66fcecc2e5..0000000000
--- a/support/lug/images/ie.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/in.png b/support/lug/images/in.png
deleted file mode 100644
index f1b1dffffb..0000000000
--- a/support/lug/images/in.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/is.png b/support/lug/images/is.png
deleted file mode 100644
index 624c4363bb..0000000000
--- a/support/lug/images/is.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/it.png b/support/lug/images/it.png
deleted file mode 100644
index f1d46d2ffb..0000000000
--- a/support/lug/images/it.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/kr.png b/support/lug/images/kr.png
deleted file mode 100644
index 398dcfd7b8..0000000000
--- a/support/lug/images/kr.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/lt.png b/support/lug/images/lt.png
deleted file mode 100644
index 7cd1c3074c..0000000000
--- a/support/lug/images/lt.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/mx.png b/support/lug/images/mx.png
deleted file mode 100644
index 2dda6bd6a8..0000000000
--- a/support/lug/images/mx.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/nl.png b/support/lug/images/nl.png
deleted file mode 100644
index 859d07fc6d..0000000000
--- a/support/lug/images/nl.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/no.png b/support/lug/images/no.png
deleted file mode 100644
index 4b2b9b5cd3..0000000000
--- a/support/lug/images/no.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/pl.png b/support/lug/images/pl.png
deleted file mode 100644
index f041b30050..0000000000
--- a/support/lug/images/pl.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/pt.png b/support/lug/images/pt.png
deleted file mode 100644
index 4f9f05036f..0000000000
--- a/support/lug/images/pt.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/ru.png b/support/lug/images/ru.png
deleted file mode 100644
index fd85c27c37..0000000000
--- a/support/lug/images/ru.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/si.png b/support/lug/images/si.png
deleted file mode 100644
index 2fe404ff41..0000000000
--- a/support/lug/images/si.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/us.png b/support/lug/images/us.png
deleted file mode 100644
index 8c5cbe575e..0000000000
--- a/support/lug/images/us.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/vn.png b/support/lug/images/vn.png
deleted file mode 100644
index 14e4fa054c..0000000000
--- a/support/lug/images/vn.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/images/za.png b/support/lug/images/za.png
deleted file mode 100644
index f314d6088e..0000000000
--- a/support/lug/images/za.png
+++ /dev/null
Binary files differ
diff --git a/support/lug/lug b/support/lug/lug
index bd1e2c4950..49ff03c86b 100755
--- a/support/lug/lug
+++ b/support/lug/lug
@@ -1,208 +1,321 @@
#!/bin/bash
-version=2.02
-myname=$(basename $0)
+Version=3.00
+ Myname="${0##*/}"
-<<'DOC'
-= lug - create and edit TeX Local User Group web pages
+:<<'DOC'
+= lug - manage TeX Local User Group web pages
= Synopsis
-lug [options] [lug-code]
-
-lug can be used to maintain the TeX Local User Group web pages, currently
-located at www.ntg.nl/lug.
-Without options, reads key=value pairs, possibly embedded in the body of a
-mail as sent by a web form like U{www.ntg.nl/lug/nl.html}{here}.
-You can feed the complete email (after saving it) to lug, or you can paste
-its content to standard input.
-
-For testing, you may want to make a copy and run it from there:
-
- $ cp -a /var/www/html/lug /var/www/html/lugtest
- $ cd /var/www/html/lugtest
- $ ./lug --help
- $ (more lug calls)
-
-Finally look at the results in http://www.ntg.nl/lugtest
-
-Options:
--h,--help Print this help and exit
--H,--Help Print full documentation via less and exit
--V,--version Print version and exit
--f,--full Re-create all files
--e,--extras=STR Re-create STR, where STR can be:
- labels.pdf
- lugs.pdf
- lugs.html
- index.html
- links.inc
--s,--sync[=STR] Synchronize the lug page at |www.ntg.nl/STR| with the current directory
- The default for |STR| is |lug|
--c,--clean Remove all files that can be re-created
+lug [options] [lug-code]
+
+== Options
+-h,--help print short help and exit
+-H,--Help print full documentation via less and exit
+-V,--version print version and exit
+-c,--clean remove all files that can be re-created
+-f,--full re-create all files
+-s,--sync[=STR] synchronize the lug page at |www.ntg.nl/STR|
+ with the current directory;
+ the default for |STR| is |lug|
= Description
-lug can be used to to (re-)create the web pages of the LUG database.
-This script must be executed in its own directory. After the script has
-been executed, this directory will contain the web site for the Electronic
-LUG Database, currently: U{www.ntg.nl/lug}{www.ntg.nl/lug}.
+lug can be used to to (re-)create the web pages of the LUG
+database. This script must be executed in its own directory.
+After the script has been executed, this directory will
+contain the web site for the [Electronic LUG
+Database](www.ntg.nl/lug).
-Before execution, the directory must contain at least"
-- the script (as said)
-- a subdirectory containing one text file for each LUG
-The HTML files depend 4 files in the parent directory:
-|ntg.css|, |1blok1e.inc|, |1blok2e.inc|, and |1blok4e.inc|.
+If you run lug for the first time, do so in a directory
+containging the script only; it wil then create all needed
+files and directories in it.
-The |lugs.rb| script must be moved to the |cgi-bin| directory.
+Recreate all files:
-When people send new data by using the forms of the site, they do so by
+ $ lug --full
+
+Apply corrections sent by email:
+
+ $ lug
+ < paste the email contents to standard input >
+ ^D
+
+When people send new data by using the forms of the site, they do so by
submitting the form, which causes an email with raw data to be sent to
-the administrator(s).
+the administrator(s).
An administrator should verify the password reported in the email and then
cd to this directory, or to a copy of it on his own computer, and he should
then run:
- $ ./lug
+ $ ./lug
lug waits for data, which it can be given by cut (from the email) and paste
(to standard input). By ending the input with |^D|, lug corrects the data in
the directory `lugs'
-It is of course also possible to save the contents of the email into a file
+It is of course also possible to save the contents of the email into a file
and then run:
- $ ./lug <file
+ $ ./lug <file
The administrator can make small correction to one country by giving the
necessary input on the command line. For example, to change the email address
of the treasurer of The Netherlands he can run:
- $ ./lug
- code=nl
- femail=wybo@dekkerdocumenten.nl
- ^D
+ $ ./lug
+ code=nl
+ femail=treasurer@ntg.nl
+ ^D
Synchronize the website (|www.ntg.nl/lug|) with the current directory:
- ./lug --sync
+ $ ./lug --sync
+
+Of course, this action makes no sense if you are operating in the web
+directory itself.
Or, for testing purposes, synchronize |www.ntg.nl/lugtest|:
- ./lug --sync=lugtest
+ $ ./lug --sync=lugtest
or, shorter:
- ./lug -slugtest
+ $ ./lug -slugtest
Remove everything that can be regenerated:
- lug --clean
+ $ ./lug --clean
+
+This stores any changes made in the |README.md| file, the |lugs.rb| script,
+and the |images| en |lugs| directories in the script. After this operation
+only the script will be there, and you can simply restore everything by
+running it with the |--full| option.
-Regenerate everything:
+Regenerate everything:
+ $ ./lug --full
- lug --full
+= Author
+[Wybo Dekker](wybo@ntg.nl)
-= Author and copyright
-Author Wybo Dekker
-Email U{wybo@dekkerdocumenten.nl}{wybo@dekkerdocumenten.nl}
-License Released under the U{www.gnu.org/copyleft/gpl.html}{GNU General Public License}
+= Copyright
+Released under the [GNU General Public License](www.gnu.org/copyleft/gpl.html)
DOC
- die() { echo -e "$myname: $Err$@$Nor" 1>&2; exit 1; }
- Warn() { echo -e "$myname: $War$@$Nor" 1>&2; }
- warn() { $verbose && Warn $@; }
- help() { sed -n '/^= Synopsis/,/^= /p' $0|sed '1s/.*/Usage:/;/^= /d'; exit; }
-helpall() { sed -n '/^<<.DOC.$/,/^DOC$/p' $0|sed -n '1d;$d;p'|less; exit; }
-version() { echo $version; exit; }
-install() { which instscript>&/dev/null && instscript -zp $myname
- cd ..
- zip -Drqq lug/lug-$version.zip lug/{images,lugs,lugs.rb}
- exit
- }
+Red='\e[38;5;1m' Mag='\e[38;5;5m' Nor='\e[0m'
+ die() { local i; for i; do echo -e "$Myname: $Red$i$Nor"; done 1>&2; exit 1; }
+ Warn() { local i; for i; do echo -e "$Myname: $Mag$i$Nor"; done 1>&2; }
+helpsrt() { sed -n '/^= Synopsis/,/^= /p' "$0"|sed '1d;$d'; exit; }
+helpall() { sed -n "/^:<<'DOC'$/,/^DOC/p" "$0"|sed '1d;$d'|
+ less -P"$Myname-${Version/./·} (press h for help, q to quit)";exit; }
+
+:<<'DOC' #---------------------------------------------------------------------
+= excheck
+synopsis: excheck executable1 [executable2...]
+description: check if all needed execs are there and getopt is GNU
+DOC
+#-------------------------------------------------------------------------------
+excheck() {
+ local ok=true i
+ for i; do
+ command -v "$i" > /dev/null && continue
+ Warn "Missing executable: $i"
+ ok=false
+ done
+ $ok || die
+ getopt -T
+ [[ $? -ne 4 ]] && die "Your getopt is not GNU"
+}
-Nor='\e[0m' # reset color ]
-Err='\e[31;1m' # light red ]
-War='\e[35;1m' # light magenta ]
+:<<'DOC' #---------------------------------------------------------------------
+= syncwww
+synopsis: syncwww [dir]
+description: synchronize web page (|lug| by default) with current dir
+globals user: webdir
+DOC
+#-------------------------------------------------------------------------------
+syncwww() {
+ local n dir yn
+ n=$(find . -name .git -prune -o -type f|wc -l)
+ (( n<90 )) && die "Only $n files here, can not sync"
+ dir=${1:-lug}
+ read -rp "syncing $n files with www.ntg.nl/$dir - are you sure? " yn
+ if [[ $yn =~ ^[Yy] ]]; then
+ rsync -ia --delete --exclude='.git*,lugs.rb' ./ "$webdir/$dir/"
+ # if dir is lug, don't copy lugs.rb, as we're just testing:
+ [[ $dir == lug ]] && rsync -ia lugs.rb "$webdir/../cgi-bin/lugs.rb"
+ else
+ die "nothing done..."
+ fi
+}
+:<<'DOC' #----------------------------------------------------------------------
+= handle_options
+synopsis: handle_options "$@"
+description: Handle the options
+globals used: Myname Version webdir
+DOC
+#-------------------------------------------------------------------------------
+handle_options() {
+ local options
+ options=$(getopt \
+ -n "$Myname" \
+ -o 'hHVicfe:s::I' \
+ -l 'help,Help,version,install,clean,full,extras:,sync::' \
+ -- "$@"
+ ) || exit 1
+ eval set -- "$options"
+ while true; do
+ case "$1" in
+ (-h|--help) # print short help and exit
+ helpsrt
+ ;;
+
+ (-H|--Help) # print full documentation via less and exit
+ helpall
+ ;;
+
+ (-V|--version) # print version and exit
+ echo $Version
+ exit
+ ;;
+
+ (-c|--clean) # remove all files that can be re-created
+ Clean
+ exit
+ ;;
+
+ (-f|--full) # re-create all files
+ rm -f -- Makefile *.html labels.* lugs.{html,pdf,tex} links.inc lugs.inc
+ makeMakefile
+ make --quiet || die "errors running make"
+ clean
+ exit
+ ;;
+
+ (-e|--extras) # re-create ARG, where ARG can be one of:
+ # labels.pdf lugs.pdf lugs.html index.html links.inc
+ # (not needed by users, Makefile uses it)
+ eval "make$2"
+ exit
+ ;;
+
+ (-s|--sync) # with optional argument (ARG)
+ # synchronize the lug page at |www.ntg.nl/ARG| with the
+ # current directory; the default for |ARG| is |lug|
+ # Catch the error of using -s lugtest instead of -slugtest:
+ [[ -n $4 ]] &&
+ die "I don't expect argument $4; did you mean -s$4?"
+ syncwww "$2"
+ exit
+ ;;
+
+ (-I) gendoc ./lug
+ mkdir -p $PREFIX/man/man1 ||
+ die "-I option is for developer only"
+ cp ../man/man1/lug.1 $PREFIX/man/man1/lug.1
+ cp ../pdf/lug.pdf $PREFIX/pdf/lug.pdf
+ cp ../html/lug.html $PREFIX/html/lug.html
+ zip -j lug-$Version.zip lug README.md ../{man/man1,pdf,html}/lug.*
+ exit
+ ;;
+
+ (--) shift
+ break
+ ;;
+
+ (*) die "option $1 not recognized"
+ ;;
+ esac
+ done
+ args=("$@")
+}
-<<'DOC' #------ function setkeys -----------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= setkeys
-parameters: 1: country code
+synopsis: country_codea ;-replacement &-replacement
description: Set the |keys| hash to the values taken from the file |lugs/$1|.
globals set: keys
-globals used: -
-returns: 0
DOC
#-------------------------------------------------------------------------------
setkeys() { # code semicolonreplacement ampersandreplacement
local k v
- while IFS=$'\t' read -r k v; do
+ while IFS=$'\t' read -r k v; do
[[ $k = '' || $k =~ ^# ]] && continue
[[ $k =~ addr$ ]] && v=${v//;/$2}
keys["$k"]="${v//&/$3}"
- done <lugs/$1
+ done <lugs/"$1"
}
-<<'DOC' #------ function clean -------------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= clean
-parameters: -
-description: Remove files created but not needed for the web site or for
+synopsis: clean
+description: Remove files created but not needed for the web site or for
lug functioning.
-globals set: -
-globals used: -
-returns: 0
DOC
#-------------------------------------------------------------------------------
clean() {
- rm -f utf82html.c Makefile
+ rm -f Makefile
}
-<<'DOC' #------ function Clean -------------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= Clean
-parameters: -
-description: Remove all files that can be re-created.
-globals set: -
-globals used: -
-returns: 0
+synopsis: Clean
+description: Remove all files that can be re-created and store them back in lug.
DOC
#-------------------------------------------------------------------------------
Clean() {
+ local i
clean
- rm -f *.html labels.* lugs.{html,pdf,tex} \
- links.inc utf82html
+ rm -f -- *.html labels.* lugs.{html,pdf,tex} links.inc lugs.inc
+
+ # test if the expected files are there:
+ test -e README.md || die 'Missing README,md'
+ test -e lugs.rb || die 'Missing lugs.rb'
+ for i in images lugs; do
+ test -d $i || die "Missing $i"
+ test "$(find $i -type f | wc -l)" -lt 30 && die "less than 30 files in $i"
+ done
+
+ cp -a ./lug ./lug.backup
+ sed -i '/^begin-base64/,/^auxfiles/d' ./lug &&
+ zip -Drmq - README.md images/ lugs/ lugs.rb | uuencode -m - >> ./lug &&
+ echo auxfiles >> ./lug &&
+ rmdir images lugs
+ rm ./lug.backup
}
-<<'DOC' #------ function makeMakefile ------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makeMakefile
-parameters: -
+synopsis: makeMakefile
description: Create the file |Makefile|
-globals set: -
-globals used: db
-returns: 0
+globals used: db
DOC
#-------------------------------------------------------------------------------
makeMakefile() {
- local i
- cat<<EOF |sed 's/\t//' > Makefile
- BASEFILES = $(for i in ${db[@]}; do echo -n lugs/$i' '; done)
+ function dep {
+ local i
+ for i in $db; do
+ echo "$i.html:lugs/$i; ./lug $i"
+ done
+ }
+ cat<<EOD |sed 's/\t//' > Makefile
+ BASEFILES = lugs/${db// / lugs\/}
.SUFFIXES: .tex .pdf
.tex.pdf:
- PDFLATEX='xelatex -recorder -interaction=batchmode' texi2dvi -p -q \$< 2>/tmp/\$\$ || cat /tmp/\$\$
- PDFLATEX='xelatex -interaction=batchmode' texi2dvi -p -q --mostly-clean \$< 2>/tmp/\$\$ || cat /tmp/\$\$
- all: $(echo -n ${db[@]} |sed 's/ /.html /g').html \
- utf82html index.html lugs.html \
- links.inc \
- lugs.pdf labels.pdf
- $(for i in ${db[@]}; do echo "$i.html: lugs/$i utf82html; ./lug $i"; done)
+ PDFLATEX='lualatex -interaction=batchmode' texi2dvi -p -q \$< 2>/tmp/\$\$ || cat /tmp/\$\$
+ PDFLATEX='lualatex -interaction=batchmode' texi2dvi -p -q --mostly-clean \$< 2>/tmp/\$\$ || cat /tmp/\$\$
+ all: ${db// /.html }.html index.html lugs.html links.inc lugs.pdf labels.pdf
+ $(dep)
labels.pdf: \$(BASEFILES)
./lug --extras=labels.pdf
lugs.pdf: \$(BASEFILES)
./lug --extras=lugs.pdf
- lugs.html: \$(BASEFILES)
+ lugs.html: \$(BASEFILES) images/${db// /.png images\/}.png
./lug --extras=lugs.html
index.html: \$(BASEFILES)
@@ -212,589 +325,447 @@ makeMakefile() {
./lug --extras=links.inc
clean:
- rm -rf *.html labels.* lugs.* links.inc utf82html Makefile
-
- utf82html: utf82html.c
- cc -o utf82html utf82html.c
-
-EOF
-}
-
-<<'DOC' #------ function makeutf82html.c --------------------------------------
-= makeutf82html.c
-parameters: -
-description: Create the file |utf82html.c|;
- it will be compiled /via/ |Makefile|
-globals set: -
-globals used: -
-returns: 0
-DOC
-#-------------------------------------------------------------------------------
-makeutf82html.c() {
- cat <<-'EOF' >utf82html.c
- // utf82html.c: convert UTF-8 byte sequences to numeric html entities
- // Written in 2004 by Peter Samuelson <peter@p12n.org>
- // Copyright abandoned by the author
-
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
-
- void from_utf8 (FILE *in, FILE *out)
- {
- char buf[4096 + 17];
- size_t len = 0;
-
- while (!feof(in)) {
- size_t usable, i;
-
- len += fread(buf+len, 1, 4096, in);
- buf[len] = 0;
- if (feof(in) || len < 16)
- usable = len;
- else
- usable = len - 16;
-
- for (i=0; i<usable; i++) {
- int t;
- unsigned ch, len;
-
- /* properties of UTF-8 chars */
- static struct { unsigned minval; int len; char b0, b0mask; }
- uprop[] = {
- { 1<<7, 2, 0xc0, 0xe0 },
- { 1<<11, 3, 0xe0, 0xf0 },
- { 1<<16, 4, 0xf0, 0xf8 },
- { 1<<21, 5, 0xf8, 0xfc },
- { 1<<26, 6, 0xfc, 0xfe },
- { 0, }
- };
-
- if (!(buf[i] & 0x80)) {
- putc(buf[i], out);
- continue;
- }
- for (t = 0; uprop[t].minval; t++)
- if ((buf[i] & uprop[t].b0mask) == uprop[t].b0)
- break;
- if (!uprop[t].minval)
- goto invalid;
-
- ch = buf[i] & ~uprop[t].b0mask;
- for (len = uprop[t].len - 1; len; len--,i++) {
- if ((buf[i+1] & 0xc0) != 0x80)
- goto invalid;
-
- ch = (ch << 6) | (buf[i+1] & 0x3f);
- }
- if (ch < uprop[t].minval)
- goto invalid;
-
- fprintf(out, (ch > 255) ? "&#x%04x;" : "&#x%02x;", ch);
- continue;
-
- invalid:
- fprintf(stderr, "illegal UTF-8 sequence\n");
- fprintf(out, "&#xfffd;"); /* "REPLACEMENT CHARACTER" */
- }
- if (i < len)
- memcpy(buf, buf+i, len-i);
- len -= i;
- }
- }
-
- int main (int argc, char *argv[])
- {
- if (argc == 1) {
- from_utf8(stdin, stdout);
- return 0;
- }
- while (argc > 1) {
- FILE *fp = fopen(argv[1], "r");
- if (fp)
- from_utf8(fp, stdout);
- else
- perror("fopen");
-
- fclose(fp);
- argc--; argv++;
- }
- return 0;
- }
- EOF
+ rm -rf *.html labels.* lugs.* links.inc Makefile
+EOD
}
-<<'DOC' #------ function makelinks.inc -----------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makelinks.inc
-parameters: -
+synopsis: makelinks.inc
description: Create the file |links.inc|
-globals set: -
-globals used: -
-returns: 0
DOC
#-------------------------------------------------------------------------------
makelinks.inc() {
local i
- for i in lugs/*; do
+ for i in lugs/*; do
i=${i#lugs/}
echo "<a href=\"$i.html\">$i</a>"
done
echo '<a href="index.html">home</a>'
} >links.inc
-<<'DOC' #------ function makexx.html -------------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makexx.html
-parameters: 1: country code
+synopsis: makexx country_code
description: Create the file |lugs/$1|
globals set: (/via/ setkeys): |keys|
globals used: db keys adminemail
-returns:
DOC
#-------------------------------------------------------------------------------
-makexx.html() {
- [[ -n ${db[$1]} ]] || die "Unknown country code $1"
- setkeys $1 "\n" '&amp;'
+makexx.html() { # countrycode
local www
- [[ -n ${keys[www]} ]] && www='<a href="http://'${keys[www]}'">(Here is this lug'"'"'s website)</a>'
- cat <<-EOF |./utf82html >$1.html
- <!--#include virtual="../1blok1e.inc" -->
- <title>${keys[full]}</title>
- <!--#include virtual="../1blok2e.inc" -->
- <h1>TeX user groups around the world</h1>
- <h2>${keys[full]}</h2>
- <ul>
- <li>Changes won't be instant, but are mailed to the maintainer</li>
- <li>Use either TeX notation or accented characters for accents.</li>
- <li>Enter phone numbers starting with +, then the country code et cetera,<br>
- no whitespace, hyphens or other punctuation.</li>
- </ul>
- <form id="lugform" name="reaction" method="post" action="/cgi-bin/lugs.rb">
- <input size="23" type="hidden" value="${keys[code]}" name="code">
- Links to other User Group correction forms:<p>
- <!--#include virtual="links.inc" --><p>
- <table id="luginfo" border="0" cellspacing="3" summary="form">
- <tr class="mainhead">
- <th colspan="4" align="center">${keys[code]} - ${keys[country]} $www</th>
- </tr>
- <tr>
- <td align="right">full name</td>
- <td>
- <textarea cols="21" rows="2" name="full">
- ${keys[full]}
- </textarea></td>
- <td align="right">periodical</td>
- <td>
- <textarea cols="21" rows="2" name="publ">
- ${keys[publ]}
- </textarea></td>
- </tr>
- <tr>
- <td align="right">short name</td>
- <td><input size="23" value="${keys[short]}" name="short"></td>
- <td align="right">editor</td>
- <td><input size="23" value="${keys[editor]}" name="editor"></td>
- </tr>
- <tr>
- <td align="right"><a href="http://www.lingoes.net/en/translator/langcode.htm">language(s)</a></td>
- <td><input size="23" value="${keys[lang]}" name="lang"></td>
- <td align="right">editor email</td>
- <td><input size="23" value="${keys[eemail]}" name="eemail"></td>
- </tr>
- <tr>
- <td align="right">members</td>
- <td><input size="23" value="${keys[members]}" name="members"></td>
- </tr>
- <tr>
- <td align="right">email</td>
- <td><input size="23" value="${keys[email]}" name="email"></td>
- <td align="right">bank</td>
- <td><input size="23" value="${keys[bank]}" name="bank"></td>
- </tr>
- <tr>
- <td align="right">web site</td>
- <td><input size="23" value="${keys[www]}" name="www"></td>
- <td align="right">bank account</td>
- <td><input size="23" value="${keys[bacc]}" name="bacc"></td>
- </tr>
- <tr>
- <td align="right">mailing list</td>
- <td><input size="23" value="${keys[list]}" name="list"></td>
- <td align="right">swift code</td>
- <td><input size="23" value="${keys[bcode]}" name="bcode"></td>
- </tr>
- <tr>
- <td align="right">subscribe at</td>
- <td><input size="23" value="${keys[subscr]}" name="subscr"></td>
- <td align="right">routing no/BIC</td>
- <td><input size="23" value="${keys[brout]}" name="brout"></td>
- </tr>
- <tr>
- <td align="right">address</td>
- <td>
- <textarea cols="21" rows="6" name="addr">
- $(echo -e ${keys[addr]})
- </textarea></td>
- <td align="right">bank address</td>
- <td>
- <textarea cols="21" rows="6" name="baddr">
- $(echo -e ${keys[baddr]})
- </textarea></td>
- </tr>
- <tr class="mainhead">
- <th colspan="4" align="center">contact addresses</th>
- </tr>
- <tr>
- <td>&nbsp;</td>
- <th>policy matters</th>
- <th>general matters</th>
- <th>finance / member admin</th>
- </tr>
- <tr>
- <td align="right">position</td>
- <td><input size="23" value="${keys[ppos]}" name="ppos"></td>
- <td><input size="23" value="${keys[gpos]}" name="gpos"></td>
- <td><input size="23" value="${keys[fpos]}" name="fpos"></td>
- </tr>
- <tr>
- <td align="right">name</td>
- <td><input size="23" value="${keys[pname]}" name="pname"></td>
- <td><input size="23" value="${keys[gname]}" name="gname"></td>
- <td><input size="23" value="${keys[fname]}" name="fname"></td>
- </tr>
- <tr>
- <td align="right">address</td>
- <td>
- <textarea cols="21" rows="6" name="paddr">
- $(echo -e ${keys[paddr]})
- </textarea></td>
- <td>
- <textarea cols="21" rows="6" name="gaddr">
- $(echo -e ${keys[gaddr]})
- </textarea></td>
- <td>
- <textarea cols="21" rows="6" name="faddr">
- $(echo -e ${keys[faddr]})
- </textarea></td>
- </tr>
- <tr>
- <td align="right">email</td>
- <td><input size="23" value="${keys[pemail]}" name="pemail"></td>
- <td><input size="23" value="${keys[gemail]}" name="gemail"></td>
- <td><input size="23" value="${keys[femail]}" name="femail"></td>
- </tr>
- <tr>
- <td align="right">phone</td>
- <td><input size="23" value="${keys[pphone]}" name="pphone"></td>
- <td><input size="23" value="${keys[gphone]}" name="gphone"></td>
- <td><input size="23" value="${keys[fphone]}" name="fphone"></td>
- </tr>
- <tr>
- <td align="right">fax</td>
- <td><input size="23" value="${keys[pfax]}" name="pfax"></td>
- <td><input size="23" value="${keys[gfax]}" name="gfax"></td>
- <td><input size="23" value="${keys[ffax]}" name="ffax"></td>
- </tr>
- <tr>
- <td></td>
- <th align="left"><a href="lugs/${keys[code]}">download data</a></th>
- </tr>
- <tr class="mainhead">
- <th colspan="4" align="center">submission of corrected data; enter your email address and password first!</th>
- </tr>
- <!--
- <tr><td></td><td align="center" colspan="2" ><font color="red"><b>Currently no changes can be submitted</font></b></td><td></td></tr>
- <tr><td></td><td align="center" colspan="2" ><font color="red"><b>due to technical problems</font></b></td><td></td></tr>
- <tr><td></td><td align="center" colspan="2" ><font color="red"><b>Please try again later.</font></b></td><td></td></tr>
- -->
- <tr>
- <td></td>
- <td align="right">password</td>
- <td><input size="23" name="password"></td>
- <td><font size="1">obtain from wybo@dekkerdocumenten.nl</font></td>
- </tr>
- <tr>
- <td></td>
- <td align="right">your email address</td>
- <td><input size="23" name="submitemail"></td>
- <td><font size="1">needed in case we have questions</font></td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td align="left"><input type="submit" value="submit corrected data"></td>
- </tr>
- </table><p>
- Links to other User Group correction forms:<p>
- <!--#include virtual="links.inc" -->
- </form>
- <!--#include virtual="../1blok4e.inc" -->
- <!--#config timefmt="%Y-%m-%d %H:%M" -->
- <!--#echo var="LAST_MODIFIED" -->
- by <a href="mailto:$adminemail">$adminemail</a>
- </p> </div> </body> </html>
- EOF
+ [[ " $db " =~ \ $1\ ]] || die "Unknown country code $1"
+ setkeys "$1" "\n" '&amp;'
+ [[ -n ${keys[www]} ]] &&
+ www='<a class="lug" href="http://'${keys[www]}'">(Here is this lug'"'"'s website)</a>'
+ cat <<-EOD >"$1".html
+ <!--#set var="title" value="TeX User Groups around the world" -->
+ <!--#include virtual="/ssi/header-en.html" -->
+ <h2>${keys[full]}</h2>
+ <ul>
+ <li>Changes won't be instant, but are mailed to the maintainer when you click the submit button at the bottom
+ <li>Use either TeX notation or accented characters for accents.
+ <li>Enter phone numbers starting with +, then the country code et
+ cetera,<br>
+ no whitespace, hyphens or other punctuation.
+ </ul>
+ <form id="lugform" method="post" action="/cgi-bin/lugs.rb" name="lugform">
+ <div>
+ <input type="hidden" value="${keys[code]}" name="code"> Links to other
+ User Group correction forms:<br>
+ <!--#include virtual="links.inc" -->
+ <table id="luginfo">
+ <tr>
+ <th colspan="4" class="lug">${keys[code]} - ${keys[country]}
+ $www
+ <tr>
+ <td class="r">full name
+ <td>
+ <textarea class="lug" cols="20" rows="2" name="full">${keys[full]}
+ </textarea>
+ <td class="r">periodical
+ <td>
+ <textarea class="lug" cols="20" rows="2" name="publ">${keys[publ]}
+ </textarea>
+ <tr>
+ <td class="r">short name
+ <td><input class="lug" value="${keys[short]}" name="short">
+ <td class="r">editor
+ <td><input class="lug" value="${keys[editor]}" name="editor">
+ <tr>
+ <td class="r">
+ <a href=
+ "http://www.lingoes.net/en/translator/langcode.htm">language(s)</a>
+ <td><input class="lug" value="${keys[lang]}" name="lang">
+ <td class="r">editor email
+ <td><input class="lug" value="${keys[eemail]}" name="eemail">
+ <tr>
+ <td class="r">members
+ <td><input class="lug" value="${keys[members]}" name="members">
+ <td>
+ <td>
+ <tr>
+ <td class="r">email
+ <td><input class="lug" value="${keys[email]}" name="email">
+ <td class="r">bank
+ <td><input class="lug" value="${keys[bank]}" name="bank">
+ <tr>
+ <td class="r">web site
+ <td><input class="lug" value="${keys[www]}" name="www">
+ <td class="r">bank account
+ <td><input class="lug" value="${keys[bacc]}" name="bacc">
+ <tr>
+ <td class="r">mailing list
+ <td><input class="lug" value="${keys[list]}" name="list">
+ <td class="r">swift code
+ <td><input class="lug" value="${keys[bcode]}" name="bcode">
+ <tr>
+ <td class="r">subscribe at
+ <td><input class="lug" value="${keys[subscr]}" name="subscr">
+ <td class="r">routing no/BIC
+ <td><input class="lug" value="${keys[brout]}" name="brout">
+ <tr>
+ <td class="tr">address
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "addr">$(echo -e "${keys[addr]}")
+ </textarea>
+ <td class="tr">bank address
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "baddr">$(echo -e "${keys[baddr]}")
+ </textarea>
+ <tr>
+ <td>
+ <th colspan="3" class="lug">contact addresses
+ <tr>
+ <td>&nbsp;
+ <th>policy matters
+ <th>general matters
+ <th>finance / member admin
+ <tr>
+ <td class="r">position
+ <td><input class="lug" value="${keys[ppos]}" name="ppos">
+ <td><input class="lug" value="${keys[gpos]}" name="gpos">
+ <td><input class="lug" value="${keys[fpos]}" name="fpos">
+ <tr>
+ <td class="r">name
+ <td><input class="lug" value="${keys[pname]}" name="pname">
+ <td><input class="lug" value="${keys[gname]}" name="gname">
+ <td><input class="lug" value="${keys[fname]}" name="fname">
+ <tr>
+ <td class="tr">address
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "paddr">$(echo -e "${keys[paddr]}")
+ </textarea>
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "gaddr">$(echo -e "${keys[gaddr]}")
+ </textarea>
+ <td>
+ <textarea class="lug" cols="20" rows="6" name=
+ "faddr">$(echo -e "${keys[faddr]}")
+ </textarea>
+ <tr>
+ <td class="r">email
+ <td><input class="lug" value="${keys[pemail]}" name="pemail">
+ <td><input class="lug" value="${keys[gemail]}" name="gemail">
+ <td><input class="lug" value="${keys[femail]}" name="femail">
+ <tr>
+ <td class="r">phone
+ <td><input class="lug" value="${keys[pphone]}" name="pphone">
+ <td><input class="lug" value="${keys[gphone]}" name="gphone">
+ <td><input class="lug" value="${keys[fphone]}" name="fphone">
+ <tr>
+ <td class="r">fax
+ <td><input class="lug" value="${keys[pfax]}" name="pfax">
+ <td><input class="lug" value="${keys[gfax]}" name="gfax">
+ <td><input class="lug" value="${keys[ffax]}" name="ffax">
+ <tr>
+ <th>
+ <th>
+ <th class="r">
+ <a href="lugs/${keys[code]}">download data</a>
+ <th>
+ <tr>
+ <td>
+ <th colspan="3" class="lug">submission of corrected data; enter your
+ email address and password first!
+ <tr>
+ <td>
+ <td class="r">password
+ <td><input class="lug" name="password">
+ <td><small>obtain from $adminemail</small>
+ <tr>
+ <td>
+ <td class="r">your email address
+ <td><input class="lug" name="submitemail">
+ <td><small>needed in case we have questions</small>
+ <tr>
+ <td>
+ <td>
+ <td colspan="2"><div id="html_element"></div>
+ <tr>
+ <td>
+ <td>
+ <td><input class="lug" type="submit" value="submit corrected data">
+ </table>
+ <p>Links to other User Group correction forms:<br>
+ <!--#include virtual="links.inc" -->
+ </div>
+ </form>
+ <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
+ <!--#include virtual="/ssi/footer-en.html" -->
+ EOD
}
-<<'DOC' #------ function makeindex.html ----------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makeindex.html
-parameters: -
+synopsis: makeindex.html
description: Create the file |index.html|
-globals set: -
globals used: db fullname adminemail
-returns: 0
DOC
#-------------------------------------------------------------------------------
makeindex.html() {
- local content=$(for i in ${db[@]}; do echo "<tr><td>$i</td><td><a href=\"$i.html\">${fullname[$i]}</a></td></tr>"; done)
- cat <<-EOF |./utf82html >index.html
- <!--#include virtual="../1blok1e.inc" -->
- <title>Nederlandstalige TeX Gebruikersgroep</title>
- <!--#include virtual="../1blok2e.inc" -->
- <h1>TeX user groups around the world</h1>
- <table border="0" cellspacing="0" cellpadding="10">
- <tr valign="top"><td width="67%">
- This page presents electronic information about TeX User Groups around
- the world, with an automated mechanism for updating this information and
- a download facility with which the primary database can be extracted.
+ content() {
+ local i
+ for i in $db; do
+ echo "<tr><td>$i<td><a href=\"$i.html\">${fullname[$i]}</a>"
+ done
+ }
+ cat <<-EOD >index.html
+ <!--#set var="title" value="TeX User Groups around the world" -->
+ <!--#include virtual="/ssi/header-en.html" -->
+ <div class="lugcountries">
+ <table>
+ $(content)
+ </table>
+ </div>This page presents electronic information about TeX User Groups around
+ the world, with an automated mechanism for updating this information and a
+ download facility with which the primary database can be extracted.
+ <p>
+ The data for each user group is generated in a separate table.
+ To access it, simply click on the name of the country.
+ <p>
+ A user group representative (the secretary, usually) can send a
+ corrected version of his group data by editing the data on-line
+ and then hitting the Send button. This will mail the changed
+ data to the maintainer of this page.
<p>
- The data for each user group is generated in a separate table. To access it,
- simply click on the name of the country.
- <p>
- A user group representative (the secretary, usually) can send a corrected version of his
- group data by editing the data on-line and then hitting the Send
- button. This will mail the changed data to the maintainer of this page.
- <p><b>New</b> user groups can request an entry by sending an
- email to wybodekker@dekkerdocumenten.nl
+ <b>New</b> user groups can
+ request an entry by sending an email to
+ $adminemail
<ul>
- <li>Please enter ASCII characters (decimal 32-126) only
- <li>use TeX for accents
- <li>Enter phone numbers starting with +, then the country code
- et cetera, no whitespace, hyphens or other punctuation.
+ <li>Please enter ASCII characters (decimal 32-126) only
+ <li>use TeX for accents
+ <li>Enter phone numbers starting with +, then the country code et cetera,
+ no whitespace, hyphens or other punctuation.
</ul>
- Anybody can obtain user group information by downloading the data from
- the green cell in a table.
- This will generate a key=value line for each cell in the table, starting with
- a key for that cell, followed by the contents of the cell.
<p>
- <table border="1" cellspacing="0" cellpadding="10">
- <tr class="mainhead"><th colspan="3">
- How to obtain information about all lugs at once:
- </th>
- </tr>
- <tr><td>Obtain a LaTeX file presenting all lug information
- for publication in two-column format:
- </td>
- <td><a href="lugs.tex">LaTeX source</a>
- </td>
- <td><table>
- <tr><td><a href="lugs.pdf">PDF</a></td></tr>
- <tr><td><a href="lugs.html">HTML</a></td></tr>
- </table>
- </td>
- </tr>
- <tr><td>Obtain a LaTeX file containing labels with addresses
- of all lugs, where you can send your publication:
- </td>
- <td><a href="labels.tex">LaTeX source</a>
- </td>
- <td><a href="labels.pdf">PDF</a>
- </td>
- </tr>
+ Anybody can obtain user group information by downloading the data from
+ the green cell in a table. This will generate a key=value line for each cell
+ in the table, starting with a key for that cell, followed by the contents of
+ the cell.
+ <table>
+ <tr>
+ <th colspan="3" class="lug">How to obtain information about all lugs at
+ once:
+ <th>
+ <tr>
+ <td>Obtain a LaTeX file presenting all lug information for publication in
+ two-column format:
+ <td>
+ <a href="lugs.tex">LaTeX source</a>
+ <td>
+ <table>
+ <tr>
+ <td>
+ <a href="lugs.pdf">PDF</a>
+ <tr>
+ <td>
+ <a href="lugs.html">HTML</a>
+ </table>
+ <td>
+ <tr>
+ <td>Obtain a LaTeX file containing labels with addresses of all lugs,
+ where you can send your publication:
+ <td>
+ <a href="labels.tex">LaTeX source</a>
+ <td>
+ <a href="labels.pdf">PDF</a>
+ <td>
</table>
- </td>
- <td><table>
- $content
- </table></td></tr></table>
- <!--#include virtual="../1blok4e.inc" -->
- <!--#config timefmt="%Y-%m-%d %H:%M" -->
- <!--#echo var="LAST_MODIFIED" -->
- by <a href="mailto:$adminemail">$adminemail</a>
- </p></div></body></html>
- EOF
+ <!--#include virtual="/ssi/footer-en.html" -->
+ EOD
}
-<<'DOC' #------ function makelugs.html -----------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makelugs.html
-parameters: -
+synopsis: makelugs.html
description: Create the file |lugs.html|
globals set: (/via/ setkeys) |keys|
globals used: db keys fullname
-returns: 0
DOC
#-------------------------------------------------------------------------------
makelugs.html() {
- local linkline=$(for l in ${db[@]}; do echo "<a href=\"#$l\">$l</a>"; done)
- local i l lug www
- { cat <<-EOF
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <script language="Javascript" type="text/javascript">
- <!--
- if (top.location != location) top.location.href = location.href;
- -->
- </script>
- <title>All TeX User Groups</title>
- <style type="text/css">
- <!--
- body {
- margin-top: 8pt;
- margin-left: 8pt;
- color: #777;
- background: white;
- font-family: Cambria, sans-serif;
- font-size:110%;
- }
- H1, H2, H3, H4 { color: navy; }
- a:link { color: navy; }
- a:visited { color: green; }
- a:active { color: red; }
- td.label {
- text-align: right;
- }
- td.addr {
- text-align: right;
- vertical-align:top;
- }
- .nounderline A {text-decoration:none; font-weight:bold}
- th.kop {
- background-color:#aaa;
- color:black;
- vertical-align:middle;
- text-align:left;
- font-size:150%;
- line-height:200%;
- }
- th.sub {
- color:navy;
- text-align:left;
- font-size:120%;
- }
- -->
- </style>
- </head>
- <body>
- <h1>TeX user groups around the world</h1>
- The TeX Users Group (contact info below) serves as the local user
- group (LUG) of TeX users in North America and any other area or
- language not appearing in the following list. TUG is always
- interested in fostering the formation of local TeX users groups;
- please contact the TUG board (board at tug.org) for assistance,
- such as forwarding information about others who might be
- interested, publicity, arranging joint memberships and so on.
+ local i
+ # create lugs.inc
+ echo '<p>' >lugs.inc
+ for i in $db; do echo "<a href=\"#$i\">$i</a>"; done >>lugs.inc
+ # create lugs.html:
+ { cat <<-EOD
+ <!--#set var="title" value="TeX User Groups around the world" -->
+ <!--#include virtual="/ssi/header-en.html" -->
<p>
- See also:
+ The TeX Users Group (contact info
+ below) serves as the local user group (LUG) of TeX users in North America
+ and any other area or language not appearing in the following list. TUG is
+ always interested in fostering the formation of local TeX users groups;
+ please contact the TUG board (board at tug.org) for assistance, such as
+ forwarding information about others who might be interested, publicity,
+ arranging joint memberships and so on. See also:
<ul>
- <li>The TeX calendar (
- <a href="http://texcalendar.dante.de/month.php">month view</a>,
- <a href="http://texcalendar.dante.de/year.php">year view</a>
- ) for user group activities.
- <li>The <a href="http://www.tug.org/calendar.html">TUG Calendar</a> for general TeX and other typographic activities.
- <li>The list of <a href="http://www.tug.org/pubs.html">user group publications and journals</a>.
- <li>This same information in <a href="lugs.pdf">PDF</a> and in <a href="lugs.tex">LaTeX</a>.
- </ul>
+ <li>The TeX calendar (
+ <a href="http://texcalendar.dante.de/month.php">month view</a>,
+ <a href="http://texcalenmakelugs.htmldar.dante.de/year.php">year view</a>
+ ) for user group activities.
+ <li>The <a href="http://www.tug.org/calendar.html">TUG Calendar</a> for
+ general TeX and other typographic activities.
+ <li>The list of <a href="http://www.tug.org/pubs.html">user group
+ publications and journals</a>.
+ <li>This same information in <a href="lugs.pdf">PDF</a> and in <a href=
+ "lugs.tex">LaTeX</a>.
+ </ul>This information comes from the <a href=
+ "http://www.ntg.nl/lug/index.html">Electronic LUG Database</a>: you can
+ correct or add information there.<br />
+ The following links bring you straight to the individual user group
+ correction forms:
<p>
- This information comes from the
- <a href="http://www.ntg.nl/lug/index.html">Electronic LUG Database</a>:
- you can correct or add information there.<br>The following links
- bring you straight to the individual user group correction forms:<p>
- <strong>
- EOF
- for i in ${db[@]}; do
- echo " <a href=\"http://www.ntg.nl/lug/$i.html\">$i</a>"
+ EOD
+ for i in $db; do
+ echo " <a href=\"http://www.ntg.nl/lug/$i.html\">$i</a>"
done
- cat <<-EOF
- </strong>
+ cat <<-EOD
<p>
Below, a similar line of links just above
- every LUG header can be used to wander between the LUG info records in this document.<hr>
- <table summary="lugs">
- EOF
- for lug in ${db[@]}; do
- setkeys $lug '<br>' '&amp;'
- www=${keys[www]}
- [[ -n $www ]] && www="<a href=\"http://$www\">$www</a>"
- cat <<-EOF
- <tr><td colspan="2"><br>$linkline</td></tr>
-
- <tr><th class="kop" colspan="2">&nbsp;<img src="./images/$lug.png"/>&nbsp;<a name="$lug">$lug - ${fullname[$lug]}</a></th></tr>
- <tr><td class="label">short name: </td><td>${keys[short]}</td></tr>
- <tr><td class="label">full name: </td><td>${keys[full]}</td></tr>
- <tr><td class="label">language: </td><td>${keys[lang]}</td></tr>
- <tr><td class="label">members: </td><td>${keys[members]}</td></tr>
- <tr><td class="label">email: </td><td>${keys[email]}</td></tr>
- <tr><td class="label">web site: </td><td>$www</td></tr>
- <tr><td class="label">discussion list:</td><td>${keys[list]}</td></tr>
- <tr><td class="label">subscribe at: </td><td>${keys[subscr]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[addr]}</td></tr>
-
- <tr><th class="sub" colspan="2">Periodical</th></tr>
- <tr><td class="label">title: </td><td>${keys[publ]}</td></tr>
- <tr><td class="label">editor: </td><td>${keys[editor]}</td></tr>
- <tr><td class="label">editor email: </td><td>${keys[eemail]}</td></tr>
-
- <tr><th class="sub" colspan="2">Banking</th></tr>
- <tr><td class="label">name: </td><td>${keys[bank]}</td></tr>
- <tr><td class="label">account: </td><td>${keys[bacc]}</td></tr>
- <tr><td class="label">(swift) code: </td><td>${keys[bcode]}</td></tr>
- <tr><td class="label">routing no.: </td><td>${keys[brout]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[baddr]}</td></tr>
-
- <tr><th class="sub" colspan="2">${keys[ppos]:-President}</th></tr>
- <tr><td class="label">name: </td><td>${keys[pname]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[paddr]}</td></tr>
- <tr><td class="label">email: </td><td>${keys[pemail]}</td></tr>
- <tr><td class="label">phone: </td><td>${keys[pphone]}</td></tr>
- <tr><td class="label">fax: </td><td>${keys[pfax]}</td></tr>
-
- <tr><th class="sub" colspan="2">${keys[gpos]:-Secretary}</th></tr>
- <tr><td class="label">name: </td><td>${keys[gname]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[gaddr]}</td></tr>
- <tr><td class="label">email: </td><td>${keys[gemail]}</td></tr>
- <tr><td class="label">phone: </td><td>${keys[gphone]}</td></tr>
- <tr><td class="label">fax: </td><td>${keys[gfax]}</td></tr>
-
- <tr><th class="sub" colspan="2">${keys[fpos]:-Treasurer}</th></tr>
- <tr><td class="label">name: </td><td>${keys[fname]}</td></tr>
- <tr><td class="addr" >address:</td><td>${keys[faddr]}</td></tr>
- <tr><td class="label">email: </td><td>${keys[femail]}</td></tr>
- <tr><td class="label">phone: </td><td>${keys[fphone]}</td></tr>
- <tr><td class="label">fax: </td><td>${keys[ffax]}</td></tr>
- EOF
+ every LUG header can be used to wander between the LUG info records
+ in this document.
+ <hr>
+ <table>
+ EOD
+ for i in $db; do
+ setkeys "$i" '<br/>' '&amp;'
+ w=${keys[www]}
+ [[ -n $w ]] && w="<a href=\"http://$w\">$w</a>"
+ cat <<-EOD
+ <tr><td colspan="2"><!--#include virtual="lugs.inc" -->
+ <tr><th class="kop"><img src="images/$i.png" width="48" alt="flag"><th class="kop" id="$i">$i - ${fullname[$i]}
+ <tr><td class="r">short name: <td>${keys[short]}
+ <tr><td class="r">full name: <td>${keys[full]}
+ <tr><td class="r">language: <td>${keys[lang]}
+ <tr><td class="r">members: <td>${keys[members]}
+ <tr><td class="r">email: <td>${keys[email]}
+ <tr><td class="r">web site: <td>$w
+ <tr><td class="r">discussion list:<td>${keys[list]}
+ <tr><td class="r">subscribe at: <td>${keys[subscr]}
+ <tr><td class="tr">address: <td>${keys[addr]}
+ <tr><td class="h3" colspan="2">Periodical
+ <tr><td class="r">title: <td>${keys[publ]}
+ <tr><td class="r">editor: <td>${keys[editor]}
+ <tr><td class="r">editor email:<td>${keys[eemail]}
+ <tr><td class="h3" colspan="2">Banking
+ <tr><td class="r">name: <td>${keys[bank]}
+ <tr><td class="r">account: <td>${keys[bacc]}
+ <tr><td class="r">(swift) code:<td>${keys[bcode]}
+ <tr><td class="r">routing no.: <td>${keys[brout]}
+ <tr><td class="tr">address: <td>${keys[baddr]}
+ <tr><td class="h3" colspan="2">${keys[ppos]:-President}
+ <tr><td class="r">name: <td>${keys[pname]}
+ <tr><td class="tr" >address: <td>${keys[paddr]}
+ <tr><td class="r">email: <td>${keys[pemail]}
+ <tr><td class="r">phone: <td>${keys[pphone]}
+ <tr><td class="r">fax: <td>${keys[pfax]}
+ <tr><td class="h3" colspan="2">${keys[gpos]:-Secretary}
+ <tr><td class="r">name: <td>${keys[gname]}
+ <tr><td class="tr">address: <td>${keys[gaddr]}
+ <tr><td class="r">email: <td>${keys[gemail]}
+ <tr><td class="r">phone: <td>${keys[gphone]}
+ <tr><td class="r">fax: <td>${keys[gfax]}
+ <tr><td class="h3" colspan="2">${keys[fpos]:-Treasurer}
+ <tr><td class="r">name: <td>${keys[fname]}
+ <tr><td class="tr">address: <td>${keys[faddr]}
+ <tr><td class="r">email: <td>${keys[femail]}
+ <tr><td class="r">phone: <td>${keys[fphone]}
+ <tr><td class="r">fax: <td>${keys[ffax]}
+ EOD
done
- echo "</table></body></html>"
- } | sed '/^$/d;/<\/td><td><\/td><\/tr>$/d' |
- tac | # reverse and go looking for <h3> headers with no content
- while read -r l; do
- if [[ $l =~ :\ *\</td\> ]]; then # content line?
- keep=true # yes, keep <h3> header
- elif [[ $l =~ class=\"sub\" ]]; then # sub header?
- $keep || continue # keep it if keep was set true, skip otherwise
- keep=false # not a content line, so set keep false
+ cat <<-EOD
+ </table>
+ <!--#include virtual="/ssi/footer-en.html" -->
+ EOD
+ } | sed '/^$/d;/<td>$/d' |
+ tac | # reverse and go looking for headers with no content
+ while read -r i; do
+ local keep
+ if [[ $i =~ :\ *\<td\> ]]; then # content line?
+ keep=true # yes, keep header
+ elif [[ $i =~ (\<img|span=) ]]; then # header?
+ $keep || continue # keep it if keep was set true, skip otherwise
+ keep=false # not a content line, so set keep false
else
- keep=false # not a content line, so set keep false
+ keep=false # not a content line, so set keep false
fi
- echo "$l"
+ echo "$i"
done |
- tac |
- utf82html >lugs.html
+ tac >lugs.html
}
-<<'DOC' #------ function makelugs.pdf ------------------------------------------
+
+:<<'DOC' #----------------------------------------------------------------------
+= urlit
+synopsis: urlit string
+description: if argument is not empty, print it surrounded with |\url{...}|,
+DOC
+#-------------------------------------------------------------------------------
+urlit () {
+ if [[ -n $1 ]]; then
+ printf '\\url{%s}' "$1"
+ fi
+}
+
+:<<'DOC' #----------------------------------------------------------------------
+= stackit
+synopsis: stackit string
+description: if argument is empty, print newline,
+ if not, replace semicolons with double backslashes and print it
+ surrounded with |\Longunderstack[l]{...}\strut|
+DOC
+#-------------------------------------------------------------------------------
+stackit () {
+ if [[ -z $1 ]]; then
+ echo
+ else
+ printf '\\Longunderstack[l]{%s\\strut}' "${1//;/\\\\}"
+ fi
+}
+
+
+:<<'DOC' #----------------------------------------------------------------------
= makelugs.pdf
-parameters: -
-description: Create the files |lug.tex| and |lugs.pdf|
+synopsis: makelugs.pdf
+description: Create the files |lugs.tex| and |lugs.pdf|
globals set: (/via/ setkeys) |keys|
globals used: keys db fullname
-returns: 0
DOC
#-------------------------------------------------------------------------------
makelugs.pdf() {
- local l lug
- { cat <<-'EOF'
- %!xelatex
+ local i
+ { cat <<-'EOD'
+ %!lualatex
\documentclass[10pt]{article}
\usepackage[a4paper,margin=25mm]{geometry}
+
\usepackage{textcomp}
\usepackage{fontspec}
\usepackage{url}
@@ -811,403 +782,1412 @@ makelugs.pdf() {
#2}\nopagebreak}
\def\subhead#1{\\{\bfseries\upshape #1:}}
\begin{document}\fontspec{FreeSans}
- EOF
- for lug in ${db[@]}; do
- setkeys $lug '\\' '\&'
- cat <<-EOF
+ EOD
+ for i in $db; do
+ setkeys "$i" "\\\\" '\&'
+ cat <<-EOD
\begin{mylist}
- \head{$lug}{${fullname[$lug]}}
+ \head{$i}{${fullname[$i]}}
\item[short name] ${keys[short]}
\item[full name] ${keys[full]}
\item[language] ${keys[lang]}
- \item[members] ${keys[members]}
- \item[email] ${keys[email]:+$(echo "\\url{${keys[email]}}")}
- \item[web site] ${keys[www]:+$(echo "\\url{${keys[www]}}")}
+ \item[members] ${keys[members]}
+ \item[email] $(urlit "${keys[email]}")
+ \item[web site] $(urlit "${keys[www]}")
\item[discussion list]${keys[list]}
\item[subscribe at] ${keys[subscr]}
- \item[address] ${keys[addr]:+$(echo "\\Longunderstack[l]{${keys[addr]//;/\\\\}\\strut}")}
+ \item[address] $(stackit "${keys[addr]}")
\subhead{Periodical}
- \item[title] ${keys[publ]}
- \item[editor] ${keys[editor]}
- \item[editor email] ${keys[eemail]:+$(echo "\\url{${keys[eemail]}}")}
+ \item[title] ${keys[publ]}
+ \item[editor] ${keys[editor]}
+ \item[editor email] $(urlit "${keys[eemail]}")
\subhead{Banking}
- \item[name] ${keys[bank]}
- \item[account] ${keys[bacc]}
+ \item[name] ${keys[bank]}
+ \item[account] ${keys[bacc]}
\item[(swift) code] ${keys[bcode]}
\item[routing no.] ${keys[brout]}
- \item[address] ${keys[baddr]:+$(echo "\\Longunderstack[l]{${keys[baddr]//;/\\\\}\\strut}")}
+ \item[address] $(stackit "${keys[baddr]}")
\subhead{${keys[ppos]:-President}}
- \item[name] ${keys[pname]}
- \item[address] ${keys[paddr]:+$(echo "\\Longunderstack[l]{${keys[paddr]//;/\\\\}\\strut}")}
- \item[email] ${keys[pemail]:+$(echo "\\url{${keys[pemail]}}")}
- \item[phone] ${keys[pphone]}
- \item[fax] ${keys[pfax]}
+ \item[name] ${keys[pname]}
+ \item[address] $(stackit "${keys[paddr]}")
+ \item[email] $(urlit "${keys[pemail]}")
+ \item[phone] ${keys[pphone]}
+ \item[fax] ${keys[pfax]}
\subhead{${keys[gpos]:-Secretary}}
- \item[name] ${keys[gname]}
- \item[address] ${keys[gaddr]:+$(echo "\\Longunderstack[l]{${keys[gaddr]//;/\\\\}\\strut}")}
- \item[email] ${keys[gemail]:+$(echo "\\url{${keys[gemail]}}")}
- \item[phone] ${keys[gphone]}
- \item[fax] ${keys[gfax]}
+ \item[name] ${keys[gname]}
+ \item[address] $(stackit "${keys[gaddr]}")
+ \item[email] ${keys[gemail]}
+ \item[phone] ${keys[gphone]}
+ \item[fax] ${keys[gfax]}
\subhead{${keys[fpos]:-Treasurer}}
- \item[name] ${keys[fname]}
- \item[address] ${keys[faddr]:+$(echo "\\Longunderstack[l]{${keys[faddr]//;/\\\\}\\strut}")}
- \item[email] ${keys[femail]:+$(echo "\\url{${keys[femail]}}")}
- \item[phone] ${keys[fphone]}
- \item[fax] ${keys[ffax]}
+ \item[name] ${keys[fname]}
+ \item[address] $(stackit "${keys[faddr]}")
+ \item[email] $(urlit "${keys[femail]}")
+ \item[phone] ${keys[fphone]}
+ \item[fax] ${keys[ffax]}
\end{mylist}
- EOF
+ EOD
done
echo '\end{document}'
} |
- sed '/^\\item\[.*\] *$/d;/^$/d' |
+ sed '/^\\item\[.*\]\s*$/d;/^$/d' |
tac | # reverse and go looking for \subhead headers with no content
- while read -r l; do
- if [[ $l =~ ^\\item ]]; then # content line?
- keep=true # yes, keep <h3> header
- elif [[ $l =~ ^\\subhead ]]; then # \subhead header?
- $keep || continue # keep it if keep was set true, skip otherwise
- keep=false # not a content line, so set keep false
+ while read -r i; do
+ local keep
+ if [[ $i =~ ^\\item ]]; then # content line?
+ keep=true # yes, keep header
+ elif [[ $i =~ ^\\subhead ]]; then # header?
+ $keep || continue # keep it if keep was set true, skip otherwise
+ keep=false # not a content line, so set keep false
else
- keep=false # not a content line, so set keep false
+ keep=false # not a content line, so set keep false
fi
- echo "$l"
+ echo "$i"
done |
tac >lugs.tex
- mk --noprint --noview lugs.tex &&
- mk -c lugs.tex ||
+ if lualatex lugs.tex >/dev/null; then
+ rm lugs.{aux,log}
+ else
die "Problems compiling lugs.tex"
+ fi
}
-<<'DOC' #------ function makelabels.pdf ----------------------------------------
+:<<'DOC' #----------------------------------------------------------------------
= makelabels.pdf
-parameters: -
-description: Create the file |labels.tex| and |labels.pdf|
+synopsis: makelabels.pdf
+description: Create the files |labels.tex| and |labels.pdf|
globals set: (/via/ setkeys) |keys|
globals used: keys db
-returns: 0
DOC
#-------------------------------------------------------------------------------
makelabels.pdf() {
- local a i lug
- { cat <<-'EOF'
- %!xelatex
+ local a i j
+ { cat <<-'EOD'
+ %!lualatex
\documentclass{article}
\usepackage{labels,fontspec}
\LabelRows=8\LabelCols=3
\TopBorder=0mm\BottomBorder=0mm
\LeftBorder=7mm\RightBorder=7mm
\begin{document}\fontspec{FreeSans}\begin{labels}
- EOF
- for lug in ${db[@]}; do
- setkeys $lug "\n" '\&'
- a=
- for i in addr gaddr paddr faddr; do
- if [[ -n ${keys[$i]} ]]; then
- a=${keys[$i]}
- break
- fi
- done
- [[ -n $a ]] || continue
- echo -e "${keys[short]:-${keys[full]}}\n$a\n"
+ EOD
+ for i in $db; do
+ setkeys "$i" "\n" '\&'
+ a=
+ for j in addr gaddr paddr faddr; do
+ if [[ -n ${keys[$j]} ]]; then
+ a=${keys[$j]}
+ break
+ fi
+ done
+ [[ -n $a ]] || continue
+ echo -e "${keys[short]:-${keys[full]}}\n$a\n"
done
- echo '\end{labels}\end{document}'
+ echo '\end{labels}\end{document}'
} >labels.tex
- mk --noprint --noview labels.tex &&
- mk -c labels.tex ||
+ if lualatex labels.tex >/dev/null; then
+ rm labels.{aux,log}
+ else
die "Problems compiling labels.tex"
+ fi
}
-<<'DOC' #----------- fullname -----------------------------
+:<<'DOC' #----------------------------------------------------------------------
= fullname (hash)
Links the country codes to the full name of countries.
Also used to test the validity of country codes.
DOC
-#----------------------------------------------------------
+#-------------------------------------------------------------------------------
declare -A fullname=(
- [ad]='Andorra' [ky]='Cayman Islands'
+ [ad]='Andorra' [ky]='Cayman Islands'
[ae]='United Arab Emirates' [kz]='Kazakhstan'
- [af]='Afghanistan' [la]='Laos'
+ [af]='Afghanistan' [la]='Laos'
[ag]='Antigua and Barbuda' [lb]='Lebanon'
- [ai]='Anguilla' [li]='Liechtenstein'
- [al]='Albania' [lk]='Sri Lanka'
- [am]='Armenia' [lr]='Liberia'
+ [ai]='Anguilla' [li]='Liechtenstein'
+ [al]='Albania' [lk]='Sri Lanka'
+ [am]='Armenia' [lr]='Liberia'
[an]='Netherlands Antilles' [ls]='Lesotho'
- [ao]='Angola' [lt]='Lithuania'
- [ar]='Argentina' [lu]='Luxembourg'
- [as]='American Samoa' [lv]='Latvia'
- [at]='Austria' [ly]='Libya'
- [au]='Australia' [ma]='Morocco'
- [aw]='Aruba' [mc]='Monaco'
- [az]='Azerbaijan' [md]='Moldova'
+ [ao]='Angola' [lt]='Lithuania'
+ [ar]='Argentina' [lu]='Luxembourg'
+ [as]='American Samoa' [lv]='Latvia'
+ [at]='Austria' [ly]='Libya'
+ [au]='Australia' [ma]='Morocco'
+ [aw]='Aruba' [mc]='Monaco'
+ [az]='Azerbaijan' [md]='Moldova'
[ba]='Bosnia and Herzegovina' [mg]='Madagascar'
- [bb]='Barbados' [mh]='Marshall Islands'
- [bd]='Bangladesh' [mk]='Macedonia'
- [be]='Belgium' [ml]='Mali'
- [bf]='Burkina Faso' [mm]='Myanmar'
- [bg]='Bulgaria' [mn]='Mongolia'
- [bh]='Bahrain' [mo]='Macau'
- [bi]='Burundi' [mp]='Northern Marianas Islands'
- [bj]='Benin' [mq]='Martinique'
- [bm]='Bermuda' [mr]='Mauritania'
- [bn]='Brunei' [ms]='Montserrat'
- [bo]='Bolivia' [mt]='Malta'
- [br]='Brazil' [mu]='Mauritius'
- [bs]='Bahamas' [mv]='Maldives'
- [bt]='Bhutan' [mw]='Malawi'
- [bw]='Botswana' [mx]='Mexico'
- [by]='Belarus' [my]='Malaysia'
- [bz]='Belize' [mz]='Mozambique'
- [ca]='Canada' [na]='Namibia'
+ [bb]='Barbados' [mh]='Marshall Islands'
+ [bd]='Bangladesh' [mk]='Macedonia'
+ [be]='Belgium' [ml]='Mali'
+ [bf]='Burkina Faso' [mm]='Myanmar'
+ [bg]='Bulgaria' [mn]='Mongolia'
+ [bh]='Bahrain' [mo]='Macau'
+ [bi]='Burundi' [mp]='Northern Marianas Islands'
+ [bj]='Benin' [mq]='Martinique'
+ [bm]='Bermuda' [mr]='Mauritania'
+ [bn]='Brunei' [ms]='Montserrat'
+ [bo]='Bolivia' [mt]='Malta'
+ [br]='Brazil' [mu]='Mauritius'
+ [bs]='Bahamas' [mv]='Maldives'
+ [bt]='Bhutan' [mw]='Malawi'
+ [bw]='Botswana' [mx]='Mexico'
+ [by]='Belarus' [my]='Malaysia'
+ [bz]='Belize' [mz]='Mozambique'
+ [ca]='Canada' [na]='Namibia'
[cf]='Central African Republic' [nc]='New Caledonia'
- [cg]='Congo' [ne]='Niger'
- [ch]='Switzerland' [nf]='Norfolk Island'
- [ci]='Ivory Coast' [ng]='Nigeria'
- [ck]='Cook Islands' [ni]='Nicaragua'
- [cl]='Chile' [nl]='Netherlands'
- [cm]='Cameroon' [no]='Norway'
- [cn]='China' [nr]='Nauru'
- [co]='Colombia' [nu]='Niue'
- [cr]='Costa Rica' [nz]='New Zealand'
- [cu]='Cuba' [om]='Oman'
+ [cg]='Congo' [ne]='Niger'
+ [ch]='Switzerland' [nf]='Norfolk Island'
+ [ci]='Ivory Coast' [ng]='Nigeria'
+ [ck]='Cook Islands' [ni]='Nicaragua'
+ [cl]='Chile' [nl]='Netherlands'
+ [cm]='Cameroon' [no]='Norway'
+ [cn]='China' [nr]='Nauru'
+ [co]='Colombia' [nu]='Niue'
+ [cr]='Costa Rica' [nz]='New Zealand'
+ [cu]='Cuba' [om]='Oman'
[cv]='Cape Verde Islands' [pa]='Panama'
- [cy]='Cyprus' [pe]='Peru'
- [cz]='Czech Republic' [pf]='French Polynesia'
- [de]='Germany' [pg]='Papua New Guinea'
- [dj]='Djibouti' [ph]='Philippines'
- [dk]='Denmark' [pk]='Pakistan'
- [dm]='Dominica' [pl]='Poland'
+ [cy]='Cyprus' [pe]='Peru'
+ [cz]='Czech Republic' [pf]='French Polynesia'
+ [de]='Germany' [pg]='Papua New Guinea'
+ [dj]='Djibouti' [ph]='Philippines'
+ [dk]='Denmark' [pk]='Pakistan'
+ [dm]='Dominica' [pl]='Poland'
[do]='Dominican Republic' [pm]='St Pierre and Miquelon'
- [dz]='Algeria' [pr]='Puerto Rico'
- [ec]='Ecuador' [pt]='Portugal'
- [ee]='Estonia' [pw]='Palau'
- [eg]='Egypt' [py]='Paraguay'
- [eh]='Western Samoa' [qa]='Qatar'
- [er]='Eritrea' [re]='Reunion'
- [es]='Spain' [ro]='Romania'
- [esc]='Spain (Catalan)' [ru]='Russia'
- [et]='Ethiopia' [rw]='Rwanda'
- [fi]='Finland' [sa]='Saudi Arabia'
- [fj]='Fiji Islands' [sb]='Solomon Islands'
- [fk]='Falkland Islands' [sc]='Seychelles Islands'
- [fm]='Micronesia' [sd]='Sudan'
- [fo]='Faroe Islands' [se]='Sweden'
- [fr]='France' [sg]='Singapore'
- [ga]='Gabon' [si]='Slovenia'
- [gb]='United Kingdom' [sk]='Slovak Republic'
- [gd]='Grenada' [sl]='Sierra Leone'
- [ge]='Georgia' [sm]='San Marino'
- [gf]='French Guiana' [sn]='Senegal'
- [gh]='Ghana' [so]='Somalia'
- [gi]='Gibraltar' [sr]='Suriname'
- [gl]='Greenland' [sv]='El Salvador'
- [gm]='Gambia' [sy]='Syria'
- [gn]='Guinea' [sz]='Swaziland'
- [gp]='Guadeloupe' [tc]='Turks and Caicos Islands'
- [gq]='Equatorial Guinea' [td]='Chad'
- [gr]='Greece' [tg]='Togo'
- [gt]='Guatemala' [th]='Thailand'
- [gu]='Guam' [tj]='Tajikistan'
- [gw]='Guinea-Bissau' [tk]='Tokelau'
- [gy]='Guyana' [tm]='Turkmenistan'
- [hk]='Hong Kong' [tn]='Tunisia'
- [hn]='Honduras' [to]='Tonga Islands'
- [hr]='Croatia' [tp]='East Timor'
- [ht]='Haiti' [tr]='Turkey'
- [hu]='Hungary' [tt]='Trinidad and Tobago'
- [id]='Indonesia' [tv]='Tuvalu'
- [ie]='Ireland' [tw]='Taiwan'
- [il]='Israel' [tz]='Tanzania'
- [in]='India' [ua]='Ukraine'
- [iq]='Iraq' [ug]='Uganda'
- [ir]='Iran' [us]='TeX User Group (International)'
- [is]='Iceland' [uy]='Uruguay'
- [it]='Italy' [uz]='Uzbekistan'
- [jm]='Jamaica' [ve]='Venezuela'
- [jo]='Jordan' [vg]='Virgin Islands (GB)'
- [jp]='Japan' [vi]='Virgin Islands (US)'
- [ke]='Kenya' [vn]='Vietnam'
- [kg]='Kyrgyzstan' [vu]='Vanuatu'
- [kh]='Cambodia' [wf]='Wallis and Futuna Islands'
- [ki]='Kiribati' [ye]='Yemen'
- [km]='Comoros' [yt]='Mayotte Island'
+ [dz]='Algeria' [pr]='Puerto Rico'
+ [ec]='Ecuador' [pt]='Portugal'
+ [ee]='Estonia' [pw]='Palau'
+ [eg]='Egypt' [py]='Paraguay'
+ [eh]='Western Samoa' [qa]='Qatar'
+ [er]='Eritrea' [re]='Reunion'
+ [es]='Spain' [ro]='Romania'
+ [esc]='Spain (Catalan)' [ru]='Russia'
+ [et]='Ethiopia' [rw]='Rwanda'
+ [fi]='Finland' [sa]='Saudi Arabia'
+ [fj]='Fiji Islands' [sb]='Solomon Islands'
+ [fk]='Falkland Islands' [sc]='Seychelles Islands'
+ [fm]='Micronesia' [sd]='Sudan'
+ [fo]='Faroe Islands' [se]='Sweden'
+ [fr]='France' [sg]='Singapore'
+ [ga]='Gabon' [si]='Slovenia'
+ [gb]='United Kingdom' [sk]='Slovak Republic'
+ [gd]='Grenada' [sl]='Sierra Leone'
+ [ge]='Georgia' [sm]='San Marino'
+ [gf]='French Guiana' [sn]='Senegal'
+ [gh]='Ghana' [so]='Somalia'
+ [gi]='Gibraltar' [sr]='Suriname'
+ [gl]='Greenland' [sv]='El Salvador'
+ [gm]='Gambia' [sy]='Syria'
+ [gn]='Guinea' [sz]='Swaziland'
+ [gp]='Guadeloupe' [tc]='Turks and Caicos Islands'
+ [gq]='Equatorial Guinea' [td]='Chad'
+ [gr]='Greece' [tg]='Togo'
+ [gt]='Guatemala' [th]='Thailand'
+ [gu]='Guam' [tj]='Tajikistan'
+ [gw]='Guinea-Bissau' [tk]='Tokelau'
+ [gy]='Guyana' [tm]='Turkmenistan'
+ [hk]='Hong Kong' [tn]='Tunisia'
+ [hn]='Honduras' [to]='Tonga Islands'
+ [hr]='Croatia' [tp]='East Timor'
+ [ht]='Haiti' [tr]='Turkey'
+ [hu]='Hungary' [tt]='Trinidad and Tobago'
+ [id]='Indonesia' [tv]='Tuvalu'
+ [ie]='Ireland' [tw]='Taiwan'
+ [il]='Israel' [tz]='Tanzania'
+ [in]='India' [ua]='Ukraine'
+ [iq]='Iraq' [ug]='Uganda'
+ [ir]='Iran' [us]='TeX Users Group (International)'
+ [is]='Iceland' [uy]='Uruguay'
+ [it]='Italy' [uz]='Uzbekistan'
+ [jm]='Jamaica' [ve]='Venezuela'
+ [jo]='Jordan' [vg]='Virgin Islands (GB)'
+ [jp]='Japan' [vi]='Virgin Islands (US)'
+ [ke]='Kenya' [vn]='Vietnam'
+ [kg]='Kyrgyzstan' [vu]='Vanuatu'
+ [kh]='Cambodia' [wf]='Wallis and Futuna Islands'
+ [ki]='Kiribati' [ye]='Yemen'
+ [km]='Comoros' [yt]='Mayotte Island'
[kn]='St Kitts and Nevis' [yu]='Yugoslavia'
- [kp]='Korea (North)' [za]='South Africa'
- [kr]='Korea (South)' [zm]='Zambia'
- [kw]='Kuwait' [zw]='Zimbabwe'
+ [kp]='Korea (North)' [za]='South Africa'
+ [kr]='Korea (South)' [zm]='Zambia'
+ [kw]='Kuwait' [zw]='Zimbabwe'
)
-<<'DOC' #----------- keys, inp ----------------------------
-= keys, inp (hashes)
-Depending on which lug is handled, |keys| will contain the
-key and values defined in the files in |lugs/|.
-In an edit operation, |inp| will be filled with similar
-keys and values that will replace those in keys.
-DOC
-#----------------------------------------------------------
+# =============== Program starts here =============
+
+# Are all executables there?
+excheck getopt uudecode uuencode lualatex rsync sed tac mktemp
+
+# Depending on which lug is handled, |keys| will contain the
+# key and values defined in the files in |lugs/|.
+# In an edit operation, |inp| will be filled with similar
+# keys and values that will replace those in keys.
declare -A keys inp
-<<'DOC' #------------- db ---------------------------------
-= db (string)
-Contains the space-separated country codes for which data
-are available in the |lugs/| directory.
-DOC
-#----------------------------------------------------------
-db=$(test -d lugs && cd lugs && ls | tr "\n" " ")
+# webdirectory where the --sync option places the new data:
+webdir=www.ntg.nl:/var/www/ntg.nl/www/htdocs/
+
+# Contains the email address that should receive corrections
+# from the web site.
+adminemail=wybo@ntg.nl
+
+# This lug-script must be in either an empty directory
+# (where a lug web page will be generated), or in an
+# existing web page directory:
+i=$(realpath "$0")
+i=${i%/lug}
+cd "$i" || die "could not cd to $i}"
+if [[ $1 =~ --?[HhV] ]]; then
+ : # go on
+elif [[ $(ls) == 'lug' ]]; then
+ # if we got in a directory containing only the lug script, then we
+ # setup from scratch:
+ Warn 'This looks like your first run of the lug script' \
+ 'so I will set up auxilliary files and then quit' \
+ '(this will take some time...)'
+ tmp=$(mktemp)
+ uudecode lug > "$tmp"
+ unzip -qq "$tmp"
+ rm "$tmp"
+ db="$(cd lugs && echo [a-z]*)" # db='bg br ca...'
+ makeMakefile
+ make --quiet || die "errors running make"
+ clean
+elif [ -d lugs ] && [ -d images ] && [ -e lug ] && [ -e lugs.rb ]; then
+ : # go on
+else
+ die 'The lug script must run in an otherwise empty directory, or' \
+ ' in a directory containing all LUG data. You must run it in' \
+ ' that directory, or you must make a link to the lug script' \
+ ' in your PATH.' \
+ ' If this is the first time you run lug, move it to an empty' \
+ ' directory and run it from there; it will create everything' \
+ ' in that directory to make it a copy of the remote web site.'
+fi
-<<'DOC' #------------- admin ------------------------------
-= admin (string)
-Contains the user name of the lug administrator at www.ntg.nl
-DOC
-#----------------------------------------------------------
-admin=wybo
+# for the help and version options, the lugs dir may be absent:
+test -d ./lugs && db="$(cd lugs && echo [a-z]*)" # db='bg br ca...'
-<<'DOC' #------------- adminemail -------------------------
-= adminemail (string)
-Contains the email address that should receive corrections
-from the web site.
-DOC
-#----------------------------------------------------------
-adminemail=wybo@dekkerdocumenten.nl
+handle_options "$@"
+set -- "${args[@]}"
-# =============== Program starts here =============
-source=$(readlink $0 || echo ./lug)
-cd ${source%/lug}
-test -d lugs -a -e lug ||
- die "The lug script is part of a directory containing all LUG data;\n" \
- " You must run (an exact copy of) it in that directory,\n" \
- " or you must make a link to the lug script in your PATH"
-diff ./lug $0 >/dev/null || die "You are running a copy of the lug script that differs from its source"
-
-if ! options=$(getopt \
- -n $myname \
- -o hHVIcfe:s:: \
- -l help,Help,version,clean,full,extras:,sync:: \
- -- "$@"
-); then exit 1; fi
-eval set -- "$options"
-while [ $# -gt 0 ]; do
- case $1 in
- (-h|--help) help;;
- (-H|--Help) helpall;;
- (-V|--version) version;;
- (-I) install;;
- (-c|--clean) Clean
- exit;;
- (-f|--full) Clean
- makeutf82html.c
- makeMakefile
- make --quiet
- clean
- exit;;
- (-e|--extras) eval "make$2"
- exit;;
- (-s|--sync) i=${2:-lug}
- n=$(ls -R|wc -l)
- test $n -lt 70 && die "Only $n files here, can't sync"
- echo syncing with www.ntg.nl/$i
- rsync -ia --delete --exclude='.hg*' ./ $admin@www.ntg.nl:html/$i/
- exit;;
- (--) shift; break;;
- (*) break;;
- esac
+# any arguments are country codes for which an html files are created:
+for i; do
+ makexx.html "$i"
done
-
-if [ -n "$1" ]; then
- for i in "$@"; do
- makexx.html $i
- done
- exit
-fi
+[ $# -gt 0 ] && exit
in=false
echo waiting for input...
-while IFS='' read line; do
+while IFS='' read -r line; do
+ line=$(sed -e 's/^\s\+//;s/\s\+$//' <<<"$line") # trim
[[ -z $line ]] && continue # skip empty lines
- if [[ $line =~ ^code= ]]; then # we get here only with manual input
+ if [[ $line =~ ^code= ]]; then # we get here only with manual input
in=true # of a few lines; those must start with code=
inp[code]=${line#*=}
fi
[[ $line == 'password=kjwb' ]] && { in=true; continue; }
$in || continue # look only after "password=kjwb"
- [[ $line =~ =$ ]] && continue
if [[ $line =~ = ]]; then
- IFS='=' read k v <<<$line
+ IFS='=' read -r k v <<<"$line"
inp[$k]="$v"
- else
+ else
inp[$k]+=";$line"
fi
done
+
code=${inp[code]}
[[ -n $code ]] || die "No code was specified"
-[[ $(echo ${db[@]}) =~ $code ]] || die "Unrecognized code: $code"
-
-setkeys $code ';' '&' # make copy of old data in keys
-for i in ${!inp[@]}; do keys[$i]=${inp[$i]}; done # overwrite with new data
+[[ $db =~ $code ]] || die "Unrecognized code: $code"
+
+setkeys "$code" ';' '&' # make copy of old data in keys
+
+changed=false
+for i in "${!keys[@]}"; do
+ old=${keys[$i]}
+ new=${inp[$i]}
+ if [[ $old != "$new" ]]; then
+ $changed || echo "The following changes were found:"
+ printf "%-7s: '%s'\n%9s'%s'\n" "$i" "$old" ">" "$new"
+ changed=true
+ fi
+done
+$changed || die "no changes"
-cat <<-EOF >new
+while true; do
+ read -r -p "Save [Yn]? " r
+ case $r in
+ ([yY]|'')
+ cat <<-EOD >"lugs/$code"
# General:
- code ${keys[code]}
- short ${keys[short]}
- full ${keys[full]}
- lang ${keys[lang]}
- members ${keys[members]}
- email ${keys[email]}
- www ${keys[www]}
- list ${keys[list]}
- subscr ${keys[subscr]}
- addr ${keys[addr]}
+ code ${inp[code]}
+ short ${inp[short]}
+ full ${inp[full]}
+ lang ${inp[lang]}
+ members ${inp[members]}
+ email ${inp[email]}
+ www ${inp[www]}
+ list ${inp[list]}
+ subscr ${inp[subscr]}
+ addr ${inp[addr]}
# Periodical:
- publ ${keys[publ]}
- editor ${keys[editor]}
- eemail ${keys[eemail]}
+ publ ${inp[publ]}
+ editor ${inp[editor]}
+ eemail ${inp[eemail]}
# Banking:
- bank ${keys[bank]}
- bacc ${keys[bacc]}
- bcode ${keys[bcode]}
- brout ${keys[brout]}
- baddr ${keys[baddr]}
+ bank ${inp[bank]}
+ bacc ${inp[bacc]}
+ bcode ${inp[bcode]}
+ brout ${inp[brout]}
+ baddr ${inp[baddr]}
# Policy matters:
- ppos ${keys[ppos]}
- pname ${keys[pname]}
- paddr ${keys[paddr]}
- pemail ${keys[pemail]}
- pphone ${keys[pphone]}
- pfax ${keys[pfax]}
+ ppos ${inp[ppos]}
+ pname ${inp[pname]}
+ paddr ${inp[paddr]}
+ pemail ${inp[pemail]}
+ pphone ${inp[pphone]}
+ pfax ${inp[pfax]}
# General matters:
- gpos ${keys[gpos]}
- gname ${keys[gname]}
- gaddr ${keys[gaddr]}
- gemail ${keys[gemail]}
- gphone ${keys[gphone]}
- gfax ${keys[gfax]}
+ gpos ${inp[gpos]}
+ gname ${inp[gname]}
+ gaddr ${inp[gaddr]}
+ gemail ${inp[gemail]}
+ gphone ${inp[gphone]}
+ gfax ${inp[gfax]}
# Finance matters:
- fpos ${keys[fpos]}
- fname ${keys[fname]}
- faddr ${keys[faddr]}
- femail ${keys[femail]}
- fphone ${keys[fphone]}
- ffax ${keys[ffax]}
- EOF
-diff -y --left-column --report-identical-files lugs/$code new && die "No changes"
-while true; do
- echo -n "Save [Yn]? "
- read r
- case $r in
- ([yY]|'') mv -f new lugs/$code && Warn Saved || die "Could not save"
- exit
- ;;
- (n|N) die "Not saved, result left in file new"
- ;;
- esac
+ fpos ${inp[fpos]}
+ fname ${inp[fname]}
+ faddr ${inp[faddr]}
+ femail ${inp[femail]}
+ fphone ${inp[fphone]}
+ ffax ${inp[ffax]}
+ EOD
+ Warn Saved
+ exit
+ ;;
+ (n|N)
+ die "Not saved, result left in file new"
+ ;;
+ esac
done
+
+:<<'auxfiles'
+begin-base64 644 -
+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
+Xl6ul5mXXZycWJCql1+UPvudjRQDA6Okp4tjiEfn3otnvZgCJdo/smfe9/oi
+dy43RVtQUN1FQH8hd0ZkN+PuZo3MGQKOAoLTvdZ2dy3qD317JTGAvbjLzHe2
+GkvgnxmV/3eXF/74WHBhy6b028L+VQf2iffKVWy9tVdDhnHDW86bOTNj3s05
+eMA1aeLLxVF7nTXnVv11FGPbsIbfaKbxp8rmhx+C+b6Fr7yzaIrf4o8a3Mxf
+fidfehnMxTr5osaNX60b7C/vcdScm/bZU4ztxddjS4LURbrFLc5Nl3lz3mBd
+oNfyq1X3OO5FPb/ov717sk/SRz329x8PKYbnfN5rtktI5vjTGWbW0iHreNhD
+d5rIHF/qMtvFYar3wcQQvZbk+npJt6cxEY+nKus5r57TmLxjyosNp6NfPLDX
+ibTcGx8U69Sdu7FdGhiSDJ6ufi7rnBKaAFBLBwjuxNmhnwEAAJwBAABQSwME
+FAAIAAgAlbp7VAAAAAAAAAAAUQIAAA0AHABpbWFnZXMvZ3IucG5nVVQJAAMq
+1UBiKtVAYnV4CwABBOgDAAAE6AMAAOsM8HPn5ZLiYmBg4PX0cAkC0gpALMrB
+DCQFhGVuACmWdEdfRwaGjf3cfxJZgXzG4iB3J4Z152ReglQnewT5MjBUqTEw
+NLQwMPwCCjW8YGAoNWBgeJXAwGA1g4FBvGDOrkAboMTSAJ8QV6A8A0Odn9/S
+P3/+vn//TV9/GgNDPSNjAzNzg4rKxEWLzq5efYmBocbXd7G+/hRT0xmfPv34
+//9/fPya2NjV/f1H/v799+XLz5qa3XFxa/LztyxffuH06Sf8/K2MjPUPH757
+8ODdq1efnz37+Pjxh507b2pqTpCV7ZGT65GS6kpKWvvx43cPjwXS0t0yMt3u
+7guuX3/56NE7BoZaP78l+vpTTU1nioh0RkevSkhYu3baqykgnyZ5u7sIPtpq
+uwvI4SzwiCwG0h5g7HYy2w7ImOXp4hiicb71/HG+QwYCLBciZeY4+HQqlkyT
+s2r59X8+m7iKt9kt9be5JrcYGVatWLHq4319AXVGP4frr1byu6RIaWVJGa0t
+e9a8ddvls9V/G2V53BeyqdvM80nmn1Fpdv4T6+eirfdE5Grydwf/PrzRYq5+
++DeH7Nh7ISXqvv0PJp878/x1ru05Hy3fBmNjnpkMOg6KDjoOWhPmi0gLMarI
+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
+====
+auxfiles
diff --git a/support/lug/lug.1 b/support/lug/lug.1
new file mode 100644
index 0000000000..00db798c1d
--- /dev/null
+++ b/support/lug/lug.1
@@ -0,0 +1,99 @@
+.TH lug 1 "March 28, 2022" "lug version 3.00" "DekDoc scripts"
+.SH NAME
+
+lug - manage TeX Local User Group web pages
+
+.SH Synopsis
+lug [options] [lug-code]
+
+.SS Options
+
+.B -h,--help
+.RS
+print short help and exit
+.RE
+.B -H,--Help
+.RS
+print full documentation via less and exit
+.RE
+.B -V,--version
+.RS
+print version and exit
+.RE
+.B -c,--clean
+.RS
+remove all files that can be re-created
+.RE
+.B -f,--full
+.RS
+re-create all files
+.RE
+.B -s,--sync[=STR]
+.RS
+synchronize the lug page at www.ntg.nl/STR
+.RE
+.RS
+with the current directory; the default for STR is lug
+.RE
+
+.SH Description
+lug can be used to to (re-)create the web pages of the LUG database. This script must be executed in its own directory. After the script has been executed, this directory will contain the web site for the [Electronic LUG Database](www.ntg.nl/lug).
+
+If you run lug for the first time, do so in a directory containging the script only; it wil then create all needed files and directories in it.
+
+Recreate all files:
+
+ $ lug --full
+
+Apply corrections sent by email:
+
+ $ lug
+ < paste the email contents to standard input >
+ ^D
+
+When people send new data by using the forms of the site, they do so by submitting the form, which causes an email with raw data to be sent to the administrator(s).
+
+An administrator should verify the password reported in the email and then cd to this directory, or to a copy of it on his own computer, and he should then run:
+
+ $ ./lug
+
+lug waits for data, which it can be given by cut (from the email) and paste (to standard input). By ending the input with ^D, lug corrects the data in the directory `lugs'
+
+It is of course also possible to save the contents of the email into a file and then run:
+
+ $ ./lug <file
+
+The administrator can make small correction to one country by giving the necessary input on the command line. For example, to change the email address of the treasurer of The Netherlands he can run:
+
+ $ ./lug
+ code=nl
+ femail=treasurer@ntg.nl
+ ^D
+
+Synchronize the website (www.ntg.nl/lug) with the current directory:
+
+ $ ./lug --sync
+
+Of course, this action makes no sense if you are operating in the web directory itself.
+
+Or, for testing purposes, synchronize www.ntg.nl/lugtest:
+
+ $ ./lug --sync=lugtest
+
+or, shorter:
+
+ $ ./lug -slugtest
+
+Remove everything that can be regenerated:
+
+ $ ./lug --clean
+
+This stores any changes made in the README.md file, the lugs.rb script, and the images en lugs directories in the script. After this operation only the script will be there, and you can simply restore everything by running it with the --full option.
+
+Regenerate everything: $ ./lug --full
+
+.SH Author
+Wybo Dekker (wybo@ntg.nl)
+
+.SH Copyright
+Released under the GNU General Public License (www.gnu.org\fIcopyleft\fRgpl.html) \ No newline at end of file
diff --git a/support/lug/lug.html b/support/lug/lug.html
new file mode 100644
index 0000000000..e3c8a37100
--- /dev/null
+++ b/support/lug/lug.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html>
+<html Lang="en">
+<head>
+ <meta name="generator" content="gendoc" />
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>lug documentation</title>
+ <style media="screen">
+ tr { vertical-align:baseline; }
+ p { margin-top:10px; }
+ * { padding: 0; margin: 0; }
+ body {
+ font-family:Fontin,serif;
+ font-size:small;
+ color:#444;
+ margin-left: 30px;
+ max-width: 40em;
+ }
+ .top {
+ margin-top:10px;
+ margin-bottom:5px;
+ }
+ .bot {
+ margin-top:10px;
+ margin-bottom:0px;
+ }
+ h1 {
+ font-size: 120%;
+ color:#a00;
+ text-shadow: rgba(135,145,135,0.65) 3px 3px 4px;
+ margin-top: 30px;
+ padding-bottom: 0.4em;
+ }
+ h4 {
+ margin-top:15px;
+ margin-bottom:0px;
+ }
+ :link,
+ :visited {
+ color: #aa0000;
+ text-decoration: none;
+ }
+ :link:hover,
+ :visited:hover {
+ border-bottom: 1px dotted #6C8C22;
+ }
+ ul { list-style-type: circle; }
+ li { margin-left: 1.5em; }
+ pre,code {
+ font-family:monospace;
+ font-size: medium;
+ color: #023aaa;
+ }
+ td { padding-right: 1em; }
+ .red { color:#f00; }
+ .green { color:#0f0; }
+ .blue { color:#00f; }
+ .big {
+ font-size:xx-large;
+ font-weight:900;
+ color:#a00;
+ text-shadow: rgba(135,145,135,0.65) 3px 3px 4px;
+ padding-right: .4em;
+ }
+ .kop {
+ font-size:large;
+ font-weight:900;
+ color:#a00;
+ text-shadow: rgba(135,145,135,0.65) 3px 3px 4px;
+ }
+ .left {
+ font-size:xx-small;
+ font-family:sans-serif;
+ margin-top:0px;
+ float: left;
+ width: 53%;
+ }
+ .right {
+ font-size:xx-small;
+ font-family:sans-serif;
+ text-align:right;
+ margin-top:0px;
+ float: right;
+ width: 45%;
+ }
+ img { vertical-align:top; }
+ h1.sub { color:#770; margin-top:2px; }
+ </style>
+ </head>
+ <body class="file">
+ <div>
+<hr class="top"/>
+<span class="big">lug</span>
+<span class="kop">manage TeX Local User Group web pages</span>
+<hr class="bot"/>
+<div class="left">doc generated from the script with <a href="http://www.dekkerdocumenten.nl/unix/doc/gendoc.html">gendoc</a></div>
+<div class="right">bash script, version=3.00</div><div><br/>
+<p>
+<h1>Synopsis</h1>
+<b><a href="../lug">lug</a></b> [options] [lug-code] <p>
+<h4>Options</h4>
+<table><tr><td><pre>-h,--help</pre></td><td>print short help and exit</td></tr><tr><td><pre>-H,--Help</pre></td><td>print full documentation via less and exit</td></tr><tr><td><pre>-V,--version</pre></td><td>print version and exit</td></tr><tr><td><pre>-c,--clean</pre></td><td>remove all files that can be re-created</td></tr><tr><td><pre>-f,--full</pre></td><td>re-create all files</td></tr><tr><td><pre>-s,--sync[=STR]</pre></td><td>synchronize the <b><a href="../lug">lug</a></b> page at <code>www.ntg.nl/STR</code></td></tr><tr><td></td><td>with the current directory; the default for <code>STR</code> is <code>lug</code></td></tr></table><p>
+<h1>Description</h1>
+<b><a href="../lug">lug</a></b> can be used to to (re-)create the web pages of the LUG database. This script must be executed in its own directory. After the script has been executed, this directory will contain the web site for the [Electronic LUG Database](www.ntg.nl/lug). <p>
+If you run <b><a href="../lug">lug</a></b> for the first time, do so in a directory containging the script only; it wil then create all needed files and directories in it. <p>
+Recreate all files: <p>
+<pre> $ lug --full
+</pre>
+<p>
+Apply corrections sent by email: <p>
+<pre> $ lug
+ &lt; paste the email contents to standard input &gt;
+ ^D
+</pre>
+<p>
+When people send new data by using the forms of the site, they do so by submitting the form, which causes an email with raw data to be sent to the administrator(s). <p>
+An administrator should verify the password reported in the email and then cd to this directory, or to a copy of it on his own computer, and he should then run: <p>
+<pre> $ ./lug
+</pre>
+<p>
+<b><a href="../lug">lug</a></b> waits for data, which it can be given by cut (from the email) and paste (to standard input). By ending the input with <code>^D</code>, <b><a href="../lug">lug</a></b> corrects the data in the directory `lugs' <p>
+It is of course also possible to save the contents of the email into a file and then run: <p>
+<pre> $ ./lug &lt;file
+</pre>
+<p>
+The administrator can make small correction to one country by giving the necessary input on the command line. For example, to change the email address of the treasurer of The Netherlands he can run: <p>
+<pre> $ ./lug
+ code=nl
+ femail=treasurer@ntg.nl
+ ^D
+</pre>
+<p>
+Synchronize the website (<code>www.ntg.nl/lug</code>) with the current directory: <p>
+<pre> $ ./lug --sync
+</pre>
+<p>
+Of course, this action makes no sense if you are operating in the web directory itself. <p>
+Or, for testing purposes, synchronize <code>www.ntg.nl/lugtest</code>: <p>
+<pre> $ ./lug --sync=lugtest
+</pre>
+<p>
+or, shorter: <p>
+<pre> $ ./lug -slugtest
+</pre>
+<p>
+Remove everything that can be regenerated: <p>
+<pre> $ ./lug --clean
+</pre>
+<p>
+This stores any changes made in the <code>README.md</code> file, the <code>lugs.rb</code> script, and the <code>images</code> en <code>lugs</code> directories in the script. After this operation only the script will be there, and you can simply restore everything by running it with the <code>--full</code> option. <p>
+Regenerate everything: <pre> $ ./lug --full
+</pre>
+<p>
+<h1>Author</h1>
+<a href="mailto:wybo@ntg.nl">Wybo Dekker</a> <p>
+<h1>Copyright</h1>
+Released under the <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a> <h1>Functions used:</h1><hr/><h1 class="sub">excheck</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>excheck executable1 [executable2...]</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>check if all needed execs are there and getopt is GNU</td></tr></table><hr/><h1 class="sub">syncwww</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>syncwww [dir]</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>synchronize web page (<code>lug</code> by default) with current dir</td></tr><tr><td><pre>globals user:</pre></td><td><pre>webdir</pre>
+</td></tr></table><hr/><h1 class="sub">handle_options</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>handle_options "$@"</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Handle the options</td></tr><tr><td><pre>globals used:</pre></td><td><pre>Myname Version webdir</pre>
+</td></tr></table><hr/><h1 class="sub">setkeys</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>country_codea ;-replacement &amp;-replacement</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Set the <code>keys</code> hash to the values taken from the file <code>lugs/$1</code>.</td></tr><tr><td><pre>globals set:</pre></td><td><pre>keys</pre>
+</td></tr></table><hr/><h1 class="sub">clean</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>clean</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Remove files created but not needed for the web site or for</td></tr><tr><td></td><td><b><a href="../lug">lug</a></b> functioning.</td></tr></table><hr/><h1 class="sub">Clean</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>Clean</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Remove all files that can be re-created and store them back in lug.</td></tr></table><hr/><h1 class="sub">makeMakefile</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>makeMakefile</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Create the file <code>Makefile</code></td></tr><tr><td><pre>globals used:</pre></td><td><pre>db</pre>
+</td></tr></table><hr/><h1 class="sub">makelinks.inc</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>makelinks.inc</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Create the file <code>links.inc</code></td></tr></table><hr/><h1 class="sub">makexx.html</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>makexx country_code</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Create the file <code>lugs/$1</code></td></tr><tr><td><pre>globals set:</pre></td><td>(<i>via</i> setkeys): <code>keys</code></td></tr><tr><td><pre>globals used:</pre></td><td><pre>db keys adminemail</pre>
+</td></tr></table><hr/><h1 class="sub">makeindex.html</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>makeindex.html</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Create the file <code>index.html</code></td></tr><tr><td><pre>globals used:</pre></td><td><pre>db fullname adminemail</pre>
+</td></tr></table><hr/><h1 class="sub">makelugs.html</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>makelugs.html</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Create the file <code>lugs.html</code></td></tr><tr><td><pre>globals set:</pre></td><td>(<i>via</i> setkeys) <code>keys</code></td></tr><tr><td><pre>globals used:</pre></td><td><pre>db keys fullname</pre>
+</td></tr></table><hr/><h1 class="sub">urlit</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>urlit string</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>if argument is not empty, print it surrounded with <code>\url{...}</code>,</td></tr></table><hr/><h1 class="sub">stackit</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>stackit string</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>if argument is empty, print newline,</td></tr><tr><td></td><td>if not, replace semicolons with double backslashes and print it surrounded with <code>\Longunderstack[l]{...}\strut</code></td></tr></table><hr/><h1 class="sub">makelugs.pdf</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>makelugs.pdf</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Create the files <code>lugs.tex</code> and <code>lugs.pdf</code></td></tr><tr><td><pre>globals set:</pre></td><td>(<i>via</i> setkeys) <code>keys</code></td></tr><tr><td><pre>globals used:</pre></td><td><pre>keys db fullname</pre>
+</td></tr></table><hr/><h1 class="sub">makelabels.pdf</h1>
+<table><tr><td><pre>synopsis:</pre></td><td><pre>makelabels.pdf</pre>
+</td></tr><tr><td><pre>description:</pre></td><td>Create the files <code>labels.tex</code> and <code>labels.pdf</code></td></tr><tr><td><pre>globals set:</pre></td><td>(<i>via</i> setkeys) <code>keys</code></td></tr><tr><td><pre>globals used:</pre></td><td><pre>keys db</pre>
+</td></tr></table><hr/><h1 class="sub">fullname (hash)</h1>
+Links the country codes to the full name of countries. Also used to test the validity of country codes. </div></div></body></html>
diff --git a/support/lug/lug.pdf b/support/lug/lug.pdf
index b97bb5d257..b865e9bfb3 100644
--- a/support/lug/lug.pdf
+++ b/support/lug/lug.pdf
Binary files differ
diff --git a/support/lug/lugs.rb b/support/lug/lugs.rb
deleted file mode 100755
index 06b4370097..0000000000
--- a/support/lug/lugs.rb
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/env ruby
-# encoding: UTF-8
-require 'cgi'
-require 'erb'
-require 'open-uri'
-require 'date'
-require 'resolv'
-
-
-# admins to be informed, one per line:
-ADMINS = %w{
- wybo@dekkerdocumenten.nl
-}
-
-RESPONSE = <<EOF
-Content-type: text/html
-
-<%= open(CALLERDIR+"../1blok1e.inc") { |f| f.read } %>
-<%= open(CALLERDIR+"../1blok2e.inc") { |f| f.read } %>
-<h1>TeX user groups around the world</h1>
-<% if errmess.empty? %>
- <h2>Thank you for your support of the LUG database</h2>
- Your corrections will be sent to <%= ADMINS[0] %> for handling.
-<% else %>
- <h3>Sorry, you did not correctly enter the required fields:</h3><br>
- <font color="red">
- <%= errmess.join("<br>") %>
- </font><p>
- <form>Please try again by going
- <input type="button" value="Back" onClick="history.go(-1);return true;">
- </form>
-<% end %>
-<hr noshade>
-</td></tr></table></td></tr></table>
-<%= open(CALLERDIR+"../1blok4e.inc") { |f| f.read } %> <%= DateTime.now %>
-</p></div></body></html>
-EOF
-
-MESS = <<EOF
-password=<%= q['password'] %>
-submitemail=<%= q['submitemail'] %>
-addr=<%= q['addr'] %>
-bacc=<%= q['bacc'] %>
-baddr=<%= q['baddr'] %>
-bank=<%= q['bank'] %>
-bcode=<%= q['bcode'] %>
-brout=<%= q['brout'] %>
-code=<%= q['code'] %>
-editor=<%= q['editor'] %>
-eemail=<%= q['eemail'] %>
-email=<%= q['email'] %>
-faddr=<%= q['faddr'] %>
-femail=<%= q['femail'] %>
-ffax=<%= q['ffax'] %>
-fname=<%= q['fname'] %>
-fphone=<%= q['fphone'] %>
-fpos=<%= q['fpos'] %>
-full=<%= q['full'] %>
-gaddr=<%= q['gaddr'] %>
-gemail=<%= q['gemail'] %>
-gfax=<%= q['gfax'] %>
-gname=<%= q['gname'] %>
-gphone=<%= q['gphone'] %>
-gpos=<%= q['gpos'] %>
-lang=<%= q['lang'] %>
-list=<%= q['list'] %>
-members=<%= q['members'] %>
-paddr=<%= q['paddr'] %>
-pemail=<%= q['pemail'] %>
-pfax=<%= q['pfax'] %>
-pname=<%= q['pname'] %>
-pphone=<%= q['pphone'] %>
-ppos=<%= q['ppos'] %>
-publ=<%= q['publ'] %>
-short=<%= q['short'] %>
-subscr=<%= q['subscr'] %>
-www=<%= q['www'] %>
-country=<%= q['country'] %>
-EOF
-
-def validate_email_domain(email)
- return false unless email =~ /\@(.*)/
- Resolv::DNS.open do |dns|
- @mx = dns.getresources($1, Resolv::DNS::Resource::IN::MX)
- end
- @mx.size > 0 ? true : false
-end
-
-def mail(message,to,code)
- m = open("|/usr/bin/mail -s '===LUG correction for #{code}===' #{to}",'w')
- m.puts message
- m.close
-end
-
-q = CGI.new
-
-CALLERDIR=ENV['HTTP_REFERER'].sub(/[^\/]*$/,'')
-
-errmess = []
-q['password'] == 'kjwb' ||
- errmess.push("You typed the wrong (or no) password")
-validate_email_domain(q['submitemail']) ||
- errmess.push("You must enter a valid email addres")
-
-message = ERB.new(RESPONSE).result
-print message
-
-exit unless errmess.empty?
-message = ERB.new(MESS).result.gsub(/\r\n/,"\n ").strip
-ADMINS.each { |m| mail(message,m,q['code']) }
diff --git a/support/lug/lugs/bg b/support/lug/lugs/bg
deleted file mode 100644
index e419fadca3..0000000000
--- a/support/lug/lugs/bg
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code bg
-short bgTeX
-full Bulgarian LaTeX Users Group
-lang bg
-members 234
-email bulgarian-latex-users-group@googlegroups.com
-www groups.google.com/forum/?hl=bg&fromgroups#!forum/bulgarian-latex-users-group
-list
-subscr
-addr Dept. of Applied Mathematics and Statistics;University of Ruse;8 Studentska str.;Ruse,7017;Bulgaria
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos
-pname
-paddr
-pemail
-pphone
-pfax
-
-# General matters:
-gpos Coordinator
-gname Stefka R. Karakoleva
-gaddr Dept. of Applied Mathematics and Statistics;University of Ruse;8 Studentska str.;Ruse,7017;Bulgaria
-gemail skarakoleva@uni-ruse.bg
-gphone +35982888606
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/br b/support/lug/lugs/br
deleted file mode 100644
index 80f1d73770..0000000000
--- a/support/lug/lugs/br
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code br
-short latex-br
-full Grupo de Usuários latex-br
-lang pt
-members 386
-email
-www groups.google.com/group/latex-br
-list latex-br@googlegroups.com
-subscr latex-br+subscribe@googlegroups.com
-addr
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos Manager
-pname Lauro Cesar
-paddr
-pemail laurocesar@gmail.com
-pphone
-pfax
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/cn b/support/lug/lugs/cn
deleted file mode 100644
index e24fb37891..0000000000
--- a/support/lug/lugs/cn
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code cn
-short CTeX
-full Chinese TeX Society
-lang zh
-members 20000
-email info@ctex.org
-www www.ctex.org
-list
-subscr
-addr No. 55, Zhongguancun East Road;Haidian;Beijing 100080;China
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Lingyun Wu
-paddr No. 55, Zhongguancun East Road;Haidian;Beijing 100080;China
-pemail lywu@amt.ac.cn
-pphone +861062651362
-pfax
-
-# General matters:
-gpos Vice President
-gname Helin Gai
-gaddr Few HH025, Duke University;Box 96332;Durham, NC 27708;USA
-gemail hg9@duke.edu
-gphone +19199436302
-gfax
-
-# Finance matters:
-fpos Vice President
-fname Zhichu Chen
-faddr Shanghai Institute of Applied Physics;Chinese Academy;No. 2019, Jialuo Road;Jiading;Shanghai, 200000;China
-femail zhichu.chen@gmail.com
-fphone +862159553405
-ffax
diff --git a/support/lug/lugs/cz b/support/lug/lugs/cz
deleted file mode 100644
index d7f1257a4e..0000000000
--- a/support/lug/lugs/cz
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code cz
-short CSTUG
-full Československé sdružení uživatelů TeXu
-lang cs
-members 300
-email cstug@cstug.cz
-www www.cstug.cz
-list cstex@cs.felk.cvut.cz
-subscr
-addr CSTUG c/o FEL ČVUT;Technická 2;166 27 Praha;Czech Republic
-
-# Periodical:
-publ Zpravodaj CSTUGu
-editor Zdeněk Wagner
-eemail bulletin@cstug.cz
-
-# Banking:
-bank Fio banka, a.s.
-bacc 2700058974 / 2010
-bcode FIOBCZPPXXX
-brout CZ5620100000002700058974
-baddr V Celnici 1028/10;114 07 Praha 1;Czech Republic
-
-# Policy matters:
-ppos President
-pname Petr Sojka
-paddr Masaryk University;Faculty of Informatics;Botanicka 68a;602 00 Brno;Czech Republic
-pemail president@cstug.cz
-pphone +420 549 496 966
-pfax +420 549 491 820
-
-# General matters:
-gpos Secretary
-gname Dana Čurdová
-gaddr K Babě 19;621 00 Brno;Czech Republic
-gemail secretary@cstug.cz
-gphone +420 775 165 299
-gfax
-
-# Finance matters:
-fpos Treasurer
-fname Dana Čurdová
-faddr K Babě 19;621 00 Brno;Czech Republic
-femail treasurer@cstug.cz
-fphone +420 775 165 299
-ffax
diff --git a/support/lug/lugs/de b/support/lug/lugs/de
deleted file mode 100644
index 631d6eb743..0000000000
--- a/support/lug/lugs/de
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code de
-short DANTE e.V.
-full Deutschsprachige Anwendervereinigung TeX e.V.
-lang de
-members 2150
-email dante@dante.de
-www www.dante.de
-list dante-ev@dante.de
-subscr https://lists.dante.de/mailman/listinfo/dante-ev
-addr Bergheimer Straße 110a;69115 Heidelberg
-
-# Periodical:
-publ Die TeXnische Komödie
-editor Herbert Voß
-eemail dtk-redaktion@dante.de
-
-# Banking:
-bank VR Bank Rhein-Neckar e.G
-bacc 23 100 07
-bcode GENODE61MA2
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Martin Sievers
-paddr Postfach 101840;D-69008 Heidelberg;Germany
-pemail vorstand@dante.de
-pphone +49622129766
-pfax +496221167906
-
-# General matters:
-gpos Secretary
-gname Manfred Lotz
-gaddr
-gemail secretary@dante.de
-gphone
-gfax
-
-# Finance matters:
-fpos Treasurer
-fname Klaus Höppner
-faddr
-femail treasurer@dante.de
-fphone
-ffax
diff --git a/support/lug/lugs/dk b/support/lug/lugs/dk
deleted file mode 100644
index 9f38c897e0..0000000000
--- a/support/lug/lugs/dk
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code dk
-short DK-TUG
-full Danish TeX Users Group
-lang da
-members 96
-email board@tug.dk
-www www.tug.dk
-list dk-tug@tug.dk
-subscr dk-tug-subscribe@tug.dk
-addr
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Lars Madsen
-paddr Department of Mathematical Sciences;Ny Munkegade 118, Bdg. 1530;DK-8000 Aarhus C;Denmark
-pemail president@tug.dk
-pphone +45893170
-pfax
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos Treasurer
-fname Rasmus Villemoes
-faddr Department of Mathematical Sciences;Ny Munkegade 118, Bdg. 1530;DK-8000 Aarhus C;Denmark
-femail treasurer@tug.dk
-fphone
-ffax
diff --git a/support/lug/lugs/ee b/support/lug/lugs/ee
deleted file mode 100644
index 20b11e4cfc..0000000000
--- a/support/lug/lugs/ee
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code ee
-short
-full Estonian User Group
-lang et
-members
-email
-www
-list
-subscr
-addr
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname
-paddr Astrophysical Observatory, Toravere;Enn Saar, Tartu;EE 2444 Estonia
-pemail saar@aai.ee
-pphone
-pfax
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/es b/support/lug/lugs/es
deleted file mode 100644
index 8f80f9dfc9..0000000000
--- a/support/lug/lugs/es
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code es
-short CervanTeX
-full Grupo de Usuarios de TeX Hispanohablantes
-lang es
-members 45
-email secretario@cervantex.es
-www www.cervantex.es
-list es-tex@listserv.rediris.es
-subscr www.cervantex.es/listas.php
-addr
-
-# Periodical:
-publ TeXemplares
-editor Enrique Meléndez
-eemail texemplares@cervantex.es
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos Presidente
-pname Juan L. Varona
-paddr University of La Rioja;26004 Logroño;Spain
-pemail presidente@cervantex.es
-pphone
-pfax
-
-# General matters:
-gpos Secretario
-gname Luis Seidel
-gaddr
-gemail secretario@cervantex.es
-gphone
-gfax
-
-# Finance matters:
-fpos Tesorero
-fname Enrique Meléndez
-faddr
-femail tesorero@cervantex.es
-fphone
-ffax
diff --git a/support/lug/lugs/esc b/support/lug/lugs/esc
deleted file mode 100644
index 9ab205e302..0000000000
--- a/support/lug/lugs/esc
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code esc
-short Tirant lo TeX
-full Catalan TeX Users Group
-lang ca
-members
-email
-www www.lsi.upc.edu/~valiente/tug-catalan.html
-list catala-tex@ldist.upc.edu
-subscr
-addr
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Gabriel Valiente
-paddr Technical University of Catalonia;Jordi Girona, 1-3;E-08034 Barcelona;Spain
-pemail valiente@lsi.upc.edu
-pphone
-pfax
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/fr b/support/lug/lugs/fr
deleted file mode 100644
index 81945a7965..0000000000
--- a/support/lug/lugs/fr
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code fr
-short GUTenberg
-full Groupe francophone des utilisateurs de TeX
-lang fr
-members 400
-email secretariat@gutenberg.eu.org
-www www.gutenberg.eu.org
-list gut@ens.fr
-subscr gut-request@ens.fr
-addr Association GUTenberg;Cellule MathDoc;BP 74;F-38402 Saint-Martin-d’Hères;FRANCE
-
-# Periodical:
-publ Cahiers GUTenberg, Lettre GUTenberg
-editor Thierry Bouche
-eemail secretariat@gutenberg.eu.org
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Jérémy Just
-paddr
-pemail president@gutenberg.eu.org
-pphone
-pfax
-
-# General matters:
-gpos Secretary
-gname Philippe Michel
-gaddr Association GUTenberg;Cellule MathDoc;BP 74;F-38402 Saint-Martin-d’Hères;FRANCE
-gemail secretariat@gutenberg.eu.org
-gphone
-gfax
-
-# Finance matters:
-fpos Treasurer
-fname Maxime Chupin
-faddr
-femail tresorier@gutenberg.eu.org
-fphone
-ffax
diff --git a/support/lug/lugs/gb b/support/lug/lugs/gb
deleted file mode 100644
index ae0eb87b60..0000000000
--- a/support/lug/lugs/gb
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code gb
-short UK-TUG
-full UK TeX Users Group
-lang en-GB
-members 100
-email committee@uk.tug.org
-www uk.tug.org
-list uktug-announce@tug.org
-subscr uk.tug.org/membership/
-addr 2 Dowthorpe End;Earls Barton;Northampton;NN6 0NH
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos Chairman
-pname Kaveh Barzagan
-paddr
-pemail chairman@uk.tug.org
-pphone
-pfax
-
-# General matters:
-gpos Secretary
-gname Joseph Wright
-gaddr UK-TUG Secretary;2 Dowthorpe End;Earls Barton;Northampton;NN6 0NH
-gemail secretary@uk.tug.org
-gphone
-gfax
-
-# Finance matters:
-fpos Treasurer
-fname John Peters
-faddr
-femail treasurer@uk.tug.org
-fphone
-ffax
diff --git a/support/lug/lugs/hu b/support/lug/lugs/hu
deleted file mode 100644
index 199fdb6360..0000000000
--- a/support/lug/lugs/hu
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code hu
-short MaTeX
-full Magyar TeX Egyesület
-lang hu
-members 15
-email matex@math.klte.hu
-www www.matexhu.org
-list tex-l@tigris.klte.hu
-subscr www.math.klte.hu/~matex/LevLista.html
-addr Inst of Mathematics and Informatics;University of Debrecen;H-4010 Debrecen;P.O. Box 12;Hungary
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Ferenc Wettl
-paddr Department of Algebra;Institute of Mathematics;Budapest University of Technology and Economics;Budapest, Műegyetem rakpart 1--3, H. ép. V. 5.;Hungary
-pemail wettl@math.bme.hu
-pphone
-pfax
-
-# General matters:
-gpos Secretary
-gname Gyöngyi Bujdosó
-gaddr Faculty of Computer Science;University of Debrecen;H-4010 Debrecen;P.O. Box 12;Hungary
-gemail bujdoso@inf.unideb.hu
-gphone +36304280403
-gfax +3652416857
-
-# Finance matters:
-fpos Board member
-fname Tamás Mihálydeák
-faddr Faculty of Computer Science;University of Debrecen;H-4010 Debrecen;P.O. Box 12;Hungary
-femail mihalydeak@inf.unideb.hu
-fphone
-ffax
diff --git a/support/lug/lugs/ie b/support/lug/lugs/ie
deleted file mode 100644
index b044436212..0000000000
--- a/support/lug/lugs/ie
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code ie
-short ITALIC
-full Irish TeX and LaTeX In-print Community
-lang en-GB en-IE
-members
-email italic-l-request@listserv.heanet.ie
-www
-list ITALIC-L@listserv.heanet.ie
-subscr listserv.heanet.ie/italic-l.html
-addr
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos
-pname
-paddr
-pemail
-pphone
-pfax
-
-# General matters:
-gpos
-gname Peter Flynn
-gaddr Computer Centre;University College;Cork;Ireland
-gemail peter@silmaril.ie
-gphone +353 21 490 2609
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/is b/support/lug/lugs/is
deleted file mode 100644
index ede9b8e7e8..0000000000
--- a/support/lug/lugs/is
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code is
-short ÍsTeX
-full Vefur íslenskra TeX notenda
-lang is
-members 90
-email
-www istex.hafro.is
-list
-subscr
-addr
-
-# Periodical:
-publ SamanTeXt
-editor Árni Magnússon
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos
-pname Árni Magnússon
-paddr Öldugötu 28;101 Reykjavík;Iceland
-pemail arnima@hafro.is
-pphone
-pfax
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/it b/support/lug/lugs/it
deleted file mode 100644
index 817673a8dc..0000000000
--- a/support/lug/lugs/it
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code it
-short GuIT
-full Gruppo Utilizzatori Italiani di TeX
-lang it
-members 111
-email guit@sssup.it
-www www.guit.sssup.it
-list
-subscr
-addr c/o Ufficio Statistica;Sant'Anna School of Advanced Studies;Piazza Martiri della Libertà, 33;56127 Pisa;Italy
-
-# Periodical:
-publ Ars TeXnica
-editor Gianluca Pignalberi
-eemail arstexnica@sssup.it
-
-# Banking:
-bank Banco Posta
-bacc 74922279
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Massimiliano Dominici
-paddr
-pemail mlgdominici@interfree.it
-pphone +39 050 44538
-pfax
-
-# General matters:
-gpos Vice-president
-gname Lapo Filippo Mori
-gaddr
-gemail lapo.mori@gmail.com
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname Maurizio Himmelmann
-faddr
-femail guit@sssup.it
-fphone
-ffax
diff --git a/support/lug/lugs/kr b/support/lug/lugs/kr
deleted file mode 100644
index 770674ad59..0000000000
--- a/support/lug/lugs/kr
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code kr
-short KTS or KTUG
-full Korean TeX Society
-lang ko
-members 200
-email info@mail.ktug.or.kr
-www www.ktug.org/xe
-list
-subscr
-addr Department of Law;Dongguk University;26, 3-ga, Pil-dong;Chung-gu;Seoul 100-715;Republic of Korea
-
-# Periodical:
-publ The Asian Journal of TeX
-editor Jin-Hwan Cho
-eemail chofchof@ktug.or.kr
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos president
-pname In-Sung Cho
-paddr Dept. of Economics;Kongju National University;182 Shinkwan Dong;Gongju 314-701;Korea
-pemail ischo@ktug.or.kr
-pphone +82-41-850-8439
-pfax +82-41-850-8440
-
-# General matters:
-gpos vice-president
-gname Kangsoo Kim
-gaddr
-gemail karnes@ktug.or.kr
-gphone
-gfax
-
-# Finance matters:
-fpos treasurer
-fname Dohyun Kim
-faddr Department of Law;Dongguk University;26, 3-ga, Pil-dong;Chung-gu;Seoul 100-715;Republic of Korea
-femail nomos@ktug.or.kr
-fphone +82-2-2260-3257
-ffax
diff --git a/support/lug/lugs/lt b/support/lug/lugs/lt
deleted file mode 100644
index 7898a45ce8..0000000000
--- a/support/lug/lugs/lt
+++ /dev/null
@@ -1,47 +0,0 @@
- General:
-code lt
-short
-full Lietuvos TeX'o Vartotojų Grupė
-lang lt
-members 8
-email
-www www.vtex.lt/tex/
-list
-subscr
-addr
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Vytas Statulevičius
-paddr Akademijos 4;LT-2600 Vilnius;Lithuania
-pemail vytass@ktl.mii.lt
-pphone +3702359609
-pfax +3702359804
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/mx b/support/lug/lugs/mx
deleted file mode 100644
index 9f888e8b89..0000000000
--- a/support/lug/lugs/mx
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code mx
-short
-full TeX México
-lang es
-members
-email tex@linuxopensource.mx
-www
-list
-subscr
-addr
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos Coordinator
-pname Cuauhtémoc Pacheco Díaz
-paddr Privada Junta de Zitacuaro No. 20;Col. Isaac Arriaga;58210 Morelia, Michoacan;Mexico
-pemail temo@ibiblio.org
-pphone +524431323263
-pfax +52143173945
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/nl b/support/lug/lugs/nl
deleted file mode 100644
index 21f5fe7407..0000000000
--- a/support/lug/lugs/nl
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code nl
-short NTG
-full Nederlandstalige TeX Gebruikersgroep
-lang nl
-members 195
-email info@ntg.nl
-www www.ntg.nl
-list tex-nl@ntg.nl
-subscr www.ntg.nl/mailman/listinfo/tex-nl
-addr
-
-# Periodical:
-publ MAPS
-editor Michael Guravage
-eemail maps@ntg.nl
-
-# Banking:
-bank ING
-bacc 1306238
-bcode INGBNL2A
-brout NL53INGB0001306238
-baddr
-
-# Policy matters:
-ppos President
-pname Hans Hagen
-paddr Pragma;Ridderstraat 27;8061 GH Hasselt;The Netherlands
-pemail ntg-president@ntg.nl
-pphone +31384775369
-pfax
-
-# General matters:
-gpos Secretary
-gname Sietse Brouwer
-gaddr Korte Langestraat 2;2312 SK Leiden;The Netherlands
-gemail ntg-secretary@ntg.nl
-gphone +31613456848
-gfax
-
-# Finance matters:
-fpos Treasurer
-fname Ferdy Hanssen
-faddr Helmondstraat 212;6843 SL Arnhem;The Netherlands
-femail treasurer@ntg.nl
-fphone +31263890579
-ffax
diff --git a/support/lug/lugs/no b/support/lug/lugs/no
deleted file mode 100644
index 3691ff9c0b..0000000000
--- a/support/lug/lugs/no
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code no
-short
-full Nordic TeX Users Group
-lang da et fi fo is nb nn sv
-members 78
-email
-www heim.ifi.uio.no/~dag/ntug/
-list nordictex@ifi.uio.no
-subscr
-addr
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Dag Langmyhr
-paddr University of Oslo;PO Box 1080 Blindern;N-0316 Oslo;Norway
-pemail dag@ifi.uio.no
-pphone +4722852450
-pfax +4722852401
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/pl b/support/lug/lugs/pl
deleted file mode 100644
index fb21763b04..0000000000
--- a/support/lug/lugs/pl
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code pl
-short GUST
-full Polska Grupa Użytkowników Systemu TeX
-lang pl
-members 276
-email sekretariat@gust.org.pl
-www www.GUST.org.pl
-list gust-l@man.torun.pl
-subscr
-addr Pl. Rapackiego 1;PL-87-100 Toruń;Poland
-
-# Periodical:
-publ Biuletyn GUST
-editor Tomasz Przechlewski
-eemail ekotp@univ.gda.pl
-
-# Banking:
-bank BIG Bank Gdański SA, Oddział Millenium, Toruń
-bacc 80 11602202 0000 0000 5530 4981
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Jerzy Ludwichowski
-paddr Information & Communication Technology Centre;Nicolaus Copernicus University;Pl. Rapackiego 1;PL-87-100 Toruń;Poland
-pemail prezes@gust.org.pl
-pphone +48 56 6112742
-pfax +48 56 6221850
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos Treasurer
-fname Jolanta Szelatyńska
-faddr Information & Communication Technology Centre;Nicolaus Copernicus University;Pl. Rapackiego 1;PL-87-100 Toruń;Poland
-femail secretary@gust.org.pl
-fphone +48 56 6112741
-ffax +48 56 6221850
diff --git a/support/lug/lugs/pt b/support/lug/lugs/pt
deleted file mode 100644
index e47f40dfcc..0000000000
--- a/support/lug/lugs/pt
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code pt
-short GUTpt
-full Grupo de Utilizadores de TeX
-lang pt
-members
-email
-www gentzen.mat.uc.pt/~gutpt/
-list gutpt@gentzen.mat.uc.pt
-subscr
-addr
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Pedro Quaresma de Almeida
-paddr Coimbra Univ., Dep. Matemática;Largo D. Dinis;Apartado 3008;3001-454 COIMBRA;Portugal
-pemail pedro@mat.uc.pt
-pphone +351239791181
-pfax
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/us b/support/lug/lugs/us
deleted file mode 100644
index 52c3a50ed4..0000000000
--- a/support/lug/lugs/us
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code us
-short TUG
-full TeX Users Group
-lang
-members 1400
-email office@tug.org
-www www.tug.org
-list texhax@tug.org
-subscr
-addr
-
-# Periodical:
-publ TUGboat
-editor Barbara Beeton
-eemail TUGboat@tug.org
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Kaveh Bazargan
-paddr P.O. Box 2311;Portland, OR 97208;USA
-pemail president@tug.org
-pphone +15032239994
-pfax +18153013568
-
-# General matters:
-gpos Secretary
-gname Sue DeMeritt
-gaddr
-gemail secretary@tug.org
-gphone
-gfax
-
-# Finance matters:
-fpos Treasurer
-fname Klaus Hoeppner
-faddr
-femail treasurer@tug.org
-fphone
-ffax
diff --git a/support/lug/lugs/vn b/support/lug/lugs/vn
deleted file mode 100644
index fdede23266..0000000000
--- a/support/lug/lugs/vn
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code vn
-short VietTUG
-full Vietnamese TeX Users Group
-lang vi
-members 450
-email viettug@gmail.com
-www viettug.org
-list
-subscr
-addr 102 Hùng Vương Street;Tam Kỳ City;Quảng Nam Province;Việt Nam
-
-# Periodical:
-publ
-editor
-eemail
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos manager
-pname Huỳnh Kỳ Anh
-paddr Dept of Maths and Informatics;University of Quảng Nam;102 Hùng Vương Street;Tam Kỳ City;Quảng Nam Province;Việt Nam
-pemail xkyanh@gmail.com
-pphone 840979460150
-pfax
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax
diff --git a/support/lug/lugs/za b/support/lug/lugs/za
deleted file mode 100644
index d7dfe1bb0a..0000000000
--- a/support/lug/lugs/za
+++ /dev/null
@@ -1,47 +0,0 @@
-# General:
-code za
-short LUGSA
-full LaTeX User Group - South Africa
-lang en
-members
-email
-www
-list latex@mailman.compudoc.co.za
-subscr mailman.compudoc.co.za/mailman/listinfo/latex
-addr
-
-# Periodical:
-publ LaTeX2e presentation
-editor Stefan Scriba
-eemail scribas@gmail.com
-
-# Banking:
-bank
-bacc
-bcode
-brout
-baddr
-
-# Policy matters:
-ppos President
-pname Stefan Scriba
-paddr 257 Loveday St;Muckleneuk;Pretoria 0002;South Africa
-pemail scribas@gmail.com
-pphone +27727061494
-pfax
-
-# General matters:
-gpos
-gname
-gaddr
-gemail
-gphone
-gfax
-
-# Finance matters:
-fpos
-fname
-faddr
-femail
-fphone
-ffax