summaryrefslogtreecommitdiff
path: root/support/lug
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/lug
Initial commit
Diffstat (limited to 'support/lug')
-rw-r--r--support/lug/README12
-rw-r--r--support/lug/images/bg.pngbin0 -> 237 bytes
-rw-r--r--support/lug/images/br.pngbin0 -> 1163 bytes
-rw-r--r--support/lug/images/cn.pngbin0 -> 529 bytes
-rw-r--r--support/lug/images/cz.pngbin0 -> 412 bytes
-rw-r--r--support/lug/images/de.pngbin0 -> 231 bytes
-rw-r--r--support/lug/images/dk.pngbin0 -> 306 bytes
-rw-r--r--support/lug/images/ee.pngbin0 -> 188 bytes
-rw-r--r--support/lug/images/es.pngbin0 -> 570 bytes
-rw-r--r--support/lug/images/esc.pngbin0 -> 992 bytes
-rw-r--r--support/lug/images/fr.pngbin0 -> 240 bytes
-rw-r--r--support/lug/images/gb.pngbin0 -> 1570 bytes
-rw-r--r--support/lug/images/hu.pngbin0 -> 194 bytes
-rw-r--r--support/lug/images/ie.pngbin0 -> 239 bytes
-rw-r--r--support/lug/images/in.pngbin0 -> 440 bytes
-rw-r--r--support/lug/images/is.pngbin0 -> 328 bytes
-rw-r--r--support/lug/images/it.pngbin0 -> 241 bytes
-rw-r--r--support/lug/images/kr.pngbin0 -> 1183 bytes
-rw-r--r--support/lug/images/lt.pngbin0 -> 236 bytes
-rw-r--r--support/lug/images/mx.pngbin0 -> 597 bytes
-rw-r--r--support/lug/images/nl.pngbin0 -> 242 bytes
-rw-r--r--support/lug/images/no.pngbin0 -> 413 bytes
-rw-r--r--support/lug/images/pl.pngbin0 -> 242 bytes
-rw-r--r--support/lug/images/pt.pngbin0 -> 697 bytes
-rw-r--r--support/lug/images/ru.pngbin0 -> 236 bytes
-rw-r--r--support/lug/images/si.pngbin0 -> 577 bytes
-rw-r--r--support/lug/images/us.pngbin0 -> 915 bytes
-rw-r--r--support/lug/images/vn.pngbin0 -> 556 bytes
-rw-r--r--support/lug/images/za.pngbin0 -> 1045 bytes
-rwxr-xr-xsupport/lug/lug1213
-rw-r--r--support/lug/lug.pdfbin0 -> 51001 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
57 files changed, 2510 insertions, 0 deletions
diff --git a/support/lug/README b/support/lug/README
new file mode 100644
index 0000000000..704454f5a6
--- /dev/null
+++ b/support/lug/README
@@ -0,0 +1,12 @@
+ 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/images/bg.png b/support/lug/images/bg.png
new file mode 100644
index 0000000000..2cf4b55118
--- /dev/null
+++ b/support/lug/images/bg.png
Binary files differ
diff --git a/support/lug/images/br.png b/support/lug/images/br.png
new file mode 100644
index 0000000000..d6b9d62dd2
--- /dev/null
+++ b/support/lug/images/br.png
Binary files differ
diff --git a/support/lug/images/cn.png b/support/lug/images/cn.png
new file mode 100644
index 0000000000..c47a2dc100
--- /dev/null
+++ b/support/lug/images/cn.png
Binary files differ
diff --git a/support/lug/images/cz.png b/support/lug/images/cz.png
new file mode 100644
index 0000000000..0b9083da67
--- /dev/null
+++ b/support/lug/images/cz.png
Binary files differ
diff --git a/support/lug/images/de.png b/support/lug/images/de.png
new file mode 100644
index 0000000000..8671ca659f
--- /dev/null
+++ b/support/lug/images/de.png
Binary files differ
diff --git a/support/lug/images/dk.png b/support/lug/images/dk.png
new file mode 100644
index 0000000000..8a4e1295e7
--- /dev/null
+++ b/support/lug/images/dk.png
Binary files differ
diff --git a/support/lug/images/ee.png b/support/lug/images/ee.png
new file mode 100644
index 0000000000..e566845f54
--- /dev/null
+++ b/support/lug/images/ee.png
Binary files differ
diff --git a/support/lug/images/es.png b/support/lug/images/es.png
new file mode 100644
index 0000000000..7301563cd9
--- /dev/null
+++ b/support/lug/images/es.png
Binary files differ
diff --git a/support/lug/images/esc.png b/support/lug/images/esc.png
new file mode 100644
index 0000000000..ad9639a19c
--- /dev/null
+++ b/support/lug/images/esc.png
Binary files differ
diff --git a/support/lug/images/fr.png b/support/lug/images/fr.png
new file mode 100644
index 0000000000..cb7597c9e9
--- /dev/null
+++ b/support/lug/images/fr.png
Binary files differ
diff --git a/support/lug/images/gb.png b/support/lug/images/gb.png
new file mode 100644
index 0000000000..7e6569780d
--- /dev/null
+++ b/support/lug/images/gb.png
Binary files differ
diff --git a/support/lug/images/hu.png b/support/lug/images/hu.png
new file mode 100644
index 0000000000..29ff7f06f8
--- /dev/null
+++ b/support/lug/images/hu.png
Binary files differ
diff --git a/support/lug/images/ie.png b/support/lug/images/ie.png
new file mode 100644
index 0000000000..66fcecc2e5
--- /dev/null
+++ b/support/lug/images/ie.png
Binary files differ
diff --git a/support/lug/images/in.png b/support/lug/images/in.png
new file mode 100644
index 0000000000..f1b1dffffb
--- /dev/null
+++ b/support/lug/images/in.png
Binary files differ
diff --git a/support/lug/images/is.png b/support/lug/images/is.png
new file mode 100644
index 0000000000..624c4363bb
--- /dev/null
+++ b/support/lug/images/is.png
Binary files differ
diff --git a/support/lug/images/it.png b/support/lug/images/it.png
new file mode 100644
index 0000000000..f1d46d2ffb
--- /dev/null
+++ b/support/lug/images/it.png
Binary files differ
diff --git a/support/lug/images/kr.png b/support/lug/images/kr.png
new file mode 100644
index 0000000000..398dcfd7b8
--- /dev/null
+++ b/support/lug/images/kr.png
Binary files differ
diff --git a/support/lug/images/lt.png b/support/lug/images/lt.png
new file mode 100644
index 0000000000..7cd1c3074c
--- /dev/null
+++ b/support/lug/images/lt.png
Binary files differ
diff --git a/support/lug/images/mx.png b/support/lug/images/mx.png
new file mode 100644
index 0000000000..2dda6bd6a8
--- /dev/null
+++ b/support/lug/images/mx.png
Binary files differ
diff --git a/support/lug/images/nl.png b/support/lug/images/nl.png
new file mode 100644
index 0000000000..859d07fc6d
--- /dev/null
+++ b/support/lug/images/nl.png
Binary files differ
diff --git a/support/lug/images/no.png b/support/lug/images/no.png
new file mode 100644
index 0000000000..4b2b9b5cd3
--- /dev/null
+++ b/support/lug/images/no.png
Binary files differ
diff --git a/support/lug/images/pl.png b/support/lug/images/pl.png
new file mode 100644
index 0000000000..f041b30050
--- /dev/null
+++ b/support/lug/images/pl.png
Binary files differ
diff --git a/support/lug/images/pt.png b/support/lug/images/pt.png
new file mode 100644
index 0000000000..4f9f05036f
--- /dev/null
+++ b/support/lug/images/pt.png
Binary files differ
diff --git a/support/lug/images/ru.png b/support/lug/images/ru.png
new file mode 100644
index 0000000000..fd85c27c37
--- /dev/null
+++ b/support/lug/images/ru.png
Binary files differ
diff --git a/support/lug/images/si.png b/support/lug/images/si.png
new file mode 100644
index 0000000000..2fe404ff41
--- /dev/null
+++ b/support/lug/images/si.png
Binary files differ
diff --git a/support/lug/images/us.png b/support/lug/images/us.png
new file mode 100644
index 0000000000..8c5cbe575e
--- /dev/null
+++ b/support/lug/images/us.png
Binary files differ
diff --git a/support/lug/images/vn.png b/support/lug/images/vn.png
new file mode 100644
index 0000000000..14e4fa054c
--- /dev/null
+++ b/support/lug/images/vn.png
Binary files differ
diff --git a/support/lug/images/za.png b/support/lug/images/za.png
new file mode 100644
index 0000000000..f314d6088e
--- /dev/null
+++ b/support/lug/images/za.png
Binary files differ
diff --git a/support/lug/lug b/support/lug/lug
new file mode 100755
index 0000000000..bd1e2c4950
--- /dev/null
+++ b/support/lug/lug
@@ -0,0 +1,1213 @@
+#!/bin/bash
+
+version=2.02
+myname=$(basename $0)
+
+<<'DOC'
+= lug - create and edit 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
+
+= 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}.
+
+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|.
+
+The |lugs.rb| script must be moved to the |cgi-bin| directory.
+
+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=wybo@dekkerdocumenten.nl
+ ^D
+
+Synchronize the website (|www.ntg.nl/lug|) with the current directory:
+
+ ./lug --sync
+
+Or, for testing purposes, synchronize |www.ntg.nl/lugtest|:
+
+ ./lug --sync=lugtest
+
+or, shorter:
+
+ ./lug -slugtest
+
+Remove everything that can be regenerated:
+
+ lug --clean
+
+Regenerate everything:
+
+ lug --full
+
+= 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}
+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
+ }
+
+Nor='\e[0m' # reset color ]
+Err='\e[31;1m' # light red ]
+War='\e[35;1m' # light magenta ]
+
+
+<<'DOC' #------ function setkeys -----------------------------------------------
+= setkeys
+parameters: 1: country code
+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
+ [[ $k = '' || $k =~ ^# ]] && continue
+ [[ $k =~ addr$ ]] && v=${v//;/$2}
+ keys["$k"]="${v//&/$3}"
+ done <lugs/$1
+}
+
+<<'DOC' #------ function clean -------------------------------------------------
+= clean
+parameters: -
+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
+}
+
+<<'DOC' #------ function Clean -------------------------------------------------
+= Clean
+parameters: -
+description: Remove all files that can be re-created.
+globals set: -
+globals used: -
+returns: 0
+DOC
+#-------------------------------------------------------------------------------
+Clean() {
+ clean
+ rm -f *.html labels.* lugs.{html,pdf,tex} \
+ links.inc utf82html
+}
+
+<<'DOC' #------ function makeMakefile ------------------------------------------
+= makeMakefile
+parameters: -
+description: Create the file |Makefile|
+globals set: -
+globals used: db
+returns: 0
+DOC
+#-------------------------------------------------------------------------------
+makeMakefile() {
+ local i
+ cat<<EOF |sed 's/\t//' > Makefile
+ BASEFILES = $(for i in ${db[@]}; do echo -n lugs/$i' '; done)
+
+ .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)
+ labels.pdf: \$(BASEFILES)
+ ./lug --extras=labels.pdf
+
+ lugs.pdf: \$(BASEFILES)
+ ./lug --extras=lugs.pdf
+
+ lugs.html: \$(BASEFILES)
+ ./lug --extras=lugs.html
+
+ index.html: \$(BASEFILES)
+ ./lug --extras=index.html
+
+ links.inc: \$(BASEFILES)
+ ./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
+}
+
+<<'DOC' #------ function makelinks.inc -----------------------------------------
+= makelinks.inc
+parameters: -
+description: Create the file |links.inc|
+globals set: -
+globals used: -
+returns: 0
+DOC
+#-------------------------------------------------------------------------------
+makelinks.inc() {
+ local i
+ 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 -------------------------------------------
+= makexx.html
+parameters: 1: 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;'
+ 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
+}
+
+<<'DOC' #------ function makeindex.html ----------------------------------------
+= makeindex.html
+parameters: -
+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.
+ <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
+ <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.
+ </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>
+ </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
+}
+
+<<'DOC' #------ function makelugs.html -----------------------------------------
+= makelugs.html
+parameters: -
+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.
+ <p>
+ 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>
+ <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>"
+ done
+ cat <<-EOF
+ </strong>
+ <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
+ 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
+ else
+ keep=false # not a content line, so set keep false
+ fi
+ echo "$l"
+ done |
+ tac |
+ utf82html >lugs.html
+}
+
+<<'DOC' #------ function makelugs.pdf ------------------------------------------
+= makelugs.pdf
+parameters: -
+description: Create the files |lug.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
+ \documentclass[10pt]{article}
+ \usepackage[a4paper,margin=25mm]{geometry}
+ \usepackage{textcomp}
+ \usepackage{fontspec}
+ \usepackage{url}
+ \usepackage[usestackEOL]{stackengine}
+ \setcounter{secnumdepth}{0}
+ \renewcommand{\-}{\discretionary{}{}{}}
+ \newenvironment{mylist}{%
+ \begin{list}{}{%
+ \itemsep.5ex\parsep0pt\leftmargin25mm\labelwidth25mm
+ \renewcommand{\makelabel}[1]{\hfill\emph{##1:}}
+ }}{\end{list}
+ }
+ \def\head#1#2{\vfill\item[\bfseries\large\upshape #1] {\Large\bfseries\upshape
+ #2}\nopagebreak}
+ \def\subhead#1{\\{\bfseries\upshape #1:}}
+ \begin{document}\fontspec{FreeSans}
+ EOF
+ for lug in ${db[@]}; do
+ setkeys $lug '\\' '\&'
+ cat <<-EOF
+ \begin{mylist}
+ \head{$lug}{${fullname[$lug]}}
+ \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[discussion list]${keys[list]}
+ \item[subscribe at] ${keys[subscr]}
+ \item[address] ${keys[addr]:+$(echo "\\Longunderstack[l]{${keys[addr]//;/\\\\}\\strut}")}
+
+ \subhead{Periodical}
+ \item[title] ${keys[publ]}
+ \item[editor] ${keys[editor]}
+ \item[editor email] ${keys[eemail]:+$(echo "\\url{${keys[eemail]}}")}
+
+ \subhead{Banking}
+ \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}")}
+
+ \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]}
+
+ \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]}
+
+ \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]}
+
+ \end{mylist}
+ EOF
+ done
+ echo '\end{document}'
+ } |
+ sed '/^\\item\[.*\] *$/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
+ else
+ keep=false # not a content line, so set keep false
+ fi
+ echo "$l"
+ done |
+ tac >lugs.tex
+ mk --noprint --noview lugs.tex &&
+ mk -c lugs.tex ||
+ die "Problems compiling lugs.tex"
+}
+
+<<'DOC' #------ function makelabels.pdf ----------------------------------------
+= makelabels.pdf
+parameters: -
+description: Create the file |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
+ \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"
+ done
+ echo '\end{labels}\end{document}'
+ } >labels.tex
+ mk --noprint --noview labels.tex &&
+ mk -c labels.tex ||
+ die "Problems compiling labels.tex"
+}
+
+<<'DOC' #----------- fullname -----------------------------
+= 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'
+ [ae]='United Arab Emirates' [kz]='Kazakhstan'
+ [af]='Afghanistan' [la]='Laos'
+ [ag]='Antigua and Barbuda' [lb]='Lebanon'
+ [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'
+ [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'
+ [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'
+ [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'
+ [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'
+ [kn]='St Kitts and Nevis' [yu]='Yugoslavia'
+ [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
+#----------------------------------------------------------
+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" " ")
+
+<<'DOC' #------------- admin ------------------------------
+= admin (string)
+Contains the user name of the lug administrator at www.ntg.nl
+DOC
+#----------------------------------------------------------
+admin=wybo
+
+<<'DOC' #------------- adminemail -------------------------
+= adminemail (string)
+Contains the email address that should receive corrections
+from the web site.
+DOC
+#----------------------------------------------------------
+adminemail=wybo@dekkerdocumenten.nl
+
+# =============== 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
+done
+
+if [ -n "$1" ]; then
+ for i in "$@"; do
+ makexx.html $i
+ done
+ exit
+fi
+
+in=false
+echo waiting for input...
+while IFS='' read line; do
+ [[ -z $line ]] && continue # skip empty lines
+ 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
+ inp[$k]="$v"
+ 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
+
+cat <<-EOF >new
+ # 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]}
+
+ # Periodical:
+ publ ${keys[publ]}
+ editor ${keys[editor]}
+ eemail ${keys[eemail]}
+
+ # Banking:
+ bank ${keys[bank]}
+ bacc ${keys[bacc]}
+ bcode ${keys[bcode]}
+ brout ${keys[brout]}
+ baddr ${keys[baddr]}
+
+ # Policy matters:
+ ppos ${keys[ppos]}
+ pname ${keys[pname]}
+ paddr ${keys[paddr]}
+ pemail ${keys[pemail]}
+ pphone ${keys[pphone]}
+ pfax ${keys[pfax]}
+
+ # General matters:
+ gpos ${keys[gpos]}
+ gname ${keys[gname]}
+ gaddr ${keys[gaddr]}
+ gemail ${keys[gemail]}
+ gphone ${keys[gphone]}
+ gfax ${keys[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
+done
diff --git a/support/lug/lug.pdf b/support/lug/lug.pdf
new file mode 100644
index 0000000000..b97bb5d257
--- /dev/null
+++ b/support/lug/lug.pdf
Binary files differ
diff --git a/support/lug/lugs.rb b/support/lug/lugs.rb
new file mode 100755
index 0000000000..06b4370097
--- /dev/null
+++ b/support/lug/lugs.rb
@@ -0,0 +1,110 @@
+#!/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
new file mode 100644
index 0000000000..e419fadca3
--- /dev/null
+++ b/support/lug/lugs/bg
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..80f1d73770
--- /dev/null
+++ b/support/lug/lugs/br
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..e24fb37891
--- /dev/null
+++ b/support/lug/lugs/cn
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..d7f1257a4e
--- /dev/null
+++ b/support/lug/lugs/cz
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..631d6eb743
--- /dev/null
+++ b/support/lug/lugs/de
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..9f38c897e0
--- /dev/null
+++ b/support/lug/lugs/dk
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..20b11e4cfc
--- /dev/null
+++ b/support/lug/lugs/ee
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..8f80f9dfc9
--- /dev/null
+++ b/support/lug/lugs/es
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..9ab205e302
--- /dev/null
+++ b/support/lug/lugs/esc
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..81945a7965
--- /dev/null
+++ b/support/lug/lugs/fr
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..ae0eb87b60
--- /dev/null
+++ b/support/lug/lugs/gb
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..199fdb6360
--- /dev/null
+++ b/support/lug/lugs/hu
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..b044436212
--- /dev/null
+++ b/support/lug/lugs/ie
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..ede9b8e7e8
--- /dev/null
+++ b/support/lug/lugs/is
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..817673a8dc
--- /dev/null
+++ b/support/lug/lugs/it
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..770674ad59
--- /dev/null
+++ b/support/lug/lugs/kr
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..7898a45ce8
--- /dev/null
+++ b/support/lug/lugs/lt
@@ -0,0 +1,47 @@
+ 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
new file mode 100644
index 0000000000..9f888e8b89
--- /dev/null
+++ b/support/lug/lugs/mx
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..21f5fe7407
--- /dev/null
+++ b/support/lug/lugs/nl
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..3691ff9c0b
--- /dev/null
+++ b/support/lug/lugs/no
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..fb21763b04
--- /dev/null
+++ b/support/lug/lugs/pl
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..e47f40dfcc
--- /dev/null
+++ b/support/lug/lugs/pt
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..52c3a50ed4
--- /dev/null
+++ b/support/lug/lugs/us
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..fdede23266
--- /dev/null
+++ b/support/lug/lugs/vn
@@ -0,0 +1,47 @@
+# 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
new file mode 100644
index 0000000000..d7dfe1bb0a
--- /dev/null
+++ b/support/lug/lugs/za
@@ -0,0 +1,47 @@
+# 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