You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(132) |
Jul
(50) |
Aug
(172) |
Sep
(87) |
Oct
|
Nov
(1) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(39) |
Oct
(2) |
Nov
|
Dec
|
2004 |
Jan
(47) |
Feb
|
Mar
(11) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
(9) |
Nov
|
Dec
|
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
From: Egon W. <eg...@us...> - 2003-09-26 19:28:43
|
Update of /cvsroot/woc/woc2/source/publish In directory sc8-pr-cvs1:/tmp/cvs-serv22051/publish Added Files: .cvsignore Log Message: Added .cvsignore to ignore autogenerated autotools files --- NEW FILE: .cvsignore --- configure Makefile Makefile.in |
From: Egon W. <eg...@us...> - 2003-09-26 19:28:43
|
Update of /cvsroot/woc/woc2/source/manuals In directory sc8-pr-cvs1:/tmp/cvs-serv22051/manuals Added Files: .cvsignore Log Message: Added .cvsignore to ignore autogenerated autotools files --- NEW FILE: .cvsignore --- configure Makefile Makefile.in |
From: Egon W. <eg...@us...> - 2003-09-26 19:28:43
|
Update of /cvsroot/woc/woc2/source/manuals/maint In directory sc8-pr-cvs1:/tmp/cvs-serv22051/manuals/maint Added Files: .cvsignore Log Message: Added .cvsignore to ignore autogenerated autotools files --- NEW FILE: .cvsignore --- configure Makefile Makefile.in |
From: Egon W. <eg...@us...> - 2003-09-26 19:28:43
|
Update of /cvsroot/woc/woc2/source In directory sc8-pr-cvs1:/tmp/cvs-serv22051 Modified Files: .cvsignore Added Files: VERSION Log Message: Added .cvsignore to ignore autogenerated autotools files --- NEW FILE: VERSION --- 20030926 Index: .cvsignore =================================================================== RCS file: /cvsroot/woc/woc2/source/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** .cvsignore 26 Sep 2003 19:19:29 -0000 1.1 --- .cvsignore 26 Sep 2003 19:28:28 -0000 1.2 *************** *** 1,4 **** --- 1,6 ---- aclocal.m4 autom4te.cache + config.log + config.status configure Makefile |
Update of /cvsroot/woc/woc2/source In directory sc8-pr-cvs1:/tmp/cvs-serv19995 Added Files: .cvsignore AUTHORS COPYING ChangeLog INSTALL NEWS README bootstrap install-sh missing mkinstalldirs Log Message: Files to make a dist --- NEW FILE: .cvsignore --- aclocal.m4 autom4te.cache configure Makefile Makefile.in --- NEW FILE: AUTHORS --- Egon Willighagen Geert Josten --- NEW FILE: COPYING --- All software is licensed GPL. --- NEW FILE: ChangeLog --- --- NEW FILE: INSTALL --- --- NEW FILE: NEWS --- --- NEW FILE: README --- --- NEW FILE: bootstrap --- #! /bin/sh -e # bootstrap this software aclocal && automake --gnu && autoconf --- NEW FILE: install-sh --- #!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp} -p" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 --- NEW FILE: missing --- #! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. # Originally by Fran,cois Pinard <pi...@ir...>, 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.2 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # we have already tried tar in the generic part gnutar ${1+"$@"} && exit 0 gtar ${1+"$@"} && exit 0 firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 --- NEW FILE: mkinstalldirs --- #! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman <fri...@pr...> # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1 2003/09/26 19:19:29 egonw Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here |
From: Egon W. <eg...@us...> - 2003-09-26 19:08:20
|
Update of /cvsroot/woc/woc2/source In directory sc8-pr-cvs1:/tmp/cvs-serv18176/source Added Files: configure.in Log Message: Some more corrections --- NEW FILE: configure.in --- dnl dnl $Id: configure.in,v 1.1 2003/09/26 19:08:05 egonw Exp $ dnl AC_INIT() AM_INIT_AUTOMAKE(wocbin, `cat VERSION`) AC_OUTPUT([ maint/Makefile publish/wocjava/Makefile publish/Makefile manuals/maint/Makefile manuals/publish/Makefile manuals/Makefile Makefile ]) |
From: Egon W. <eg...@us...> - 2003-09-26 19:08:20
|
Update of /cvsroot/woc/woc2/layout In directory sc8-pr-cvs1:/tmp/cvs-serv18176/layout Added Files: configure.in Log Message: Some more corrections --- NEW FILE: configure.in --- dnl dnl $Id: configure.in,v 1.1 2003/09/26 19:08:05 egonw Exp $ dnl AC_INIT() AM_INIT_AUTOMAKE(woc, `cat VERSION`) AC_OUTPUT([ woc/webdocs/Makefile woc/cgi/Makefile iupac/webdocs/Makefile iupac/cgi/Makefile translations/webdocs/Makefile translations/cgi/Makefile generic/webdocs/Makefile generic/cgi/Makefile generic/Makefile Makefile ]) |
From: Egon W. <eg...@us...> - 2003-09-26 19:08:19
|
Update of /cvsroot/woc/woc2/project In directory sc8-pr-cvs1:/tmp/cvs-serv18176/project Removed Files: Makefile.am Log Message: Some more corrections --- Makefile.am DELETED --- |
From: Egon W. <eg...@us...> - 2003-09-26 19:08:18
|
Update of /cvsroot/woc/woc2/data In directory sc8-pr-cvs1:/tmp/cvs-serv18176/data Added Files: configure.in Log Message: Some more corrections --- NEW FILE: configure.in --- dnl dnl $Id: configure.in,v 1.1 2003/09/26 19:08:04 egonw Exp $ dnl AC_INIT() AM_INIT_AUTOMAKE(woc, `cat VERSION`) AC_OUTPUT([ iupac/wml/Makefile iupac/Makefile woc/wml/Makefile woc/dadml/Makefile woc/Makefile Makefile ]) |
From: Egon W. <eg...@us...> - 2003-09-26 19:01:21
|
Update of /cvsroot/woc/woc2 In directory sc8-pr-cvs1:/tmp/cvs-serv17055 Removed Files: Makefile.am VERSION bootstrap configure.in Log Message: Removed crap way to high up in the level --- Makefile.am DELETED --- --- VERSION DELETED --- --- bootstrap DELETED --- --- configure.in DELETED --- |
From: Egon W. <eg...@us...> - 2003-09-26 18:43:33
|
Update of /cvsroot/woc/woc2 In directory sc8-pr-cvs1:/tmp/cvs-serv13503 Log Message: Second dir struct design Status: Vendor Tag: vendor Release Tags: start N woc2/Makefile.am N woc2/bootstrap N woc2/configure.in N woc2/VERSION N woc2/data/Makefile.am N woc2/data/iupac/Makefile.am N woc2/data/iupac/wml/Makefile.am N woc2/data/woc/Makefile.am N woc2/data/woc/wml/Makefile.am N woc2/data/woc/dadml/Makefile.am N woc2/source/Makefile.am N woc2/source/maint/Makefile.am N woc2/source/publish/Makefile.am N woc2/source/publish/wocjava/Makefile.am N woc2/source/manuals/Makefile.am N woc2/source/manuals/maint/Makefile.am N woc2/source/manuals/publish/Makefile.am N woc2/layout/Makefile.am N woc2/layout/woc/webdocs/Makefile.am N woc2/layout/woc/cgi/Makefile.am N woc2/layout/iupac/webdocs/Makefile.am N woc2/layout/iupac/cgi/Makefile.am N woc2/layout/translations/webdocs/Makefile.am N woc2/layout/translations/cgi/Makefile.am N woc2/layout/generic/Makefile.am N woc2/layout/generic/webdocs/Makefile.am N woc2/layout/generic/cgi/Makefile.am N woc2/project/Makefile.am No conflicts created by this import ***** Bogus filespec: - ***** Bogus filespec: Imported ***** Bogus filespec: sources |
From: Egon W. <eg...@us...> - 2003-09-17 12:07:03
|
Update of /cvsroot/woc/woc/bin/news In directory sc8-pr-cvs1:/tmp/cvs-serv30719 Modified Files: news.xml Log Message: Added news item about new URL Index: news.xml =================================================================== RCS file: /cvsroot/woc/woc/bin/news/news.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** news.xml 26 Nov 2002 12:07:40 -0000 1.3 --- news.xml 17 Sep 2003 12:06:56 -0000 1.4 *************** *** 2,5 **** --- 2,11 ---- <!DOCTYPE ITEM SYSTEM "news.dtd"> <NEWS> + <ITEM ID="20030917"> + <DATUM>17 september 2003</DATUM> + <TEKST> + De nieuwe URL voor het WOC is: http://www.woc.sci.kun.nl/. + </TEKST> + </ITEM> <ITEM ID="20021126"> <DATUM>26 november 2002</DATUM> |
From: Egon W. <eg...@us...> - 2002-11-26 12:07:42
|
Update of /cvsroot/woc/woc/bin/news In directory sc8-pr-cvs1:/tmp/cvs-serv25670 Modified Files: news.xml Log Message: Added recent news. Index: news.xml =================================================================== RCS file: /cvsroot/woc/woc/bin/news/news.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** news.xml 11 Jun 2002 13:34:09 -0000 1.2 --- news.xml 26 Nov 2002 12:07:40 -0000 1.3 *************** *** 2,5 **** --- 2,31 ---- <!DOCTYPE ITEM SYSTEM "news.dtd"> <NEWS> + <ITEM ID="20021126"> + <DATUM>26 november 2002</DATUM> + <TEKST> + De verbinding met het internet van de KUN is gisteravond verbroken, en pas + vandaag om 13:00 uur hersteld. Gedurende deze tijd is het WOC onbereikbaar + geweest. + </TEKST> + </ITEM> + <ITEM ID="20021122"> + <DATUM>22 november 2002</DATUM> + <TEKST> + Er is en nieuwe versie van <a href="http://jmol.sf.net">Jmol</a> uit. + Het voor ons meest interessante aspect van deze nieuwe versie, is dat het + vertaald is naar het Nederlands. + </TEKST> + </ITEM> + <ITEM ID="20021021"> + <DATUM>21 oktober 2002</DATUM> + <TEKST> + Het Linux/KDE programma <a href="http://edu.kde.org/kalzium">Kalzium</a> + heeft sinds kort een door het WOC mede ontwikkelde Nederlandstalige + gebruikersinterface, die met versie 3.1 van KDE gedistribueerd zal worden. + In de ontwikkelingsversie kan vanuit Kalzium ook informatie uit het + WOC opgevraagd worden over elementen. + </TEKST> + </ITEM> <ITEM ID="20020606"> <DATUM>6 juni 2002</DATUM> |
From: Geert J. <gj...@us...> - 2002-09-03 19:40:57
|
Update of /cvsroot/woc/woc/src/woc/wocjava/source/com/egonw/woc/files In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/wocjava/source/com/egonw/woc/files Added Files: DictFile.java FileReadAble.java FileWriteAble.java ItemFile.java ItemWriteFile.java LetterFile.java SLetterFile.java ShortLetterFile.java WMLHandler.java WMLReadFile.java WocListHandler.java WocListReadFile.java WocReportFile.java XItemFile.java Log Message: --- NEW FILE: DictFile.java --- package com.egonw.woc.files; import com.objectspace.jgl.*; import java.io.*; import java.lang.*; import java.util.*; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.util.*; import com.egonw.woc.wml.*; import com.egonw.woc.predicate.*; public class DictFile extends HtmlWriteFile implements FileWriteAble { private OrderedSet words; private String loc; private String lang; private Path repository; public DictFile(Path repository, String fn, String landcode) throws IOException { super(fn); words = new OrderedSet(new LessFWord()); this.loc = "Vertalingen"; this.lang = landcode; this.repository = repository; } public String getName() { return ("DictFile"); } public void setLocation(String location) { this.loc = location; } public void close() throws IOException { super.close(); } public void start() { super.start(); writeLine("<head>"); writeLine(" <base href=\"" + repository.getHtmlRoot() + "\">"); writeLine(" <link rel=\"stylesheet\" href=\"" + repository.getHtmlRoot() + repository.getCSSSubDir() + "woc.css\" type=\"text/css\">"); writeLine(" <script src=\"" + repository.getJavascriptSubDir() + "browsertest.js\"></script>"); writeLine(" <script src=\"" + repository.getJavascriptSubDir() + "location.js\"></script>"); writeLine(" <script>"); writeLine(" <!--"); writeLine(" setLocation(\"" + this.loc + "\");"); writeLine(" // -->"); writeLine(" </script>"); writeLine("</head>"); writeLine("<body class=\"main\">"); writeLine("<hr>"); writeLine("<table border=0 celpadding=0 cellspacing=0 width=100%>"); } public void end() { // dump alle woorden Enumeration ewords = words.elements(); while (ewords.hasMoreElements()) { FWord fword = (FWord)ewords.nextElement(); writeLine("<tr><td class=\"main\">"); writeLine( fword.getFWord() ); writeLine("</td><td>"); writeLine("<a href=\"" + repository.getItemFileSubDir() + fword.getAnchor() + ".shtml\">" + fword.getDWord() + "</a>"); writeLine("</td>"); } // print normale eind writeLine("</table>"); writeLine("<hr></body>"); super.end(); } public void startItems(Item first) {}; public void endItems(Item last) {}; public void writeItem(Item item) { if (item.contains(XItem.XNAME)) { String dword = new String(); String eword = new String(); FWord fword = new FWord(this.lang); Vector names = (Vector)item.get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); int check = 0; Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL")) { dword = xl.getValue(); check++; } else if (xl.getID().equals(this.lang)) { eword = xl.getValue(); check++; } } if (check == 2) { fword.setFWord(eword); fword.setDWord(dword); fword.setAnchor((String)item.get(Item.ANCHOR)); words.add(fword); } } } } }; --- NEW FILE: FileReadAble.java --- package com.egonw.woc.files; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.exception.*; public interface FileReadAble { Item readItem() throws WocException; String getName(); } --- NEW FILE: FileWriteAble.java --- package com.egonw.woc.files; import java.io.*; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.exception.*; public interface FileWriteAble { void start(); void end(); void startItems(Item first); void endItems(Item last); void writeItem(Item i) throws IOException; String getName(); } --- NEW FILE: ItemFile.java --- package com.egonw.woc.files; import org.xml.sax.Parser; import org.xml.sax.DocumentHandler; import org.xml.sax.helpers.ParserFactory; import java.io.*; import java.text.*; import java.util.*; import java.net.*; import java.util.*; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.wml.*; import com.egonw.woc.util.*; import com.egonw.woc.predicate.*; import org.openscience.dadml.*; import org.openscience.dadml.filereaders.*; import org.openscience.dadml.tools.*; /** * WriteFile with special HTML-format functions. * * @author Egon Willighagen * @version 1.1, 23/01/98 */ public class ItemFile extends HtmlWriteFile { private Path repository; private DBDEFLIST dbdeflist; protected String titel; protected String locatie; protected String style; protected String letter; protected String lang; protected int mode; protected int count; public static int SHORT = 1; public static int LONG = 2; public ItemFile(Path repository, String fn) throws IOException { super(fn); this.titel = "Woordenboek Organische Chemie"; this.locatie = ""; this.style = "woc"; this.lang = "nl"; this.mode = SHORT; this.letter = "no"; this.count = 0; this.repository = repository; } public ItemFile(Path repository, String fn, DBDEFLIST list) throws IOException { this(repository, fn); this.dbdeflist = list; } public void close() throws IOException { super.close(); } public void setTitle(String titel) { this.titel = titel; } public void setLocatie(String locatie) { this.locatie = locatie; } public void setStyle(String style) { this.style = style; } public void setLang(String lang) { this.lang = lang; } public void setMode(int mode) { this.mode = mode; } public void setLetter() { this.letter = "yes"; } public void start() { super.start(); } public void startItems(Item i) { writeLine("<head>"); writeLine(" <title>" + this.titel + "</title>"); writeLine(" <base href=\"" + repository.getHtmlRoot() + "\">"); writeLine(" <link rel=\"stylesheet\" href=\"" + repository.getHtmlRoot() + repository.getCSSSubDir() + this.style + ".css\" type=\"text/css\">"); Vector keys = ItemInfo.listKeywords(i); if (!keys.isEmpty() && this.letter.equals("no")) { write(" <META name=\"keywords\" content=\""); Enumeration vals = keys.elements(); while (vals.hasMoreElements()) { write((String)vals.nextElement()); if (vals.hasMoreElements()) { write (", "); } } writeLine("\">"); } writeLine(" <script src=\"" + repository.getJavascriptSubDir() + "isframe.js\"></script>"); writeLine(" <script src=\"" + repository.getJavascriptSubDir() + "browsertest.js\"></script>"); // check frame writeLine(" <script>"); writeLine(" <!--"); if (this.letter.equals("no")) { writeLine(" checkFrame(\"" + (String)i.get(XItem.XFILENAME) + "\");"); } writeLine(" // -->"); writeLine(" </script>"); writeLine("</head>"); writeLine("<body class=\"main\">"); writeLine("<hr>"); } /** * Ends the writing to a Html-format file. */ public void end() { writeLine("<hr>"); writeLine("</font>"); SimpleDateFormat longdate = new SimpleDateFormat ("dd MMM yyyy"); SimpleDateFormat year = new SimpleDateFormat ("yyyy"); Date current = new Date(); writeLine("<center><i>Last updated on " + longdate.format(current) + ". © Copyright " + year.format(current) + " Woordenboek Organische Chemie</i></center>"); writeLine("<center>U bent bezoeker "); writeLine("<!--WEBBOT bot=\"HTMLMarkup\" startspan ALT=\"Site Meter\" -->"); writeLine("<script>var site=\"woccounter\"</script>"); writeLine("<script language=\"JavaScript1.2\" src=\"http://www.sitemeter.com/js/counter.js?site=woccounter\">"); writeLine("</script>"); writeLine("<noscript>"); writeLine("<a href=\"http://www.sitemeter.com/stats.asp?site=woccounter\" target=_top>"); writeLine("<img src=\"http://www.sitemeter.com/meter.asp?site=woccounter\" alt=\"Site Meter\" nosave border=0></a>"); writeLine("</noscript>"); writeLine("<script>document.write(\"//\"+\"-\"+\"-\"+\">\");</script>"); writeLine("<!-- Copyright 1999 Site Meter -->"); writeLine("<!--WEBBOT bot=\"HTMLMarkup\" Endspan -->"); writeLine(".</center>"); writeLine("</body>"); super.end(); } public void endItems(Item last) {}; public void writeItem(Item i) throws IOException { //Titelregel writeLine("<TABLE border=\"0\" width=100%>"); if (i.contains(XItem.XSEEONLY)) { DefRegel(); KopZieRegel(i); } else { DefRegel(); KopRegel(i); ReactieRegel(i); InfoRegel(i); VoorbeeldRegel(i); ZieVergRegel(i); LinksRegel(i); BronnenRegel(i); // ModelsRegel(i); TopicMapRegel(i); DbsRegel(i); ToLongRegel(i); } writeLine("</TABLE>"); } private void DefRegel() { writeLine("<TR border=0 width=100%>"); writeLine("<TD width=5%></TD>"); writeLine("<TD width=5%></TD>"); writeLine("<TD width=50%></TD>"); writeLine("<TD width=40%></TD>"); writeLine("</TR>"); } private void KopZieRegel(Item i) { try { writeLine("<TR border=\"0\" width=\"100%\">"); writeLine("<TD valign=top colspan=\"4\">"); write("<a class=\"item\" name=\"" + i.get(Item.ANCHOR) + "\">"); write("<B>"); if (i.result(new IsChemical())) { write("<img alt=\"chemical: \" src=\"gui/pictures/static_azijnzuur.gif" + QUOT + " height=" + QUOT + "10" + QUOT + " width=" + QUOT + "10" + QUOT + ">"); }; if (i.contains(Item.EIGENNAME)) { write(toItalic((String)i.get(Item.NAME))); } else { write((String)i.get(Item.NAME)); } writeLine("</B></a> "); write("zie <i>"); Enumeration zies = ((Vector)i.get(Item.ZIE)).elements(); while (zies.hasMoreElements()) { String zie = (String)zies.nextElement(); writeLine("<a href=\"" + repository.getHtmlRoot() + repository.getItemFileSubDir() + i.get(XItem.XFILENAME) + ".shtml\">" + zie + "</a>"); if (zies.hasMoreElements()) writeLine(", "); } writeLine("</i>"); writeLine("</TD>"); } catch (NullPointerException e) { System.out.println("titel regel"); } } private void KopRegel(Item i) { try { writeLine("<TR border=\"0\" width=\"100%\">"); if (i.contains(Item.SUBITEM)) { writeLine("<TD></td>"); writeLine("<td colspan=2>"); } else { writeLine("<TD valign=top colspan=3>"); } write("<a class=\"item\" name=\"" + i.get(XItem.XFILENAME) + "\">"); write("<B>"); if (i.result(new IsChemical())) { write("<img alt=\"chemical: \" src=\"gui/pictures/static_azijnzuur.gif" + QUOT + " height=" + QUOT + "10" + QUOT + " width=" + QUOT + "10" + QUOT + ">"); }; if (i.contains(Item.EIGENNAME)) { write(toItalic((String)i.get(Item.NAME))); } else { write((String)i.get(Item.NAME)); } if (i.contains(Item.FUNCTIE)) { write(" " + toItalic((String)i.get(Item.FUNCTIE))); } writeLine("</B></a>"); if (mode == LONG) { if (i.contains(Item.LIDWOORD)) writeLine(", <i>" + i.get(Item.LIDWOORD) + "</i>"); if (i.contains(XItem.XMEERVOUD)) { // System.out.println(" ... meervoud gevonden..."); writeLine(", <i>mv. " + ((XNODE)i.get(XItem.XMEERVOUD)).getCDATA() + "</i>"); } } if (i.contains(Item.CASNR)) { writeLine(" (" + toItalic((String)i.get(Item.CASNR)) + ")"); } writeLine("</TD>"); writeLine("<TD width=40% align=right>"); writeButtonBar(i); writeLine("</td></tr>"); } catch (NullPointerException e) { System.out.println("titel regel"); } } private void ReactieRegel(Item i) { try { //reactie if (i.contains(XItem.XMEDIA)) { Enumeration e = ((Vector)i.get(XItem.XMEDIA)).elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("image/gif") && x.containsATT("VIEW") && x.getATT("VIEW").equals("TOP") ) { writeLine("<TR border=0 width=100%>"); writeLine("<TD width=5%></td>"); writeLine("<TD colspan=3>"); write("<img src=\"" + repository.getHtmlRoot() + repository.getPictureSubDir()); if (x.containsATT("PATH")) { write(x.getATT("PATH") + "/"); } else if (i.contains(Item.PICTUREDIR)) { write((String)i.get(Item.PICTUREDIR)+ "/"); } writeLine(x.getCDATA().trim() + "\">"); if (x.containsATT("TITLE")) { write("<br><i>" + x.getATT("TITLE") + "</i>"); } writeLine("</TD></tr>"); } } } } else if (i.contains(Item.REACTIE)) { writeLine("<TR border=0 width=100%>"); writeLine("<TD width=5%></td>"); writeLine("<TD colspan=3>"); write("<img src=" + QUOT + repository.getHtmlRoot() + repository.getPictureSubDir()); if (i.contains(Item.PICTUREDIR)) write((String)i.get(Item.PICTUREDIR)+ "/"); writeLine((String)i.get(Item.REACTIE)+ QUOT + ">"); writeLine("</TD></tr>"); } } catch (NullPointerException e) { System.out.println("Fout bij schrijven van info regel"); } } private void InfoRegel(Item i) { try { //inforegel writeLine("<TR border=\"0\" width=\"100%\">"); writeLine("<TD width=5%></td>"); writeLine("<TD colspan=\"2\" valign=\"top\">"); writeLine("<P>"); if (i.contains(Item.LEVEN)) writeLine("<i>" + i.get(Item.LEVEN) + "</i><br>"); if (i.contains(XItem.XFORMULA)) { Enumeration formulas = ((Vector)i.get(XItem.XFORMULA)).elements(); while (formulas.hasMoreElements()) { XNODE xn = (XNODE)formulas.nextElement(); if (xn.containsATT("CLASS")) { if (xn.getATT("CLASS").equals("STRUCTURAL")) { Bruto f = new Bruto(xn.getCDATA()); write("<br><b>structuurformule</b>: " + f.toHTMLString()); } else if (xn.getATT("CLASS").equals("GROUP-LEFT")) { Bruto f = new Bruto(xn.getCDATA()); write("<br><b>functionele groep</b>: "); if (xn.containsATT("ORDER")) { if (xn.getATT("ORDER").equals("2")) { writeLine(f.toHTMLString() + "="); } else if (xn.getATT("ORDER").equals("1")) { writeLine(f.toHTMLString() + "-"); } } else { writeLine(f.toHTMLString() + "-"); } } else if (xn.getATT("CLASS").equals("GROUP-RIGHT")) { Bruto f = new Bruto(xn.getCDATA()); write("<br><b>functionele groep</b>: "); if (xn.containsATT("ORDER")) { if (xn.getATT("ORDER").equals("2")) { writeLine( "=" + f.toHTMLString()); } else if (xn.getATT("ORDER").equals("1")) { writeLine( "-" + f.toHTMLString()); } } else { writeLine( "-" + f.toHTMLString()); } } else if (xn.getATT("CLASS").equals("STOICH")) { StoichFormule sf = new StoichFormule(xn.getCDATA()); writeLine("<br><b>formule</b>: " + sf.toHTMLString()); } else if (xn.getATT("CLASS").equals("CLASS")) { StoichFormule sf = new StoichFormule(xn.getCDATA()); writeLine("<br><b>klasse</b>: " + sf.toHTMLString()); } else if (xn.getATT("CLASS").equals("ION") && xn.containsATT("CHARGE")) { StoichFormule sf = new StoichFormule(xn.getCDATA()); writeLine("<br><b>ion</b>: " + sf.toHTMLString() + "<sup>" + xn.getATT("CHARGE") + "</sup>"); } } writeLine("<br>"); } } if (i.contains(Item.FORMULA)) { writeLine("<b>formule</b>: " + ((Raw)i.get(Item.FORMULA)).toHTMLString() + "<br>"); } else if (i.contains(Item.BRUTO)) { writeLine("<b>brutoformule</b>: " + ((Bruto)i.get(Item.BRUTO)).toHTMLString()); writeLine("<br>"); } if (i.contains(Item.TRIVIALNAME)) { writeLine("<b>synoniemen</b>: "); Enumeration values = ((Vector)i.get(Item.TRIVIALNAME)).elements(); while (values.hasMoreElements()) { String triv = (String)values.nextElement(); write("<i>" + triv + "</i>"); if (values.hasMoreElements()) write(", "); } writeLine("<br>"); } if (i.contains(Item.IUPACNAME)) { write("<b>IUPAC naam</b>: "); write("<i>" + (String)i.get(Item.IUPACNAME) + "</i><br>"); } if (i.contains(XItem.XAFKORT)) { write("<b>afkorting</b>: "); Enumeration afkortingen = ((Vector)i.get(XItem.XAFKORT)).elements(); while (afkortingen.hasMoreElements()) { write("<i>" + ((XNODE)afkortingen.nextElement()).getCDATA() + "</i>"); if (afkortingen.hasMoreElements()) { writeLine(", "); } else { writeLine("<br>"); } } } else if (i.contains(Item.AFKORT)) { write("<b>afkorting</b>: "); writeLine("<i>" + i.get(Item.AFKORT) + "</i><br>"); } if (mode == LONG) { //print Engelse & Duitse woorden if (i.contains(Item.ENGLISH) || i.contains(XItem.XGERMAN) || i.contains(XItem.XLATIN) || i.contains(XItem.XFRENCH) || i.contains(XItem.XSPANISH) || i.contains(XItem.XITALIAN)) writeLine("<P>"); if (i.contains(Item.ENGLISH)) { writeLine("<b>engelse vertaling</b>: " + (String)i.get(Item.ENGLISH) + "<br>"); } if (i.contains(XItem.XGERMAN)) { writeLine("<b>duitse vertaling</b>: " + (String)i.get(XItem.XGERMAN) + "<br>"); } if (i.contains(XItem.XFRENCH)) { writeLine("<b>franse vertaling</b>: " + (String)i.get(XItem.XFRENCH) + "<br>"); } if (i.contains(XItem.XSPANISH)) { writeLine("<b>spaanse vertaling</b>: " + (String)i.get(XItem.XSPANISH) + "<br>"); } if (i.contains(XItem.XITALIAN)) { writeLine("<b>italiaanse vertaling</b>: " + (String)i.get(XItem.XITALIAN) + "<br>"); } if (i.contains(XItem.XLATIN)) { writeLine("<b>latijnse vertaling</b>: " + (String)i.get(XItem.XLATIN) + "<br>"); } if (i.contains(XItem.XFRYSIAN)) { writeLine("<b>friese vertaling</b>: " + (String)i.get(XItem.XFRYSIAN) + "<br>"); } } if (i.contains(Item.GROUP)) { writeLine("<b>Groepen</b>: "); Enumeration groepen = ((Vector)i.get(Item.GROUP)).elements(); while (groepen.hasMoreElements()) { String group = (String)groepen.nextElement(); String anchor = Convert.NAMELikeToANCHORLike(group); writeLine("<a href=\"" + repository.getHtmlRoot() + repository.getItemFileSubDir() + anchor + ".shtml\">" + group + "</a>"); if (groepen.hasMoreElements()) writeLine(", "); } writeLine("<br>"); } if (mode == LONG) { //print Indices if (i.contains(Item.CASNR) || i.contains(XItem.XENR) || i.contains(XItem.XUNNR)) writeLine("<p>"); if (i.contains(Item.CASNR)) { writeLine("<b>CAS Nummer</b>: " + (String)i.get(Item.CASNR) + "<br>"); } if (i.contains(XItem.XNSC)) { writeLine("<b>NSC Nummer</b>: " + (String)i.get(XItem.XNSC) + "<br>"); } if (i.contains(XItem.XENR)) { writeLine("<b>E-Nummer</b>: E" + (String)i.get(XItem.XENR) + "<br>"); } if (i.contains(XItem.XUNNR)) { writeLine("<b>UN Nummer</b>: " + (String)i.get(XItem.XUNNR) + "<br>"); } } if (i.contains(XItem.XDISCDATE) || i.contains(XItem.XDISCPLACE)) { writeLine("<P><b>Ontdekking</b>:"); writeLine("<br />datum: "); if (i.contains(XItem.XDISCDATE)) { writeLine((String)i.get(XItem.XDISCDATE)); } writeLine("<br />plaats: "); if (i.contains(XItem.XDISCPLACE)) { writeLine((String)i.get(XItem.XDISCPLACE)); } writeLine("</P>"); } if (ItemInfo.containsFysicalProps(i) || i.contains(XItem.XPKA) || i.contains(XItem.XPKB)) { if (mode == LONG) { writeLine("<P>"); // het volgende is voor niet Java'ers if (i.contains(Item.BOILINGPOINT)) writeLine("<i>Kookpunt : " + i.get(Item.BOILINGPOINT) + "<sup>o</sup>C</i><br>"); if (i.contains(Item.MELTINGPOINT)) writeLine("<i>Smeltpunt : " + i.get(Item.MELTINGPOINT) + " <sup>o</sup>C</i><br>"); if (i.contains(XItem.XFLASH)) writeLine("<i>Vlampunt : " + i.get(XItem.XFLASH) + " <sup>o</sup>C</i><br>"); if (i.contains(Item.MASS)) writeLine("<i>Massa : " + i.get(Item.MASS) + " g/mol</i><br>"); if (i.contains(Item.RHO)) writeLine("<i>Dichtheid : " + i.get(Item.RHO) + " g/ml</i><br>"); if (i.contains(Item.DIPOOL)) writeLine("<i>Dipool : " + i.get(Item.DIPOOL) + " D</i><br>"); if (i.contains(XItem.XPKA)) writeLine("<i>pK<sub>a</sub> : " + i.get(XItem.XPKA) + "</i><br>"); if (i.contains(XItem.XPKB)) writeLine("<i>pK<sub>b</sub> : " + i.get(XItem.XPKB) + "</i><br>"); } writeLine("<br>"); } if (i.contains(Item.COMMENT)) { write("<p>"); Enumeration comments = ((Vector)i.get(Item.COMMENT)).elements(); if (!ItemInfo.hasMoreThanOneComment(i)) { writeLine((Memo)comments.nextElement()); } else { writeLine("<table width=\"100%\">"); int j=0; while (comments.hasMoreElements()) { Memo m = (Memo)comments.nextElement(); j++; writeLine("<tr>\n<td valign=\"top\" width=\"10\"><b>" + Integer.toString(j) + ".</b></td>"); writeLine("<td valign=\"top\">"); writeLine(m); writeLine("</td>\n</tr>"); } writeLine("</table>"); } } writeLine(" "); writeLine("</TD>"); writeLine("<TD width=40% valign=top align=center>"); writeRightPicture(i); writeLine("</td>"); writeLine("</tr>"); } catch (NullPointerException e) { System.out.println("Fout bij schrijven van info regel"); } } private void VoorbeeldRegel(Item i) { try { writeLine("<TR>"); writeLine("<TD colspan=2></td>"); writeLine("<TD width=55% bgcolor=\"silver\">"); if (i.contains(Item.VOORBEELD)) { Enumeration comments = ((Vector)i.get(Item.VOORBEELD)).elements(); if (!ItemInfo.hasMoreThanOneVoorbeeld(i)) { writeLine("<b><i>Voorbeeld</i></b> "); writeLine((Memo)comments.nextElement()); } else { int j=0; while (comments.hasMoreElements()) { Memo m = (Memo)comments.nextElement(); j++; writeLine("<b>Voorbeeld " + Integer.toString(j) + ".</b> "); writeLine(m); } } } writeLine("</TD>"); writeLine("</TR>"); } catch (NullPointerException e) { System.out.println("Fout bij schrijven van info regel"); } } private void ZieVergRegel(Item i) { try { //Zie-Vergelijkregel if (i.contains(Item.ZIE)) { writeLine("<tr width=100%>"); writeLine("<td width=5%></td>"); writeLine("<td colspan=3 align=left valign=top>"); write("Zie <i>"); Enumeration zies = ((Vector)i.get(Item.ZIE)).elements(); while (zies.hasMoreElements()) { String zie = (String)zies.nextElement(); String anchor = Convert.NAMELikeToANCHORLike(zie); writeLine("<a href=\"" + repository.getHtmlRoot() + repository.getItemFileSubDir() + anchor + ".shtml\">" + zie + "</a>"); if (zies.hasMoreElements()) writeLine(", "); } writeLine("</i></td></tr>"); } if (i.contains(Item.VERGELIJK)) { writeLine("<tr width=100%>"); writeLine("<td width=5%></td>"); writeLine("<td colspan=3 align=left valign=top>"); write("Vergelijk <i>"); Enumeration verg = ((Vector)i.get(Item.VERGELIJK)).elements(); while (verg.hasMoreElements()) { String vergelijk = (String)verg.nextElement(); String anchor = Convert.NAMELikeToANCHORLike(vergelijk); writeLine("<a href=\"" + repository.getHtmlRoot() + repository.getItemFileSubDir() + anchor + ".shtml\">" + vergelijk + "</a>"); if (verg.hasMoreElements()) writeLine(", "); } writeLine("</i></td></tr>"); } } catch (NullPointerException e) { System.out.println("zie/vgl regel"); } } private void ModelsRegel(Item i) { try { //Bronnen's if (ItemInfo.containsModels(i) && mode == LONG) { writeLine("<tr width=100%>"); writeLine("<td width=5%></td>"); writeLine("<td colspan=3 align=left valign=top>"); writeLine("<P>Modellen: "); if (i.contains(Item.PICTUREFILE)) { writeLine("<a href=" + QUOT + repository.getHtmlRoot() + repository.getPictureSubDir() + ((Picture)i.get(Item.PICTUREFILE)).path() + QUOT + ">GIF</a>"); if (i.contains(Item.PDB) || i.contains(Item.MOL) || i.contains(Item.XYZFILE)) writeLine(", "); } if (i.contains(Item.MOL)) { writeLine("<a href=" + QUOT + repository.getHtmlRoot() + repository.getModelsSubDir() + repository.getMolSubDir() + ((String)i.get(Item.MOL)) + QUOT + ">MOL (2D)</a>"); if (i.contains(Item.PDB) || i.contains(Item.XYZFILE)) writeLine(", "); } if (i.contains(Item.PDB)) { writeLine("<a href=" + QUOT + repository.getHtmlRoot() + repository.getModelsSubDir() + repository.getPdbSubDir() + ((String)i.get(Item.PDB)) + QUOT + ">PDB</a>"); if (i.contains(Item.XYZFILE)) writeLine(", "); } if (i.contains(Item.XYZFILE)) { writeLine("<a href=" + QUOT + repository.getHtmlRoot() + repository.getModelsSubDir() + repository.getXyzSubDir() + ((String)i.get(Item.XYZFILE)) + QUOT + ">XYZ</a>"); } } writeLine("</P></td></tr>"); } catch (NullPointerException e) { System.out.println("bronnen regel"); }; } private void DbsRegel(Item i) { try { //Andere Databases if (mode == LONG && i.contains(Item.CASNR)) { writeLine("<tr width=100%>"); writeLine("<td width=5%></td>"); writeLine("<td colspan=3 align=left valign=top>"); writeLine("<P><img src=" + QUOT + repository.getHtmlRoot() + repository.getPictureSubDir() + "system/dbs.gif" + QUOT + "><br>"); writeLine("<ul><div class=\"small\"><b>NB:</b> Hieronder staan links naar andere databases. Een link betekent NIET dat de "+ "andere database ook echt informatie heeft."); Hashtable indexlist = new Hashtable(); indexlist.put("CAS-NUMBER", i.get(Item.CASNR)); if (i.contains(XItem.XENR)) { indexlist.put("E-NUMBER", i.get(XItem.XENR)); } if (dbdeflist != null) { writeLine("<p>"); Enumeration list = this.dbdeflist.elements(); while (list.hasMoreElements()) { Enumeration indices = indexlist.keys(); DBDEF dbdef = (DBDEF)(list.nextElement()); // System.err.println("Trying: " + dbdef.getTITLE()); while (indices.hasMoreElements()) { String index = (String)(indices.nextElement()); // System.err.println("Index: " + index); if (DBDEFInfo.hasINDEX(dbdef, index)) { writeLine("<b>" +dbdef.getTITLE() + "</b><br />"); Enumeration fields = dbdef.fields(); while (fields.hasMoreElements()) { FIELD f = (FIELD)fields.nextElement(); Enumeration findices = f.getINDEX(); while (findices.hasMoreElements()) { INDEX ind = (INDEX)findices.nextElement(); if (ind.getTYPE().equals(index)) { String url = dbdef.getURL() + ind.getACCESS_PREFIX() + indexlist.get(index) + ind.getACCESS_SUFFIX(); // System.err.println("Downloading: " + url); try { URL u = new URL(url); URLConnection conn = u.openConnection(); if (conn instanceof HttpURLConnection) { if (((HttpURLConnection)conn).getResponseCode() == HttpURLConnection.HTTP_OK) { writeLine("<dd><a href=\"" + url + "\">" + f.getNAME() + "</a></dd><br />"); } } else { writeLine("<dd><a href=\"" + url + "\">" + f.getNAME() + "</a></dd><br />"); } } catch (MalformedURLException mue) { System.err.println("OpenDADMLFrame: Malformed URL" + mue); } catch (Exception fnfe) { // System.err.println("OpenDADMLFrame: File Not Found." + fnfe); } } } } } } } } else { // Oud mechanism, gebruik makend van SSI write("<p><!--#include virtual=\"/cgi-bin-woc/ssi/dadml.pl?"); write("CAS-NUMBER+" + (String)i.get(Item.CASNR)); if (i.contains(XItem.XENR)) { write("+E-NUMBER+" + (String)i.get(XItem.XENR)); } writeLine("\"-->"); } writeLine("</div></ul>"); writeLine("</P></td></tr>"); } } catch (NullPointerException e) { System.out.println("databases"); }; } private void TopicMapRegel(Item i) { if (mode == LONG && i.contains(XItem.XTOPICMAP)) { writeLine("<tr width=100%>"); writeLine("<td width=5%></td>"); writeLine("<td colspan=3 align=left valign=top>"); writeLine("<b>Samenhang</b>:<br><ul>"); write("<!--#include virtual=\"/cgi-bin-woc/ssi/topicmap.pl?"); write((String)i.get(XItem.ANCHOR)); writeLine(".xml\"-->"); writeLine("</ul></td></tr>"); } } private void LinksRegel(Item i) { try { //URL's if (i.contains(Item.URL)) { writeLine("<tr width=100%>"); writeLine("<td width=5%></td>"); writeLine("<td colspan=3 align=left valign=top>"); writeLine("<img src=" + QUOT + repository.getHtmlRoot() + repository.getPictureSubDir() + "system/urls.gif" + QUOT + "><br>"); writeLine("<dd>"); Enumeration urls = ((Vector)i.get(Item.URL)).elements(); while (urls.hasMoreElements()) { String url = (String)urls.nextElement(); writeLine("<dt><a href=" + QUOT + url + QUOT + " target=" + QUOT + "_MoreInfo" + QUOT + ">" + url + "</a>"); if (urls.hasMoreElements()) writeLine(", "); } writeLine("</dd>"); writeLine("</td></tr>"); } } catch (NullPointerException e) { System.out.println("url regel"); }; } private void BronnenRegel(Item i) { try { //Bronnen's if (i.contains(Item.BRON) && (this.mode == LONG)) { writeLine("<tr width=100%>"); writeLine("<td width=5%></td>"); writeLine("<td colspan=3 align=left valign=top>"); writeLine("<p>Bronnen: "); writeLine("<ul>"); Enumeration bronnen = ((Vector)i.get(Item.BRON)).elements(); while (bronnen.hasMoreElements()) { String bron = (String)bronnen.nextElement(); writeLine("[<a href=" + QUOT + repository.getHtmlRoot() + repository.getBronnenFile() + "#" + bron + QUOT + " target=" + QUOT + "_BronInfo" + QUOT + ">" + bron + "</a>]<br>"); if (bronnen.hasMoreElements()) writeLine(", "); } writeLine("</ul>"); writeLine("</td></tr>"); } } catch (NullPointerException e) { System.out.println("bronnen regel"); }; } private void ToLongRegel(Item i) { if (ItemInfo.containsLongInfo(i) && mode == SHORT) { try { writeLine("<tr width=100%>"); writeLine("<td width=5%></td>"); writeLine("<td colspan=3 align=left valign=top>"); if (i.contains(XItem.XGROUP)) { String anchor = Convert.NAMELikeToANCHORLike((String)i.get(Item.NAME)); writeLine("<a href=\"" + repository.getHtmlRoot() + repository.getGroupFileSubDir() + anchor + ".html\">Alle items</a><br>"); } else { String anchor = Convert.NAMELikeToANCHORLike((String)i.get(Item.NAME)); writeLine("<a href=" + QUOT + repository.getHtmlRoot() + repository.getItemFileSubDir() + anchor + ".shtml\">Meer informatie</a><br>"); } writeLine("</td></tr>"); } catch (NullPointerException e) { System.out.println("ToLongRegel"); }; } else if (ItemInfo.containsLongInfo(i)) { try { writeLine("<tr width=100%>"); writeLine("<td width=5%></td>"); writeLine("<td colspan=3 align=left valign=top>"); if (i.contains(XItem.XGROUP)) { String anchor = Convert.NAMELikeToANCHORLike((String)i.get(Item.NAME)); writeLine("<a href=\"" + repository.getHtmlRoot() + repository.getGroupFileSubDir() + anchor + ".html\">Alle items</a><br>"); } writeLine("</td></tr>"); } catch (NullPointerException e) { System.out.println("ToLongRegel"); }; } } private void writeButtonBar(Item i) { if (i.contains(Item.XYZFILE) || i.contains(Item.PDB)) { if (i.contains(Item.PICTUREFILE)) { write("<a href=\"" + repository.getCgiBinRoot() + "viewer/viewer.pl?"); write((String)i.get(Item.NAME) + "+" + (String)i.get(Item.CASNR)); write("\">"); } writeLine("<img src=\"" + repository.getHtmlRoot() + repository.getPictureSubDir() + "system/xyzfile.gif\" heigth=16 width=16 border=0></a>"); } if (i.contains(Item.CASNR)) { write("<a href=\"" + repository.getCgiBinRoot() + "msds/link.pl?"); write((String)i.get(Item.CASNR)+ "\">"); writeLine("<img src=\"" + repository.getHtmlRoot() + repository.getPictureSubDir() + "system/msds.gif\"" + " heigth=16 width=16 border=0></a>"); } if (i.contains(Item.CASNR)) { write("<a href=\"" + repository.getCgiBinRoot() + "spectra.pl?"); // bug XXXXX write((String)i.get(Item.NAME) + "+"); write((String)i.get(Item.CASNR)+ "\">"); writeLine("<img src=\"" + repository.getHtmlRoot() + repository.getPictureSubDir() + "system/ir.gif\" heigth=16 width=16 border=0></a>"); } if (i.contains(XItem.XGROUP)) { write("<a href=\"" + repository.getCgiBinRoot() + "tree/tree.pl?repos=" + repository.getName() + "&query="); if (i.contains(XItem.WOCNR)) { write((String)i.get(XItem.WOCNR)); } else { write((String)i.get(Item.NAME)); } writeLine("\"><img src=\"" + repository.getHtmlRoot() + repository.getPictureSubDir() + "system/map.gif\" heigth=\"16\" width=\"16\" border=\"0\"></a>"); } if (i.contains(Item.ENGLISH)) { write("<a href=\"" + repository.getCgiBinRoot() + "search/netsearch.pl?lang=EN&query="); write((String)i.get(XItem.WOCNR) + "\">"); writeLine("<img alt=\"Laat het WOC meer informatie zoeken op het internet...\" " + "src=\"" + repository.getHtmlRoot() + repository.getPictureSubDir() + "system/searchmachine.gif\" heigth=\"16\" width=\"16\" border=\"0\"></a>"); } } private void writeRightPicture(Item i) { if (i.contains(XItem.XMEDIA)) { Enumeration e = ((Vector)i.get(XItem.XMEDIA)).elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("image/gif") && (!x.containsATT("VIEW") || !x.getATT("VIEW").equals("TOP")) ) { writeLine(" <center>"); if (i.contains(Item.MOL)) write("<a href=\"" + repository.getHtmlRoot() + repository.getModelsSubDir() + repository.getMolSubDir() + i.get(Item.MOL) + "\">"); write("<img border=\"0\" src=\"" + repository.getHtmlRoot() + repository.getPictureSubDir()); if (x.containsATT("PATH")) { write(x.getATT("PATH") + "/"); } else if (i.contains(Item.PICTUREDIR)) { write((String)i.get(Item.PICTUREDIR)+ "/"); } writeLine(x.getCDATA().trim() + "\">"); if (i.contains(Item.MOL)) writeLine("</a>"); if (x.containsATT("TITLE")) { write("<br><i>" + x.getATT("TITLE") + "</i>"); } writeLine("</TD></tr>"); } } } } else if (i.contains(Item.PICTUREFILE)) { writeLine(" <center>"); if (i.contains(Item.MOL)) write("<a href=" + QUOT + repository.getHtmlRoot() + repository.getModelsSubDir() + repository.getMolSubDir() + i.get(Item.MOL) + QUOT + ">"); if (i.contains(Item.PICTUREDIR)) { writeLine(" <img src=" + QUOT + repository.getHtmlRoot() + repository.getPictureSubDir() + (String)i.get(Item.PICTUREDIR) + "/" + ((Picture)i.get(Item.PICTUREFILE)).path() + QUOT + " border=0><br>"); if (i.contains(Item.MOL)) writeLine("</a>"); writeLine("<i>" + ((Picture)i.get(Item.PICTUREFILE)).subtitle() + "</i>"); } else { writeLine(" <img src=" + QUOT + repository.getHtmlRoot() + repository.getPictureSubDir() + ((Picture)i.get(Item.PICTUREFILE)).path() + QUOT + "><br>"); if (i.contains(Item.MOL)) writeLine("</a>"); writeLine("<i>" + ((Picture)i.get(Item.PICTUREFILE)).subtitle() + "</i>"); } writeLine(" </center>"); } else if (i.contains(Item.SMILE)) { } } }; --- NEW FILE: ItemWriteFile.java --- package com.egonw.woc.files; import org.xml.sax.Parser; import org.xml.sax.DocumentHandler; import org.xml.sax.helpers.ParserFactory; import java.io.*; import java.text.*; import java.util.*; import java.net.*; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.util.*; import org.openscience.dadml.*; import org.openscience.dadml.filereaders.*; import org.openscience.dadml.tools.*; /** * WriteFile with special HTML-format functions. * * @author Egon Willighagen * @version 1.1, 23/01/98 */ public class ItemWriteFile extends ItemFile implements FileWriteAble { public ItemWriteFile(Path repository, String fn) throws IOException { super(repository, fn); } public ItemWriteFile(Path repository, String fn, int mode) throws IOException { super(repository, fn); super.setMode(mode); } public ItemWriteFile(Path repository, String fn, int mode, DBDEFLIST list) throws IOException { super(repository, fn, list); super.setMode(mode); } public String getName() { return "ItemWriteFile"; } public void start() { super.start(); } public void end() { super.end(); } public void startItems(Item first) { super.startItems(first); }; public void endItems(Item last) { super.endItems(last); }; public void writeItem(Item i) throws IOException { super.writeItem(i); } }; --- NEW FILE: LetterFile.java --- package com.egonw.woc.files; import java.io.*; import java.text.*; import java.util.Enumeration; import com.egonw.woc.*; import com.egonw.woc.util.*; import com.egonw.woc.exception.*; /** * WriteFile with special HTML-format functions. * * @author Egon Willighagen * @version 1.0, 24/11/97 */ public class LetterFile extends ItemFile implements FileWriteAble { private Path repository; public LetterFile(Path repository, String fn) throws IOException { super(repository, fn); this.repository = repository; } public LetterFile(Path repository, char c) throws IOException { super(repository, repository.getPhysicalRoot() + repository.getLetterFileSubDir() + c + ".html"); this.repository = repository; super.setLocatie("Letter " + c); } public String getName() { return ("LetterFile"); } public void close() throws IOException { super.close(); } public void start() { super.start(); } public void end() { super.end(); } public void startItems(Item first) { super.startItems(first); }; public void endItems(Item last) { super.endItems(last); }; public void writeItem(Item i) throws IOException { super.writeItem(i); } }; --- NEW FILE: SLetterFile.java --- package com.egonw.woc.files; import java.io.*; import java.text.*; import java.util.*; import com.egonw.woc.*; import com.egonw.woc.util.*; import com.egonw.woc.exception.*; /** * WriteFile with special HTML-format functions. * * @author Egon Willighagen * @version 1.0, 24/11/97 */ public class SLetterFile extends ItemFile implements FileWriteAble { private Path repository; private char letter; private int up; private int count; private int down; private int total; private Vector items; private Item first; private Item last; public SLetterFile(Path repository, char letter, int count) throws IOException { super(repository, repository.getPhysicalRoot() + repository.getLetterFileSubDir() + letter + count + ".html"); super.setLocatie("Letter " + letter); super.setLetter(); this.letter = letter; this.count = count; this.up = 0; this.down = 0; this.items = new Vector(); this.first = new Item(); this.last = new Item(); this.repository = repository; } public void setUp(int i) { this.up = i; } public void setDown(int i) { this.down = i; } public void setTotal(int i) { this.total = i; } public String getName() { return ("SLetterFile"); } public void close() throws IOException { super.close(); } public void start() { super.start(); } public void end() { if ( up > 0 ) writeLine(" <a href=\"" + repository.getLetterFileSubDir() + letter + up + ".html\"><img src=\"gui/pictures/up.gif\" border=\"0\"> Blader terug</a>"); writeLine(" " + first.get(Item.NAME) + " <i>t/m</i> " + last.get(Item.NAME)); if ( down > 0 ) writeLine(" <a href=\"" + repository.getLetterFileSubDir() + letter + down + ".html\"><img src=\"gui/pictures/down.gif\" border=\"0\"> Blader verder</a>"); if (this.total > 1) { write(" [ "); for ( int i = 1; i <= this.total; i++) { if (this.count == i) { writeLine(" <b>" + i + "</b> "); } else { write(" <a href=\"" + repository.getLetterFileSubDir() + letter + i + ".html\">" + i + "</a> "); } } writeLine("]"); } writeLine(" <hr>"); Item item = new Item(); Enumeration eitems = items.elements(); while (eitems.hasMoreElements()) { item = (Item)eitems.nextElement(); try { super.writeItem(item); } catch (IOException e) {} } if ( down > 0 ) { writeLine(" <hr>"); writeLine(" <a href=\"" + repository.getLetterFileSubDir() + letter + down + ".html\"><img src=\"gui/pictures/down.gif\" border=\"0\"> Blader verder</a>"); } super.end(); } public void startItems(Item first) { super.startItems(first); this.first = first; }; public void endItems(Item last) { super.endItems(last); this.last = last; }; public void writeItem(Item i) throws IOException { items.addElement(i); } }; --- NEW FILE: ShortLetterFile.java --- package com.egonw.woc.files; import java.io.*; import java.text.*; import java.util.*; import com.egonw.woc.*; import com.egonw.woc.util.*; import com.egonw.woc.exception.*; public class ShortLetterFile implements FileWriteAble { private char letter; private int aantal; private int count; private String locatie; private SLetterFile activeFile; private Vector files; private Vector items; private Path repository; public ShortLetterFile(Path repository, char letter, int aantal) throws IOException { this.locatie = ""; this.aantal = aantal; this.count = 0; this.files = new Vector(); this.letter = letter; this.repository = repository; } public String getName() { return ("ShortLetterFile"); } public void close() throws IOException { } public void start() { items = new Vector(); } public void end() { // Zit er nog iets in items? (Ja, minstens 1 item) // Zo ja, dan nog een file erbij if (!items.isEmpty()) { files.addElement(items); } // Dump Items naar files count = 0; Enumeration efiles = files.elements(); int total = files.size(); while (efiles.hasMoreElements()) { count++; try { activeFile = new SLetterFile(repository, letter, count); activeFile.setTotal( total ); if (count > 1) activeFile.setUp(count - 1); Vector efile = (Vector)efiles.nextElement(); if (efiles.hasMoreElements()) activeFile.setDown(count + 1); activeFile.setLocatie(locatie); activeFile.start(); Enumeration eitems = efile.elements(); // een file heeft altijd meer dan 1 item (risky) Item i = (Item)eitems.nextElement(); activeFile.startItems(i); activeFile.writeItem(i); while (eitems.hasMoreElements()) { i = (Item)eitems.nextElement(); activeFile.writeItem(i); } activeFile.endItems(i); activeFile.end(); activeFile.close(); } catch (IOException e) { System.out.println("Hier gaat iets niet goed!"); System.out.println(e.toString()); e.printStackTrace(); System.exit(1); } } } public void startItems(Item first) {}; public void endItems(Item last) {}; public void writeItem(Item i) throws IOException { count++; if (count > aantal) { count = 1; files.addElement(items); items = new Vector(); } items.addElement(i); } }; --- NEW FILE: WMLHandler.java --- package com.egonw.woc.files; import java.util.*; import java.io.*; import org.openscience.dadml.*; import com.egonw.woc.*; import com.egonw.woc.exception.*; import com.egonw.woc.wml.*; import com.egonw.woc.util.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.transform.*; public class WMLHandler extends DefaultHandler { private final int UNKNOWN = -1; private final int DICT = -2; private final int LANG = -3; private final int INDEX = -4; private final int ANY = -6; private final int WOC = -7; private final int REFERENCE = -8; private final int XSL = -9; private final int IMPORT = -10; private final int TMASSOC = -11; private final int TMASSOCRL = -12; private final int EXCLUDE = 13; private final int CI_MSDS = 1; private final int CI_CAS = 2; private final int CI_SMILES = 3; private final int CI_WOC = 4; private final int CI_UNNR = 5; private final int CI_ENR = 6; private final int CI_NSC = 7; private XItem item; private int CurrentElement; private int CI; private String NameClass; private Memo memo; private StringBuffer xslString; private String importFile; private XNODE media; private XNODE formula; private XNODE insert; private XNODE abbrev; private XNODE meervoud; private boolean any_on; private boolean xsl_on; private boolean lang_on; private XNAME xname; private XLANG xlang; private TopicMap tm; private Vector names; private Vector formulas; private Vector medias; private Vector v; private Vector groups; private Vector zies; private Vector vergs; private TMAssoc rls; private String DiscDate; private String DiscPlace; private String DiscPersons; private Path repository; private javax.xml.transform.TransformerFactory tFactory; public WMLHandler (Path repository) { item = new XItem(); xname = new XNAME(); this.repository = repository; tFactory = TransformerFactory.newInstance(); }; public XItem returnItem () { return (XItem)item; } public void startDocument () { item = new XItem(); any_on = false; xsl_on = false; } public void endDocument () {} public void startElement (String URI, String name, String qname, Attributes atts) { setCurrentElement(name); switch (CurrentElement) { case ANY : StringBuffer sb = new StringBuffer(); sb.append("<" + name); for (int i = 0; i < atts.getLength(); i++) { sb.append(" " + atts.getQName(i) + "=\"" + atts.getValue(i) + "\""); } sb.append(">"); memo.add(sb.toString()); break; case XSL : xslString.append("<" + name); for (int i = 0; i < atts.getLength(); i++) { xslString.append(" " + atts.getQName(i) + "=\"" + atts.getValue(i) + "\""); } xslString.append(">"); break; case XItem.XTOPICMAP: tm = new TopicMap(); break; case TMASSOC: rls = new TMAssoc(); for (int i = 0; i < atts.getLength(); i++) { if (atts.getQName(i).equals("id")) { rls.setName(atts.getValue(i)); } } break; case TMASSOCRL: for (int i = 0; i < atts.getLength(); i++) { if (atts.getQName(i).equals("xlink:href")) { rls.addRL(atts.getValue(i)); } }; break; case XItem.XDISCDATE: DiscDate = new String(); break; case XItem.XDISCPLACE: DiscPlace = new String(); break; case WOC : medias = new Vector(); break; case XItem.XAFKORT : abbrev = new XNODE(); break; case XItem.XMEERVOUD : meervoud = new XNODE(); break; case Item.ITEM : for (int i = 0; i < atts.getLength(); i++) { if (atts.getQName(i).equals("CODE") || atts.getQName(i).equals("FILE")) { item.add(XItem.XFILENAME, atts.getValue(i)); } else if (atts.getQName(i).equals("ID")) { item.add(XItem.WOCNR, atts.getValue(i)); } else if (atts.getQName(i).equals("CLASS")) { XTYPE xt = new XTYPE(); if (item.contains(XItem.XTYPE)) { xt = (XTYPE)item.get(XItem.XTYPE); } if ( atts.getValue(i).equals("CHEMICAL")) { item.add(Item.CHEMICAL, new String()); xt.setType(XTYPE.CHEMICAL); } else if (atts.getValue(i).equals("ABBREV")) { xt.setType(XTYPE.ABBREV); } else if (atts.getValue(i).equals("POLYMER")) { xt.setType(XTYPE.POLYMER); } else if (atts.getValue(i).equals("MIXTURE")) { xt.setType(XTYPE.MIXTURE); } else if (atts.getValue(i).equals("GROUP")) { xt.setType(XTYPE.GROUP); } else if (atts.getValue(i).equals("NOMENCLATURE")) { xt.setType(XTYPE.IUPAC_RULE); } else if (atts.getValue(i).equals("REACTION")) { xt.setType(XTYPE.REACTION); } item.add(XItem.XTYPE, xt); } } item.add(Item.PICTUREDIR, "other"); groups = new Vector(); zies = new Vector(); vergs = new Vector(); break; case Item.NAME : xname = new XNAME(); for (int i = 0; i < atts.getLength(); i++) { if (atts.getQName(i).equals("CLASS")) { xname.setCLASS(atts.getValue(i)); } } break; case DICT : names = new Vector(); formulas = new Vector(); v = new Vector(); break; case REFERENCE : v = new Vector(); break; case INDEX : // System.out.println("Index found"); for (int i = 0; i < atts.getLength(); i++) { // System.out.println(" Att: " + atts.getQName(i)); // System.out.println(" " + atts.getValue(i)); if (atts.getQName(i).equals("CLASS")) { if (atts.getValue(i).equals("MSDS-CODE")) { CI = CI_MSDS; } else if (atts.getValue(i).equals("SMILES")) { CI = CI_SMILES; } else if (atts.getValue(i).equals("CAS-NUMBER")) { CI = CI_CAS; } else if (atts.getValue(i).equals("WOC-NUMBER")) { CI = CI_WOC; } else if (atts.getValue(i).equals("UN-NUMBER")) { CI = CI_UNNR; } else if (atts.getValue(i).equals("NSC-NUMBER")) { CI = CI_NSC; } else if (atts.getValue(i).equals("E-NUMBER")) { CI = CI_ENR; } else { CI = UNKNOWN; } } } break; case XItem.XMEDIA : media = new XNODE(); for (int i = 0; i < atts.getLength(); i++) media.setATT(atts.getQName(i), atts.getValue(i)); break; case XItem.XINSERTS : insert = new XNODE(); for (int i = 0; i < atts.getLength(); i++) insert.setATT(atts.getQName(i), atts.getValue(i)); break; case XItem.XFORMULA : formula = new XNODE(); for (int i = 0; i < atts.getLength(); i++) formula.setATT(atts.getQName(i), atts.getValue(i)); break; case LANG : xlang = new XLANG(); for (int i = 0; i < atts.getLength(); i++) { if (atts.getQName(i).equals("ID")) { xlang.setID(atts.getValue(i)); } else if (atts.getQName(i).equals("LIDWOORD")) { xlang.setLIDWOORD(atts.getValue(i)); } } break; case Item.COMMENT : memo = new Memo(); break; case IMPORT : String importItem = ""; String importMacro = ""; importFile = ""; for (int i = 0; i < atts.getLength(); i++) { if (atts.getQName(i).equals("select")) { importItem = atts.getValue(i); } else if (atts.getQName(i).equals("macro")) { importMacro = atts.getValue(i); } else if (atts.getQName(i).equals("ITEM")) { importFile = atts.getValue(i); } } xslString = new StringBuffer(); xslString.append("<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/XSL/Transform/1.0\">\n"); // expand macro's String repos = importItem.substring(importItem.indexOf("@")+1); String item = importItem.substring(0,importItem.indexOf("@")); Path irepos = new Path(repos); if (importMacro.equals("picture")) { xslString.append(" <xsl:import href=\"file://" + irepos.getPhysicalRoot() + irepos.getWMLSubDir() + "/picture.xsl\"/>"); } // deduce importFile if not given if (importItem.length() > 0) { // oke import:* was used if (importItem.indexOf("@") == -1) { System.out.println("Error: import:* select does not specify repository!"); } else { importFile = irepos.getPhysicalRoot() + irepos.getWMLSubDir() + "/" + item + ".xml"; } } else { importFile = repository.getPhysicalRoot() + repository.getDataSubDir() + importFile; } //System.out.println("XSLT: importing " + importFile); break; case Item.VOORBEELD : memo = new Memo(); break; } } public void endElement (String URI, String name, String qname) { setCurrentElement(name); switch (CurrentElement) { case ANY : StringBuffer sb = new StringBuffer(); sb.append("</" + name + ">"); memo.add(sb.toString()); break; case XSL : xslString.append("</" + name + ">"); break; case Item.ITEM : if (!groups.isEmpty()) { groups.trimToSize(); item.add(Item.GROUP, groups); } if (!zies.isEmpty()) { zies.trimToSize(); item.add(Item.ZIE, zies); } if (!vergs.isEmpty()) { vergs.trimToSize(); item.add(Item.VERGELIJK, vergs); } break; case XItem.XDISCDATE : item.add(XItem.XDISCDATE, DiscDate); break; case XItem.XDISCPLACE : item.add(XItem.XDISCPLACE, DiscPlace); break; case XItem.XTOPICMAP : item.add(XItem.XTOPICMAP, tm); break; case TMASSOC: tm.addAssocRL(rls); break; case TMASSOCRL: break; case Item.NAME : names.addElement(xname); break; case LANG : xname.addLANG(xlang); break; case DICT : if (!names.isEmpty()) { names.trimToSize(); item.add(XItem.XNAME, names); } if (!item.contains(Item.NAME)) { // get name from DICT Enumeration xnames = names.elements(); while (xnames.hasMoreElements() && !item.contains(Item.NAME)) { XNAME xname = (XNAME)(xnames.nextElement()); if (xname.getName("NL").length() > 0) { // System.out.println("Deducing name from DICT..."); item.add(Item.NAME, xname.getName("NL")); } } } if (!formulas.isEmpty()) { formulas.trimToSize(); item.add(XItem.XFORMULA, formulas); } if (!v.isEmpty()) { v.trimToSize(); item.add(XItem.XAFKORT, v); } if (!item.contains(Item.NAME)) { // get name from DICT Enumeration xnames = v.elements(); while (xnames.hasMoreElements() && !item.contains(Item.NAME)) { XNODE xname = (XNODE)(xnames.nextElement()); if (xname.getCDATA().length() > 0) { // System.out.println("Deducing name from DICT..."); item.add(Item.NAME, xname.getCDATA()); } } } if (!item.contains(Item.NAME)) { System.out.println("No suitable name detected (" + item.get(XItem.XCODE) + ")!"); // System.out.println(names.toString()); } break; case REFERENCE : if (!v.isEmpty()) { v.trimToSize(); item.add(Item.URL, v); } break; case Item.COMMENT : Vector commentlist; if (item.contains(Item.COMMENT)) { commentlist = (Vector)item.get(Item.COMMENT); } else { commentlist = new Vector(); } /** return platte tekst */ commentlist.addElement( memo ); /** vervang oude Vector met nieuwe */ item.add(Item.COMMENT,commentlist); break; case IMPORT : xslString.append("\n</xsl:stylesheet>"); // System.out.println(xslString.toString()); // and here should begin the hidious task of parsing the // xsl code String URL = "file://" + importFile; // System.out.println(URL); File in = new File(importFile); if (!in.exists()) { System.out.println("File (" + importFile + ") not found!"); System.exit(1); } OutputStream htmlStream = (OutputStream)new ByteArrayOutputStream(); try { Transformer transformer = tFactory.newTransformer( new javax.xml.transform.stream.StreamSource( new StringBufferInputStream(xslString.toString()) ) ); transformer.transform( new javax.xml.transform.stream.StreamSource("URL"), new javax.xml.transform.stream.StreamResult(htmlStream) ); memo.add(htmlStream.toString()); } catch (Exception e) { System.out.println("Error while parsing: " + e); } break; case Item.VOORBEELD : Vector vblist; if (item.contains(Item.VOORBEELD)) { vblist = (Vector)item.get(Item.VOORBEELD); } else { vblist = new Vector(); } /** return platte tekst */ vblist.addElement( memo ); /** vervang oude Vector met nieuwe */ ite... [truncated message content] |
From: Geert J. <gj...@us...> - 2002-09-03 19:40:57
|
Update of /cvsroot/woc/woc/src/woc/wocjava/source/com/egonw/woc/util In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/wocjava/source/com/egonw/woc/util Added Files: Convert.java ConvertAble.java Enumerator.java Expander.java GroupAdder.java ItemInfo.java IupacExtender.java Markup.java Memo.java MergeItems.java Path.java RepositoryDefHandler.java TopicExpander.java Log Message: --- NEW FILE: Convert.java --- package com.egonw.woc.util; public class Convert { public static String charInString(String s, char one, char two) { StringBuffer result = new StringBuffer(); for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == one) { result.append(two); } else { result.append(one); } } return result.toString(); } public static String firstLetterUpperCase(String s) { StringBuffer result = new StringBuffer(); if (s.length() > 0) { if (Character.isLetter(s.charAt(0))) { String firstLetter = new String((new Character(s.charAt(0))).toString()); result.append(firstLetter.toUpperCase()); } else result.append(s.charAt(0)); for (int i = 1; i < s.length(); i++) result.append(s.charAt(i)); } return result.toString(); } public static String firstUpperCase(String s) { StringBuffer result = new StringBuffer(); s = new String(s.toLowerCase().trim()); result.append(getTillFirstLetter(s)); result.append(firstLetterUpperCase(stripTillFirstLetter(s))); return result.toString(); } public static String NAMELikeToANCHORLike(String s) { StringBuffer result = new StringBuffer(); char c; s = s.toLowerCase().trim(); for (int i=0; i < s.length(); i++) { c = s.charAt(i); if ( (int)c >= 97 && (int)c <= 122 ) { result.append(c); } else if ( (c == '1') || (c == '2') || (c == '3') || (c == '4') || (c == '5') || (c == '6') || (c == '7') || (c == '8') || (c == '9') || (c == '0') ) { result.append(c); } else if ( c == ' ' ) { result.append('_'); } else if ( c == '-' ) { result.append(c); } else {}; } return result.toString(); } public static String GROUPLikeToANCHORLike(String s) { return NAMELikeToANCHORLike(s); } public static String GROUPLikeToNAMELike(String s) { //ofwel: maak van alle _ een spatie StringBuffer result = new StringBuffer(); char c; for (int i=0; i < s.length(); i++) { c = s.charAt(i); if ( c == '_' ) { result.append(' '); } else { result.append(c); }; } return result.toString(); } public static String getTillFirstLetter(String s) { StringBuffer sb = new StringBuffer(); int i = 0; while ((i<s.length()) && (!Character.isLetter(s.charAt(i)))) { sb.append(s.charAt(i)); i++; } return sb.toString(); } public static String stripTillFirstLetter(String s) { StringBuffer sb = new StringBuffer(); int i = 0; while ((i<s.length()) && (!Character.isLetter(s.charAt(i)))) i++; while (i < s.length()) { sb.append(s.charAt(i)); i++; } return sb.toString(); } } --- NEW FILE: ConvertAble.java --- package com.egonw.woc.util; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.exception.*; public interface ConvertAble { void set(WoordTable wt); void set(ReportFile rf); WoordTable convert(); String getName(); } --- NEW FILE: Enumerator.java --- package com.egonw.woc.util; import java.util.Vector; import java.util.Enumeration; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.exception.*; import com.egonw.woc.wml.*; public final class Enumerator implements ConvertAble { private WoordTable wt; private ReportFile rf; public Enumerator() {}; public String getName() { return "Enumerator"; } public void set(WoordTable wt) { this.wt = wt; } public void set(ReportFile rf) { if (rf instanceof WocReportFile) this.rf = rf; } public WoordTable convert() { WoordTable result = new WoordTable(); if (wt != null) { Item i; char letter = ' '; int j = 1; Enumeration values = wt.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); if (letter != ((String)i.get(Item.NAME)).toLowerCase().charAt(0)) { letter = ((String)i.get(Item.NAME)).toLowerCase().charAt(0); j = 1; } else { j++; } i.add(Item.NUMBER, i); try { result.add(i); } catch (WocNotification wn) { if (this.rf != null) { ((WocReportFile)rf).reportWocNotification(wn); } } } } return result; } } --- NEW FILE: Expander.java --- package com.egonw.woc.util; import java.util.Vector; import java.util.Enumeration; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.wml.*; import com.egonw.woc.exception.*; public final class Expander implements ConvertAble { private WoordTable wt; private ReportFile rf; public Expander() {}; public String getName() { return "Expander"; } public void set(WoordTable wt) { this.wt = wt; } public void set(ReportFile rf) { if (rf instanceof WocReportFile) this.rf = rf; } public WoordTable convert() { WoordTable result = new WoordTable(); if (wt != null) { try { result.add(wt); } catch (WocNotification wn) {}; Item i; XItem j; Enumeration values = wt.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); /** expand IUPACNAME */ if (i.contains(Item.IUPACNAME)) { j = new XItem(); j.add(XItem.XFILENAME, i.get(XItem.XFILENAME)); j.add(Item.NAME, (String)i.get(Item.IUPACNAME)); if (i.contains(Item.CHEMICAL)) { j.add(Item.CHEMICAL, new String()); } Vector zie = new Vector(); zie.addElement((String)i.get(Item.NAME)); j.add(Item.ZIE, zie); j.add(XItem.XSEEONLY, Boolean.TRUE); try { result.add(j); } catch (WocNotification wn) { if (this.rf != null) { ((WocReportFile)rf).reportWocNotification(wn); } } } /** expand TRIVIALNAMEs */ if (i.contains(Item.TRIVIALNAME)) { Vector trivnames = (Vector)i.get(Item.TRIVIALNAME); Enumeration values_two = trivnames.elements(); while (values_two.hasMoreElements()) { String trivialName = (String)values_two.nextElement(); j = new XItem(); j.add(XItem.XFILENAME, i.get(XItem.XFILENAME)); j.add(Item.NAME, trivialName); /** nieuwe vector met over te nemen (otn) triviale namen **/ Enumeration otn_values = trivnames.elements(); Vector newTrivials = new Vector(); while (otn_values.hasMoreElements()) { String waarde = (String)otn_values.nextElement(); if (!waarde.equals(trivialName) && (waarde.length() != 0)) newTrivials.addElement(waarde); } if (newTrivials.size() > 0 ) j.add(Item.TRIVIALNAME, newTrivials); if (i.contains(Item.IUPACNAME)) j.add(Item.IUPACNAME, (String)i.get(Item.IUPACNAME)); Vector zie = new Vector(); zie.addElement((String)i.get(Item.NAME)); j.add(Item.ZIE, zie); j.add(XItem.XSEEONLY, Boolean.TRUE); try { result.add(j); } catch (WocNotification wn) { if (this.rf != null) { ((WocReportFile)rf).reportWocNotification(wn); } } } } /** expand ABBREVs */ if (i.contains(XItem.XAFKORT)) { Vector trivnames = (Vector)i.get(XItem.XAFKORT); Enumeration values_two = trivnames.elements(); while (values_two.hasMoreElements()) { Object o = values_two.nextElement(); if (o instanceof String) { System.out.println(i.get(Item.NAME) + " -> AFK: " + o); } else { XNODE trivialName = (XNODE)o; j = new XItem(); j.add(XItem.XFILENAME, i.get(XItem.XFILENAME)); j.add(Item.NAME, (String)trivialName.getCDATA()); XTYPE xt = new XTYPE(); xt.setType(XTYPE.ABBREV); j.add(XItem.XTYPE, xt); Memo m = new Memo(); Vector zie = new Vector(); zie.addElement((String)i.get(Item.NAME)); j.add(Item.ZIE, zie); m.add("Afkorting van " + (String)i.get(Item.NAME) + "."); Vector comments = new Vector(); comments.add(m); j.add(Item.COMMENT, comments); try { result.add(j); } catch (WocNotification wn) { if (this.rf != null) { ((WocReportFile)rf).reportWocNotification(wn); } } } } } } } return result; } } --- NEW FILE: GroupAdder.java --- package com.egonw.woc.util; import com.objectspace.jgl.*; import com.objectspace.jgl.algorithms.*; import com.objectspace.jgl.predicates.*; import java.util.Vector; import java.util.Enumeration; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.predicate.*; import com.egonw.woc.exception.*; public final class GroupAdder implements ConvertAble { private WoordTable wt; private ReportFile rf; public GroupAdder() {}; public String getName() { return "Group Adder"; } public void set(WoordTable wt) { this.wt = wt; } public void set(ReportFile rf) { if (rf instanceof WocReportFile) this.rf = rf; } public WoordTable convert() { WoordTable result = wt; if (this.wt != null) { Enumeration groepen = extractGroups(wt); while (groepen.hasMoreElements()) { String groep = (String)groepen.nextElement(); try { result.add(convertGroupItems( returnGroupItems(wt, groep), groep) ); } catch (WocNotification wn) { if (this.rf != null) { ((WocReportFile)rf).reportWocNotification(wn); } } } } return result; } public static Enumeration extractGroups(WoordTable wt) { // bepaal alle groepen in de WOC Enumeration values = wt.elements(); OrderedSet groepen = new OrderedSet( new LessString() ); while ( values.hasMoreElements() ) { Item i = (Item)values.nextElement(); if (i.contains(Item.GROUP)) { Enumeration groups = ((Vector)i.get(Item.GROUP)).elements(); while (groups.hasMoreElements()) { String value = (String)groepen.add(groups.nextElement()); } } } return groepen.elements(); } public static WoordTable returnGroupItems(WoordTable wt, String group) { // bepaal alle item die binnen een groep horen WoordTable result = new WoordTable(); try { UnaryPredicate predicate = new BindSecondPredicate( new IsGroup(), new String(group) ); result.add((Container)Filtering.select(wt, predicate )); } catch (WocNotification wn) { System.out.println("Unreported WocNotification"); } finally { return result; } } public static Item convertGroupItems(WoordTable wt, String group) { // maak een nieuwe groep van alle item group = Convert.GROUPLikeToNAMELike(group); XItem result = new XItem(); result.add(XItem.XFILENAME, group); result.add(Item.NAME, group); result.add(XItem.XGROUP, new String("yes")); StringBuffer comment = new StringBuffer(); Enumeration values = wt.elements(); while ( values.hasMoreElements() ) { Item i = (Item)values.nextElement(); comment.append(i.get(Item.NAME)); if (values.hasMoreElements()) comment.append(", "); } Vector commentlist = new Vector(); Memo m = new Memo(); m.add("<P>Voorbeelden van " + group + " zijn: "); m.add(comment.toString()); m.add("</P>"); commentlist.addElement( m ); result.add(Item.COMMENT,commentlist); return result; } } --- NEW FILE: ItemInfo.java --- package com.egonw.woc.util; import java.util.*; import com.egonw.woc.*; import com.egonw.woc.wml.*; public class ItemInfo { public static Vector listKeywords(Item i) { /* returns a Vector of Strings */ Vector v = new Vector(); if (i.contains(XItem.XNAME)) { Enumeration names = ((Vector)i.get(XItem.XNAME)).elements(); while (names.hasMoreElements()) { Enumeration langs = ((XNAME)names.nextElement()).elements(); while (langs.hasMoreElements()) { v.addElement(((XLANG)langs.nextElement()).getValue()); } } } return v; } public static boolean containsLongInfo(Item i) { return (containsModels(i) || i.contains(Item.VERVOEGINGEN) || i.contains(Item.LIDWOORD) || i.contains(Item.CASNR) || i.contains(XItem.XGROUP) || i.contains(XItem.XGERMAN) || i.contains(Item.ENGLISH)); } public static boolean containsModels(Item i) { return (i.contains(Item.MOL) || i.contains(Item.PDB) || i.contains(Item.XYZFILE)); } public static boolean containsFysicalProps(Item i) { return (i.contains(Item.MASS) || i.contains(Item.RHO) || i.contains(Item.BOILINGPOINT) || i.contains(Item.MELTINGPOINT) || i.contains(Item.DIPOOL)); } public static boolean hasMoreThanOneComment(Item i) { boolean result = false; if (i.contains(Item.COMMENT)) { result = ( ((Vector)i.get(Item.COMMENT)).size() > 1 ); } return result; } public static boolean hasMoreThanOneVoorbeeld(Item i) { boolean result = false; if (i.contains(Item.VOORBEELD)) { result = ( ((Vector)i.get(Item.VOORBEELD)).size() > 1 ); } return result; } } --- NEW FILE: IupacExtender.java --- package com.egonw.woc.util; import com.objectspace.jgl.*; import com.objectspace.jgl.predicates.*; import com.objectspace.jgl.algorithms.*; import java.util.*; import java.io.Serializable; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.predicate.*; import com.egonw.woc.exception.*; import com.egonw.woc.files.*; public final class IupacExtender implements ConvertAble { private WoordTable wt; private ReportFile rf; public IupacExtender () {}; public String getName() { return "IupacExtend"; } public void set(WoordTable wt) { this.wt = wt; } public void set(ReportFile rf) { if (rf instanceof WocReportFile) this.rf = rf; } public WoordTable convert() { WoordTable result = new WoordTable(); if (wt != null) { Enumeration v = wt.elements(); while ( v.hasMoreElements() ) { Item item = (Item)v.nextElement(); try { result.add(extendIupacNamespace(item)); } catch (WocNotification wn) { System.out.println("Error encountered in item : " + item.toString()); } } } return result; } private Item extendIupacNamespace(Item i) { if (i.contains(Item.COMMENT)) { Vector result = new Vector(); Enumeration comments = ((Vector)i.get(Item.COMMENT)).elements(); while ( comments.hasMoreElements() ) { result.addElement(this.comment((Memo)comments.nextElement(), (String)i.get(Item.NAME))); } i.add(Item.COMMENT, result); } if (i.contains(Item.VOORBEELD)) { Vector result = new Vector(); Enumeration comments = ((Vector)i.get(Item.VOORBEELD)).elements(); while ( comments.hasMoreElements() ) { result.addElement(this.comment((Memo)comments.nextElement(), (String)i.get(Item.NAME))); } i.add(Item.COMMENT, result); } return i; } private Memo comment(Memo m, String name) { Memo r = new Memo(); Enumeration values = m.elements(); while ( values.hasMoreElements() ) { String regel = (String)values.nextElement(); if (regel.indexOf("<iupac:def>") != -1) { regel = replace(regel, "iupac:def", "i"); } if (regel.indexOf("</iupac:def>") != -1) { regel = replace(regel, "iupac:def", "i"); } if (regel.indexOf("<iupac:regel>") != -1) { regel = replace(regel, "iupac:regel", "a href=\"\""); } if (regel.indexOf("</iupac:regel>") != -1) { regel = replace(regel, "iupac:regel", "a"); } if (regel.indexOf("<iupac:term>") != -1) { regel = replace(regel, "iupac:term", "i><b"); } if (regel.indexOf("</iupac:term>") != -1) { regel = replace(regel, "iupac:term", "b></i"); } r.add(regel); } return r; } private String replace(String in, String old, String with) { StringBuffer sb = new StringBuffer(in); int index = in.indexOf(old); if (index != -1) { sb.replace(index, index + old.length(), with); } return sb.toString(); } } --- NEW FILE: Markup.java --- package com.egonw.woc.util; import com.objectspace.jgl.*; import com.objectspace.jgl.predicates.*; import com.objectspace.jgl.algorithms.*; import java.util.*; import java.io.Serializable; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.predicate.*; import com.egonw.woc.exception.*; import com.egonw.woc.files.*; public final class Markup implements ConvertAble { private WoordTable wt; private ReportFile rf; public Markup () {}; public String getName() { return "MarkUp"; } public void set(WoordTable wt) { this.wt = wt; } public void set(ReportFile rf) { if (rf instanceof WocReportFile) this.rf = rf; } public WoordTable convert() { WoordTable result = new WoordTable(); if (wt != null) { Enumeration v = wt.elements(); while ( v.hasMoreElements() ) { try { result.add(this.commentsInItem((Item)v.nextElement())); } catch (WocNotification wn) { if (this.rf != null) { ((WocReportFile)rf).reportWocNotification(wn); } } } } return result; } public Item commentsInItem(Item i) { if (i.contains(Item.COMMENT)) { Vector result = new Vector(); Enumeration comments = ((Vector)i.get(Item.COMMENT)).elements(); while ( comments.hasMoreElements() ) { result.addElement(this.comment((Memo)comments.nextElement(), (String)i.get(Item.NAME))); } i.add(Item.COMMENT, result); } return i; } public Memo comment(Memo m, String name) { Memo r = new Memo(); Enumeration values = m.elements(); while ( values.hasMoreElements() ) { StringBuffer tot = new StringBuffer(); StringTokenizer st = new StringTokenizer( (String)values.nextElement(), "\n\t\r.,;:?!'` \"",true); while (st.hasMoreTokens()) { String token = st.nextToken(); UnaryPredicate up = new BindSecondPredicate( new IsSource(), token ); System.out.println(token); if (Finding.some((Container)this.wt, up)) { String anchor = Convert.NAMELikeToANCHORLike(token); tot.append("<a href=" + HtmlWriteFile.QUOT + "../letters/" + anchor.substring(0,1) + ".html#" + anchor + HtmlWriteFile.QUOT + ">" + token + "</a>"); } else { tot.append(token); } } r.add(tot.toString()); } return r; } } --- NEW FILE: Memo.java --- package com.egonw.woc.util; import java.util.Vector; public class Memo extends Vector{ public Memo() { super(5,3); } public void add(String s) { super.addElement(s); } public void empty() { super.removeAllElements(); } public int count() { return super.size(); } public String getLine(int i) { return (String)super.elementAt(i-1); } } --- NEW FILE: MergeItems.java --- package com.egonw.woc.util; import java.util.Vector; import java.util.Enumeration; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.exception.*; public final class MergeItems { public static Item comment(Item i, Item j) { Item result = i; return result; } } --- NEW FILE: Path.java --- package com.egonw.woc.util; import java.io.*; import java.util.*; import com.egonw.woc.exception.*; import org.xml.sax.*; import org.xml.sax.helpers.*; /** * Class that defines the path to certain files. * * @author Egon Willighagen * @version 1.1, 04/09/2000 */ public class Path { private Hashtable defs; private String name; public Path(String repository) { this(repository, "file:///vol/www/woc/bin/repository_def.xml"); } public Path(String repository, String url) { defs = new Hashtable(); name = repository; // parse the repository document try { String parserName = "org.apache.xerces.parsers.SAXParser"; XMLReader parser = (XMLReader)Class.forName(parserName).newInstance(); ContentHandler handler = new RepositoryDefHandler(repository); parser.setContentHandler(handler); parser.setFeature("http://xml.org/sax/features/validation", false); parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); parser.parse(url); if (((RepositoryDefHandler)handler).foundRepository()) { defs = ((RepositoryDefHandler)handler).returnDefs(); } else { throw new WocException("Repository (" + repository + ") not found!"); } } catch (Exception e) { System.err.println("Error: " + e); System.exit(1); } } public String getName() { return this.name; }; public String getPhysicalRoot() { return (String)defs.get("PhysicalRoot"); }; public String getDataSubDir() { return (String)defs.get("DataSubDir"); }; public String getWMLSubDir() { return (String)defs.get("WMLSubDir"); }; public String getHtmlRoot() { return (String)defs.get("HtmlRoot"); }; public String getCgiBinRoot() { return (String)defs.get("CgiBinRoot"); }; public String getLetterFileSubDir() { return (String)defs.get("LetterFileSubDir"); }; public String getItemFileSubDir() { return (String)defs.get("ItemFileSubDir"); }; public String getGroupFileSubDir() { return (String)defs.get("GroupFileSubDir"); }; public String getIndexFileSubDir() { return (String)defs.get("IndexFileSubDir"); }; public String getPictureSubDir() { return (String)defs.get("PictureSubDir"); }; public String getCSSSubDir() { return (String)defs.get("CSSSubDir"); }; public String getLocatieSubDir() { return (String)defs.get("LocatieSubDir"); }; public String getJavascriptSubDir() { return (String)defs.get("JavascriptSubDir"); }; public String getJavaSubDir() { return (String)defs.get("JavaSubDir"); }; public String getModelsSubDir() { return (String)defs.get("ModelsSubDir"); }; public String getDADMLSubDir() { return (String)defs.get("DADMLSubDir"); }; public String getMolSubDir() { return (String)defs.get("MolSubDir"); }; public String getPdbSubDir() { return (String)defs.get("PdbSubDir"); }; public String getXyzSubDir() { return (String)defs.get("XyzSubDir"); }; public String getCmlSubDir() { return (String)defs.get("CmlSubDir"); }; public String getPhysPropSubDir() { return (String)defs.get("PhysPropSubDir"); }; public String getGifSubDir() { return (String)defs.get("GifSubDir"); }; public String getBronnenFile() { return (String)defs.get("BronnenFile"); }; public String getDatabasesFile() { return (String)defs.get("DatabasesFile"); }; } --- NEW FILE: RepositoryDefHandler.java --- package com.egonw.woc.util; import java.util.*; import java.io.*; import org.openscience.dadml.*; import com.egonw.woc.*; import com.egonw.woc.exception.*; import com.egonw.woc.wml.*; import com.egonw.woc.util.*; import org.xml.sax.*; import org.xml.sax.helpers.*; public class RepositoryDefHandler extends DefaultHandler { private final int UNKNOWN = -1; private final int GENERAL = 1; private final int SPECIFIC = 2; private final int PATH = 3; private int CurrentElement; private boolean general; private String current_repository; private String wanted_repository; private String current_path_name; private String current_path; private Hashtable defs; private boolean found_repository; public RepositoryDefHandler (String repository) { this.wanted_repository = repository; this.defs = new Hashtable(); }; public boolean foundRepository() { return found_repository; } public Hashtable returnDefs() { return defs; } public void startDocument () { general = false; CurrentElement = UNKNOWN; current_repository = ""; found_repository = false; } public void endDocument () { } public void startElement (String URI, String name, String qname, Attributes atts) { setCurrentElement(name); switch (CurrentElement) { case GENERAL : general = true; break; case PATH : for (int i = 0; i < atts.getLength(); i++) { if (atts.getQName(i).equals("id")) { current_path_name = atts.getValue(i); } } break; case SPECIFIC : for (int i = 0; i < atts.getLength(); i++) { if (atts.getQName(i).equals("repository")) { current_repository = atts.getValue(i); if (current_repository.equals(wanted_repository)) { found_repository = true; } } } break; } } public void endElement(String URI, String name, String qname) { setCurrentElement(name); switch (CurrentElement) { case GENERAL : general = false; break; case PATH : if (current_repository.equals(wanted_repository) || general) { defs.put(current_path_name, current_path); // System.out.println("Added: " + current_path_name + " -> " + // current_path); } else { //System.out.println("Not added: " + current_path_name + " -> " + // current_path); } current_path_name = ""; current_path = ""; break; case SPECIFIC : current_repository = ""; break; } } public void characters (char ch[], int start, int length) { switch (CurrentElement) { case PATH : current_path = toString(ch, start, length).trim(); break; } } private void setCurrentElement(String name) { if (name.equals("general")) { CurrentElement = GENERAL; } else if (name.equals("specific")) { CurrentElement = SPECIFIC; } else if (name.equals("path")) { CurrentElement = PATH; } else { CurrentElement = UNKNOWN; }; } private String toString(char ch[], int start, int length) { StringBuffer x = new StringBuffer(); for (int i =0; i < length; i++) x.append(ch[start+i]); return x.toString(); } } --- NEW FILE: TopicExpander.java --- package com.egonw.woc.util; import java.util.Vector; import java.util.Enumeration; import com.egonw.util.*; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.wml.*; import com.egonw.woc.exception.*; public final class TopicExpander implements ConvertAble { private WoordTable wt; private ReportFile rf; public TopicExpander() {}; public String getName() { return "Topic Map Expander"; } public void set(WoordTable wt) { this.wt = wt; } public void set(ReportFile rf) { if (rf instanceof WocReportFile) this.rf = rf; } public WoordTable convert() { WoordTable result = new WoordTable(); if (wt != null) { try { result.add(wt); } catch (WocNotification wn) {}; Item i; XItem j; TopicMap tm; Enumeration values = wt.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); if (i.contains(XItem.XTOPICMAP)) { tm = (TopicMap)i.get(XItem.XTOPICMAP); Enumeration assocs = tm.getAssocs(); while (assocs.hasMoreElements()) { TMAssoc assoc = (TMAssoc)assocs.nextElement(); if (assoc.getName().equals("at-heeft-als-zuurrest")) { try { //System.out.println("Nieuwe zuurrest"); String zuurrest = (String)(assoc.getRLs()).nextElement(); //System.out.println(zuurrest); j = new XItem(); j.add(XItem.XFILENAME, i.get(XItem.XFILENAME)); j.add(Item.NAME, zuurrest); Vector commentlist = new Vector(); Memo m = new Memo(); m.add("Zuurrest van " + (String)i.get(Item.NAME) + "."); commentlist.addElement(m); j.add(Item.COMMENT, commentlist); Vector zie = new Vector(); zie.addElement((String)i.get(Item.NAME)); j.add(Item.ZIE, zie); try { result.add(j); } catch (WocException e) { // item is al aanwezig System.out.println("zuurrest van " +(String)i.get(Item.NAME)); } } catch (Exception e) { //System.out.println("oops... foutje"); }; } } } } } return result; } } |
From: Geert J. <gj...@us...> - 2002-09-03 19:40:57
|
Update of /cvsroot/woc/woc/src/woc/wocjava/source/com/egonw/woc/wml In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/wocjava/source/com/egonw/woc/wml Added Files: CMLHandler.java TMAssoc.java TopicMap.java XLANG.java XNAME.java XNODE.java Log Message: --- NEW FILE: CMLHandler.java --- package com.egonw.woc.wml; import java.util.*; import org.openscience.dadml.*; import com.egonw.woc.*; import com.egonw.woc.exception.*; import com.egonw.woc.wml.*; import com.egonw.woc.util.*; import org.xml.sax.*; import org.xml.sax.helpers.*; public class CMLHandler extends DefaultHandler { private final int UNKNOWN = -1; private final int ANY = -2; private final int STRING = -3; private final int FLOAT = -4; private final int MOLECULE = -5; private int CurrentElement; private String TITLE = ""; private String value = ""; XItem item; public CMLHandler () { item = new XItem(); }; public XItem updateItem (XItem i) { if (item.contains(Item.BRUTO)) i.add(Item.BRUTO, (Bruto)item.get(Item.BRUTO)); if (item.contains(Item.MASS)) i.add(Item.MASS, (String)item.get(Item.MASS)); if (item.contains(Item.BOILINGPOINT)) i.add(Item.BOILINGPOINT, (String)item.get(Item.BOILINGPOINT)); if (item.contains(Item.MELTINGPOINT)) i.add(Item.MELTINGPOINT, (String)item.get(Item.MELTINGPOINT)); if (item.contains(XItem.XFLASH)) i.add(XItem.XFLASH, (String)item.get(XItem.XFLASH)); if (item.contains(Item.RHO)) i.add(Item.RHO, (String)item.get(Item.RHO)); if (item.contains(Item.DIPOOL)) i.add(Item.DIPOOL, (String)item.get(Item.DIPOOL)); if (item.contains(XItem.XPKA)) i.add(XItem.XPKA, (String)item.get(XItem.XPKA)); if (item.contains(XItem.XPKB)) i.add(XItem.XPKB, (String)item.get(XItem.XPKB)); return i; } public void startDocument () { item = new XItem(); } public void endDocument () {} public void startElement (String name, AttributeList atts) { setCurrentElement(name); switch (CurrentElement) { case ANY : break; case FLOAT : for (int i = 0; i < atts.getLength(); i++) { if (atts.getName(i).equals("title")) TITLE = atts.getValue(i); } break; case STRING : for (int i = 0; i < atts.getLength(); i++) { if (atts.getName(i).equals("title")) TITLE = atts.getValue(i); } break; } } public void endElement (String name) { setCurrentElement(name); switch (CurrentElement) { case ANY : break; case STRING : if (TITLE.equals("Stoichiometry")) { item.add(Item.BRUTO, new Bruto(value)); } TITLE = ""; break; case FLOAT : if (TITLE.equals("Density")) { item.add(Item.DIPOOL, value); } else if (TITLE.equals("MeltingPoint")) { item.add(Item.MELTINGPOINT, value); } else if (TITLE.equals("BoilingPoint")) { item.add(Item.BOILINGPOINT, value); } else if (TITLE.equals("FlashPoint")) { item.add(XItem.XFLASH, value); } else if (TITLE.equals("Density")) { item.add(Item.RHO, value); } else if (TITLE.equals("pKa")) { item.add(XItem.XPKA, value); } else if (TITLE.equals("pKb")) { item.add(XItem.XPKB, value); } TITLE = ""; break; } } public void characters (char ch[], int start, int length) { switch (CurrentElement) { case ANY : break; case FLOAT : if (TITLE.length() > 0) value = toString(ch, start, length).trim(); break; case STRING : if (TITLE.length() > 0) value = toString(ch, start, length).trim(); break; } } private void setCurrentElement(String name) { if (name.equals("molecule")) { CurrentElement = MOLECULE; } else if (name.equals("float")) { CurrentElement = FLOAT; } else if (name.equals("string")) { CurrentElement = STRING; } else { CurrentElement = UNKNOWN; }; } private String toString(char ch[], int start, int length) { StringBuffer x = new StringBuffer(); for (int i =0; i < length; i++) x.append(ch[start+i]); return x.toString(); } } --- NEW FILE: TMAssoc.java --- package com.egonw.woc.wml; import java.util.*; public class TMAssoc { private Vector rls; private String name; public TMAssoc () { rls = new Vector(2,1); } public void setName(String name) { this.name = name; } public String getName() { return this.name; } public void addRL(String rl) { rls.addElement(rl); } public Enumeration getRLs() { return rls.elements(); } } --- NEW FILE: TopicMap.java --- package com.egonw.woc.wml; import java.util.*; public class TopicMap { private Vector assocs; private String currentAssoc; public TopicMap () { assocs = new Vector(3,1); } public void addAssocRL(TMAssoc assoc) { assocs.addElement(assoc); } public Enumeration getAssocs() { return assocs.elements(); } } --- NEW FILE: XLANG.java --- package com.egonw.woc.wml; import java.util.*; public class XLANG { private String id; private String lw; private String value; public XLANG() { id = ""; value = ""; } public String getID() { return this.id; } public void setID(String c) { this.id = c; } public String getLIDWOORD() { return this.lw; } public void setLIDWOORD(String c) { this.lw = c; } public String getValue() { return this.value; } public void setValue(String s) { this.value = s; } } --- NEW FILE: XNAME.java --- package com.egonw.woc.wml; import java.util.*; public class XNAME { private String klasse; private Vector langs; public XNAME() { klasse = ""; langs = new Vector(); } public String getCLASS() { return this.klasse; } public void setCLASS(String c) { this.klasse = c; } public void addLANG(XLANG l) { langs.addElement(l); } public Enumeration elements() { return langs.elements(); } public String getName(String lang) { String r = ""; Enumeration names = elements(); while (names.hasMoreElements()) { XLANG l = (XLANG)(names.nextElement()); if (l.getID().equals(lang)) { r = l.getValue(); } } return r; } } --- NEW FILE: XNODE.java --- package com.egonw.woc.wml; import java.util.*; public class XNODE { private String cdata; private Hashtable atts; public XNODE() { cdata = ""; atts = new Hashtable(); } public boolean containsATT(String s) { return atts.containsKey(s); } public String getATT(String s) { return (String)atts.get(s); } public void setATT(String s, String t) { atts.put(s,t); } public void setCDATA(String s) { cdata = s; } public String getCDATA() { return cdata; } public String toString() { return "XNODE(" + cdata + "): " + atts.toString(); } } |
From: Geert J. <gj...@us...> - 2002-09-03 19:40:57
|
Update of /cvsroot/woc/woc/src/woc/wocjava/source/com/egonw/woc/tools In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/wocjava/source/com/egonw/woc/tools Added Files: GroupFiles.java MaakLosseItems.java SimpleAddItem.java Woord.java Log Message: --- NEW FILE: GroupFiles.java --- package com.egonw.woc.tools; import com.objectspace.jgl.*; import com.objectspace.jgl.algorithms.*; import com.objectspace.jgl.predicates.*; import java.io.*; import java.util.*; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.util.*; import com.egonw.woc.predicate.*; import com.egonw.woc.exception.*; class GroupFiles { private static String title = "WOC.GroupFiles"; private static String version = "1.3"; private static String date = "2002-01-27"; private static Path repository; public static void main(String[] args) { String reposdeffile = "file:///vol/www/woc/bin/repository_def.xml"; String repos = "woc"; System.out.println(title + " v." + version + " (" + date + ")"); int length = args.length; if (length > 0) { System.out.println("Parsing arguments..."); for (int i = 0; i < length; i++) { if (args[i].equals("-r") && ((i+1) < length)) { repos = args[i+1]; System.out.println(" repository: " + args[i+1]); i++; } else if (args[i].equals("-R") && ((i+1) < length)) { reposdeffile = args[i+1]; System.out.println(" reposdeffile: " + args[i+1]); i++; } else { System.out.println("Unknown option: " + args[i]); System.exit(1); } } } // setting default repository String url = "file:///" + reposdeffile; repository = new Path("woc", url); WocEngine we = new WocEngine(repository); we.setWoordTable(new WoordTable()); try { we.setWocReportFile(new WocReportFile("WMLreport.txt")); } catch (IOException e) { System.out.println(e); } String readfile = "woclist.xml"; System.out.println("Reading " + readfile + "..."); WocListReadFile rf = new WocListReadFile(repository, readfile); we.setReadFile((FileReadAble)rf); we.read(); System.out.println("Expanding items..."); we.setConvertAble(new Expander()); we.convert(); System.out.println("Adding group items..."); we.setConvertAble(new GroupAdder()); we.convert(); System.out.println("Marking up items..."); we.setConvertAble(new Markup()); //we.convert(); System.out.print("Writing data..."); Enumeration groepen = GroupAdder.extractGroups( we.getWT() ); while (groepen.hasMoreElements()) { String groep = (String)groepen.nextElement(); UnaryPredicate predicate = new BindSecondPredicate( new IsGroup(), new String(groep) ); we.setFilterPredicate(predicate); try { ItemWriteFile iwf = new ItemWriteFile(repository, repository.getPhysicalRoot() + repository.getGroupFileSubDir() + Convert.GROUPLikeToANCHORLike(groep) + ".html"); we.setWriteFile((FileWriteAble)iwf); we.write(); iwf.close(); } catch (IOException e) { System.out.println(e); } } } } --- NEW FILE: MaakLosseItems.java --- package com.egonw.woc.tools; import com.objectspace.jgl.*; import com.objectspace.jgl.algorithms.*; import com.objectspace.jgl.predicates.*; import java.io.*; import java.util.*; import com.egonw.woc.*; import com.egonw.woc.util.*; import com.egonw.woc.files.*; import com.egonw.woc.predicate.*; import com.egonw.woc.exception.*; import org.openscience.dadml.*; import org.openscience.dadml.filereaders.*; import org.openscience.dadml.tools.*; class MaakLosseItems { private static final String pClass = "org.apache.xerces.parsers.SAXParser"; private static String title = "WOC.MaakLosseItems"; private static String version = "1.5.0"; private static String date = "2002-01-27"; private static Path repository; public static void main(String[] args) { String reposdeffile = "file:///vol/www/woc/bin/repository_def.xml"; String repos = "woc"; System.out.println(title + " v." + version + " (" + date + ")"); int length = args.length; if (length > 0) { System.out.println("Parsing arguments..."); for (int i = 0; i < length; i++) { if ("-r".equals(args[i]) && ((i+1) < length)) { repos = args[i+1]; System.out.println(" repository: " + args[i+1]); i++; } else if ("-R".equals(args[i]) && ((i+1) < length)) { reposdeffile = args[i+1]; System.out.println(" reposdeffile: " + args[i+1]); i++; } else { System.out.println("Unknown option: " + args[i]); System.exit(1); } } } // setting default repository String url = "file://" + reposdeffile; repository = new Path(repos, url); WocEngine we = new WocEngine(repository); we.setWoordTable(new WoordTable()); try { we.setWocReportFile(new WocReportFile("WMLreport.txt")); } catch (IOException e) { System.out.println(e); } String readfile = "woclist.xml"; System.out.println("Reading " + readfile + "..."); WocListReadFile rf = new WocListReadFile(repository, readfile); we.setReadFile((FileReadAble)rf); we.read(); System.out.println("Downloading DADML database definitions..."); DBDEFLIST dbdeflist = new DBDEFLIST(); DBLIST dblist = new DBLIST(); String superXML = "http://www.sci.kun.nl/woc/super.xml"; try { // System.err.println("Downloading: " + superXML); dblist = DBLISTFileReader.read(superXML, pClass); } catch (Exception supererror) { System.err.println(supererror.toString()); return; } Enumeration dbases = dblist.databases(); while (dbases.hasMoreElements()) { DATABASE db = (DATABASE)dbases.nextElement(); String dburl = db.getURL()+db.getDefinition(); DBDEF dbdef = new DBDEF(); try { // System.err.println("Downloading: " + dburl); dbdef = DBDEFFileReader.read(dburl, pClass); dbdeflist.addDBDEF(dbdef); } catch (Exception deferror) { System.err.println(deferror.toString()); return; } } //System.out.println("Expanding items..."); //we.setConvertAble(new Expander()); //we.convert(); //we.setConvertAble(new TopicExpander()); //we.convert(); System.out.println("Adding group items..."); we.setConvertAble(new GroupAdder()); we.convert(); //System.out.println("Marking up items..."); //we.setConvertAble(new Markup()); //we.convert(); System.out.println("Writing data..."); Enumeration values = we.getWTElements(); while (values.hasMoreElements()) { Item i = (Item)values.nextElement(); we.setFilterPredicate( new BindSecondPredicate( new IsName(), (String)i.get(Item.NAME) ) ); try { System.out.println(" " + (String)i.get(Item.NAME) + " -> " + (String)i.get(XItem.XFILENAME)); ItemWriteFile iwf = new ItemWriteFile(repository, repository.getPhysicalRoot() + repository.getItemFileSubDir() + (String)i.get(XItem.XFILENAME) + ".shtml", ItemFile.LONG, dbdeflist); we.setWriteFile((FileWriteAble)iwf); we.write(); iwf.close(); } catch (IOException e) { System.out.println(e); }; }; } } --- NEW FILE: SimpleAddItem.java --- package com.egonw.woc.tools; import com.objectspace.jgl.*; import com.objectspace.jgl.algorithms.*; import com.objectspace.jgl.predicates.*; import java.io.*; import java.util.*; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.util.*; import com.egonw.woc.predicate.*; import com.egonw.woc.exception.*; import org.openscience.dadml.*; import org.openscience.dadml.filereaders.*; import org.openscience.dadml.tools.*; class SimpleAddItem { private static final String pClass = "org.apache.xerces.parsers.SAXParser"; private static String title = "WOC.SimpleAddItem"; private static String version = "1.4"; private static String date = "23-02-2001"; private static Path repository; private static String module = ""; public static void main(String[] args) { System.out.println(title + " v." + version + " (" + date + ")"); int length = args.length; String reposdeffile = "file:///vol/www/woc/bin/repository_def.xml"; String repos = "woc"; if (length > 0) { String f = ""; if (length > 1) { System.out.println("Parsing arguments..."); for (int i = 0; i < length; i++) { if (args[i].equals("-r") && ((i+1) < length)) { i++; System.out.println(" repository: " + args[i]); repos = args[i]; } else if (args[i].equals("-R") && ((i+1) < length)) { i++; reposdeffile = args[i]; System.out.println(" reposdeffile: " + reposdeffile); } else if (args[i].equals("-m") && ((i+1) < length)) { i++; module = args[i]; System.out.println(" module: " + args[i]); } } // file is considered the last argument f = args[length-1]; } else { f = args[0]; } // setting default repository String url = "file://" + reposdeffile; repository = new Path(repos, url); WocEngine we = new WocEngine(repository); we.setWoordTable(new WoordTable()); try { we.setWocReportFile(new WocReportFile("WMLreport.txt")); } catch (IOException e) { System.out.println(e); } System.out.println("Reading data..."); if (!(f.endsWith(".xml"))) { f = f + ".xml"; } WMLReadFile rf = new WMLReadFile(repository, f); we.setReadFile((FileReadAble)rf); we.read(); System.out.println("Downloading DADML database definitions..."); DBDEFLIST dbdeflist = new DBDEFLIST(); DBLIST dblist = new DBLIST(); String superXML = "http://www.sci.kun.nl/woc/super.xml"; try { System.err.println("Downloading: " + superXML); dblist = DBLISTFileReader.read(superXML, pClass); } catch (Exception supererror) { System.err.println(supererror.toString()); return; } Enumeration dbases = dblist.databases(); while (dbases.hasMoreElements()) { DATABASE db = (DATABASE)dbases.nextElement(); String dburl = db.getURL()+db.getDefinition(); DBDEF dbdef = new DBDEF(); try { System.err.println("Downloading: " + dburl); dbdef = DBDEFFileReader.read(dburl, pClass); dbdeflist.addDBDEF(dbdef); } catch (Exception deferror) { System.err.println(deferror.toString()); return; } } System.out.println("Expanding item..."); we.setConvertAble(new Expander()); we.convert(); // System.out.println("Marking up items..."); // if (module.length() > 0) { // try { // Class c = Woord.class.getClassLoader().loadClass("com.egonw.woc.util." + module); // we.setConvertAble((ConvertAble)c.newInstance()); // we.convert(); // } catch (ClassCastException e) { // System.out.println("Object " + module + " is not a module!"); // } catch (ClassNotFoundException e) { // System.out.println("Module " + module + " not found!"); // } catch (Exception e) { // System.out.println("Error: " + e); // } // } System.out.print("Writing data..."); Enumeration values = we.getWTElements(); while (values.hasMoreElements()) { Item i = (Item)values.nextElement(); System.out.println("Processing: " +(String)i.get(Item.NAME)); we.setFilterPredicate( new BindSecondPredicate( new IsName(), (String)i.get(Item.NAME) ) ); try { String filename = repository.getPhysicalRoot() + repository.getItemFileSubDir() + (String)i.get(Item.ANCHOR) + ".shtml"; System.out.println("Filename: " + filename); ItemWriteFile iwf = new ItemWriteFile(repository, filename, ItemFile.LONG, dbdeflist); we.setWriteFile((FileWriteAble)iwf); we.write(); iwf.close(); } catch (IOException e) { System.out.println(e); }; }; System.out.println(); } else { System.out.println("syntax: java SimpleAddItem [-r repository] <item.xml>"); } } } --- NEW FILE: Woord.java --- package com.egonw.woc.tools; import com.objectspace.jgl.*; import com.objectspace.jgl.algorithms.*; import com.objectspace.jgl.predicates.*; import java.io.*; import java.util.*; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.util.*; import com.egonw.woc.predicate.*; import com.egonw.woc.exception.*; class Woord { private static String title = "WOC.Woord"; private static String version = "1.5.0"; private static String date = "2002-01-27"; private static String path = "woc"; private static Path repository; private static String module = ""; public static void main(String[] args) { String reposdeffile = "file:///vol/www/woc/bin/repository_def.xml"; String repos = "woc"; System.out.println(title + " v." + version + " (" + date + ")"); int length = args.length; if (length > 0) { System.out.println("Parsing arguments..."); for (int i = 0; i < length; i++) { if (args[i].equals("-r") && ((i+1) < length)) { i++; path = args[i]; System.out.println(" repository: " + args[i]); } else if ("-R".equals(args[i]) && ((i+1) < length)) { reposdeffile = args[i+1]; System.out.println(" reposdeffile: " + args[i+1]); i++; } else { System.out.println("Unknown option: " + args[i]); System.exit(1); } } } // setting default repository String url = "file://" + reposdeffile; repository = new Path("woc", url); WocEngine we = new WocEngine(repository); we.setWoordTable(new WoordTable()); try { we.setWocReportFile(new WocReportFile("WMLreport.txt")); } catch (IOException e) { System.out.println(e); } String readfile = "woclist.xml"; System.out.println("Reading " + readfile + "..."); WocListReadFile rf = new WocListReadFile(repository, readfile); we.setReadFile((FileReadAble)rf); we.read(); System.out.println("Expanding items..."); we.setConvertAble(new Expander()); we.convert(); we.setConvertAble(new TopicExpander()); we.convert(); System.out.println("Adding group items..."); we.setConvertAble(new GroupAdder()); we.convert(); System.out.println("Marking up items..."); if (module.length() > 0) { try { Class c = Woord.class.getClassLoader().loadClass(module); we.setConvertAble((ConvertAble)c.newInstance()); we.convert(); } catch (ClassCastException e) { System.out.println("Object " + module + " is not a module!"); } catch (ClassNotFoundException e) { System.out.println("Module " + module + " not found!"); } catch (Exception e) { System.out.println("Error: " + e); } } System.out.print("Writing data..."); for (int i=97;i<=122;i++) { we.setFilterPredicate( new BindSecondPredicate( new SortsAsLetter(), new Character((char)i) ) ); try { we.setWriteFile((FileWriteAble)(new ShortLetterFile(repository, (char)i, 10))); } catch (IOException e) { System.out.println(e); }; we.write(); System.out.print("."); }; } } |
Update of /cvsroot/woc/woc/src/woc/wocjava/source/com/egonw/woc/predicate In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/wocjava/source/com/egonw/woc/predicate Added Files: HasBrutoFormule.java HasEnglishWord.java HasField.java HasGermanWord.java HasItem.java HasURL.java IsAfkorting.java IsChemical.java IsCode.java IsGroup.java IsName.java IsSource.java LessBrutoFormule.java LessCasNumber.java LessEnglishWord.java LessFWord.java LessGermanWord.java LessWocWord.java SortsAsLetter.java StartsWith.java Log Message: --- NEW FILE: HasBrutoFormule.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class HasBrutoFormule implements UnaryPredicate { public boolean execute( Object object ) { return ((Item)object).contains(Item.BRUTO); } } --- NEW FILE: HasEnglishWord.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class HasEnglishWord implements UnaryPredicate { public boolean execute( Object object ) { return ((Item)object).contains(Item.ENGLISH); } } --- NEW FILE: HasField.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class HasField implements BinaryPredicate { public boolean execute( Object first, Object second ) { if (!(first instanceof Item) || !(second instanceof Integer)) { return false; } else { return ((Item)first).contains( ((Integer)second).intValue() ); } } } --- NEW FILE: HasGermanWord.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class HasGermanWord implements UnaryPredicate { public boolean execute( Object object ) { return ((Item)object).contains(XItem.XGERMAN); } } --- NEW FILE: HasItem.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; /** * HasItem is a binary predicate that * returns true if the first operand (an Item) has * the name of the second operand */ public final class HasItem implements BinaryPredicate { /** * Return true if the first operand is greater than the second operand. * @param first The first operand. necessary. * @param second The second operand. necessary. * @return first.get(Item.NAME).equals(second) */ public boolean execute( Object first, Object second ) { boolean result = false; if (first instanceof Item && second instanceof String) result = ((String)((Item)first).get(Item.NAME)).equals(second); return result; } } --- NEW FILE: HasURL.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class HasURL implements UnaryPredicate { public boolean execute( Object object ) { return ((Item)object).contains(Item.URL); } } --- NEW FILE: IsAfkorting.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class IsAfkorting implements UnaryPredicate { public boolean execute( Object object ) { boolean result = false; if (((Item)object).contains(XItem.XTYPE)) { XTYPE xt = (XTYPE)((Item)object).get(XItem.XTYPE); result = xt.isType(XTYPE.ABBREV); }; return result; } } --- NEW FILE: IsChemical.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class IsChemical implements UnaryPredicate { public boolean execute( Object object ) { boolean result = false; if (((Item)object).contains(XItem.XTYPE)) { XTYPE xt = (XTYPE)((Item)object).get(XItem.XTYPE); result = (((Item)object).contains(Item.CHEMICAL) || ((Item)object).contains(Item.CASNR) || xt.isType(XTYPE.CHEMICAL) || xt.isType(XTYPE.POLYMER) || xt.isType(XTYPE.MIXTURE)); } else { result = (((Item)object).contains(Item.CHEMICAL) || ((Item)object).contains(Item.CASNR)); } return result; } } --- NEW FILE: IsCode.java --- package com.egonw.woc.predicate; import java.util.Vector; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class IsCode implements BinaryPredicate { public boolean execute( Object first, Object second ) { return ((String)((Item)first).get(XItem.XCODE)).toLowerCase().equals(((String)second).toLowerCase()); } } --- NEW FILE: IsGroup.java --- package com.egonw.woc.predicate; import java.util.Vector; import com.objectspace.jgl.*; import com.egonw.woc.*; /** * Checks wether this Item belongs to a group. */ public final class IsGroup implements BinaryPredicate { /** * Return true if the Group field of * the item first contains the value of the second operand. * @param first The first operand. Must be off class Item. * @param second The second operand. Must be a string. * @return */ public boolean execute( Object first, Object second ) { if (((Item)first).contains(Item.GROUP)) { return ((Vector)((Item)first).get(Item.GROUP)).contains(second); } else { return false; } } } --- NEW FILE: IsName.java --- package com.egonw.woc.predicate; import java.util.Vector; import com.objectspace.jgl.*; import com.egonw.woc.*; /** * Checks wether this Item belongs to a group. */ public final class IsName implements BinaryPredicate { /** * Return true if the Name field of * the item first contains the value of the second operand. * @param first The item to be checked. * @param second The name that the item should have. * @return */ public boolean execute( Object first, Object second ) { return ((String)((Item)first).get(Item.NAME)).toLowerCase().equals(((String)second).toLowerCase()); } } --- NEW FILE: IsSource.java --- package com.egonw.woc.predicate; import java.util.*; import com.objectspace.jgl.*; import com.egonw.woc.*; /** * Checks wether this Item belongs to a group. */ public final class IsSource implements BinaryPredicate { /** */ public boolean execute( Object first, Object second ) { boolean result = false; result = ((String)((Item)first).get(Item.NAME)).toLowerCase().equals(second); //if (((Item)first).contains(Item.VERVOEGINGEN)) { // Enumeration vvn = ((Vector)((Item)first).get(Item.VERVOEGINGEN)).elements(); // while (vvn.hasMoreElements()) // result = (result || ((String)vvn.nextElement()).toLowerCase().equals(second)); //} return result; } } --- NEW FILE: LessBrutoFormule.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class LessBrutoFormule implements BinaryPredicate { private String pakSymbool(String s) { StringBuffer sb = new StringBuffer(); if (s.length() >= 2) { char c = s.charAt(0); if (Character.isLetter(c) && Character.isUpperCase(c)) { sb.append(c); c = s.charAt(1); if (Character.isLetter(c) && Character.isLowerCase(c)) sb.append(c); } } else if (s.length() >= 1) { char c= s.charAt(0); if (Character.isLetter(c) && Character.isUpperCase(c)) { sb.append(c); } } return sb.toString(); } private String pakAantal(String s) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (Character.isDigit(c)) { sb.append(c); } else { i = s.length(); } } return sb.toString(); } private String stripSymbool(String s) { int start = 0; if (s.length() >= 2) { char c = s.charAt(0); if (Character.isLetter(c) && Character.isUpperCase(c)) { start = 1; c = s.charAt(1); if (Character.isLetter(c) && Character.isLowerCase(c)) start = 2; } } else if (s.length() >= 1) { char c= s.charAt(0); if (Character.isLetter(c) && Character.isUpperCase(c)) { start = 1; } } String result = ""; if (s.length() > start) result = new String(s.substring(start)); return result; } private String stripAantal(String s) { while ((s.length() > 0) && (Character.isDigit(s.charAt(0)))) { if (s.length() > 1) { s = new String(s.substring(1)); } else { s = new String(); }; } return s; } public boolean execute( Object first, Object second ) { boolean result = false; if ( !((Item)first).contains(Item.BRUTO) ) { result = true; } else if ( !((Item)second).contains(Item.BRUTO) ) { result = false; } else { String eerste = ((Bruto)((Item)first).get(Item.BRUTO)).toString(); String tweede = ((Bruto)((Item)second).get(Item.BRUTO)).toString(); String tekenE = new String(); String tekenT = new String(); String digitE = new String(); String digitT = new String(); boolean succes = false; while (!succes) { tekenE = new String(pakSymbool(eerste)); tekenT = new String(pakSymbool(tweede)); eerste = new String(stripSymbool(eerste)); tweede = new String(stripSymbool(tweede)); digitE = new String(pakAantal(eerste)); digitT = new String(pakAantal(tweede)); eerste = new String(stripAantal(eerste)); tweede = new String(stripAantal(tweede)); if (tekenE.equals(tekenT)) { if (digitE.equals(digitT)) { if (tekenE.length() == 0) succes = true; } else { if (digitE.length() == digitT.length()) { result = (digitE.compareTo(digitT) < 0); } else { result = (digitE.length() < digitT.length()); } succes = true; } } else { succes = true; result = (tekenE.compareTo(tekenT) < 0); } } } return result; } } --- NEW FILE: LessCasNumber.java --- package com.egonw.woc.predicate; import java.util.*; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class LessCasNumber implements BinaryPredicate { public boolean execute( Object first, Object second ) { boolean result = false; if (((Item)first).contains(Item.CASNR)) { if (((Item)second).contains(Item.CASNR)) { // assume altijd drie tokens StringTokenizer st1 = new StringTokenizer((String)((Item)first).get(Item.CASNR), "-"); StringTokenizer st2 = new StringTokenizer((String)((Item)second).get(Item.CASNR), "-"); int i = Integer.parseInt(st1.nextToken()); int j = Integer.parseInt(st2.nextToken()); if ( i == j ) { if ( Integer.parseInt(st1.nextToken()) <= Integer.parseInt(st2.nextToken()) ) { result = true; } else { result = false; } } else if ( i < j ) { result = true; } else { result = false; } } else { result = false; } } else { result = true; } return result; } } --- NEW FILE: LessEnglishWord.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class LessEnglishWord implements BinaryPredicate { public boolean execute( Object first, Object second ) { try { return ( strip((String)((Item)first).get(Item.ENGLISH))).compareTo( strip((String)((Item)second).get(Item.ENGLISH))) < 0; } catch (NullPointerException e) { if (((Item)first).contains(Item.ENGLISH)) { return false; } else { return true; } } } private String strip(String s) { StringBuffer sb = new StringBuffer(); int i = 0; while ((i <= s.length() -1) && (!Character.isLetter(s.charAt(i)))) i++; while (i <= s.length() -1) { sb.append(s.charAt(i)); i++; } return sb.toString(); } } --- NEW FILE: LessFWord.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class LessFWord implements BinaryPredicate { public boolean execute( Object first, Object second ) { try { return strip(((FWord)first).getFWord()).compareTo( strip(((FWord)second).getFWord())) < 0; } catch (NullPointerException e) { return false; } } private String strip(String s) { StringBuffer sb = new StringBuffer(); int i = 0; while ((i <= s.length() -1) && (!Character.isLetter(s.charAt(i)))) i++; while (i <= s.length() -1) { sb.append(s.charAt(i)); i++; } return sb.toString(); } } --- NEW FILE: LessGermanWord.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; public final class LessGermanWord implements BinaryPredicate { public boolean execute( Object first, Object second ) { try { return ( strip((String)((Item)first).get(XItem.XGERMAN))).compareTo( strip((String)((Item)second).get(XItem.XGERMAN))) < 0; } catch (NullPointerException e) { if (((Item)first).contains(XItem.XGERMAN)) { return false; } else { return true; } } } private String strip(String s) { StringBuffer sb = new StringBuffer(); int i = 0; while ((i <= s.length() -1) && (!Character.isLetter(s.charAt(i)))) i++; while (i <= s.length() -1) { sb.append(s.charAt(i)); i++; } return sb.toString(); } } --- NEW FILE: LessWocWord.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; /** * Sorts items by strings. * * @author Egon Willighagen * @version 1.1, 2/7/98 * * 2/7/98: placed in com.egonw.woc * 24/2/98: Now skips the first non-characters for sorting * */ public final class LessWocWord implements BinaryPredicate { public boolean execute( Object first, Object second ) { return strip(first.toString().toLowerCase()).compareTo( strip(second.toString().toLowerCase()) ) < 0; } private String strip(String s) { StringBuffer sb = new StringBuffer(); int i = 0; while ((i <= s.length() -1) && (!Character.isLetter(s.charAt(i)))) i++; while (i <= s.length() -1) { sb.append(s.charAt(i)); i++; } return sb.toString(); } } --- NEW FILE: SortsAsLetter.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; import com.egonw.woc.util.*; /** * StartsWith is a binary predicate that * returns true if the first operand as a string * starts with the second operand as a string. */ public final class SortsAsLetter implements BinaryPredicate { /** * Return true if the first operand is greater than the second operand. * @param first The first operand. necessary. * @param second The second operand. necessary. * @return first.toString().startsWith( second.toString() */ public boolean execute( Object first, Object second ) { return Convert.stripTillFirstLetter(first.toString()).startsWith( second.toString() ); } } --- NEW FILE: StartsWith.java --- package com.egonw.woc.predicate; import com.objectspace.jgl.*; import com.egonw.woc.*; /** * StartsWith is a binary predicate that * returns true if the first operand as a string * starts with the second operand as a string. */ public final class StartsWith implements BinaryPredicate { /** * Return true if the first operand is greater than the second operand. * @param first The first operand. necessary. * @param second The second operand. necessary. * @return first.toString().startsWith( second.toString() */ public boolean execute( Object first, Object second ) { return first.toString().startsWith( second.toString() ); } } |
Update of /cvsroot/woc/woc/src/woc/wocjava In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/wocjava Added Files: Changelog Makefile.am Makefile.am.new repository_def.xml repository_def.xml.in wocjava.jar woclist.pl woclist.sh Log Message: --- NEW FILE: Changelog --- 2002-02-12 ---------- * spaanse, italiaanse, franse en friese vertalingen worden nu ook gegeven --- NEW FILE: Makefile.am --- ##### CONFIGURE DEFINITIONS ##### PREFIX="@prefix@" ##### GLOBAL DEFINITIONS ##### JAVAC=${JAVA_HOME}/bin/javac JAR=${JAVA_HOME}/bin/jar JAVA=${JAVA_HOME}/java javalibdir=${PREFIX}/shared/lib/java ##### AUTOMAKE SPECIALS ##### wocjavajardir=${javalibdir}/woc wocjavajar_DATA= wocjava.jar CLEANFILES= ${wocjavajar_DATA} ##### LOCAL DEFINITIONS ##### sourcedir=source builddir=build woctree=com/egonw/woc _JARS:=`ls -1 ${javalibdir}/*.jar ${wocjavajardir}/*.jar | perl -ne "s/\n|\r/:/g; print;"` _WOCFILES=`cd ${sourcedir}; find ${woctree} -name "*.java" | perl -ne "s/\n|\r/ /g; print;"` ## _WOCFILES wordt recursief omgezet naar WOCFILES JAVAFILES=${WOCFILES:%=${sourcedir}/%} CLASSFILES=${WOCFILES:.java=.class} DEPCLASSFILES=${CLASSFILES:%=${builddir}/%} ##### RULES ##### ${wocjavajar_DATA}: FORCE @${MAKE} "JARS=${_JARS}" "WOCFILES=${_WOCFILES}" "${wocjavajar_DATA}-build" FORCE: #${wocjavajar_DATA}-build: echo-vars ${DEPCLASSFILES} ${wocjavajar_DATA}-build: ${DEPCLASSFILES} @echo "..Packing Class files to '${wocjavajar_DATA}'.." @cd build; "${JAR}" cf "../${wocjavajar_DATA}" ${CLASSFILES} ## debugging purpose, put echo-vars as first prerequisite in rule above echo-vars: echo ${WOCFILES} > /dev/null cat echo ${JAVAFILES} > /dev/null cat echo ${CLASSFILES} > /dev/null cat echo ${DEPCLASSFILES} > /dev/null cat ${DEPCLASSFILES}: ${JAVAFILES} @echo "..Compiling Java files to Class files.." mkdir -p build @if [ "$$OSTYPE" = "cygwin32" ] || [ "$$OSTYPE" = "cygwin" ] || ["$$OSTYPE" = "posix" ] ; then \ "${JAVAC}" -classpath `cygpath --path --windows "${JARS}"` -d build -O ${JAVAFILES} ; \ else \ "${JAVAC}" -classpath "${JARS}" -d build -O ${JAVAFILES} ; \ fi clean: rm -f "${CLEANFILES}" cd ${builddir}; rm -fR * --- NEW FILE: Makefile.am.new --- ##### GLOBAL DEFINITIONS ##### JAVAC=${JAVA_HOME}/bin/javac JAR=${JAVA_HOME}/bin/jar JAVA=${JAVA_HOME}/java ## prefix is set by configure ## libdir should be set by configure as well? #javalibdir=${libdir}/java javalibdir=${prefix}/shared/lib/java ##### AUTOMAKE SPECIALS ##### wocjavajardir=${javalibdir}/woc reposdir=${prefix}/shared/etc wocjavajar_DATA= wocjava.jar # repos_DATA= repository_def.xml CLEANFILES= wocjava.jar # CLEANFILES= repository_def.xml wocjava.jar ##### LOCAL DEFINITIONS ##### sourcedir=source builddir=build woctree=com/egonw/woc _JARS:=`ls -1 ${javalibdir}/*.jar ${wocjavajardir}/*.jar | perl -ne "s/\n|\r/:/g; print;"` #_WOCFILES=`cd ${sourcedir}; find ${woctree} -name "*.java" | perl -ne "s/\n|\r/ /g; print;"` _WOCFILES=`ls -1 ${sourcedir}/${woctree}/*.java | perl -ne "s/\n|\r/ /g; print;"` ## _WOCFILES wordt recursief omgezet naar WOCFILES JAVAFILES:=${WOCFILES:%=${sourcedir}/%} CLASSFILES:=${WOCFILES:.java=.class} DEPCLASSFILES:=${CLASSFILES:%=${builddir}/%} ##### RULES ##### VPATH *.java ${sourcedir}/${woctree} VPATH *.java ${sourcedir}/${woctree}/* VPATH *.class ${builddir}/${woctree} VPATH *.class ${builddir}/${woctree}/* #${wocjavajar_DATA}: FORCE # @${MAKE} "JARS=${_JARS}" "WOCFILES=${_WOCFILES}" "${wocjavajar_DATA}-build" FORCE: #${wocjavajar_DATA}-build: echo-vars ${DEPCLASSFILES} #${wocjavajar_DATA}-build: ${DEPCLASSFILES} #${wocjavajar_DATA}: ${builddir}/${woctree}/*.class ${builddir}/${woctree}/*/*.class ${wocjavajar_DATA}-build: ${CLASSFILES} @echo "..Packing Class files to '${wocjavajar_DATA}'.." @cd build; "${JAR}" cf "../${wocjavajar_DATA}" ${CLASSFILES} ## debugging purpose, put echo-vars as first prerequisite in rule above echo-vars: echo ${WOCFILES} > /dev/null cat echo ${JAVAFILES} > /dev/null cat echo ${CLASSFILES} > /dev/null cat echo ${DEPCLASSFILES} > /dev/null cat echo $(patsubst ${builddir}/%,${sourcedir}/%,$(@:.class=.java)) > /dev/null cat #${DEPCLASSFILES}: ${JAVAFILES} # @echo "..Compiling Java files to Class files.." # mkdir -p build # @if [ "$$OSTYPE" = "cygwin32" ] || [ "$$OSTYPE" = "cygwin" ] || ["$$OSTYPE" = "posix" ] ; then \ # "${JAVAC}" -classpath `cygpath --path --windows "${JARS}"` -d build -O ${JAVAFILES} ; \ # else \ # "${JAVAC}" -classpath "${JARS}" -d build -O ${JAVAFILES} ; \ # fi #%.class: $(patsubst ${builddir}/%,${sourcedir}/%,$(@:.class=.java)) #${builddir}%: $(patsubst ${builddir}%,${sourcedir}%,$@) #%.class: ${builddir}/${woctree}/*.class ${builddir}/${woctree}/*/*.class: $@ FORCE @echo "..Compiling Java files $< to Class files $@.." mkdir -p build @if [ "$$OSTYPE" = "cygwin32" ] || [ "$$OSTYPE" = "cygwin" ] || ["$$OSTYPE" = "posix" ] ; then \ "${JAVAC}" -classpath `cygpath --path --windows "${JARS}"` -d build -O $< ; \ else \ "${JAVAC}" -classpath "${JARS}" -d build -O $< ; \ fi clean: rm -f "${wocjavajar_DATA}" cd ${builddir}; rm -fR * --- NEW FILE: repository_def.xml --- <repositories> <!-- definitions of repositories consist mostly of directory names --> <general> <path id="PhysicalRoot">/cygdrive/e/woc/wocnew/web-docs/</path> <!-- definition of DADML dirs --> <path id="DADMLSubDir">data/dadml/</path> <path id="MolSubDir">mol/</path> <path id="PdbSubDir">pdb/</path> <path id="XyzSubDir">xyz/</path> <path id="CmlSubDir">cml/</path> <path id="PhysPropSubDir">fysisch/cml/</path> <path id="GifSubDir">gifgalary/</path> <!-- website --> <path id="HtmlRoot">http://www-woc.sci.kun.nl/</path> <path id="CgiBinRoot">http://www-woc.sci.kun.nl/cgi-bin/</path> <path id="JavaSubDir">java/</path> <!-- other --> <path id="BronnenFile">woc_bron.html</path> <path id="DatabasesFile">super.xml</path> </general> <specific repository="woc"> <!-- source --> <path id="DataSubDir">data/</path> <path id="WMLSubDir">data/wml</path> <path id="PictureSubDir">data/pictures/</path> <path id="ModelsSubDir">data/compounds/</path> <!-- website --> <path id="LetterFileSubDir">gui/letters/</path> <path id="ItemFileSubDir">gui/items/</path> <path id="GroupFileSubDir">gui/groups/</path> <path id="IndexFileSubDir">gui/index/</path> <path id="CSSSubDir">gui/styles/</path> <path id="LocatieSubDir">gui/locatie/</path> <path id="JavascriptSubDir">gui/javascript/</path> </specific> <specific repository="iupac"> <!-- source --> <path id="DataSubDir">iupac/data/</path> <path id="WMLSubDir">iupac/data/wml</path> <path id="PictureSubDir">iupac/data/pictures/</path> <path id="ModelsSubDir">iupac/data/compounds/</path> <!-- website --> <path id="LetterFileSubDir">iupac/gui/letters/</path> <path id="ItemFileSubDir">iupac/gui/items/</path> <path id="GroupFileSubDir">iupac/gui/groups/</path> <path id="IndexFileSubDir">iupac/gui/index/</path> <path id="CSSSubDir">iupac/gui/styles/</path> <path id="LocatieSubDir">iupac/gui/locatie/</path> <path id="JavascriptSubDir">iupac/gui/javascript/</path> </specific> </repositories> --- NEW FILE: repository_def.xml.in --- <repositories> <!-- definitions of repositories consist mostly of directory names --> <general> <path id="PhysicalRoot">@PHYSPATH@/web-docs/</path> <!-- definition of DADML dirs --> <path id="DADMLSubDir">data/dadml/</path> <path id="MolSubDir">mol/</path> <path id="PdbSubDir">pdb/</path> <path id="XyzSubDir">xyz/</path> <path id="CmlSubDir">cml/</path> <path id="PhysPropSubDir">fysisch/cml/</path> <path id="GifSubDir">gifgalary/</path> <!-- website --> <path id="HtmlRoot">http://@SERVER_HOSTNAME@/</path> <path id="CgiBinRoot">http://@SERVER_HOSTNAME@/cgi-bin/</path> <path id="JavaSubDir">java/</path> <!-- other --> <path id="BronnenFile">woc_bron.html</path> <path id="DatabasesFile">super.xml</path> </general> <specific repository="woc"> <!-- source --> <path id="DataSubDir">data/</path> <path id="WMLSubDir">data/wml</path> <path id="PictureSubDir">data/pictures/</path> <path id="ModelsSubDir">data/compounds/</path> <!-- website --> <path id="LetterFileSubDir">gui/letters/</path> <path id="ItemFileSubDir">gui/items/</path> <path id="GroupFileSubDir">gui/groups/</path> <path id="IndexFileSubDir">gui/index/</path> <path id="CSSSubDir">gui/styles/</path> <path id="LocatieSubDir">gui/locatie/</path> <path id="JavascriptSubDir">gui/javascript/</path> </specific> <specific repository="iupac"> <!-- source --> <path id="DataSubDir">iupac/data/</path> <path id="WMLSubDir">iupac/data/wml</path> <path id="PictureSubDir">iupac/data/pictures/</path> <path id="ModelsSubDir">iupac/data/compounds/</path> <!-- website --> <path id="LetterFileSubDir">iupac/gui/letters/</path> <path id="ItemFileSubDir">iupac/gui/items/</path> <path id="GroupFileSubDir">iupac/gui/groups/</path> <path id="IndexFileSubDir">iupac/gui/index/</path> <path id="CSSSubDir">iupac/gui/styles/</path> <path id="LocatieSubDir">iupac/gui/locatie/</path> <path id="JavascriptSubDir">iupac/gui/javascript/</path> </specific> </repositories> --- NEW FILE: wocjava.jar --- PK "H°ÐÏ0À0È\Õ!6«È"Åp!£bãi×pEÅu¨¸ Ë*n3ÌaTEc* Òb=éL驾§k5ݪj+®cZÕ¹@\HϪóÞÖá'DêZszÂÓ"§N¦ÏÆý'£÷<; ¶å´-Ûr9îi.±9Gêæs#?5C¬2ïx®=ÍQÔIÑÞ4:J¦e,{;eÃYÕË5bÛs*ÆÉ¾»kXTT¶uç+ÐÊÅ^óHUìͨÚÖ¾¶oW´ º=Í.ØÎÇY²YhVMÊõáºC'+R°^ ØÎ+?ÿëPg5êºÛªk?Z]*oºöqÞã~1J÷,~$¾Ó´C 2m@9¤J@#TV¦!&G¾À/â&Å?¼Ñ@´$å¥Â'¼>Bxc¢XÒG[³¡DÈGût ð áU[0õPK>¯c2g ÓÖЪUBªà¢ªÜ9I\¥¶°òR½(i¥VêðPÛ4Áøgg¿ÙÙ¿nïÃ.2:2º* ©äÔXy[f«ÂÖ [U M44l`MCe«³õ 5 :Örî;z§{|n~3±éÐwÜá~tøI ÑY8ûÐ?·p¿û9åObþáÿø× òo¼- zþ`Yò±ãÚï'}ÛÿhöÇt\ͪH=ñ&¾e9LH¦k<_ fy=ôÜ©1õ,#Ê+PL£U²¿NÌq@/±CÚáë$´HöÛg3 -Ì`WYI÷þ+.Zâe2óÌÁ<sèÅ14Aò¤4 ²x8ÑÚNÖhUlâ1iv§4`ëé7Èë½éwÈÝ 027å¹)}'\àii.]2ê¨Ð%+T@-<I.iÓ|¢ÿÒ»Fñò! D+¨.ã¼copé* ¶H·3Q96I_f¢JåJé'èf½.»÷ðëIw?ßÂëÄì*éN6+§Ùén6«¤YnkïÿÛ&]~ÀÓßPKÁõúæ Ð]Rô>ÝÐ=ÒôË}JèCz#@èDrxRh(<©/«f´n6ªÑݪ5ªÓÎ`ÙÑy¶ 5q±°lUlÌQÐ_v5ÖÄã#a½Ò\ZÕfãFôF³ÕlketGÎÜö5³bE«õh©a¶nåZÖbbÚÖ´ëÂsl£"ü¬óϧw¦Ö¨Ù'Ð¥Nù"7²9#/Q nhºMç-~%7²yâùRÑÀ3+d1ËS3Z"¦KäMêÌM4-ÍFÛ6vÙ¬wÀ½I-gÙ§ji5eT¬R³i]+Ì¡2òãV)(jõ¤óF)'#Q´¢Áb%ÜÅ}³#¦êjY >]K1|R¢A½Ö°²«U4êpAÉÄ ÄQõâzlr½R2 $Æ×ô?ôÚU«Øt3ÂmÄ-eâ*tÔåâ¹ r.ÈÓÅR^MjÔß ¦s¨y5æ%çç8 Û_(ÅÝØü f§U±R5öµ¿×ÊZLwýKyÎ\YͧU];uA ]6Ô4âà¸ûÊ:®ª:÷=7ïî)¡äyÞsëùç«l..J´åÙJhôéÎ]«Gq¢«VËhïÿW(¢ÒlØfÑFVMÔk]ïu°×ºiU:<I®Z°ç[2ÛKnÙxkmuåW1¸Ñ᧺Ü"͵Ò\µF»SgcvÓ¤=ø ¾&ðø-·sËßx;¸)ðü_xÜ8¶ï[ïï¯ <x8/ð^ð ÷u÷ë ü¶QfäÙ Nû I¹ß#ñqþZ75ØX¤"A)$=ãTQì§0ã¸f÷wäëÆú±ùþ3X]FϧȻb¼ßTäG:ÖC³yúÊã?ûnÜ1VܶR¾ü/PKÍqPa ScÔCód¹p;#<ÎÆvsÂV NÚ À"æôÐ_F Ф7õ=³(çe¶kÊ6hjÐÉ0KO0ÓÎ~VèuÎ`ÿDå,ã¦yzÍ(éø:iYÕêu»3T¿ßH]"õSí©k¤kzI«WPKªõæ !¬à1ÌâFÌ1, ` Aϰ". 4ÑWZ^§´L2¼jeLr²X\/â@G rU3K$ô,)T]/-[¼,²·/pÕ»\ÿ¿÷µ6ÔÌ5ÞÏÅÉ^Ã"â*Uxå#bîèõQ#£¯äÒ1=»¦ÅR_j£ì.à^5sÙ¸>opÞ¥ííéº×¬ µåhÉÂßÕ²3@ u-£¤/n¦ÃzÒÌÌxxÞ̦sìÒðoz HFfGý"ÁlÎHä%ûQݲô¬@ãßGP-^Ìzª Ð|ý¼è)=´vËäs_l-ó:ó|nôÒµsN¾U÷)ê¥Upvøî/Dºa#á KÉòñ²¼ò\q «g¨«Ö+d^KîfY¯RÄödßêµÐh;d?Ãñ©²ÙU."XÚ(<ÔÚAÙ¯ç¨Ù<Cm<ÙçÔ>}÷ç69òÐpe%T÷|PT¦ÜØ(¥Ñ®rïúJEõ 9ô¨¡Iè *¡"\·.5yk~>GÍÇ¿Ój-§'[°éC=Zµ£ ô~L ¾ä.,£ÛèAÞ IΣo0wÄáö|¦¿Áßsy¬ÞZëiÕ =´ÚððPKkRµ rH*x)ËR°"²'fÌ=g¦3Ãh:Sz«ëª;¦zà{c®uÈC¾´Ùb£ÐK4¾Ý½-ÜlroMØôÓÃu¼,îh{ÅJau%y¤mW §«É¶·_(kÛÛ¥äÁ«Â\Õ÷ëÏTµÙlæjÞ2òºo¼SOôi©g5kÉ´NÎjºm¿`[åÓUû¶ÜÎ0T²¾ß¨s¯¢ÛÔjÍób-Q¸ Ïà»`Bz½ÎJªîmø´¾áÖTnºNSmººëzµP\ïw¢WWÕÜc¾y}xï×¢±6wL¿Ê øn±R.uD¨äï»UØw»iÿ¹n78Rôw!¾~0ñW>¢*En¶ðWJæeÃtHêÈg/ä3ÔL(kC¾©WÈ<B%L_è_`²? ½iãN)'X jA1¢G9_.=;Ó´Á$ù,_ú¾&N°]ß`á3â9ò%Zøaá÷1À¢ÕÂà§¿¿¯»ÇiW`Ü£@Ss%vårÊÔ»:ê4 (C1ô?PKe#L ¥ø-´%ZC@«!%¸iÒÎé®Ü¸6& ºbc¢nZ"KîÜøsÔû¦ ÄyÉy÷{ïy÷Ýyß}ù 1Ìù1áǤënH¸-á:dx)«»].Êð¡z8ôrèã\G/ñä~Qså0®`#" ®bLÁ5(¸Ë nqÅ $1Ä DÆS..2tDÆÓÚ¦5³ .9¶afÝ`¡7:½WÉçurDfÛS¾-rÕÉÈY¹ÿhÎK'Ñæ¸·L'WËlÁ7LÃ!£=Î8çz"6M¬²Öt@Ú0õÇRV·µlyɪØ9}ÞàNpɱÜú¼e*E}LÊÚæ¦n®[×ì»C72Z±B%¡URõen«ÛVN=,¥ÉæO 3HFù¾Q0HËoÓºãè6u~|Ñ å\¶õßë3t?-ê°¨gAq¬ åG飿cÞ-Þ7!Ò3á á¾B§¿à;þ*{¼'{üMÌ¿ïø vvX¾Ò*ªË4L XkY¡¦ÕÞÆIõhª7y7{KÞ`Ki]ã&Óg7Ø!° â¸ÝöJ+ífÈkû`:ÇE7hSTvý䢳(«Ì6+dWúyY>®(Ý-D3)Up ѧêÍNÙ&g#ÒWéµ½PÈ )ð¬k-Ûßì÷9øå©ðf7\*§^ezÇÎ0}pÜÚÃ5{§øcj*P9mÜl츹iQõ^{£R9jK7Üæõ¥Z¥åþ 7´¥>d6É]K3ÒC¯_àûbÞRÓ¡¼½¹ÙI²¤¯D¾!Å|4µ.Ö|Nó9ýA¿}¬%V©!?êUê=uaÏK/T<SNð"rb0TrBhð ,ÑASy|Qy aÚÅ$Õþ YÛÞÚhGèkÇÕ~«´~¶émÓ+MhF½û[<m±õ&Ë{í ó~`{ PX¨a¸x.6¢Ë I¿ã%,î«=ä3Å-FÐMÁflÏ6,ðÔZy¦=ÞND÷ß-J1£ám=£Ë ßbÚµÞV²9Z»¤xE|ñÈÞp2û%º?\ÑÚfoaßlU]B4óÓrLÜòyë~i-˸Þâ 3 vôôÕNª·ÉÔfñâDaNA©ð&ÕíHVÓïëLR2xL\¯jiØo[!º53,ñA!y0èçRØù¥v$:Òt®Dý jÈ<ÖxÛ°«b¤R0ñfvØöÀx4\¶CF{}¶Ùh7ë g¦¢¼<³ÃÉ>ìM;¾Ìè°ùÉ79àB<X9Êçªâ|Ê*Î׬â|ä*ΰâ|v+ÎG2ùh|¦ßMú gµgO.îÅ´â#¸¦X;BjT YÚMG´ y]j·¾RXÉIäõ`a3©Ëë&Duù=XÁðCø\Af7¯~ö#K¢Ùʤ|R£äcLF©Q2¥DûùÛÄ"¸ 7ßVJÀBm¸ |B,%¤m?wà)t2[øßµSÅòo¿Ã`½GÌhä ~¯GC7%)°YýYäVÒEÈÆBJÞÂ=éðKSñW%ÀéðU©øÙÄÏ¢ämìJ/OÅ/&þZJÞÁ]éð+Rñ3/¢ä]lO¯IÅ_Aü|JþÈÊH_Gü\JþOîf6ѼÜgûÇåqÍA¥Ñfÿq/ïå«ÝQO7l§É÷ Øé/%N±©DЦëÒt¹¦Kݤ4Ýj:1»0N){°@,S,7&ëVwâfæ±ð§UxT'VðWÉ^Ê®dN/cNWÑKËèÕ\5¼¨aÖ_A+õÌàÌÖUÿJìFÂjæq-¯Á¬eÏZ>¬g>oÀY_f5gehøgÜçyªlr=ÉçÿMðùG/kÞUaJsÞ*á4¥§qÌeØ G¸¼K4D\uÖ"6&ö+4ÄYN¹|bF º «×e sQlR,®+@¨Æ3e<7ø¬G>í}ÃE5»sÕçç)ÕèªÑk[b.ÛzîÇø!q³ÓHïàos'³ÁÙÉàÜÅàìdpîægaÝz]½-â^¶ûØlîg ö0PàVºz;ó_ö=üª?ÈÓ?Ư÷^d:Ìz)y³ñìÅ+ØW|g|mécîÿ ÃúÐrT9îS_þýÿPK-S q øÖîqãÎk»s¬3c»ð1ã{73î¬];SýÎÍM0ªéÎùÿïÿs¿òåW(Gw¨ fDÄh fÄÌ)ÐÌ+XPPTR`(¸£`IÁ²¯)x]Áá¤ìd§$µTà.Iܡӯ$>ö@à9É{^ò^j${Ñ%ÝTãLªÐ#¥=RгuèÒ³UØ%9çÁnôyP~¹;ïÅ5Iä²$W¼x#D$¹êÅ+ô"a/^Å&.xÁM/,\òb½x^¼-M½)/ÞÃKÃQ#6f浨I«Q-<OÇõÕ-°òyõN¨©xxÔFma[¦íϳ-=H-&5Sµt#EYy uÒ¦×öJ ⽡R©½/`«ÅÔRxÉ,-iKNoLPgZwëö"§(Òp P2?}zJ5WÆL-¦GU+íúoÐÒWk*Üo¤,UOi¦ ú7PIñÕM¡ÊüÑ@°J÷Nnâ; !ùî3zJ·zYÛ~#¦ x£ZZöDFÀ7̨#ÉÍ´3N39+º£ 45I·qcÑjºù6jtLÂÙVj,Fé@BKj)K vk§ìß®ÖuÅ¢k9 Å\-|øüb:açSâ"¥ÏÊ%¡ítike+¾c;üPtB+å¤e;¥)#Z<\Lç!|AÍä.Ù¼bXËdhoYâð£ìÑgè©M)P_J>jÆ4:×X+ÿ¶?AìÌR257LÝKfÂz*ÆfsÒ¸X¸KFÎ!½ET¬0Ñ\lFwÒc¥ë!òÊ5ñÇe¾953bÚ@AZW¢Wó\{ ½.P³y:Y+»ÿÐ3%g(Jþ¦æ ØüIFn0T¥qªT¥´e«0¾t.@5º0a25ÍIÐbN¦+¹³CC#_0/ä¿J¾L|}H§y ðy\½mYì^ ð,pT¾{à«UÅPjEjIIíVC[p G¦6t«;ùþíâ(õ/;úMÔún©Ô°Ùoñ~røòL¼xBN%×ÓÁïàÍÂ5MµC®U´Ü·dÔ?ÌÂ7E%Ú/e¡G¨]CãH[û<¾ÅïÁj}ºPÍBµÄ\EÓ}ü¬ñØoì u÷vUÞPçòW¬"Øå¾Z¿Ëï^GXà(=*Çîýõh¿Ë¶Z%·Th ÖøòBr3ç¹%<Ø¥H£n¿âF £>¿Û6Ú!·9û-]®ÏÑ.«8!×ã´E LÈ3ó5XÕbëËó§^äÏ%~ϳB#¨ÇZY¡\Oa¸^£D]ãß$u§ÃuÜ-ã&îâÞÇm|ÀZ}Ìõ¨´}Å:fù?¯1 ãGÌãg,à$ð×?ån¤E5f)êõ°D3ÏG±,Âx]t²W¯3Ú Æ®Ø]1ë Æ\F.Ð\E[÷9,ù*CNê~Ûh°ü¯éB*ÈÏ¿vìã¾-;NF'ÍÁu´ ü74u=}SÐÉ®>ɾ?^äæMÛ¼tó!W×HeìÉ}#mkövuU´ËN*¸ûÕ¹õSí"ê°§¿îfÅ{8Ó½8³ü]èáõÏ!Ì:w §ó¤}ìÁ¢HßÅ3»7³ØÉH;Öm¤%È´<;ãqp#z1ãa42YMÜ5°*GºEynÿ PKJ¼ïà j¦©ÙËÔÌ;ï2ÈL³ìhYÒ¥Nu=ÝNÝÛÍ[g}ór@ò×¹!¿ùïõ_ëÛko}ßÞ{ííþ_ÙI8g`º ^@© ¨0IÀd<ªT"`ªµ¼êÔ&Àm;Ì0KÀfc`±<dàaxÔÀc7°ÜÀ + <i`ÕÖxÚÀ_ì5ð±}:ÞÒñ¶ý:ÞÑñ®:þªã'u|?H04@':AHC¡XèJ-ÆÍRàb©,P.0ÆD1¤B©C& ,TFc <ªÚaªÅ¸)ÂéTAk¼BW'¤zÓLX;,°È7p· {p¯ ob 0Ï÷p¿ ïãub `¾ 0Çq 1Ó# 8&à#Ì6á¸SaÂg¸ÃÓkÂç¸Ë/Ä3Îârï>6BÇÞ}²&Õ%WU';'¹K¼CZª]ÞªrVCê:oEe²µªÎã®)òVTW ñûË÷ãXB§Þ¶VÝ*¬ÏxTçÞ6[«aØpéÙâÄ^½[Ñ·æ¡SkóE?¶ ã V'þ¦éueeîy·Ì#¤ç<nlEߺ)ñ:6´¢ªÂ;KzzU6£ºÔMhQ]Uë-ªòæUÖ1FX¬Ì âål¹ÕmÉàc%ׯC®Ìª¨r;ê<ÅîÜ¢âJ>]±ÛìÂ#<{º5g3sBna¶ÕÅjW6!ÚU]WSâάãÕ\[n ç:Ù¤çæØòm>WÉ·Yǰy3ÃÁièÌÑÎBAS¤U0ÂæÊaÉe¹_ζæ¸TteY2ؤXÅùQ¶,«Ã"rÓ 2³,®[ FA¦3Çeþ3s¬2§Ðe³8r¤5Ç.$`d3/[Xm5'×ås-YþÑ6¯ÛÓOT_ G+°[GØ,"¸ÝjÍÉwæéP ®qÈm Ò Ë«%#×f¢Ëju:² ýb¶ÅaGplvK¶ð$*y1ÅãZ»ä¢ÒRNÑZéö¸«¼WÑ)î*Öv.èöTU&OOòV&yª+ËürEaJi1!¶¤Úì.¯®<º$YÌwfsevE·®ÏîÐ\_Ý¥¹v§2åÙº%P¤V-þÕ7Jª«¼EUµ¼ø!ÑËÛC)-òò"îÀlÙ®¹§ÖU² »Åìý# Äþ±EÞ¼ª*¶Uð¸rbQ½ºÆm »ªð»Ë+ÊxTÔZ=S¼31-ËßL¸ ¹è߸Þ.C>üú|vZÍCµJwU¹w"ϽÊ=Ý{qakÜêzÎ8ª¶®¸6ÏðVB+|äÐëże¸Tø1{-$ñ qõÅþÒejÕ «"ª1! ¹l¦¡ÞÑìSDÿÔÛR£ØÐ×?¤«lòì&du»" l §ªö}fÕîÃü2`Fk9n5Çá¤ú6Ï6>2Ç´ç¨#o% t ¼÷ 'n u òXeÙÁoÆN¾Ódcr`cÛ2äsw1u(஢;±XqXÛðóרþ6&à8ð Jp¥øÜøÏüå$a"] êIÔ©'*©?<ä`^ÀöbL¡ZÔP=¸çD-D=-Å4Zé´3È;h÷º[1vâNÚÙtù·lÿ ó$î®Ä½RW̺ã>©7Hý±Pº÷K·`4¥QX"åã©K¥¹Ìïgû£xXZG¥gñ´óñréu4Hû±B:ÒÇxB: '¥Ïñt«¤X-ñ¤Ü+ä$¬alO gå\<Çu|^.Áz¹älg`<åØ"/ÃVù毲}/¶ÉÇÐ(ÇËòØ.ëÊÍØ¥¤á5e$v+v¼®äã ¥{7ÞT*ñ¥{ا,À[Ê:æÙ¾ï(ûq@9÷£8¨ÂÊYR¾ÄÊ÷8¬J8¢Fá¨jÂ1µ+>Rû²<ÔáøDMǧêhRóð:§Õñø\/Ôi8£ÎÆYuΩKð7u5Ëϳ}oÂ×ên|£îÃyu?¾Uá¿ÔøN=ªßà{õøA½ÿÖ¢ð?Z~Ô:àµkñÚPüfeßk $iãHÖÆª¦M&]«'C»¢´¹-¦vÚcdÒÖQ{më)FÛN±Ú«ÔQÛM´·©³vºh'¨«vÌÚß©öOÓe×£©«Þ®Õ»Ðõz7ê¡÷ z"Ý §P/}ݨ[¨·n§>úJÐ˨¯>õ ¤?Býôu||nÒ_äq;i ¾Rô=4XßG©úA¢ ¡úiJÓÏÐ0ý[n¨tÑ,FJ7(ÍH¡L#n5ÒhA£LÞá$þï,ø«ÀÿHTÊüxxÜÇØUzDñâÛÙù&ä7@[ü~O~K»}ä`bXãÊ#Ncn0%ø¡ÎÜü[¹|0ÄÕ_ØòSZ&;Éî2Ñ6t Où?½ø/PK ¹(nL ¶£01&¬¤ZQ')´¦ºÁR&X-;þ 7nLTþ .ÇQ@:[ÈÄzJ /4¼õox* æ-«` Ýët;½"?J++¶IC´üØ\µÊ¥ ½eoÛH½îQ¯Õí5Z{}²úÈ®ÖkëcV½V*oÚõ)0Vétݵþþ{è´¶öh¬ZNÝæ\¤V4WM l³Tv¬êW¯{ýöû°#½#NÕ)U6fÍ\gîi?¡cCòânë¸%l{û»ãuÆÀkþ+ï9/`\º½VwǨníºíK=ðî!³¹½3z,7Èþ:«@Vvã$欯X%_ðy6ÀòL£ä\}.Àa¾<4yþüÇÓ¤j$ݯõê'ëá/û$¯¦©£×"ÍÆKóoÁW¹®Ç Uÿæ,ë1VZR>ÀÈéjJQ¶O0ºýSç ½ª,&¯Óòöôgöãy¶YîÜS_ö"Ì4Ç ç±D.2{HÞ¾¿Ü÷»d¢"ÇrÚsÆ)%ûþôWî"pÚ·-оÈâS¸ÃÙÛÏÝõ$uí+¯ÐÜöì?ýÐ$ öW°BÙÛ {JÃ×ðSt¬)ð@³,ÍaLÃë8a£~s~hø%5\Á o\Å´ë¢{WN~ ¿ÙU ÅEõ=fÁ´1f½ Zeæ¸æ´elM©áô ½03ûå!eM SV¡dëû+S¥ÊÅ¢Q°rFÞ~£P2íË üéÞ1ÁÁ^¬ðñ¢?¦´Y02åü¤QÓ's<=²êðHz u6=@«½juýèØ¡Ìq^9jYcÐCGmËÌÎVÞ°bרÐlÍÊg}j»õ¹9£ÀI0;«õ¬mK 6?jk_±l[4ìQ8°féù¶ýQím5¸ô&klÝ,𪼽ßÊ+RªEµÞx½¬ç¸Æ?³t*|3±6 36k#ÀyFÏÓa³êóÔ áÇÃÈ|^¿@xU®z ·rF¶,!lûÁS°ËË͹9-ÙoLëå]óÒ7wJwpRÁ¦a?5Ì©¢½ê¼æÈ«îªVûmÓTÛr©ãHå¹)Ý6*1÷ÏûØÉnÕ =ÝãUJøÆU}_óÈu³ÙOÙôÈõü°ç9sö9güÀ!]̹Q&I| R7°yáùø Úã°'~°'âáûKØß[Âxøû%ìG%ìvð`ü.'V°u û~i}3Ä8Ä41ÄKø¦°&»{Ù¥÷Q:Â5 ¸P5á&¨ã8ÿÛçX3òe$_M·óóèÈï^ÆþOÇí+xzÏÐEëRÍS¾UwA%ZصiHÝìü¸Q\Æ9FLáÜM³Õ#êÅâeW)Òþ [ãæ:¡<>ôó³Mtbhdã2bcçûÂÑ»LpvpËx²åE|ç,T -²+ñ[z¸P»åp×Xãæ®ÁÃjÜØûZkÜy¸ù×îpMv¸ *çzâyytG¯ÓØ1ÀYFf'qÃÌ &æ4G%PÆK¸Æñ-¼Ì~p¼Ã$ÿéý5Ç?`b)üãß0 2éÿÃñ¿Vx©4㢲¾Î»îkñë]èID«5'½·/¢+Ñ\Í=G³5 »ûFÙ¾êÑ~l$^a¾¿Á|¿ÂL¿Êw~ù~^c¾_ÇAéG7U(x¯^±jéiëVSбòYPe×·Ü%ÕrýÑlÃeO¶1ÓSê|DZ£«ã+$ØW69®â"wm qwþ}ÏüË={Än>lÝ~èeô!Åùi>ñ(éÀq®=ÁÂd°N2(Gé"EU;C·ê¥ÜÅFcÛÑ:ßaÿ""muö¨ÿÕCËxjü_ú;î<üW[Ý2|Q»¿ 7¡m` p¸I;ný S¬R¦s<_Ê´¥ÑeìýÑD8êß "i+¢æ²+mqÙFmtE/rÙ+zÙË\Ñ˶ºl«+zÙmqE/;ï²ó®èe\vÁ«lb5l&nÆùS8ÎÙÝ|³=,Ê'YO±;îÅ ¦îG|ãϸâK$ð ºð¦ú?XÿF÷på÷4OÍ9ß?/ÿPK~Qóª äWÃ:¦]¼DSÃUÌ»Xì ,¹øeyo«}\~¨gêí ,=Ò<ý}5HdäQª«z[gwx¨ã7¦ÿÑ9a¾û_öÕ¼ù%RQ¾'Pûv%¶#%IGf§A'&Óü¡æ3ÎH3ÎI:ÈByi{úýk¿t!sA·»ËDªfy9ns0M|ÙKÕЦ¡?Lb¿T ØrTݰz2? 65y:n\òsÄT¡ªf±îÒuÁ;>DàWÑ?½8ñ fø>ÄEÞ>w ÙºAuêO£vã õßd^|^ÀA Sex R¿QL jAÁð£ÄÙVöÌì9³3³ï/oHcÛV5ljØÒBA'R0Q ²~G½ 0l( ²òɼ<#?Vä?M¸ ^üPKqøC Ô¨]uUQ(dX·S,æ~äß*(.úý¨è¼+l;Ïûçgï{ÿx}Cû(ÇahXѰ¡³' !A4°EëX6PP² ªÆ¬!1Íî<ãCºöh-#¡¨=B!f%&t,Ðä$ÏÓ×"«\¡Ö >üØb_{«¡Òؼt¸*Õæ¥eb©oé6¿A³Ú¯ÿ{q=`sP%³®ÍëÔÈl ëµyý.õ;òÿ2Î}PKbíz { ¦ÜǼX0ÁeP0ÍíÚom˵½²õl{WÕvw1¨:^îCw=p\+ëÕ+¢jï1ÖÝñ¥Ñt®äW,Qö½=kÏ/Y{×ÚÊe OV%)>]óL?ÓͤOé¨/ÕÈı5Çsu G(èÉ9(Ô+Û¢úÜÞvéIvJ<Ñì&ÅøU:õ¢_¯ÄcG>Ó· |vQÒhØ;;YWT(PiÈ1ÎO&yjÔ.ÞÔm,\¦XTåõé#áY°+¢Ü´Ýºlî]ËûU=JÑÛ>Õÿ\Ív9¼_özbÔôÚµk5ÖʬðÄ»à¨wÖR îgàÒvÉåoÜ?1.7hÒZ!ûAó hüæ TV-2²ÿ´[2!ɲÏûQËÎ-)ëÓä¹·Ï}Îyι=ýõûû¸°"Ò"dl xî !/DÂ"SDÃ?¸Íáy~ã»îrXpI °&á!ò !á)â¶°$¡E0Òý3å£"7½.mM¯\éÌ1ÃjúÊÙaåLÅÌ¿CØIøaÿaÊkÞv]¥æo$ÜéªíñR/åÇÿá© ïÁ)Ä<®[»FMeÙ×tõ Û¬¨í²Ritê"<$»¦Ö_+&×ï=2ºíªúJãw{/ÓÄZuB¬Òj©zÓì0¸«5Å$>Z5²Z7ôÜ3ªr¯Ù0_ÕÐMEÓ;¥rùÊÛõuQWMÊIh´ÙÝ+Kñ¯tvÂq¾yYÉ®ÕåvK»ÎÈN4a$hæÝ 4Á4ñYz+Ð?ECHv©lýx2÷Ó_Áç=G¤|ÐG(!LÈð«våÊñ Ó¹>f>B=Ap˶<iË%[ø ϱá3,Ú´rÖMþqip)[¢\´ú¬äù>n½ýÛ×ò£5J̬ØAKvElî`\£Ë'¦4ª§h_Üò k`¹ùûýa[}ÌÒ®àxµIÂuëÜûPKYY ¬K,oèÀnäÛbÙ-LAø Ó/c!÷à¦OÆ}ôÊx °Ia!(c³b9¯&¯Ç;'¡Ùã¼Ò^k¡¸Ø ©Xb÷¹¹NÙpùî£Ã=Å+w׳îpsÞ°nOùqX sUJ'»§® GÔÜ%bÆ¥Ûº9L¼ÖSF¯È%ÃÌòÒÚHì3}59¹]Z±¦KøâäÂTmÄúâáÞZÕ¶âDó¥;W©¨>95Úþ¾Øf}©¥& Á\"+RBk4¹Òw£ÐQ2:4bñPN&vb©#¢ZãA©°vÀCëMøÐ¸««±x|º.Á;ÈMÅâÉ®EMT)¢K[¯ô¨Qå¶T~!Þ(®'vTy@|¿¿ÖHFGyv#?´[`øs0bçÓqÕN/ÑWûÎPó £´5&haòBe©çpþü¿Ôq¦Þ)¤~Îy³Ò] zã¶eâ]¾öêÆUeóu~ÅAíǧpøU¼³Hí¾®¼ÿëx|7§Ï0êðMÂuLÃM³è%>Ä!tùÍÒKÕ9ú<=OnÊàê¼ñ6/C;A£ª|ñ#ä¬Sl«Jcª2Æ ª¦T¡4zTe8NUI£MUî¤áRÑ4Te, ªô¹¡*nóÙ5Çå×|SzÍe4ÓzxM/¾~´!þ&éûÐË"°Êhýc cRùn? ÞÄDµÞÿUÊÓÁKäy'rFÉ·Â=eã¬o¶À÷&Ç÷ð2_M¥£Èò÷ÙGNQ.;1zNöOؾÏy×ÜOÙ¬lüªñ»ÌÂðPKõ. C >B¬$BÝÝÛoïâÇ9ÎÅtî¤5\ß8ó,Ö¶løp®ôÆni¬¯Ì*ÚWÚ¾*öºX7æ_$ÄûZ·¦OËâÕÄg3Y3a2¿åï´|ãyíyѵ%~p´.8NÚêüW¶÷Þ!äî»Ò¬â¸°m²ù}²ܰSrøÊqD NNôg x¬Ç1~p¤z~PK`ö%DÛ ¦qJÁ,úÜÀiD2«[Eç-s]]·tõeÙ¹ÛÚb24{E{¨©ÍÌ«³+\wöçÛ0ódn×£ NkEnkaäó&w]9ÏàKL%3-¤öËILí5èÎÄZÝ=nñUËv.T¬ ýEo DúÅx|x¶ïxê÷òEGüТþOhfØg:öÞ\F«·ÐDk,"xg>Nq E"¸ØHrF¾#,Ô&üÑ@-ðìM¯~½N½¥ÒC¾jáó<DYèA½hA:F7 ~G¤$nÑÿ¤p^ÎѧR®!Ê6z¸J}zLë§ûzÈp"*ÍUûæ ³·5]k"9Ca`ÒÐúÿKÔ ¤> ²ÝhÙuÆ Ý ®õTÃßVo¥)FÈrÖëÉßPK>]¨w= ÜØ§`ö³b?»ºe= jq kqe½ÌõùP~~(PpÈws.Ùvý 1ø+U¸IRŦTÆ(1& &¤ý)* &'U<]Åop¯ß2äI< â,îQñ;ܯâU1ã*.`RÅìà%ÄU¼¬Wð Wò[¼qoÀð5 w7uì;m¨ ¶ôl¶ôƬTÄ·Ì©ÈXVflHMíkH=¡Oê¤nGF'½B<hgæ8µ8g'n322º°Ìv'ܰCÔ{*ºu|¸0jm°g%õפì:l¤½/A93 !XVSm¤ÍÆrÍjY*×Ó1#Í%2ÖoÙx"V(á[2¬ÔÐ5;sñ¸içU®¼¢üxûbÐku_{±MÀ³+a&ìݵñÔTÒ5Mê&mW5fx»§Óº9fdjJì6v'Ðø#ë"°þÇ6ÚªÞiôçR£FÆQ Vä%hS"dÝÜ;-+iè¼½A+2:|¤6>6F¢ÝI#et Y/¤CÈ&!a!Ûp, ø|1$Ïà¸Ø/ÃBFDïIñò%EoTH* B.ø.ø6æd |IHQ¥ßAÉÀwá ¹dà5p 9¿Â_cÞÀëPÞDÆÀ3ð¾eà]±ý,DÞÀ{ø÷áø3L7ð¢½ëùì¼èÒ°-ÒLÛù¸³KñKv:>eÛNæ9SG4l xÞ¼hÆs¦5?93¯Òî*ö¸ëd9²Ã5vÉÍæâCV)¯ÓÍÚeÍîIÓÐièÖG>Å##«¥b½=rG¬Þ§UÁvÜãY+ "u`F\÷$ÖKîy÷ ;ïeE¯÷¯NP}¦½à4ÿ_NV+VïJ]N«¡^:e»ÙÙlºNÂTÔm/ÃÅVñù¹\|0kÎ1GeD¹4ñ`ªë¶«±ñ1Ûrͬ¥O)s?¥âºPïãCÃîH5cì>zfg=¿Ô'ëî[®aá=bãûj꼯)Æ©öõÅÇú9¦}cýì¥reu]4.J[ú²VÖ¥ÜwÌÎ( í'NKf/¨3vj`tHvZO8v©Ð5É(GÃ:ïäöʽ¶Þc5l¹W®K²©R~F9h*`²v|H\âQ¦ÌFpÜ.9i%NésÂr¼;T¦«®ùËbf2Ô'Ê©¼²\â4eZ=w6ß-@&d¥èlÅ`Ï+5g}Q´ngHÃ: ZÇG^ª w¥cvòEåÛö»< n×? ä£*oW]×ÐIV*3®xw¤³¬{>_ «¤!5ìo¤ºµ(¿ô¶Ìòkè¾QR×HWf»È?µt-9ë«;¯Òª´·kÕe×1Ó1ÏÍsJ'MyÞ¿î¼Yµ5´lÑÞ ;5´Õü V-ÂGx¥î¢×b ÿjª÷Ø´nµb¹Õí@(Hx9tTeUg¶9Ê-9Öirf9*E¦G öÊØWc\ûôßKØF'üKXÏMW¢%Ü"nC¾EDxå¾FRÆeì ·ôÖ6¡fYüá2â±¶`Ø/ÁÝX®Ïi&' 3|\Oð4É×íréÆACOã8Á)<s¬d Ïñ%kò:ëlwá[Sa³Lß©ÕZ_= M/¡áï\Ä#¬õãÑZR½pÿUôÊzð¶ñ9ÉT{¬ª2zÙ ÿrFþn>Ñ÷mH{Yw0p?ÎaV:Á*!¤>Vö(9ý¬ìQ>LP´z@*ánvqsÈ£®7×UÅWÈõqM,a át.a¡å~>ʺ/bw*ÖÃÖ}¼ØÚ¦>D"DtGàb 8B¶[+×ü¬pÜa~GزO2°ìÀSÔ¦E :ÊV&ÄþóÕ¸º½AÖFÿã*=Ñ¿¡ÿö8=ávºìôÌ.TÍvUÍZD ^s&ç%oú¿þ?PK}pN¯ :Ч Vö)Я°d¿v$}-ékD1þ0è/©ÐqXE£*NcDÅ9dTGZÅU1 iQ1aWqHB$3:'aof´øÐxbä,îä×7õ§¼ä¹¦]¡ågZ¹]« ×ðLÇ x+ÁxWB_f®%6JËL±äTs¢âع §óDuêwô óýS¿ütL¶é]¤Ù¬S:ý9û¾3á§Kè.¶X¨U×»l¬YÌP[×ÌàÆ(¨ ÛÐó··ÞÝâj]Ø]Îlc÷êFÕÊó×[¯,äçb%ÇöÓ^çãÃkÏÖÍaÝrǵP.:v¥nÔJólÞbNLÔa©öã¸bX5öÚýÀ`+ ;²üÀ°m1ëTëÑ¿[_qwM«Ì=üùiù©¿=_ ªe®{7ų Ç-Ó>a§^óô£ëæs¿øÌ×ï9Ç1Þ r8·ëïË@âצJAjgi¤ÞC[ Ò5uê&Ætm¤u3ºÖ®í9² hôu| ØÅQô`8#Äs>I-³M3§a6«¿Gç&ftíPÀÔµ¡Ð¼?4¡yüæIhÒ´ÄAÌp¾B-îí ó|Ã<¥k!:¢c-Ñ]<_`}¥&n¦»N\çÃi]SXþÒ2Ðv@ÚÞè«nzà°?( ËÂq$0AìqB/¶¦Chú ,<MèBÏz ç_¾àqûbwÞA)êZ9@ îßB6û½vо® -ô7è6öl#ÁÛ ?¾eÁ×±7ÍmèP8&øÏU±âñ¥ÐÍ.5 ç|ÚúX1ÁÜ6dPKnÊÎ93 !Éó%3$ÈCÉ/ÉLþEþD>&9o-%&ñøí¾sË»÷Ü{õö¿þµâ # g5d5ä4F5<©áÕðw5¼¯á ªxNÅó*^Pñ¢T¼¬âWT\Qñ«*>Vñk*®ûàGrY$erY>ÌA·nÒíR°C vú° jCqC}I+Ë<;o%cG-ËNJgE§yMKIJ 3>+Î4xȱ 3C8Póõù°aîqGÜõù¡xU·â¯ ÅãÓÝO?qg>6íâÓÝÉã¦$çuPZ¶³Ç`vR!ªÈ>î\g%%.¨ ±º2Ý,©L!QÊ÷TÊÝXúEÎê¬èt%sÕ-ÃK~XÞ¶jø¬êî{«àÿ©Ú%zWÌÈ&)îV0³´µEFd 4 k¦âÔºOç¬JÇî²ÌsÂvv¸Ç«(Íéz@×½[n³ÑDÄÎf²±A;%«9$ÈJ I^´¤e: ÃsA7 XWs³Â|é×'°Ù ê°w <Ëï+Á5ep} ®Ïö7àÚ2xGtÝ"c[«àú?§£·î¥7ÀÔ½ä"èåÍ¿O~ ~lÄ ¶a?8!¦9¾]$gp·úI^ê§0Çðm'p^_Ç¡"£ß&ÇîÀO}áÑùz壶þq´·é3 G'°¦Õãýï`ñq¿:ѶÐZ@GÆQÛVÌâ÷È-³bkÃd6íhàÚÌlV`eXÅê¯æ[ÿCÔm¡v+»"Ìx[ã*æ³ÅåK1ê¿àu£¾í+ r »ï`Ã_Ñï±»XÆjcq[8Z¿1âu%MCüm¬Ìn®ôÔü?=UVn=ê±UÛÈ/ºMXNÚ°»vtp¿[g'k×ÅZmźÙñÛpÛñ¸¿¸Ýôú6¹ä ©8µ~íVÅ$, Yü`+*.NBT+Âjux"s]»w¾]87àÏ7"ëϰíGû.k sH³^VÅ ô&{jòVwrȯw Z8ò¹?>W¸º;À7(5Íê¤~g¥þ" rÞý9°ÿPK[ÄÇ_ê Y ¨À¸¢ ¸ x|ÌãòøLC)ad#©dd#³c» tXN;l8"À.v·];ÊÀÇÎ'`=3rAüJ`Ò #ãôÄE<71)â-x!ïâ3ñdï3ò9îñÎHã_2_aBÄ׸ â[ÄD|°ïä<Ä¡X°7{Z½jÎÖÔq¨t6úCjLRÆÔø´4¤!UÕÂòHTiå°Äò,EåøÔ32¡ôUì~]ÄÇíXd§ôHTê§b&ë5N²<gã)æPæôYªÍ'>79}>Ký$X}©vÞäñxP5½;B^0Ëã¥OWb¹®LåÖ`RS+¹)XLîÉ+çBJE¡ ªGF#¡lD¼;nPbjëj÷s]Ærðf©FD 9¤HcQ©#µó½f¯*ÖÁ붾ܩÆu9W´VKñàJÕÙ´Z?Pï´òÆ"¿;v¤FGɪ÷áôÓ¿sA¥¨¢ë86ë±èV*Ä6I>ÈÁÖ&×kÊèµEâxýçwªa CÅmÃÛõÕ:?E6(Á"g²FT©ÌÓÉHEfÅXj¨Â¬M&È~¶I%Ú2ØèòG&µ=Øy¬§íÉÜ=~5¥ f5¢hWT)qÊ'ne[Ê9}HèæÕÒÕÍÁaóåÐp-Á¡v%rK2Ôr\9Ô¬Ä$+Pò%³þQä- ªyJÑÈËê[Û sVmfD~nѦÚÜéÑ ÙׯлõV ´D·/ãil YÌy¥ülN)³nø£&°Ñè Øý;ÄØ\îá]®~ÁVÓH]e\×êÌk 0¿ è ÎSF³=þ?PK©ÛõQ B[ïI:-É.Äý-= ü~8"tÞ{ûæÍ,süþüB+#$1:Dèéì°®r[).¬9¨ÍÕãêö7;ezwÚh· ÷vÇáJÞ4UÆõ6ÍJיּ.ØÇ_®÷ékJlSç¼Ô¾<þ?¶qºTHêGùnU¦¦PÙsläOG¬%x&¯±0 wçÞEú½Öì˽hµNáp¾¾|ûMÆíØDp ÎyûAüPKi¯swã hVDpBÀI1!wJìN8#à¬s¨xWìθÐ&\Ð#à°ÜàÁeaà=±ëWp¿q©ÂMÓfÜpWÀ=\S1Ió|¨b£*ð±2¸ªb#*Lð¾U\Wñ9â*ÝfÖ®H÷¨ÖH÷ØþHet3²´êU°ç Û±ÓØ_´õ¹Ñ+ÕnI¼`$þ¶öUgaÁ°(Ö´TpoÌ-I»WX»X_CòmVÉ#fO þáÝÿ©;µR±ÇËX^°Ésl#/mîÜÖ®¯xD!ïå´¶û¸ãÙyCÁ®xÖÌÛºißÒ3鯏cYiee.T½6S °£MciÓH8Ës5-z¦ X³ÿÒ_÷øÀôð¤ËæÓvÖZ4Fts>cX' ÿÔøP|tx4® 0u¬¤1~|7×7fíôê¹aÎS&¹¨[zÒ6¬¼cÉìrÌHeÍØJ6Yt_Ë5YLó^N·´T÷L}Y$ögm[`óÆ5Ð÷`6éK µ]/¯ñÐÑ3iZÈ:æüd r³äì°çK¦aéõ)Ã3ÌÇÏýDBF!¶¥ÖÔ¥osuµ´Õ~Iì®Ñ×!]F&ÇÆX4ÝÉØÛ sæÊ9"ñÊTHØeÊµä »züùL/¤:e+¨Jº,igß$çæºL{+Q£²v8Èû×° ¸ËxéLÒÓté;´ôlíæÃûQîy×É÷ \×Jk²´ÎV^r]òÚÇuâ©»ôPǵ[ÛÂn®½»æ)`æ- Mxø+g·, ãgñ¯[Ä.øRê\#Z°áîe²<ðLÁ}Ü(¹J0Y7WM{Ö GÄ?SéiÕ´h{Çm"RÀ¾ ¸Ê¾Rs¶38Ê«½i,`¨d;,%ùU¼qÂXIì':´ã[8Rã~I]±¨Û!ÍUÀ ôS¬O÷&ÞùT/ÑÁg?}8<£)\ö)aïÁ.zØ¿Ãì`7¹ÇÙöwÌ@g7æ¸gb fÃ¥Ø;¸=tÙù¼*Í£ÄǬ!Úñ¢JTc¿W·û¿*gè½Lp ¢ÿТÁ@áp4è/1¼áãÒZNð$G°8yÎÅi°±:¹vñO8âzN/â!µ>Ýî_ÁµÉ¢KÃÅ º³ì£å<qOqêN#Äïá¢-ÅÍ6z)õ¼ªÉßU5yV6Ù-ü¥ë¼gÃîçºøúdªÍZs¨ìîW%ä »_á g¯ÿÜÀÔºPÖªZ*µÚ+Æg5£¿Î~ß1&ìXz8&½Ë>ÏÄÑÏW·ßAqÊ?{YËkø#ø£X'ï{ÖáG\`=ùSªî$^T¯ñ.¾Æ-Ü2ð`ØmyîÛDxFÆÔñìõ_a÷&¾¨ªøvuïùSVnq}ÁÓä¥rûPKñú7x -ô,1q«`' tÊÐ:aåd0¡çÃ9ÝL »Væ}Ò Có¥BÁ¶EÞ Îéfê©§RääpFd éÐrô\Nt':#DÚê|ôZÙ¯-æÿ[ÃjÕ ÁöjT,$EN¶RÒå îuhcc¤¤^bnf¦igòõh÷©«9nuNXæ°cn®í5 µ54U;Lǧ2%FâX>o%©ì5tÒjVNËr3Ó"6;¶É©HÚroÒ2Ý0ó<YÊ@Q*q¥@E¢zNKº¤Wòi<¦gim%¨eFÏ',[?´ßP£É*¨Ûò+*â_}ª ÒÙ ; öQªæ^Í»¨yçT¨.~âXdÝdça«Ö[<'ÎA&0ïîcUR©§yóµÝtWo:úÑM ÐîVz6N8ÉË4ë¦'hïmtMHz\ÐOrϨì>È!ؾeð·é¤÷~þ{,Ï"¶-¡a²4Üo\bñ{ÐýqDÄ+bç"î»»ðÇ´"zã%ü¢yÊÄ8×xáVR qGN"e] î]âvEýÿù)"mÔ¼ôXFªÍqß2iÐW4em[ëocK¤Ñ(bG+#QÄ"Ð|RÄö¨_Ñ|+<4iMø¤mÑH±u ¡Éosý6Vûu]>¹>¹z¹(ÃÿöÈ-£oÑ×@½V; àü ¿áÁºX6÷ü3l'¹ ÞâAbnE'v²»è·!¢§F¡/ËèýwÓ;¶71@¥Þϱ_b?¾ÂÜÃAü8~%ëßp¿ã0E¢ÿÊa²8pi¢LN²nÄXÖl ÞÀ¸7q\ÁÛ8¡à+x(¸ 7ð°{KÀmU0BSðø°0´©÷´vFS ÍUæQwW©{ȵusÜsî«jæ¹ÚÁ)RÚt$Ç}(ucCèÞÊÒÉ6ÿObfú¶T<ÎmJ_º÷Ö ÓÛ ÍqJËJòJÊÖÉÒi%~yæ"IæqXêµìQu"a¨6¡¶[¦ËM·K3cM-2M ¦å6Ä[íCånÝÔݽ>T·ÙirónpªÚR#Ýö!Ð>ª·éæ e¹"0ròv+F¹ÕÖH_o>;¢¹ZÎ¨Ææp'SÖßaÛÝÒ@u:õx.«¶Ó¶RIó°.7ad&¬í6c|¢08·ÛåBG z3æ ÃÚzÒÍ»z¹ër»RÛ«¼?áöa¡+z(ê:@ít©©\KÐà ÊÔYç¡Í^+ª¹z~¥:d89³ªÏÊ7¯j@sÇE1äW706éØV2_C8ô¨íGÍuSöì<i9ºkÙ !êŲ£<ûÎ>ªcgsãJ-äfÌuQ+¡òQËWǨÊ'¢<éꩵ¢9^Æâ´ô²Åíd%ÙðxVz$;ôÞr[|B§µãt-ªª±u|<ScD7U;_â$ÑIΤ¸e÷k ZVmZ¼³ÓPÕQNåæ©X!GkY åtxVÎ^$e_¨æyY»@ТDÂ,s59gõ,Rîô|á,Qµ½Pزv±¶ ÷^y;-b-¹Õ¨¤=ùåûÉÌôW )n®TµY߬.Å¥Ò$W Y ½c®¤¯%µèoÎm[q®jZæÍÐc´zõK5ñ Z§©M1Ä»![Xi¶ØðòìUÈwäͦ%ìã¹¼´§@üóJ¿E®Ì@;²|·/Îtèçæ)Þ<è0Óͯ6ùx·é¸%k--¬9Û¡ N/¶ÓÔlÛNóPë±ô¶£Â=ÿX_ï ×bÂ_Î¥G7h1SÌHú]ïþ¾@¾&Ò6ìZÅÐb5F9ô£ã@zD~º.Ou²ÖÑÙi]Y¸1¸|÷_¥±giüXfÊ0|u¨@%E. §±9<ðð4n`k¸ñZ«únâÁ)ìºÆò¬nÚRQ_^_qûæ ¾<¸²ìöÑÜhó-ì¦XÅ]¬Âó³ã½Tù2vÍ ax¡á`ý4îkÂAÁZ§Ñüwÿ5lK«(Ø4 -äÂòØ~nz!ÎÑo}vYGhIÀ£µXJÑåô_ÅXI'UtlÀvjÞ~:rEÈÓA×bb#NйK§«Aç´sØLmÂ4ã"Õóá=ªiêzj®5áëØ3 w±ñJ¾³é`áû29eár9e'á 9¥ð#J¥ÒAø±Å/§l#üÄÂä~ÂO=(9å áyJµ²ð3"§ì üÜR#§ì!üÂ2WNÙEø¥¥VNi#üÊ2ONi%üÚ2_Ni!¼àA Ê)û ¿ñ ,S"ßzPÊ)¿ËSVÐUx+ÒRº ð¢Gõ:yõNÂKErJá÷ÅrÊVÂË%rÊ^Â<(Kåí?zPÉ)]/B|WþPKÄL5M ¾O*ø>¥à¬÷Kø²ïá ¾(øîVð#Ü¥àÇL~;üïWðÜ©à·øß1Þïñq&4û£ü_Tð >¤àU|TÁp?ã>¯á ^ǽ þÂýAÿ)ø;/ÿ qr¯×ÔF2¬÷÷GczÀ+°dµso@wØ'°¦jKKÈòë#>â1BþÃ0Ã]Z_Lß#°ÄgµaÍÓâ°ï¬²®`wZf4!vQÕc6=!à¬jæE]Uaøiùâ©!ÝÔ¬¨' Ê·ÚE¨ËÙÕ¤ÿ0Ñ]7Ìèm*¬×cF-ýí{PEδx¸a±¢m}£ÖMknM^vͰžÂâ+Ãʹ ÿdBéþ³ÿ`4®cí¦4Kßså£âÍóoî^¸w: W"ä{ÐùàX<ãW>àëþ/Å©þ~Ý\lǼxmÎÃϯ¹¼êd~ØBu²I9íóQ±¸|ÖPVÛ}uîÚÚm5Û·Õî÷bÑxÔª(Þ;=©h Î1TÂKé6´aFXPFZÜÖUév··Dõ.£¡ñÆ`ÏaNäíðÌ!ÒnÆõ¶ÔPnÚEC¸9/£¿\´ÈQ]"M5ßS¸ºU3Ù®f/k×Ì$s53BÅ·rl+ÙN#et¶Qw|0nĽF«ûNYOki×ϵ¨1õ}sÝ\Ö,ÍF/Ö =¦ØbF`W,n¡¦x¼XY¨eP=æ+îfò,gê5 ÄvÈél(ÐZ¢I#ðHºÀº :ô7'íX¬]¨aF,é§U {Àê<Â\ªéÉy¤64%+Ë=yäl×'P¯ÃÌzäNîÔCF<<Ûq¤ÐÉΰÍ(ÖoKi1òÏ©F]¦Z¦²lû-Ûo4¿ß/P=36bþA}ѸîMw^¾Q®W5¢[³áëLõ£KÙ>0$cbAǹÓÓE-ÙjzSL·Ó b¦xM£!ÝNèyÜy%Ey¿¸.`åjúNþ¶Pw,I9Hµ÷5IQÒ¢4Æ)LÓ¶Ro2RìJM¢ÛcÉ:*#÷\|¨þº5ïÕE"ÅÈÒÍy©s^N«E ]f³æªMáõ\帬¨Å£l3ÞKÃZ,¥ûy¦SSaoè ÒaDcTR¹çaú"óÒç$à?|hææ/{¼4=Ò7EñÆ!ðvÐÈ¿rõêIt«îIWK'qà<ñ$ª&ÉáÂU¡b)ÐúÜ,B%áªÎ nn[±Í\üæTî$®8N«Ë[ÔÐÅÖÞèBOÕÆ¾8NT-²§xê"Ʊ4Zª/ÖW>§hºE»x¸ºÂY«Ji4<º §óLå9læIí̪Às¬Y¨»b§ì½Åùö¶Ììözg®Ê)ÌS8H*ÎÊÇÞÔm RÙYlìUWxìD[ @[;.+U½øÒèäùÚ^UÍàú4:&P(¦=dëÍêJ{n#23÷©òìùYT2¤§8]ÉãòPpz(µ4|=TFûY L6`û|ÁiÁµ$ /Ì[ÆM¬px yãùiÜ(ðª%YlêÍb©û³¨îõdpC»n²ÅF{kØÀܳoK£)÷øíù!rÃS2 ½ìSIΧvJioi]|h/Ïê'P(åÐâæ ±Gzsä<b½¨uØ,.;9`s.) ()WR x(Wc7]¼Áõtã:LW´ª¢3tÓÐMíºNÓúnº«=BªÇéjv§õTk¯ÐUè5Úó¶ã¿¨nì˱S¬Ç.úï54Öáz±7}Ø#°WÜ}bõÂÄ~1q;{Ñ(îGx ¾7͹iÝýÍû¾÷Þÿ½ïûÞ÷½7ß<}õ±ÈÃ"1YÁ;¼KÁ Þà= +8¡à 2 z\Pð))èSpQÁ%O*ø/*¸¬ài_RðU_SðußTð]Ï)x^$ã{2¾/ã2~(ã?ñc?ñ¬ÊøËø ?Èø£?Éø³¿Èø«¿Éø»ÈxAÆ?eüKÆ¿e¼Äl b.2&åL0YÆ$D!tq=Ì æÀ b!Aâ¶ 2YÁ¤6÷RL æ!Oä0Ûvr¯+å8Ä ¸=ÅxWQ;Xñ ªðZƽ¯Ï'ÜÌÞDGÜÍäö÷VãÞ½LÞÈäMLÞÌä-LîcÈ[y.oc÷ogö~V¼CÅã8ÍäýLº|ÉÃL>Âä<ßÂ#LΩø6Uñ|^Å/ÙöWxJůñq¿Á¿eíïpRÅïqJżWÅXvq×ð>U )Ç>! F4AÁ;{þNvC7ÜytodùÒH½ ß¹å{«Ëþî®üªË+|Ã¥ëäWÀ?ñÆiâ nµü»N+êA6¾qmBµÜ¬4_E?ËÀIä[ÃDL¡ÿTaÉðYL-{õWôbÝ yÀN áéÖ É VÑDVq;ëÃÒììÅOx.è¿d½·|üðôÍå Í[æëÆñB_Ì`ÛqTú|ûDùQ`1 ¦-ü³hÀW7öjù,ô[.¨àNU]ÖLòÌH4`H¾»Ê¦ôë»í)ô¹ÖîBfd§¯öõ¡¢E+)òõbsöõ!DËß× Õþ"f·ôbe1î¶hÓ{±)h7ÆWhÀ¢@&=Ëí»§gnÕÔñû0]z±±Z.òQP[üÜÊaDv^FÎ`?+X°k³FNìGbÍP FóhÎ`×)<põO!h7TmÆÔµô >&°»Z¡ñiû^y ó³.º¡7gç? æï"·jþ!³n nèÚÙsð]0+±H\WÄUTr+Í·]WHǤÒi,òBT`yA RL_Ä%ôå=k¨^lÂlÔÑÇý~ú¶ÒWýAÌÅ]ÄßCäæãʨS Í£z± Ó³B©Ä b ªÅJ¬k±ZìÁÇZÄ:ÆqjĽØ(îC8Mâ4n¢c½ ÉAÛ(.¡^\F=âyl/`»¸BüUì×Ð$ÍDv§Â.i5õ×a·´ÍRõ÷bÃ^én:p«Ô }ÒÔÞMü1ì§GNR{ÒD¥aHgÑ&Q¼¥KNû2ÅJÂ7þPKƾQE\ I »ÁÇHH¤l &Á´êdw²YØì,3³Ið]«Õ¾µµZ(bÛô¥¨4ÚÖ>´kkíÓVíÃJíËÚZ[«3MHØ ýïË{Ï=ç¿ç{Î?³½þÀð NÌQp£|BÁÍ nQp«Ü¯à£ ¾¬à+ VðußQð]ßWð¸(xBÁ¼ ào þ«Y-ãÇ2ñ?ñ3?ñ¿ñ´_Éøµgd<+ã%ñ²Èø§WdüKÆ«2þ-ãuoȲ²dáñavúpE,²8 Å +YT!åÃôû0iªaø°B,cW 0ÙÃbí£iÝ`°'cÈ:ì.AùH\ìÃ\\âC=.eËX\ÎÓ+ØíÝ¥X+Y¼=®ò¡W³x/¯^ãé¸ÖÓð>F~?ë>Àâ,>ÄâÃ,>Ââ:6¹£ú¨ËXÔác¬»W?®â!ÜÁâ3,>Ëâs,>Ïb?/©øQñCܧâGø¢'Ùã9¿Áí*~GUü÷ªø=¾âyìSqwªø#ö¨xÅXüÅ_Øã¯Ø«â5ܦ /ybÜÃb¿*d%qÅAU(ø¦*J0¬ ¾ R|R*>2Ü¥ø*ÊisQAÈb&îV §¸C@ *ASÏV\ïíM¦ô©f©¶aîf ¬ðëÖÐØ Ì®®îдpJK'Â[zvè1{ÕTum&Ó Ròê¬L ÓÙ~ÝÔ줦5OuÍ9Ü.PYÝRÖKz2ªªÆþ°0ÒáA#î23Þ©õ¤ôU¼~òÔu>^O²]×â y»EÓÛuI[+Ã.#ÖNù1möpN5tÚh¤tÓ[ЪM³ûåÐôËG'Úþ¨a&ÂFFO[±¤éá¸ïO Ö55¯¶tt:Òp2oe42ÛH ×%Ó¹»ÍÔãÉf뫾$v^\Øyëdß±ÄP¨r*3*hiuT¥ZííÕÍ©ðGd¶±¾ð1RJèMÿ's+NZß ¬>fDl2§úܾ¢ú¼® Iý Q¬>»?%P´<´2´LÀW¿lY}ݲåuõ§ («c©d:i¯!ÃÕcÊx ÓÈfÔKýäm4âº@µekiû-¥yM1NãÓÔÐÔ Æ5[ëÑ,=HÄ Ä.h!èÍO¦{òh2oÎö÷è¦Ã{à¤n£ÓÚtf]ë'K¡Õªi;£eé-NðlB¼Ö¦Ç¨ "¯´í¤0°2ÓadÍÎ@º5½3M')´¬«5j:¤²lÚ¼kKchò^;ÓãqÜ´xܹ<ʱ¡{ÓeÄRE»ø''1ʱæt2"pütÜI¼´Í [ûxÉ=äüéumNCѤesî4dæM¶Éäé$ÜbmÖúÉ`ÁdÛ0RVxj« ÔÍ.U*[Ý<*{ãu%P_ÙÆ£°!ãzÌHÇǾ bî@ $_Ö7î,뻲ZæÝ¤½úPeç%ÔÂF*<8èFÔL'ÞÍP¸A= ËH6·ÀLç/¬#ÛÓ¤}ÊI×Ö·Û¢SíA^ŤÙÚuÝ»:SºSádÚ§Y©OhöÙvb¢pBÄ0¡Ùt(r"³²Ýtï·-ÍC1=ã3«@æµNa[1Ü'©Üf%.+Ìëmw[N1±OgiQCÁ¯º~-IÒ´>dOÜÒèòûôÐNÍn 2Dºi :¶µ9C*Ôi¸¡³a]CG³ÀÇ hw¼Å[ÚòX¯å ¹(ãTåÿ*âëßÃéä1²\<ÆfQiȾÖ'}'ê>)-Ý>âsÈfëæýRJÊ Z¨ Ù(sTÄ¥ò|nì¤ÍOÅ6ò5"ðfK/èÎíz¨^i3)â!·f~L¿n" ð(¾F3 øø;Æ>þæ'Ô;sú§§ ÄäñU 'ÿUøgîW"é/;è~Ò |¤^´ÓÂ:åIóƪèÉEµ#X5áVì(g¢ÿAÎ5õÞHÚ @òõÐz Pþ´@QçrÞÊ´Íe+i°&Râ?>âøüCxW¤d3#¥°9PCÌ÷JrØ)ÆÖ@éýèxõ¨9tºÇóÇÎX6SxudF AÏ£ÃÆ.gìò<6!ÒGÝ-ostd²¾¼#9\Àa¿* ¶FÔaÔ±0æFÊØ¼º{'Ë2²i{u#Xà ù4 /¿ÄÙ¢áÆ@YÅи&ºù:·(ÏÏ¡Ã=3nêâ/uý`}@A±Ïç8wð¨e|o4éãvÛ°^1_E=jÄ bØ%âñªx K¤ô¼t5nlsÌyÔ=Aù`Ö`!Öã$D.Ä"$°W¢WÓüZò¾ µ¸K¨ÕRïÕàð4Âx|c%ýd?~N?°ÏHÿ«DõX-VàL±gµX+ÎCØubÅ SÚKÒè§y6ýg¥«0 ]OÏ0$ÝÝÔ®Iãbé ?Aé)\"=K¥çpô<ùÆåÒ¸BzƯÀðÐ{2ý=<{PK>ñ<%Ý ^Vð;¿WðÿQð_o*xKPP¤Y9ÈSSùÐQ B'V"æÄZ&åL¼LN`²Éf&ëÄjÄX °Xa'ªT`OÅ#FY6æ$öû øPÖá<'|8ÉyØXØÙÀ%L.ev/Ã.ËÇñ¸aWðìJFìsb=®br5k\ËÊ×9ñ\ïÄø0#n`ÙGÜÈä£Lnbò1&gýäÍNÔ0ñá,» W?©á0L¾ÀäLîgrÉL¾¢áø¾_à«~q Ï1âLþÏhø3Òð<¨á¯HiøÔðîÑðwÜ¥áLþÉä_L^gÄ¿q·&r &Ü©"Bò&\dÈ»ÙxÉ&â(Åç5±5±ÕÄ1¸OnÜ«%ø&²ÑeäH,Ç4±ÙH @ Ðcÿ ¡áá÷{<q#f&BF8-*ÌÂcä)={¼Ë+»ô=º/¢G|}» µe®¸Ã£$vOpÄ×2âº6£´&WtÙôý¥åMYÍ.+Í!1`FG|#fÐ×mñP§Þ1¶0zÍÜuÞB·h»¡j'õÖί×[Æ;)vÁvÊHÜb¸j®¢½Ãz3ºÇ[SæfÕjÓA{Ù;ÿòÙd@Ûÿh ñ3¢`Ø _H E| u ÛM¶IÚ¤i§<ÓIm×@ÄWêñ±¶¸ uËØräé0x]vðÎÙØLb´dJ³)vÍ#§ÒY_%UGêûûø\ó32UNæë³È³9<JªÉkÃÿiÅ>-;ÝïÆmÇS~ÔXeQyov¬¨ _ÕÎdI\ ×´"9ÞQä ÞÎ㫪kªjª«7¨[p4lLÚ[3z3dеHXzÔêÒ#ÃÄW4#ѩȣ§¡¶¡9à éÞ§'µ!SHx½Ôo fèr+*iéQI÷vÈÖqòêCvóMä7ÐÚ²ºÏ¼E (-ÃC}FÜn'TélM_¥Â¢úiº²UéÂ6=à ôø Ó¦!7ýjÈ£V& ê´^*aÐðtÞu#ðvÔÞfO©dçéǵµuµTGiØtoÞá[Nóh Ù¹ª(õTò´±É·Ç\ón0l~&H6¹bõ=A5âñùR%Ûc³ÉXêzÓ KOÎaÍx<QÓ"YµøKOÂéFQLܾP`¦Æütó9!1µôQ¿ÏÙ3«xz«â3^½gz¶Ú*`ú9¬°ÅxÕ2'MÙÃß²Ö~Qì2©ðIyÒ¿ëè* KD1¢§÷ÄIX '?Ðiîä9üÏÍÓÛÞsm^o"IÈowüWêZ|»\uDKDÏýà·ý.."ÃQ%X2µF6æ¨ÇIÓÐ\[X<áÀÃiUÇ)$-¦PF wÕ=°ëc+7 ÷@¨ËaO[xªIaw gW>¼Õµ¤Ùµ¼¥ìVy£KøsÊrîÄa2ãZ@«ò&G÷V:j\ÎÚöÃWêÈ9§ì¬»Ô!2¾\9äU¦mÓiãT·>[M87Oe¯B&á·Ay6ÈÍ(0i®OR)uÝþVWeYN¨ÆZ)Óhk»§ø¨è©r;Ʊý ðÍà8jý¹îÜ ¬ì? A¯éq-Gc Iørí¦¼Å¹)%îBëÍp³wN&áZÆy^ͦÝ:¿âÎep¿Îã¶PD&°Ü½×¯N`3MNñç¹ÊüÎ8ͺ¬¹St;]K@?/>)¹óSÐÂýnÊV³??;ÿAÐcøQlôkvPLW:.vdB+À äïdá,_Ó¾ Øî/t«îÂØe»,tIN¸ùëy/%¡Ñ)x^8& 3éökIrkèVø&Ïq¡í*³ýQø¦ý±Ê ¬%[¦ÇÑ.ï` ;Ó³çuäLqåg¶Z8éÈÅ §<L`}8´¾Ã£Þ_D'DÛs¼&ÏNM¢ØÆ3ì¬$dßÞô$LáÌ$òyË8!È;DèÁqâxQ¼*É'uI=4¾ äV¾½â&öÕÞåØHÝg3VÂU8«Q5صh¥´å£Tb/¡÷ ÖãvTáNêX÷ÀGÕx¬ý5xÇãu¬6<¬N%8IuQSÄVÔ¨£_½è¢± ¢"íb7va4«pªØ¸ Íâ.´ûÐ&R8M<vqôëÏ`§xæ/¡K¼nñ*¥å5:Ú7Ð+ÞÄgJkqäÃÙô;GÚ]jEÔE|R/BR?i ¹É%¸R.Ç>y®7ѸWËu¸FÞkå »ÍfîvÃåÎè²±Q°k8{ha÷foyóõýþ2ö±åaÝCÓÃMx>ê 4°Ô@¾@¹Ó½¨túÝ{°3¨%ceÆòr8!9½v(;aß@ë\ÍNÓ<³=&yLnJ`mºÈ!¥7j³Ñ¿¶yª©¹¦©m"ilÍ\Îýÿâ4¥Q¤UFra @Û9mqÔlª4ÉÉ8·F¥OWCM[©ÈÌ<z$;1X CøàJ¸0®p·Í,«»o¨¾pÁ±k è0Äò¯µÍ£%fï"_Q{^ð×bÅêPKÌð´] ò`¬dzàôÊ¡6:="ß±)ÖHNLéäáÎÆ£=7İ:ÔFg@Å×"Èç_Ù,êT»¦)í«ÐYÉ©0lÏÓX´©âó:Îhó©Ãß?_þÏP2iM*´I<õ¤dæÄÆb$ì£@¿ ì JEXÉEm,ýY;4Z öw¿Àµ7T^üUÂF¾båPKX30R Iý«)Nf¨}ßsƦAº¡J?+Ù2à÷ ò×ÄfÔÕ QÔѰ¡aSCAÃt¨Ðu,HÂ0Ū<VRù Sj]öÀ¨Ã\^µ»ÜN$ÿKËwûÿðÿñSÛµAìÜëpã ïI5A¢i»ü2ìµ¹ÃÚè-/ôM^·e2½åçéÐ3©4lÏþÏ;¶ÉNg ö¤ÂôÉi×rèí2ÿéú[-Fã÷!säf(bñ ùû's¨ø¶kábµÂ{qMTEÈêÁ+â/â@1A)Ê!1Ö£&À®R«LAFÈW§PGHW& ê¨Õ1´Zñù§O*rd 3'Ícq³úPKAX¥V ¡SĨÊÀæºV(±«<(ü'3? q` ˹÷kûûüz{G{Øp±â¢íbÕź\ZXha Cµ×¿e¨õý;N/Ľà±Ð~1Ìï :Ì)wbÆ¡y&²áU°oÃËA¨ÕyTz#F1{צH¥: íÐ&ájbôÏä\%ÛÿÍiªÆ¡¹â?73tmÀ_ȦB*Mb>Ô"}¼üË4:¡Î\õ daM¨;±Ô1KOºHÓUFµ¾óú35DCê¦Õ¿Ñ.V¨z»`þæ§¹|Ô/XúPK$þêM ëY MmÄD¡*`Xô³%i$TäT± e»3¤¥ZK< -,C«{ieP±tÇ)VÿÞ^7ZR÷Ê>ÿOK{3ølgôÌ´Lï!\±!VuýäØ73Äk¦%¯ztnE£M÷JÝî9º¼4ýCR·;4l«¯õm]«z²Ã÷ÍOÒ®#¦.<©ï1|=nÌí ]j-£]po~ÍÔ®|ì¶ËÀå@ê= é1$¦§@ÁwÒt]³ûÒ©Wâ¡ÌÒV(fè#e¤ý7ðWJV)FÇSÌ#õc=¥Òiö`±0Btå0!æ_¦êcׯO®|PKì+¢b ]CRGÊä2° ËÊH3Dªµ&C¾Z¯5:æ£É]Ó³ùM«#¬à!JüAÿßÃç+ã'çgäx!ÛÁ¨÷¯|ö!Ýp<qv[¿7[. ô;ú¸tÔ&kÉ.¶ô| -^D¡òö|Ñv,3|jͰrr~Ï´ïØ.?w<Ó¾©ôÓñúxV¨`ÄCæï[f(7 HGX iS@SS¦¸B»2ÖØîâ¯0(Æ'0IqÙ©ôZAyoA{An.Û!1,RqLô%¢ÅÉéùoPK=aü¨Z " ¨ ÆàkããA&Þ¥³Y²Üè?yñÃÙ2Î&\ª»kjjº{>¿Þ?à öl((*ØTPV°£"UE)Ì5¬!a«JÈhØÅ C®Rmöø#×mîz;ô-׬1Ä*Õ;|¥ñ÷ôºÓ##¬Iþ?[½g8ÃÏW&Ï-× /âu¯K©FÐâJ1Cºi¹Ôù·¼csµíE¾AW,²çèdzî@xÞÉa(O}ºÁCÒ'ÎûRà[úÜ ½gÚú¥årÿùæW,£ÛBOdD2dfç¢&s^Ó_çáâ 2&÷/0'ªLÄÄá¯"a(LÉÀmd¤ÒDF`!G¸t< C(/3××Ç/æ¿PKt|{V $$.ÉIi8åGdÒ!ÓdJÇeÕqçu\Ǥ9\Ð1q`Tǧ8§cAEInJrgtÜÃEI²,É}I`LÇ积V £¯?¹j|iijF._(¬\fÌ1. èK|h.?|hè£ÐzW³ý m¾ó©U3]û@ßø»+ÍIý]ô»{îÈPK/+ëÝM¿]°úæVÎ*MjÂ^1é4ÅéB¹dÏØ µrÖa{VÎ+¯¥Ì¢ÊÒÓ¿`isÆB³Ï¹2éGFaª$ж×âfÆÎ=?±Óq'¥@ÛNílÉ\èÛ©ÌÌ+mÌøûXz¤«íô¥7Òf|5O[9£ðôF=LÀG¯¼Q0ùE-mçJ+ù¸ldɨæWfº,==XU«xÉÊXä4«4K%³ ÐBÖ~bFÑt¤,±&µoõ2Áz´xt;TnÓ:w¿k5sÒ#ÂÏ_LDeÉ/<]KÙ6 "òuîH £¯XNkßÐJ¶§øðT>/À·)ä#MP óä7² ÿ/¯åãKo`Âumò2I=Ñ7ðUì{M¨k±m £uö7hªâà¨{Oá} íÎ&ZFëZg´:ãóø+ø[²6ÑêúGBÞ¨6¬ÝRTVGô6¬!)j «#úÖ;cÑj©U´c1¤ |·/Ô\E×3ÜT$²ùFIº~B§ëøª§ mªº}£®u;IÝì[îAÿú»®ðƾÃqÒË\W°³ðlÇUÂ5áyKr;r+rcºÍ-ipI®rG®qEæ¹!¿Æ¾Å-ü@ëÜÁk.Ì·Üp]þÅmùå¿x TÜ~b?RâÏVÄ8X Xb«b ârÄÃ}[»=EJòN½Ó¯sö8 W±wD */ѱÖXP©bÏ ´(1ñG%³ñîÏX~nÜËßÐÍßC8ÚÃèáÙ£R?¦4É]_ðÂ3W 3{70õÃDø%ëç±Wba#ªlYyt®cеTp\+o¸á>×i'æQÄÁϵ :Óõ'±o'K´]FÔÎt ,tùr£¬¢çÙ zÏÑ.o£æeLVÐR{Iiÿ{ìð³w¿G· G·1Æl3ÌÓKÿPKFVGú 1cKIHwREI Y2£a SÖPDJ£ÓÉ|¡R7ö ½aØ5}Ûw-»v!/ÜeHåËÿFoWëÂô)$~a9?%23R(éÐçÿɤ«°5ð5˶üÍßtvC¢"<oÓðnµUá®Ë:hŲEìÕ¥©ÛNÛ5Å K: Óiê¢æØúcêe_4aË»iøBÀ° óî³¼a ½^kè×-ÛpÞÔ0(¦cûe{\tÙ0P>CüômeÛ5Ù4vvcC¨·Lµ}«ÑG;ΰCÙaÜ¿ëÓðázc¾M´,¾ÿôyY²lhåã_éÀ# w!'½L/E¨\!ú>PZ=ÁX,}wx^<=þroÓNÀìê ÄÅÊpî"ÃPÿÄSáÿÜ 4|,}F.@2#s>ö@TUJ(XÊ~ù{ÿ*¦Håÿ@¦I7ÅMİ 8 ØCÙ}¤Ð!ûi<¦ØzõSªzFöfñz¼Â^S¿7Ç[,Ò¤ÝuÎýPK 2 ¾iâ >jÂúR&gÿþñL"læï|3ç³g~þùöÆðHÆ-2&e<1%㡼it*ÖMÝÂô(`è¦OAýPÐAÁK¨Hãq\W¡aHÅmª¸a÷pSÅ}ÜP1¤Y¤TÌá*J/2t¦ÒÅ-ýµ®Yº]ÖVÏ´ËùZðÃ@ªÐ¯llp8!¾n1]`è"÷÷ùú7|=L¬ÑTc°Ì®T£ ¡tä2ü2íiÓ6YJ]pJ®X便`-Óß\s¼Ò¸ØÃÐV4m¾TÙ^çÞª¾nQYq*ÁbÑ]Û%º÷8`h7m{GÛqm1àÛt¯ó ëñiè×.$eL§vOßÕ ®m-mÞ´uïÍòé.±\Ýã«CÔpì@7mAæ»Ü¨Tæ¤%júEÜcè8+AêF M¡KËZvLð ]»éØñÅ?ÕÉÐ}ùß§ªXÜ.apN jËuªÐ`¢5Éfh ÏÈ3}¡ Cl¤ {#'ÔwÔåâLö,«¢íò!Ú3¹óë*Z>@ö ¬r[÷Bµsô ORe ÒPG3)S0D>ÅUz-B+òmåDÎ["ÿä;¢/¡<f÷y/±D¶+¡ÒG$³*Ô¯ïÿÚG<W[VѼvFútü;WEÇ篫é&==4ë¥Ü}·Ãè§ÌÄ ¤Þkv· Ù¿PK?¯² ÂV9# d WÀ0¦@¸p'ô`RP¦TÌaZETd0£BǬkH¨¸Ë*îࢻ¸¢â!-µÁ0¢¥ò㥡W »¬oûeWà3)-×]«ïîr8E_µÊ1,hÿ0+ÜôW:±aTë¬(Zïwk.|ß²-JçgÈóZm½àx¥%ÁfÌ[6߬ﹷc«DQ¶ºgòuK8aÃu¹]"ÃÜ3¼>ðéìë¼ìØúcêA.ó¨ëñe>×[õfÇ Ws ërU_³lÃ{µõÏ%kx|Çaù!7ë¹ßL±jyîûÜ£^Ú'ÎQ{ Ómt³^n9MøãC»¾åرÿïútvwñÊí²¿ÇÐ[#Ü¥|çAÔC³H3ÐbbÊHÎ ÍH÷¦OýDF2B^E²I5h«H0Î|k`àÒÙÙ@ÿ;È¡#HÒq!t$HÒ×ÛL¤G°ôÑ'=AzQ©E?uIÃÝ,÷I¤}Eäù '¡Õ#ßX"Ó@L*½Çt&ÑúoO! Üú mÒÓ_Ù>¶¦ªÀxdPÍQÄHÏQ?Æècì¤)âö`áPK¾´â½k 3¤ a(´]Lðâ*¸¨BÇ%WqYÅ h*nbBÅm«¸1÷pAÅ}$T,`AÒK}Z"W4^zɰúªïYv!SO>cÖ²ÙÅêæ&÷ ìKáY~rÿpn¹égibMjÉVD0ûµVABéÄYøYÚC³mùóttÖÉsÞ¯Ts¯lØë%Ý9ËæËÕò÷ÖñU§êü%!Ãu¹§ÀÜ2¼¡ÇtÊ:/8ö¶¾íúÏË´w3ø¼N4£®Çóiø\oVÂ0&Nýî×0¹^,ôEË6¼×+'EíÄr ¯9aÓ±}ò+2ßáfU¤'a«ã¾Ï=uú,You4~.WK¥Ç² ¸cr×·!òÿiÌ=»#è©JÜ.ø[Á á.)òÓÔª2uo `0Rc© D¢oí¥,){7»[Ñ7üÆGMúâ¾´FE8· ôagÎ{fæÎÞùñûëwh¸[ ®X0°hà &fÐD76)#Ð Q 2J<¦tc."k!Iy\°¨øS®cÜÂf-ÜÀ `ÐìÜÃ+ïòÜ©q¿ê¬Ç¡çWÛOÆíÒÙÓÕúö¶I£ÓésåÖr%Ëö)åã]áÆËg0lí¨®2×ït¹ÄmÏ÷âj]Á*(Úî¦+óJÏÐ_ö|ñ¨¾·% ¾U#¹.ë¡+î{*Hð ~ »Ãû1ì+÷Qþ¾³/]'EÅsy,SµT²=JpW8»Õ³êù<|õäoC/© É`Â+¶ÇÊ"EÈ0x2Tús·Í¦þÿ[ÿPÓ3¤;¿R~5Þaè±,Ë}x¤ÚÇòPÚ¾.ö©!{"åùî|Ægô¬dm2EvÓGÒªÉH5Ñß¹|ñ6|Ck@×?×IÓ¾Hbð ÞQÀë&ÑQPeHù[]ìíª*iªÓ¤rÏPò§»X=Ñ6§éó¸©ò5©Ë^»¡Ñhqëq/êBÛ _7"1Ý;ml?-·¹ â¨Ïû±äD5µFñ¿Lm·évT<ZüLG"y¾þ-`pÔ=ë&ÿð֧ͺc#r&qÎC20{PÒ6É2²½7d^ÉaX$B´ùÔ*MYº?s@2@öe¢¢Lzi8dùPKþc<0 â:¤ Rã²h`.&ëq-2S²½W¨¬åò¶Q0NÔ â¸!< |Là\_ÇÃ!|á"¸B(âÁæeû2>Â+øpx W~$pQàǯ üDà§?ø>ÂøJ¿ø>ÂøR¿#ÿ ðG·ä¿ÅßðåþsQþ1Íh[Û~ lÛÛÚ4¬ÒU^¿²¼5kh ÐtSN¦àQùJî«¢ï¢ø2²ü½QGe»]o6«ÜI¥¼æ%Fj죮NpC5Í-Ö4Üké²ÎXfÖÊOCÉ)ò:W²=' ;²Èö2Y³'?S5e5±QOihõVu âM±þ3Õ1gìÙë©\§X)ñ:fy«ãYͱÛ?Ó-X)eNMdͼåÌsT:ÃD+_ugluUãnª¦ÈìUaëàôø¸rVºY²ÑîNz¹¬Ô#0-.zÂTVZZ%azV2«HÖV½¿&Ê´µTõõ¤¦²ëv5ç¬L^<Ö%ÊIK, ST}i&Øð&m'®ÝÑʬt16YÉei7I{]{vïÞAæçH0+Ï ²ÓñΤ¼#,É+ÉvÉ{²çlJ¤}\¶ÖÛ^C´jE$PVR¡ÆþL^ NçÊ{hWkà5ý<wØvRªTèr<ã4¡òl_ÞI± 'I:öKåzíSnóþecYÊÚ.l©ÄíÇ|3+yÂÉxeÿ+Å#ꬷL¼þò[9Áô3öÕã±Jõd»årî8½ºf%çÛ«EäÇЬ¢SX³_¹n9¢MoSU\Ö<Ùß=x´ºd°{ Göw®'»&eç=6ÃPYSyd_(w'£N¶²"«zbw>5i;B¤ O'g¸5¸=\ºå[5z·m×r×{?ɲò .`×XxÝ<ÞMþ"zØK ¸Jt·Ð!B·úvDz½gþ÷ÙxøJÙ$8D%ÜXK¼ö¡Ì@'6#Á tñy·xá E}Iñ7¿³x˲j>®YR)©ö^ý2=ÍÇWøöqô!L!ÙyO·°Y»ø0âz»Óì»Çø(æ§ù¬~Oõ0ù¨ÝKØÃçëõ|®Þ±ØþüÿKØGüû¢6Ä&nvn].âÆóx}µÝåupÑ1^²w7t|ý¯¡½£6R[DgGÝÔû>Ö¡×ì5"zû:êçp R_\×°^Ã"ºÎ£Q6G2´9lör/ ù¢AÄØïûWÚg°3h+b(àF?Ö"d ZèyvLÝYGíoë¡? ?JÌZ59$¼¼÷ü¾PÅ .MèÚÊåæ/ÀèÿCdO©èUN[~íMü#`øçè"hpÜò2r2 ;¼OùÞAÿPK-h¶ü ë}Åû& à}á}«®««ëê®®ÇzßúW÷ûÎÌdP¿ýçgª«««»««««ª{æÉ?Þ}/ÈÇIüÄ7%¾%ñïßøïH|Wâ?%þKâ{ßøoHüPâG?øHüTâg?ø Ä/%~%ñkßHüVâw¿øÄ%$i¤ÑÆHrK+)GÒ8Iã%M4QÒ$I%Mä+iª¤<Iù¼¦I.i¤4KÒlIH:TÒIæJ*4OR¤ùH*T"©TR¤rI%-´XR ¤%JªT%©ZR¤ZIË$ÕIªÔ i¹¤VJZ%iµ¤Ã$.éIGJ:JÒIGKòIjÔ$©Y!©ER«¤6I~Ik%Ô.)()$©CÒzIaIIQI6HÚ(i¤Í¶H:FÒVIÇJÚ&i»¤ã$/é7Nt¢¤ßJ:IÒÉNtª¤Ó$.éI¿t¤³%#é\IçIú½¤?H:_Ò.´CÒNIt¤%]"éRIIº\Ò®tµ¤k$uIºVÒu®t¤%Ý$éfI·HºUÒmnt¤;%íÔ-i·¤=ît·¤½öIºWÒ}îô¤G$=&i¿¤Ç%=)éeIô¤¿JzSÒ[ÞôIïHú§¤Iz_Ò¿%}(é#IKúDÒ§R¤K) WéRTH±TJ)VKq´-R´JÑ& _µR¬¢]õRD¤èb[¥8VmRlwÐçúÂA_:è+}í oô¾sÐ÷úÁA?:è' |Ë ¤ÀÉ ¢À©éNSØéð#_àïTõLÕpÂÎVàÎUà<5üïø÷üø /È@Â3à'Ü¡ÀNþ¨¸H3p^CpK3Pâeégà`¼"ûãj«Ô®ÎÀax]jÐk3ñ: ]¯°¸Q¸9â- »UÛ¸];Tà ۥ@·»30÷¨)ïRÃß°½ªa_Ç{2q Þ«¿OûÌ(TKxHUÃ# {TÇTýJÏ«Å<_ãO©nO+gÔ²U~NUW,/(ìEµ[ÊoøVÏñ%¥Ó?g`¾¬4ô¯fð~üE©ý5 ýU×Uõ ']I) ôW`¸î¡L'=¤Àêá) =£À³ <GO8éE ½JCô:½ä¤7Tõoªá ½«À{ | ÀhÃô'¥;E e;E*9"Môg§pp~y ®@¶#©ÀA RVØÜ U Gq W`ñ'§¤°É LQÀ£@.t©êyJæ|¦©j©¾µ!ÊXHN±HaÕ²8ESÔ«Å4¨¡³²Å â+éy§XEYNáSnRÝK@aA Ô;ÖA§+,J.§Ø¨FÙÄz[¨\=2 K4TºÂ°°±¨&m6Ö㣢V_À1NÑC?®V 6Û`ïĨBðX vú1>Õ»bymq)¯É×n§V×ö3©õ¼ò`ϲruõQó-¯îÕ¡ã"[BùZÖ ÂÑØ1q«óÓXÔîîöÙ;ýQÎÅyO£lW>#¸Í¶djIÆj ûÉØÍ6¿¬m·ùɼïHnpXY´UIÉÇ)yW¥âÈæ`(èg«°o;˱µûüAe¡ýLgÚìv¶+®þf½#àc#*Ðn];ÅÁz?ú¬~tÜÔ)±Á³UMcÛlhÒ:%aÓ¦F¢áΦhgg¸×LÝî×~Çr\«ôE¢îÎßhvneÎVërw##¶ðõ «:RM¬&T>/ú©Âvº ÍÑ¢ÄÁK+G6Ó7ûµÏöùÚ¢|giv+ÙÒ Ü¦ýEKC¡u|ê4! U¼X®©þõíF oWV|íqÂ`&t,åKµ9|{mä¡:ØÝuùY¤|ð¼|ɺWÖºÛ{&.n¡ ]¬âð+õñe'???>Rab¤&uûkò ÜVkk§ßËiH´3lD´óñ7ñmaÃÝ»ßêoQ,2ì׳¦DåþÌÄú3-=AáÀíÛ`ô¾:¦ZÛQh좰C§ZE¿2ÛÒY¬j9¹WIXÝuÄ=*v/Wim§¯=øÎrë5qzþ_XâÚ×ZSþÚHe²3b×üæPß1ÑüaæãõæäæäY"¾ ÛÒ±N|a·4Ç6ª1µÐLkàY`p¡ÎvzG·þ Ñf[À;a¦¯FKÔÅm bës¸wP ÷<C¬^ýåébFTQÈaÌëEÚ}æ©.)ÐAn±ßàmdcQi/§¼ê&¢VØíSdÃ;ŧm"ùîrÃd`§U'&ê®®(oPn6^ünö ¶ÆtÞ îU¾¢SVT¯dò SÃí:ó¶Ý?\Y|£~ö1ã3ïÙÕÉÍê~¸-]£ÌVY«BaÃÄÓ|¬f£Ñ4ëIes}c#e×ÈG׿µ¡Ï|PÂ(´A,æËùJåMeônnà¿yPO*Qé"Eß§2¶¡ÄZ3æ±?ëI¯ómä$¥'>âa¡Òôt9þA=©-,_Ä;"9=;bï^ÞH©91LrBJCA#öJ7ªñÍMvGÀä-êØõiÙÈdUuMÛT/ßd²ïȡŠl¿cµ #JæÚp¨²bde«¦@ýc$ó©W±M'îÞØl´ü¦g67»«ªªÜùKÀɨ Ì$´qIj¹LH3Ös×-á0W[ülénzj¦ó= bX\ZZ^_¿¦¶®|aŪ¤úå5)MÔÒú3bùesË$JËùT(´¾¾¾³±ÌÏ3öSÕV?X ñL.®óý©³Cu1e2QY³É¢«¨.+ç*Ô2ó ¦©¤Ã<1ê =ëͼß)jl+#UwªÃ¼Ôú74jR¹3¶kKë×ixUfæâAØ2 PîCp»FþLTGó1ÿýVW°Õ2ó É[£|gs>OpÅ+íÐÞÕÑ¡l1À¢EÎ!NäCa6ï4¾nu1|á¦6µ»&¦Ô¢t:¯¼:þÍ#bD+µÓf©:Cá1õ**ó,3V¯¾4ÑõxÉzt°&Ã>Së©úX ¡J˦Fb½:£f¯þmÀÞæÆyôZ¿¾æüoþf[=ÔC·½KÎôÙÔÑÄØêëÈ£{",°H¦¦Ú}Mm6þÏF` ÑXK:Ø¢lÚ¼Eí_»®TVÎuuKyÑzù U¨ç&ƨØ?^Ônh³àMNáVvé,Yl4ß:r࿱Ñ{ÍÂÜDÁAåÐwIÞ*]tF£¡`Í#]ÌäÄÄUÍCi¼N=ØÆ ±YEã3ô:¶ÄÁ~y7´ZòÀXø>L õE>c¤~ÅÀeúþ^¬²É*˲Ì*ÓººLW¿¥Ðåsº Τ@zkS SyÅy0òaxaLñ0Ûgpm&zT d%ÈT# K§'%9È·{/áHCyüÙ¶1Hý0ÅÔV1MñjnÖAÝ8{¼à¹[oÇ)Á~kW7n÷¸îÔðv ¯×p7CÝ¡ì~Ôóªº`óÔ»½Òý(«={1}µëÏ»Ñ};NíÆyÄ`7VDZ Æ\cäñÇdqe'ÐèÝ«A7nâiy£v@ºÇ5>^ÝùÓ× -Z=Ã.p®¼×º^íÆÀmzgÑa)æ0ÊÅfE¯À z²é/0^ ôWÈ¥×a:½Eô7(¦7a)½ýN¥·ájƯ¥Ànn»Þ Géðó,½ÏÑûð ©ûª÷°bûó,ÇÇ4Js³)%SGÕj¥~@¥TjøGB5{ãñ¸ö0ܮջqdÕT×ýz²nl_Ò5Õõ°Æ5,|Oö¸®U½¹ÒEÕ]¸Çm,HɳöqpAjVf§Ä¶µ -;5;m¹gÂYØìÔn\ä)Ë£H%.LÍvXÈlÙ5é]ðNvºEVÑe§uãðTu>|£æ¶ <êTÕ^Þ3a9MAæ^ì·:;s7-pf;»Ñ_Ð/»ß¹æf÷»3»qÕ@Øl4Eý½/SÉ9¥AUJâBwAÕ¯æWà¼5÷§©Û]àXÙBP[å0¥ ýøR¤Ænͳóº Ö㺮·3?Àc[ÇÚM·5¶ cL¦q)ÔÉã:HÂ" mGà5}.ÇgðytêòCLe³ÒÆØ@1åHþ¬á#q4 F>M0¡8ñ5ÔÂÇÁí´¶Ð:8p6 àêi=0ÜLQ¸6À>Úûi3¼@[àc:¾¤ð ©´ ´Ðq8ÇÉôO'`=Ëé·ü9 ¦±NÁÇÒixsyÓºèLÜKgá\>ÃüÏÓ9ø"ï3þ!qù ÿm¥TÚ@(LÃ)D#éRKÑ<ºÒÔHWQ]CAêb}Ié:ÚD×Óqtåãb9»|åF&x\âlÓÐÐpà ±¾p¸àJW1ýjvñòOż ³½oKújkªUã4\ýí`mcMC¸PÂ`}¤gº*ãæÕ¦]Ìûg*ùgªÎs=Ôì \,v=£_î^ør5;Û%»qtA9ÉYʼSº1·´.üÂêõ¨îõ½\g0Oë 5>®Å®5§)·Í<ß®»g /µxg(^<§ï$oäg[[ò=¦g=ãgä[ÞC¾Ñæïê½dìÂÁç&㤾ðêîµÄz:¦ìo-±ÆÄ}ºÕk×)V¯ØëÌ$½ê¬^ûu¯²<×z½stÿ»ëfnóbU«±EÓ¡ö»r³2µ%zÌ!Ó© ¾éÆNÕ÷44Ós³hþÉ&ÿ±æÿÒ®$s\fæspUK$³z'êèaIÜB{&[c Â~kô¬ì®qÏk¥q§8Nì~×j~ǵ5VMÈ3?Ñ?~¼X¿ÉrK̦Ïîíi¹Yãô4ÌiìbësÄcù¹YéÜm§êï×ȤܬõµU#Cr³Õ37k#=æOÒuu¼9Ùv=YzB§Ù\ßιMsúsnµs¯9·&ç<ÖÎù[ÍylrÎmvÎ4ç¶äëí'jÎõÉ9·Û9£9·'åLÓÇz\¬Zb÷W'¬1oæÆTÖ;{«U¹D:?ÒÿRJ{i&ñ|ü)3{Ô[mi0¶¥×êe ³/+Ú+¡è¡°sæ'çÙ9;{å=8vÎ-3ssLþ-ºË"ë0í GÅ\Sa1æÁrÌUè Fëp:lÆpÎK¿[pìÃÙð Oâ¡ð*ÎϹü 0ç¢ÁqXÄÿÆb\5ÀlÄR\e¸Ëñ.ñ \w3ý\/1ï+Xïb~ÕÔkè ¬¥)¸/Ã:ªã¼ùpl 6ηà :Ëóp5íÀ|º ðHzËð(z ×зx´ ïwLÄ3ñ!Ç|ÄQ:êð1ǸßÑO8NÅ'·âSñiÇøÏÊJ|NFðy¹_áKò:ü³¼_ûðù¾*ãòE|M¾¯áëò |C~Køfz|+}0þ=}¾>ÿ>ÿîÅ¥ÏÂ÷ÒçâûéðßéñôJÏÖüaz-~¾ ÇñuâØujø2AlÙW×Ü,3¹<®µútÜËDãoA}ì7YÇ~ír¹Jó½ðÃêÝÝ¡°ÄìqeüµÂ5,ñ213HJ½;]I-ÕP'75æÍUZÖlö1nÍ7ÎTÕ´x¸¨sìsenÖh»c W8ÚZáÿë´²/Í6Q³uêáû¤sñ ke³ýMaÙ qµy1Ó=5YîéØ/Tÿ9&<wÄ_¨ÎåÛ!ÀãüyïO ÀÓ0ñÑð,·>%ð,aü àdø3ìdübx o¯Â..÷Àkð0¼Î=ßáMøÞàïo³Ûû»¶wq¼Áû¸>ÀßÂGx:|gÃð|xwÀ'¸>Å+`?׳ñGÃçÍGC»«úzQÊÿ6äqhQ?Õö4ÀÇì}«8P8¿>»Æ£lDz¾Û> gÆ·}o.Àuü¹·ýpÂ0n/ÜóàX·Bnã?c×p'\Äå¥ÐÍÜ{¸å.Ø wóï Ç`É=ð1Üép:á> {yÛàèö G²ë8=ÄÑëa,ky{_ooõ&ü~nÖHÛ·ô\yÕÏ?W¾ü¹ò<}FÚ·àèÞ[ðøÈÉ_éîûHü{q±Çµ°Ï#ññGâ×áÍø^4Âpö¢ûøs/¤Ó}0î!ô mô¬£ýÐIÃNzº¹¼ýL9ÛxÇ{·èyxö²Î_ûëãYãÊ_?Í)TÁìç¬7&{ ?Bkм(· ýìVhf¾oÝëÛgsjÙ±«Å¨Xö,cWña®¶üÒluq¬^Ï;*~°&½§Ï¤}çÊÖÕ#ý\+ô\Ù½çº×6W¯)Ìjõ¯â= ì=Å}6ö?¼Æ¿{Àûñ¡¸Yí¼Ù3ù3ÒlFÀ(:ÆÑB0æB% Aëh>Bà*¨.£2xÊáZÿbüß´~ Å(h :i)N£J, *NâJªÆªÅ-Ãó8Q¼êq7ãwÓ ¼8¡¡ø0§hãqs<Óåá_ÈÍ2ô%jFâ3íÏë祯5²Øõº~uz?Ïõ&¿¥Å®ç4ùÅØªù¼ytÜ\Äç®;ù<×Sz°Í¬k·¿éq¦.ÈÍͯ÷ÕäÓ5µ]}XÍatlßb5ÆÕö<׳z2+k8[½1)Òâï:×üoùñÓ.èÊÍ¡g¿ä@üy{qú,AÏhî·2ö¹á#¸?n×pø?ß@:|Cá;Èïaç SáG( ;-CHp$ hÂØ©p<'s>q6v#· =p^ÆL¾9áì#q <.RáY/ ¼!$¼/ÒáGN¹,Òqè£@7ßMÇ8 ñ©ôoÿ»±íxó9ZrKõKr³:´Îæ$5NNNc)á4Mç³·½×÷òt¢[!n1t;L ; îé´æQ7Òn¨ Y¦÷â&e~y\ízØ5úõ~æhÙÖiÄöXrôNÈö¸"±çI±z,ì±äÛcÉÄ~ëgXóDìÖ± Ùá³àÜ_ãgüùÒðpâà¯`$~ ñðâ·0¿ÆËñX?Âü V±ú£° ë'P*Jips.9à<ðGüµóA\;oÚÁ9:÷f]l^êÿßd]ªw(KKuQ2©^ÔReý¿*¶uÅýöTôÆ·îLöÐ@ýø3SÔ,NQrêâu¥ÁOCØ`Â\Å4n6§§Ãa¹íl:ΧÑp)«É 7ÐX¸r`7ãüb<<F8uÈ©ë$ø&c&MÂþ4GÑxH¹|(û¡ò8ßÈÇCÉÉR}F)ÖOSƪ¿Áeªg7ÎJ}jÙæÚÓ¢þBe'ì»Ç ×Zùt·ïÅ«]Ý9û±ª½ÅWÉVwºv²nÕïD\?UÙ|⹪áMÞ aµ]®×ð «4¼QÃY¢a®å îÆùåéÃ!¾¼uðåm=×Âà;×(ÔA'¬ plfØka3smaÊ1°ÿÿ S`ïêvø=ÇâñpS¯ø:d%õ»¿lõÓ(5kbê4îí0Þbm43)¶4õË£¦Þ¼%Ì{xüî1Ö7Üë?»°¹7s3|àÞ¼÷Hv½yGîÂÖÞ¼¥Ì{Tòq×÷æ-fÞ5Éy#½yç3¯/¾8»5vô¶ÆElo½1î«þj=o¬ò¸Î§nýÌ£Q6Õ°)Ý&{{[&i6g$ñ KMl½â¸¥ìA£«¾°[]o餹Ðãr¨/Ù÷TwÁOì':*åõüºÓúqÉOox OÖð±61\ÊV 9PÅ[\ ˡͽO-ep*³ E\ÀWÁ ÎaVÂ\ßÇGîA8Þâ¤` ' GsÒéÃáÐs çåÐK¡A®%@êoüX?ÑZb¾Rмꫨy÷<1v½®ëíÙÕ÷!®z¥á©=ô}UìýK½#[þ¶ãz¿Ï;c(© ¶Ñp¿ãòl®'ÆÂE"nã`{Åxø Á±§¶§¾åz\Y¶µùN!½©õz_×}/ÿÿç %¶*KÅÿíÊõ]¸ÍrÃ쩬¥ÿÍ3$«¬ï·ÖbÏ4Lÿ WÔñh7½û@Ϫ¤ûÏzâÃ=TÀ9ÿ_'J²÷þïÌìq Ðógäf±eÏ^8dY|Ê!],¡bdÅ0NTÀT b)JX&ª`¥¨£E »ªZØÁåEb»§:¸ËûE=_ÿà.ÿ%Ã'bfU'Vc¡8ËÅáØ$D¿XÄî©; ·F<Q4áïD3Þ&|ËD¾!ZñkÑF¦V)ÖR¡XG%"@-¢ ü"H']ÏåM¢ºÅzÚ'Âô¦Ò»¾':é?sZú»Ê¤ééÿPKºÞ) =ØÑ2o4¤Í.³çc!?³ÀÝH;±iäÄ¥½ïüʱ A5¿\Ñ¡n¤?q=é»RÁx$N^õºý+5ÄÅ*ÿ¥}æù^ô6ö*H ÓO®¼¼Àh(òºÞ^$ϼ%K¾Í5lö<_OÇ×2¼r®¹¬Ð¦¡sj¿£àDpJé¼Pýe5ÜëÑRÒhÈrf×2:wÆÚRñѽø}9ÊOdôZ]930¢±éùk³ÒôfjX'K/(È{DñYÝj¶æÈ~¡£FA wEé¦xFQ÷bji²Æ/ªU£pËßP²Uâ`Æ~¬aS,ÃÕ¤QNÏie*ÈáEÔTèÛ"d YlÆ#wKΪ`¾À¸´JùbY«9G>YkZ¸×îŲ©ö9Qh¶ö_OjZöòþF²¶MHx9õ?kÉGóp¼°C:¯¡þPK¹úªþ d,1,cwضÂd¸Ë!Ãó6¢âÖ¨ØÀ*Ã}/S±Ã°¸=DU¼fHá©w,N3aö÷¸§âq ¡pêD?Õµ^)jYabB;þ(ÁJ^e·ë af:Ê[eÍ(Z3íÌÊkûÂ('ØoÎÉÔ YÒtqH2Ì_-¡KöLîÄÈDߺc¡>·0ÙONù<ñcQ.IZ7+¦Øp-iÝ/y£*L«R03° rʰȥ½Ú3Kä?ÚÝÄ91[Ì®sýAϱFÉZu;o´ôjÕ¨QEùU#ÃboΩjk?Ù¦0¶Zý4|8íóýèËUNèþZ¼f0^4D×5[Ïí6uOÖ´^æiup|^3ózéвy´nZÚ~æÿ0%9AÂTÿS£ÙFժ²ÏiS£¬¼.LÊæ© Ýläo§D¯°.Bʧz©nd Ïx\¬À"];èéçâ+Ð}èi´L»#âÝôÝDAùm`üfPiåkàF ë> Üjb$ý+}.1Û"&¿Q ë>ÊÌ"?¢Ð Á²p ÞVîµNîeæÜj$»Ýs£ÅMRSÁDOz:1æh'Ñ×ib´ë<Ô2.÷8Ñ+Bèts: ééHç)¹H´NmðuÙÖú;aÝ>÷Wp0Ý7ÿ3æ a¦þi§6DHO]gKµ³]Ò²Æè¤£=yAkÿ ìØßßà, ÝÙ½@Çdõ¸À}aÜa\ûeÕѨÇ( <¨ãEÒñlß L Öñ²ðÞÂ:ÞxYïî=t¼?êø u;Ý á ÚÚXr:=´ºÝD.°ºi%.oÙ8pÒ4Y#I4Sng¥zÈu¬|êUsê¢ke}ùbÎtײó\´lñðB´¥÷Jûb:m:d^ßÒ_5ht±¾Âª«°²e eçfÆÎO%¦ìT¢ß5s²²¦rÅÛä>ÃïìõLÛ®N¸2Y1ØÐrå6«Ë¦_D\p Nª«)S´VÊ-:f!1fOåÛ2Vº)6j;c¦ÓÕ´¥©;Ö58M¢J&úéùß~WõâN1ã; yrTd]ÒÊ[.T/«Ükìß¾S)sB:«@}?²ZÕÙW(Ó0]e¥VÞÜ[Ìΰ1¥ÿÈ6áñÛr C¾ÅnK(×.µ »²NÊô×Õq*±±¾¬3ó.ó0&&ÌüKeíó{ó §ÜCåD®ÌHaÝbeÌBBøáNoóÕ8bîû][myQj+¯rh²u»(¹ÔJK(h¦ðRÓ`Úr ¤2&qq>ÄPqtå°Ôî5r¹£}ã§VÊȰmZ,7 {lÇì»"hùyµ±ìDÿàå6`=*{]aEõ«ÁQõ#5çcAÕiÖ,ê²ÞæÙyVérMÃ9a,2O3éîòÎ¥¾0-)2¶SÀ45Nm×àírxpB¤k8âÊåÃÓ\{. ëók$&lÑLS=%g(OúÍᥱ¯Ørð¬PyE Ùn9è)Ç£Ø.§;DÜ)dÝr°§z{Ãx½a±OúÄÁþ0Jq@v ôC²;,$&Gd7`à) yÒÀy5p¦$F¤ä -A/â¤IÂ9qÂÀsB®øNxÊÀxÂÀHxKÌÞÆ)ï`ÔÀ»bûïËîªpÌÀ5Ñ».î?Äqá¤h´µ÷k¨nk7/ѤiEWq¯§ô\Ë#\_3öÙrMÏrìßß°OOi¶õPÛ;©¨sìÉè¤ö{*Õ#'MÅ'¾Ãc¦7ÞÓëÖ´=Öx>.ÁK·[¶åíÔ õòú^'¡4û¦âjBÂK3ôr[ÆLÓk±n±I[Æh¥ ÑZÐ9+©ÒÑÁò<åî§ Ïÿß 5TÄ,[ dR£Ê2G¼¾&©åD1LÁ*3EÍÊ 2[9/¯Ã|¬ãÏÁqÇõæB`]µbÅ:7®r:¥¦i{f¨÷¬y4l&}IR¶§¡$tÒ+,3±P"ÄÉI×òÔÿméyî²æäRÃ5[w2oHå"gÊN`'ä:A5eÉ|ô1å )Wé#«úîÙêVº/5á]¢¶3®*¨ÿè½fÎ+ÅÅ y4x)íg¯jwÉ|/,øÕÌ«:ËôÀhNj´.·Õw¯x'CZ1Í_rÍ8µtIÒkØUNÚ¢;>UO+o3)0w±Ï !ÇïnOL0ië²$=í®'êÂóYyN®W5MJVNÅrÎòE2¤ dBI&ÎLLºöÞ°V°kE`BS×î*¢ëêÚû®®b¡ð;ç¾iÁàúùÿù|ò=õ[Þ½çùðʾOc¨ÎÄj LrÀY8Yàrb7(ßgà±J¼S¥-Ó¬;IQ$p²tz:n,±Dj+(!N(w@3VÈh0|XéV¬¿ÒÜYâ7[Ä9ÂÍ'pªÀi§ÌX àsâØ$°Xàl¸79ñ;î¸[àå+îxPàaGðu'>&°ZÄ'xFà/¾ø·À×ß lÃWø=¶ %ÀÍøÛø#þÅ?a·n~çÄ8WàB'Ù0ä$;á¤4¼ØI<ÏIéØì$'Ô#S/Üê$¶8©7.r[ .tR_¼ÀI"öÃ3Ô_¸þ .S"¡s·h嵐/KtÃð'-QÝxq>V¸ãðE'/b6:i^î¤Øà¤q¦p?¨ öyÀp ýMÊ2è@¾p½29ÐÜÆÃPY jº//³óK§)óV¹EÍ-anªßgÕ4µ»ÚÙM?ºëñè?å2îÝO·ú¹ècÊü;¼;ýÿlßA»o_ÜýÀöÅõܾÝè»püòì¾ì)ÿeÁ jÝxýäYYÝöTÌFv»®*Áÿÿ¹èx¬&üanmåþPkc861çd£²á¬º@ksí0Å å8õÊmi¨ ·ýc9geçJÈ^ÙdØÐÜ Y-b×DÅ¥Cy¬]·pbkkkÛvôX¬ÙÅÉ^æ9öìÉ8Jø9rþ)å^É3ù¥sùcJ«J¦xË̼%EùÅ\¦§©½ h>Û-Æ[Ê3% 1UiEÉ©()*öVXæªRqó¬26Û ó+ؤzÅ£¬¤Ä[Ziq3ò˽b ÔúzCa_sx¦¯±åÁ ¿9ìmô71a¿ÂüJq/,*àòfaC¨¦ÐfÏtagø!À RR£¯-¦7Ñ9Ã;;¿dF±WqÅUÒ3Æqû2¼Á` ÕVÏ»EV/âÇ[ÊÑJem)y¬¿wVmÀR_7Ôâ¯i¨ëÈ ú[¡IåüÓ½í5þÙ$>µHÕ;µ¬¼¤ª8GgªÔ2GgZyYÕþ2<ÚTTÈ¢eåÜ=[Qi¡w¶(J+¼¢Ð*½%L$7rË g [V_YTVpÈíjg«$δ»^âo ̦²;oQÚ9±wg ð/ñµt8öb+Í/ñÔÆSm½ý¥MÕþ ê³t9¾EÌàÅß!ø /ËÍÁ«-1ÓJ}MþF_çûÀÒ@V¨µ!,]Îjf}V?Ìô×Ê3fxË+ÊJeqÎ(+S¢Öy¹7¿À1iåÞ©Þr®kÐ*¼öøbvX©P¦*æ/[Q!:-ÆsÓªJ뫪tziÙ,©UMSËßÁpé3+PSÜ äk®môÇÊø±#g-^¼Ù}ÕÕAÿY¬òÕÖrYF5$L`°`sb¶û;æ iiñ7×E¯Ð ç\GM½/ÈßÒßhx lùpÛ»Y<¿×VÎÁCÝU+ÐPn×¾óê «®{¬9ý]q¼ö¾Þ~2±Úº·X°[¥fM 9ìkdkúoÂl:{a ¦ÕúDßËd!4«Aº`÷Ùêk ÓÎÃÁÎ|ÓÄ9ÝåÓÚÈSÃqì¥-ôK ÆÞx-õ`Ó¿¯¢µº°Ç3åbóB©Ä`^VçæfÔwj|å@,Ä)QØØfãdvVIq<}a0ÐÚÂÕöª÷ JA¿7ÑMjàÉeĶî§ÅÅVICs¿½¬ðèøÒ·©%ÜÁýlPSfp<%MéûóA_Gêñ[·[!ûtÁƵ©*å/§Yb/BpxLí¢²ñ= ûDØÕ·#d¤ª²>h%Þn/Dñ %b]oa8©ÙX'§t¦É¯Já*;ZüV ØìÁÃ'3SÉ%ƲHZ¨µ:f81(Ü$r "aØ$0-ñùã°CHe ¢a1×¼ígIKdùÚÎòÊmóWóHÉà;ÚdÂÖÙÚeZ°²½±¡ù<yhe³ê]Îã-°3¯f¾¸ÁaàÅ 7ylQ¸ÁcÂ-# ·yÌ(Üêq±|£ÇÅ=`þupN63»Ù£°Ã w<ëáÍ(|ÉêÓY}v~z\~ÈÁ×Á!¥<\ÜÞ2/!gÛ@aÃý`ô£a ¸ë@ÜWYã¤ãg ÄÑXzW~çf*ÉGaW[#¨mÉÁåÆ3ÍærGYÉH_b%#ý.+éï[ÉHçØ4¶þµðj+)á$©ëÊf4'w6Z«guÉNúlÉKõèÇÉ<ïWA?ûNæ¶ÝâWÊlTÆþ§®^ ÖÖâV%õ'QtÂ_#ÚÖ<Ûjx[µã(n,¼¯ãÍøgD[Jv0Þ.KJ[¡äÅw(ù%·0~¥ä ã¿w;á¡fn+ÿíe£Õ gåÎG"ôk¢[㬵iäfnËePliÖæqòÉÉ´m < eeº;áojyºB³Rü^DX =ãîÙ7Æk¬·©q[º-n]d )í9ÉÒ¨öH´§ÞÊO¨Ö¸bQr·my%Êâã?Ç_ÕÙÎ9wü4JÒ¢4ZÕ¼°2B¦]íyçÔv:7AççeeeƳ§C¾7§úÍ2Ý2óTS*¦¼d5 Ͼ ÉNðÒ:¸:ÏÈ4:aÝ28,ÞîcÎîÌDõõ°~4pçIÛ¾Üís6A£ÄÙÉ.ëàupE'¼&6wÙ:¸n´ÍÉ4×Áð_µ^ÌNø·¬¯ð¨i<B±ÁA§êLvJß³c}OKé;×Ú÷l Á»Äë,mQþ³FÖo ìð¨pÖ>ÈÉÿeK©«.V#¥.G¦CöÀx]uªFæ;T¨*ekIY½2³ddë&XÀÎÍKW>ªºÞq«[ÎïK®"ðÎDX!<´÷õAúPh²R/ï7|rÀñ`Ãcá <^À<ø'À·8¾ÇÉèİæc&NÁ,,ÀÑèÅñ8'á4<°qNçè%üWÊuð°ÛqÞÀüÍ챫ð~Å÷ÙŹø,xOÃ7ðt|«ñ#¬ÁOÑÏ÷ª:ü£ìÁ\D=°÷²fÞ·4[è<&aYöaíÄ:Ϧ+ðZçÒxÄèq¼ÖâEô4^LñRzåïðJ⬦ãÕÚ ÙbU{tÜeÒÜã×ü¦4Wç¸kö*Íâwn\ÓCiêsÜ'(Mz\=îÆ_JrÜÓãλfB»,®¨4£rÜãcí²+ÅwqÜ¥ÒØsܸÆ%ØãÎkêæ³äPêÉ¡ÍÉ×ksÜãâåëfE{F\³Gitû ¡#Ç=¯¢Ê±Eiæ¸ËãJSã®kv(MA;'¾CiÌqOk+ÍÐägW_\µ8¦Üî&ÏêAOâ`P9¸¨2¨ 2?f £iÅü14&°ßd: ¼4JiTæ0*Uj`ÕBó!òÃ9TÐB¸ù+©n¤¸Á]Ì/§3àAjǨ ¢Ì¯çûðS÷:^¡ ¼ÎôM ÁûO~AðÛî¢6¾´£NmhPßc?¦t6fÓ98iãè/ÇtçÇ©t>3-£p6]>º2¿.á|z)çÐK8^ÐåxÓk9ÞJWâL嶺p%]2}®Át->Íô9º_åû&Ó·ézünÀÏéF¾k\ßÒM¸næûÆ-#n"n%'ÝFn¦|BËh8Ót;Awò ã.¾QÜÎ7»iÝC%LgÐr¾¬ ùL«é^:î£3é~: ^JºVÒÍLo£¿²çÌ=D3ÿßRÖR)g·»Gh*õK}uQ9ArSòBâq¤Ã©àÓ ærSð2+Nú%lO0¯èz91ÏØÖå÷Æ.'ëËa·.'g]NôïË »l²^Jô߬K}uIÑ7[:Ûº¤èYûnëbi]RlXû ïª G$êpW©äÑG®-)õ|Ü5ö[û¥<µÛþ®` WàÊ/'%û IéýHOìÌ -û¡,Õ³tQ"{FRz=b7º¾ Æ mM²SB%ÙmIöÇ$ûBý9Éþ =Ä3=É=\}£UX÷Nó%âȤױ)^M]½Ò^#×/ñ£®qУ®á>\¤ÌÃbã(w,/ÖðnômãMY.OZ¥G¦áÊR¦dÝù ÓÊT4YmÏL£7¯lã6o¢K&M'+Mfò´Î7¨]fɾë¬+yÇZù?¿RDû5å ùÀY9"1+w¤ýûÎJmÝÿDÛ"Ú)'¢]¢ªzíÀª6${;%v"áøz¾+% %É£ .KKØÐ43ÊP4Ʀ2LL¦ÆVì¤eLÜbU¯N×w1z ¹Ü^S=j=kÆz2ÿêZöý-J}9Qöå?Wvl²ìDÙ ª,þÄeë¸ìQØ®ÊN?pÊóÑöF`xÒgRb²¤ú|ÔµÇ"x%×SÍõü% oDð7æÙùÏð¸1 /iãÍTsyÓ :×:Y Çí:1iu ÙÀ°¤Ù:¢»< ;×p±f¢=·yb[Yvª%)?S^í¿ë:áó<3Ó®ÅðE^Ú&¨QOWñåÜpÏQNì:ýe×áKúÓ²Ù0}^6ÁÉ&ö\H÷@ÏÕð¶ûHy&ÕU|=|¤"pi ´bq_"0É{Z'QÂd§ä»òí:ð)OÏô ld¾l|(xÂk|øàkX¡GC#_ùðDhÆhÁyp&ú ·2} Zq ´áSÐÏÀb|ÎÆ7áüÎÅíp¶< .¤t¸ÁÅ4ù |ÈWPtáj×Ð\¸¾Kø°{`oäÃëÍtÜBó!ø:XJË`Ý·Ó*¸6Áô"·ÂÝôÜCÿæòw°öÁ½Z/¸O+´áp¿v< Mcz2D´y°R« ¿j-ð öxX»ÑîGµû_ i`ö7¦ÏÂãÚ[°Z{é°FÛkµLwCTON½7Ó¾°N?Öë£æÂýDبO'ôrX®ûàoz#<·Á3ú ð¬~ <§/ôÛáE}9¼¤¯æõ,ó[a³þxMÿ¶èßÀëúNxCß oÚ4xËf·mNø§m0¼cïÚf:þeïÙÁû¶ðÍÏ´>´uÀG¶¿0½ ö4*°q:Sº ö6Îck±¯±3{q±3gñã5h¼/p°ñ-1öâ 0Û4q¸Ù32#Ìé¬+EÙcÌÅk^GC5üOØÑ¾äòïI¼¹ÿÁïRê½=ùºÑWÐjH£5ÐÖòõo ç½ óc5åzÖË z ¾| fð1ßŰxïáã ¾C Ç ?À{üïSp§üïUð|TÁx§2xÁÏüÁ/üÁ¯1¦à7làwøâ c£ÿf_^Àç¼H ¬Õ ÝYOÄz3¦ Ì$5ÛQ g»OÒ¾´Ñ²L«4äsJªeójöv5¶f9aÉacÆÁ¨à¶·®Ø4¢Zãö*¯(ÕíRÃtJíd"aZ[N£3mG 5ëÖìïÖ,w.)^ðºj#_S¹oggéít[`®2.~©Mf7îµk¶ßï²'°»"ÍÙÃü¦H#-mu[)fÒjuv¹hmÖme=ʼIZvT@PøÔXô 6Ƶ~òJ¤&AT%Ú§õëQ5rýS'^`ÁtWÀÜ/pùDª© ©F³å¤>(ÖC^Û!öc¨sí¯È%4a/!ôßOÓT *E}¤9k¾x*»«¥µ*³9¦{!Ø 5ª ööÆCUOuhf9JÍ êܺ²æåÞE½C磴}I5N4fY¼$ië'ô%% cÚOøzÙtÁºÎNâRßP×Y'0кHsG²»A'{ ¶è=mm#4q;CÒâZCX[ßÝfñòLãþh7M:µ½W«Öéöe2TÔ§ÚÓÒ³!®ïs9®RZú´ÚL÷hª´¨:iìWãz~Ïh⦫ÑÍ2ÔxMÌ¡¾,K -Wg#«Qå&*ÔûÕ^-ä^BnÄ´ÁVÂòu#$Ì{=07Ç g¨îLëÎÙïü $oøéæÌ}[O²Ý±wNge¤o¿ñ.};nÍ%);Ã+)/µéjt5ص|j]ÛQ×Õæ¢Tº!O* ó¢^39ú¸jSYó]U&¤õ¤'2NîúùF¦nÌ\ÌtáXZ´uò|È¥{7fiTFcü5R`gÙÎ6óF'Ü¥dh½. ÊÛÉn;]Ù13ñÓʧóÒivè·h ~Ñ<¿|In:i?ÿq¯È4Õn®é;v}ÏSQQH_·ÏãáÈÃläñ÷ãü éÒ.z{þºtWúuù>v÷¿ÇIwO´úÉÖ|àQ>7ýôªEuåVìÎÅ+ªRhJáªàÕôÂ®ì©æ¥°fEÕ>mNag¤²z+}#h¯¬AÙXµsµ#h#´xgÕ(B#ØVyöDZí$vä7ÁYþèòyøL?¥-ǰÎõ"¼¨IáJ:9 ëü'°áary+îÂ=XFØ(9½ AK(¥ô&XJÚ5ôDXOOz¢l¥÷ÁVzuÐb*G%QE6ÊÈJ5Æý¨ÅdCð¼zxÐï¾`!o½Ã \ÒjZÇW|ªòJÇ0®h¦hÚ/¦ãÝs¯³CÑAq Êè5-ÅéÁ¼°¿Ä?»' «qÚÃêÎ , p8ÿ0(ÉOË- ¥6)¬ÆÝâ tpåsi×Au<(Þ¦jéa[ +)H¡> ÝÙOðú0¥ch ú© ë±{e°D4×lq^ÃÒ»*,ÈA)XÂõÈAÅEØÆ¶H%r ¯â°o`eFVWqد¬ñb~¡î0Ê"c¿3ç´k>olØéQ¼ìѪ£Ô/çèù85éqI<má§&¸2Ö¢ë0è#5t5ñ&jÎê¹F\ÍDÙk©¡w¡ 7Póë´D3îD÷¢ Ú¸¡¦ü:¥õ1¢C;ýwÐÙítz'=k¯§wëvººð,èõy£X=¢7ÕPÅ:Z7Ò~ºE3¢¢¸=â ·gÐ(.aEz»xwä-¥¡;¾}æÓ òØ!W;YÎc°ó5i殯IcÀwÚçÿPKõÃ_WB .*¸¤ §`RÁi3 .+¸CûcHÕM.õKúä°Cq Ç9qáPyã:2)]×f,ßr´é§^ñmájºÎ°#=d=±LÇrÍ[¾g»cíéá;F:_e/ ·fÖDÁä«Zó®(î¦=Oxcù'<'|»d,¹ð]éuqÃV=ERf«JÜ£\Sáä¦kÜvm¡cR9ÃþIQ.s××ì%;Vã£W¶|Ïi=SÕ#äÚ¬ÏË)øUÝ¢f»Ò³]bØÚ(ª¤R¦=´d wG,z÷Zª¾ík ÊkÃÞ<êßõl¿8Ûª¿9«Ø¨íú63dþ!%h¦¶¢Ã®D5GZi¦e£ü±Vü¬K;od´¨ÑÙfÉáÿüôf²D^2:ÉÐo[³7³Çзù±ó=Q«¡x\ç ·niúéx ÖæDU_ÔÃ0l©ÉC!O)tôÒm$`òúAÝyÀ Ím4wìüHo§hÖ>¢S8JodßA]W ¥N+&ý+سQ8@þ&á,iB³2a$Ù2öeмæ¢îc鿲ëFÖ«8Ü5ÄìlÕã!Ñi²\Cº.`9Ê@îüÎ|C÷kºl_Á.»w»ÑOÞã+P¢ÀzB + <' mQà>ÛC`K#`[¨Q`O}§cãÎZnRµAMR¨dûhÖ©iªýs0¨< ¹@àUèÍ/Å+êË[ßa¨sßiþãø äù4ùlÃÙ¿PKràÎ[ ÷®z\wËô~Á½GÈ{eÛaôá}aôÀûø ÊÂiQÿPGðüN×ãa!gü® y¤7âQÑü!! ù°È>RÃx<!|Td-O÷¤¨J¸ù=~BzZ|&LKÏ y6_àE!/ET 95_¨ª¨á¨"j¡Là/|-¢ ® _¨uBÖãO"j£ÈñÚ¿¨8¾Q-ø\Dµ i²YH»-ø|DuæBvú]øãêQÚ-¶ìQõu-þ,¢ö*QûEý ÆW#ê ¨:?¨£²ãF¼¤ , °Å¿DÂjkëbºÈ$ÙÔÖ¦°Vؼí÷¹é︹æXÖMw_Û»yÜÈÆ6u(4ȧ=gÒçÖ¤ò¶5îÙ£1£ urÇ-ÏÎvÆòþɬ·m?VF,$"Øoå½´HÂe 5Ösâ;~Ö&?ÏjVh±»®±s#®}ÜðÆR9'·îq{± §+HÛ9ßöÌ]ÆmglÜïÖOyc¶°!ëñÇÉÍtIó¦¾c©ÛSl*79f§ýÙâ!ßsrc//¾MìÎ&lÏ8k5ÍzÂâæÞ9ÕÖR~(ZÚÜv'ö;8ᦽ¾=Ñ!îÙ+æ¼Á?Þq¡Y³ GÊZ. ´¸æôüd*m'es)ïä ggÖîK66_híhýwFGm¯Cü0|öyEå¿ù¼WÎ}^ NO¬o® [¹õ\§©MÌVÖD]«t6[ÓîäÉ«Ôlâê... [truncated message content] |
From: Geert J. <gj...@us...> - 2002-09-03 19:40:56
|
Update of /cvsroot/woc/woc/src/woc/wocjava/source/com/egonw/woc In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/wocjava/source/com/egonw/woc Added Files: Bruto.java FWord.java Formule.java Item.java Picture.java Raw.java Smile.java StoichFormule.java WocEngine.java WoordTable.java XItem.java XTYPE.java Log Message: --- NEW FILE: Bruto.java --- package com.egonw.woc; import java.lang.Character; public class Bruto extends Formule { public Bruto(String s) { super(s); } public String toString() { return super.value(); } public String toHTMLString() { StringBuffer resultaat = new StringBuffer(); boolean PrevCharIsDigit = false; //waarde moet geconverteerd worden for (int i=0; i < super.value().length(); i++) { Character c = new Character(super.value().charAt(i)); if (c.isLetter(c.charValue())) { if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; resultaat.append(c.charValue()); PrevCharIsDigit = false; }; if (c.isDigit(c.charValue())) { if (!PrevCharIsDigit) { resultaat.append("<sub><font size=-1>"); }; resultaat.append(c.charValue()); PrevCharIsDigit = true; }; if (c.charValue() == ')' || c.charValue() == '(') { if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; resultaat.append(c.charValue()); if (PrevCharIsDigit) { resultaat.append("<sub><font size=-1>"); }; } }; if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; return resultaat.toString(); } } --- NEW FILE: FWord.java --- package com.egonw.woc; import com.objectspace.jgl.*; import com.egonw.woc.util.*; public class FWord { private String lang; private String fword; private String dword; private String anchor; public FWord(String lang) { this.lang = lang; this.fword = new String(); this.dword = new String(); this.anchor = new String(); } public void setFWord(String s) { this.fword = s; } public void setDWord(String s) { this.dword = s; } public void setAnchor(String s) { this.anchor = s; } public String getFWord() { return this.fword; } public String getDWord() { return this.dword; } public String getAnchor() { return this.anchor; } public boolean equals(String s) { return fword.equals(s); } public int hashCode() { return (this.fword).hashCode(); } public String toString() { return this.fword; } } --- NEW FILE: Formule.java --- package com.egonw.woc; public class Formule { private String value; protected Formule() { value = new String(); } protected Formule(String s) { value = new String(s); } public final boolean isEmpty() { return (value.length() == 0); } public final String value() { return value; } } --- NEW FILE: Item.java --- package com.egonw.woc; import com.objectspace.jgl.*; import com.egonw.woc.util.*; /** * Class that defines a item and specifies the field information * for the Woc-file format. * * @author Egon Willighagen * @version 2.0, 1/7/98 */ public class Item { private Object data[]; private boolean isEmpty; public final static int ITEM = 0; public final static int ANCHOR = 1; public final static int NAME = 2; public final static int GROUP = 3; public final static int TRIVIALNAME = 4; public final static int EIGENNAME = 5; public final static int SUBITEM = 6; public final static int PICTUREFILE = 7; public final static int XYZFILE = 8; public final static int ENGLISH = 9; public final static int COMMENT = 10; public final static int FORMULA = 11; public final static int MASS = 12; public final static int BOILINGPOINT = 13; public final static int MELTINGPOINT = 14; public final static int ZIE = 15; public final static int VERGELIJK = 16; public final static int IUPACNAME = 17; public final static int MSDS = 18; public final static int SMILE = 19; public final static int LEVEN = 20; public final static int BRUTO = 21; public final static int DIPOOL = 22; public final static int CASNR = 23; public final static int RHO = 24; public final static int PDB = 25; public final static int REACTIE = 26; public final static int URL = 27; public final static int BRON = 28; public final static int MOL = 29; public final static int LIDWOORD = 30; public final static int VERVOEGINGEN = 31; public final static int FUNCTIE = 32; public final static int CHEMICAL = 33; public final static int VOORBEELD = 34; public final static int AFKORT = 35; public final static int PICTUREDIR = 36; public final static int NUMBER = 37; public final static int NUMBER_OF_TYPES = 38; public Item() { data = new Object[NUMBER_OF_TYPES]; for (int i=0; i<NUMBER_OF_TYPES; i++) { data[i] = null; } isEmpty = true; } public boolean isEmpty() { boolean rv = true; for (int i=0; i<NUMBER_OF_TYPES; i++) { if (data[i] != null) { rv = false; } } return rv; } public void add(int code, Object o) { isEmpty = false; if (code == ANCHOR) { } else if (code >= NUMBER_OF_TYPES) { } else { data[code] = o; } } public void remove(int code) { data[code] = null; } public Object get(int code) { if (code == ANCHOR) { return (Object)Convert.NAMELikeToANCHORLike((String)get(Item.NAME)); } else if (code >= NUMBER_OF_TYPES) { return null; } else { return data[code]; } } public boolean contains(int code) { if (code == ANCHOR) { return true; } else if (code >= NUMBER_OF_TYPES) { return false; } else { return (data[code] != null); } } public boolean equals(Item i) { return (((String)get(ANCHOR)).equals(i.get(ANCHOR))); } public int hashCode() { if (contains(NAME)) { return (int)get(NAME).hashCode(); } else { return 0; } } public String toString() { return Convert.NAMELikeToANCHORLike((String)get(NAME)); } public boolean result(UnaryPredicate up) { return up.execute(this); } } --- NEW FILE: Picture.java --- package com.egonw.woc; import com.egonw.woc.util.*; public class Picture { private String onderschrift; private String path; public Picture() { path = new String(); onderschrift = new String(); } public Picture(String dir) { path = dir; onderschrift = ""; } public Picture(String dir, String subtitle) { path = dir; onderschrift = subtitle; } public String path() { return path; } public String subtitle() { return onderschrift; } public boolean hasSubtitle() { return (onderschrift.length() != 0); } public void finalize() throws Throwable { super.finalize(); } } --- NEW FILE: Raw.java --- package com.egonw.woc; import java.lang.Character; public class Raw extends Formule { public Raw() { super(); } public Raw(String s) { super(s); } public String toString() { return super.value(); } public String toHTMLString() { StringBuffer resultaat = new StringBuffer(); if (bevatHTMLCode()) { //is al in HTML-formaat of bevat (veel) fouten return super.value(); } else { //waarde moet geconverteerd worden for (int i=0; i < super.value().length(); i++) { Character c = new Character(super.value().charAt(i)); if (c.isLetter(c.charValue())) { resultaat.append(c.charValue()); }; if (c.isDigit(c.charValue())) { resultaat.append("<sub>"); resultaat.append(c.charValue()); resultaat.append("</sub>"); }; if ((c.charValue() == '+') || (c.charValue() == '-')) { resultaat.append("<sup>"); resultaat.append(c.charValue()); resultaat.append("</sup>"); } if ((c.charValue() == '(') || (c.charValue() == ']') ) { resultaat.append(c.charValue()); } // else: er zit een fout teken in de Smile // deze routine zou dan een fout moeten geven! }; } return resultaat.toString(); } private boolean bevatHTMLCode() { return (super.value().indexOf("<sub>") != -1); } } --- NEW FILE: Smile.java --- package com.egonw.woc; import java.lang.*; public class Smile extends Formule { public Smile() { super(); } public Smile(String s) { super(s); } private String toHexString() { StringBuffer resultaat = new StringBuffer(); for (int i=0; i< super.value().length(); i++) { resultaat.append(Integer.toHexString((int)super.value().charAt(i))); } return resultaat.toString(); } public String toHTMLString() { StringBuffer resultaat = new StringBuffer(); resultaat.append("<IMG HEIGHT=64 WIDTH=96 ALIGN=MIDDLE SRC='http://www.ch.ic.ac.uk/daycgi/smi2gif-small?" + toHexString() + "'>"); return resultaat.toString(); } public String toString() { return super.value(); } } --- NEW FILE: StoichFormule.java --- package com.egonw.woc; import java.lang.Character; public class StoichFormule extends Formule { public StoichFormule(String s) { super(s); } public String toString() { return super.value(); } public String toHTMLString() { StringBuffer resultaat = new StringBuffer(); boolean PrevCharIsDigit = false; //waarde moet geconverteerd worden for (int i=0; i < super.value().length(); i++) { Character c = new Character(super.value().charAt(i)); if (c.isLetter(c.charValue())) { if ((c.charValue() != 'n') && (c.charValue() != 'm')) { if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; resultaat.append(c.charValue()); PrevCharIsDigit = false; } else { if (!PrevCharIsDigit) { resultaat.append("<sub><font size=-1>"); PrevCharIsDigit = true; }; resultaat.append(c.charValue()); } } else if (c.isDigit(c.charValue())) { if (!PrevCharIsDigit) { resultaat.append("<sub><font size=-1>"); }; resultaat.append(c.charValue()); PrevCharIsDigit = true; } else if ((c.charValue() == '+') || (c.charValue() == '-')) { resultaat.append(c.charValue()); PrevCharIsDigit = true; } }; if (PrevCharIsDigit) { resultaat.append("</font></sub>"); }; return resultaat.toString(); } } --- NEW FILE: WocEngine.java --- package com.egonw.woc; import com.objectspace.jgl.*; import com.objectspace.jgl.algorithms.*; import java.util.*; import java.io.*; import com.egonw.woc.*; import com.egonw.woc.files.*; import com.egonw.woc.util.*; import com.egonw.woc.predicate.*; import com.egonw.woc.exception.*; public class WocEngine { private WocReportFile wrf; private WoordTable wt; private FileReadAble wocrf; private FileWriteAble wocwf; private UnaryPredicate up; private BinaryPredicate sorter; private ConvertAble ca; private Path repository; public WocEngine(Path repository) { this.repository = repository; wrf = null; wt = null; wocrf = null; up = null; } public Enumeration getWTElements() { return wt.elements(); } public WoordTable getWT() { return wt; } public void setWocReportFile(WocReportFile wrf) { this.wrf = wrf; } public void setReadFile(FileReadAble wocrf) { this.wocrf = wocrf; } public void setWriteFile(FileWriteAble wocwf) { this.wocwf = wocwf; } public void setWoordTable(WoordTable wt) { this.wt = wt; } public void setFilterPredicate(UnaryPredicate up) { this.up = up; } public void setConvertAble(ConvertAble ca) { this.ca = ca; } public void setSortingPredicate(BinaryPredicate sorter) { this.sorter = sorter; } public void sort() { try { if (wt == null) { if (wrf != null) wrf.reportText("WocEngine: No WoordTable set."); } else if (sorter == null) { if (wrf != null) wrf.reportText("WocEngine: No SortingPredicate set."); } else { WoordTable sorted = new WoordTable( sorter ); if (wrf != null) wrf.addHeader("Sorting WoordTable: " + sorter); sorted.add(wt); wt = sorted; } } catch (WocException e) { if (e instanceof WocFatalError) { if (wrf != null) wrf.reportWocFatalError((WocFatalError)e); } else if (e instanceof WocNotification) { if (wrf != null) wrf.reportWocNotification((WocNotification)e); }; } catch (Exception e) { if (wrf != null) { if (e instanceof NullPointerException) { wrf.reportException(e); wrf.reportText("Possibly predicate does not sort null!!"); } else { wrf.reportException(e); } } } } public void read() { if (wt == null) { if (wrf != null) wrf.reportText("WocEngine: No WoordTable set."); } else if (wocrf == null) { if (wrf != null) wrf.reportText("WocEngine: No WocReadFile set."); } else { if (wrf != null) wrf.addHeader("Reading Items"); try { if (wocrf instanceof WocListReadFile) { wt = ((WocListReadFile)wocrf).read(); } else { Item item = wocrf.readItem(); while (!item.isEmpty()) { if (up == null) { wt.add(item); } else { if (up.execute(item)) wt.add(item); } item = wocrf.readItem(); }; }; } catch (WocException e) { if (e instanceof WocFatalError) { if (wrf != null) wrf.reportWocFatalError((WocFatalError)e); } else if (e instanceof WocNotification) { if (wrf != null) wrf.reportWocNotification((WocNotification)e); } else { System.out.println(e); } }; } } public void write() { try { if (wt == null) { if (wrf != null) wrf.reportText("WocEngine: No WoordTable set."); } else if (wocwf == null) { if (wrf != null) wrf.reportText("WocEngine: No WocWriteFile set."); } else { if (wrf != null) { wrf.addHeader("Writing Items"); if (up !=null) wrf.addHeader(((Object)up).toString()); } wocwf.start(); Enumeration values = wt.elements(); boolean first = true; Item last = null; while (values.hasMoreElements()) { Item i = (Item)values.nextElement(); if (up == null) { if (first) { wocwf.startItems(i); first = false; } wocwf.writeItem(i); last = i; } else { // mag hij door filter? if (up.execute(i)) { if (first) { wocwf.startItems(i); first = false; } wocwf.writeItem(i); last = i; } } } if (last != null) wocwf.endItems(last); wocwf.end(); } } catch (IOException e) { if (wrf != null) wrf.addHeader("Write Error"); } } public void convert() { if (wt == null) { if (wrf != null) wrf.reportText("WocEngine: No WoordTable set."); } else if (ca == null) { if (wrf != null) wrf.reportText("WocEngine: No ConvertAble set."); } else { if (wrf != null) { wrf.addHeader("Converting Items : " + ca.getName()); wrf.reportText(wt.size() + " items"); ca.set(wrf); } ca.set(wt); wt = ca.convert(); if (wrf != null) wrf.reportText(wt.size() + " items"); }; }; }; --- NEW FILE: WoordTable.java --- package com.egonw.woc; import com.objectspace.jgl.*; import com.objectspace.jgl.predicates.*; import com.objectspace.jgl.algorithms.*; import java.util.*; import java.io.Serializable; import com.egonw.woc.files.*; import com.egonw.woc.util.*; import com.egonw.woc.exception.*; import com.egonw.woc.predicate.*; public class WoordTable extends OrderedSet { public WoordTable() { this( new LessWocWord() ); } public WoordTable(Item i) { super( new LessWocWord() ); super.add(i); } public WoordTable(BinaryPredicate bp) { super( bp ); } public SList toSList() { SList s = new SList(); Item i; Enumeration values = super.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); s.add(i); } return s; } public void add(WoordTable wt) throws WocNotification { Item i; Enumeration values = wt.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); add(i); } } public void add(Container c) throws WocNotification { Item i; Enumeration values = c.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); add(i); } } public WoordTable merge(WoordTable wt) throws WocNotification { WoordTable tabel = new WoordTable(); Enumeration values = super.elements(); Item i; while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); tabel.add(i); } values = wt.elements(); while ( values.hasMoreElements() ) { i = (Item)values.nextElement(); tabel.add(i); } return tabel; } public void add(Item i) throws WocNotification { if (i == null) { throw new EmptyItemNotification(i); } else if (!i.contains(Item.NAME)) { throw new IncompleteItemNotification(i); } else { UnaryPredicate predicate = new BindSecondPredicate( new HasItem(), (String)i.get(Item.NAME) ); Item value = (Item)Finding.detect(this, predicate); if (value != null) { // samenvoegen ? // bv. als tweede een groep is if (i.contains(XItem.XGROUP)) { // als de laatste een groep is value.add(XItem.XGROUP, new String()); } else if (i.contains(Item.COMMENT)) { Vector commentlist = (Vector)i.get(Item.COMMENT); if (value.contains(Item.COMMENT)) { Vector commentlist2 = (Vector)value.get(Item.COMMENT); Enumeration enum = commentlist.elements(); while (enum.hasMoreElements()) { commentlist2.addElement( (Memo)enum.nextElement() ); } value.add(Item.COMMENT, commentlist2); } else { value.add(Item.COMMENT, commentlist); } // zie lijst ook copieren... vanwege afkortingen... try { Vector zielist = (Vector)i.get(Item.ZIE); if (value.contains(Item.ZIE)) { Vector zielist2 = (Vector)value.get(Item.ZIE); Enumeration enum = zielist.elements(); while (enum.hasMoreElements()) { zielist2.addElement((String)enum.nextElement() ); } value.add(Item.ZIE, zielist2); } else { value.add(Item.ZIE, zielist); } } catch (Exception e) { System.err.println(e.toString()); e.printStackTrace(); } } else { // als er geen group bijzit throw new DuplicateItemNotification(i); } } else { super.add(i); } } } } --- NEW FILE: XItem.java --- package com.egonw.woc; import java.util.*; import com.objectspace.jgl.*; import com.egonw.woc.util.*; import com.egonw.woc.wml.*; public class XItem extends Item { private Object data[]; public final static int XNAME = 100; public final static int XMEDIA = 101; public final static int XINSERTS = 102; public final static int XREACTIE = 103; public final static int XFORMULA = 104; public final static int XGERMAN = 105; public final static int XAFKORT = 106; public final static int XGROUP = 107; public final static int XTYPE = 108; public final static int WOCNR = 109; public final static int XUNNR = 110; public final static int XENR = 111; public final static int XTOPICMAP = 112; public final static int XLATIN = 113; public final static int XNSC = 114; public final static int XFLASH = 115; public final static int XSEEONLY = 116; public final static int XMEERVOUD = 117; public final static int XPKA = 118; public final static int XPKB = 119; public final static int XFILENAME = 120; public final static int XCODE = 120; // thus degenerate with XFILENAME public final static int XDISCDATE = 121; public final static int XDISCPLACE = 122; public final static int XDISCPERSON = 123; public final static int XFRENCH = 124; public final static int XSPANISH = 125; public final static int XITALIAN = 126; public final static int XFRYSIAN = 127; public final static int NUMBER_OF_TYPES = 28; public XItem() { super(); this.data = new Object[NUMBER_OF_TYPES]; for (int i=0; i < NUMBER_OF_TYPES; i++) { this.data[i] = null; } } public boolean isEmpty() { boolean rv = true; for (int i=0; i < NUMBER_OF_TYPES; i++) { if (this.data[i] != null) { rv = false; } } return super.isEmpty() && rv; } public void add(int code, Object o) { if (code >= 100) { this.data[code-100] = o; } else { super.add(code, o); } } public void remove(int code) { if (code >= 100) { this.data[code-100] = null; } else { super.remove(code); } } public Object get(int code) { Object o = null; if (code >= 100) { switch (code) { case XItem.XITALIAN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("IT")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XFRYSIAN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("FY")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XFRENCH : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("FR")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XSPANISH : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("SP")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XGERMAN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("DE")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case XItem.XLATIN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("LATIN")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; default: o = this.data[code-100]; break; } } else { switch (code) { case Item.ENGLISH : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); StringBuffer sb = new StringBuffer(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("EN")) sb.append(xl.getValue() + ", "); } } o = sb.toString().substring(0, sb.length() - 2); } break; case Item.IUPACNAME : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("IUPAC")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL")) o = xl.getValue(); } } } } break; case Item.AFKORT : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("ABBREV")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL")) o = xl.getValue(); } } } } else if (super.contains(Item.AFKORT)) { o = super.get(Item.AFKORT); } break; case Item.TRIVIALNAME : Vector b = new Vector(); if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("TRIVIAL")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL") && !xl.getValue().equals(get(Item.NAME))) b.addElement( xl.getValue() ); } } } } o = b; break; case Item.PDB : String s = ""; if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("chemical/x-pdb")) s = x.getCDATA(); } } o = s; }; break; case Item.MOL : s = ""; if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("chemical/x-mdl-molfile")) s = x.getCDATA(); } } o = s; }; break; case Item.PICTUREFILE : Picture p = new Picture(); if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("image/gif") && (!x.containsATT("VIEW") || !x.getATT("VIEW").equals("TOP") ) ) { String file = x.getCDATA().trim(); if (x.containsATT("TITLE")) { p = new Picture(file, x.getATT("TITLE")); } else { p = new Picture(file); } } } } o = p; }; break; case Item.REACTIE : s = ""; if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME") && x.containsATT("VIEW")) { if (x.getATT("MIME").equals("image/gif") && x.getATT("VIEW").equals("TOP")) { s = x.getCDATA().trim(); } } } o = s; }; break; default : o = super.get(code); break; } } return o; } public boolean contains(int code) { boolean b = false; if (code >= 100) { switch (code) { case XItem.XGERMAN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("DE")) b = true; } } } break; case XItem.XLATIN : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("LATIN")) b = true; } } } break; default: b = (this.data[code-100] != null); break; } } else { switch (code) { case Item.ENGLISH : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("EN")) b = true; } } } break; case Item.TRIVIALNAME : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("TRIVIAL")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL") && !xl.getValue().equals(get(Item.NAME))) b = true; } } } } break; case Item.IUPACNAME : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("IUPAC")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL")) b = true; } } } } break; case Item.AFKORT : if (contains(XItem.XNAME)) { Vector names = (Vector)get(XItem.XNAME); Enumeration e = names.elements(); while (e.hasMoreElements()) { XNAME xname = (XNAME)e.nextElement(); if (xname.getCLASS().equals("ABBREV")) { Enumeration langs = xname.elements(); while (langs.hasMoreElements()) { XLANG xl = (XLANG)langs.nextElement(); if (xl.getID().equals("NL")) b = true; } } } } else { b = super.contains(Item.AFKORT); } break; case Item.PDB : if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("chemical/x-pdb")) b = true; } } } break; case Item.MOL : if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("chemical/x-mdl-molfile")) b = true; } } } break; case Item.PICTUREFILE : if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME")) { if (x.getATT("MIME").equals("image/gif") && (!x.containsATT("VIEW") || !x.getATT("VIEW").equals("TOP") ) ) b = true; } } }; break; case Item.REACTIE : if (contains(XItem.XMEDIA)) { Vector v = (Vector)get(XItem.XMEDIA); Enumeration e = v.elements(); while (e.hasMoreElements()) { XNODE x = (XNODE)e.nextElement(); if (x.containsATT("MIME") && x.containsATT("VIEW")) { if (x.getATT("MIME").equals("image/gif") && x.getATT("VIEW").equals("TOP")) { b = true; } } } }; break; default : b = super.contains(code); break; } } return b; } } --- NEW FILE: XTYPE.java --- package com.egonw.woc; import java.util.*; import com.objectspace.jgl.*; import com.egonw.woc.util.*; import com.egonw.woc.wml.*; public class XTYPE { public final static int CHEMICAL = 1; public final static int ABBREV = 2; public final static int VERW = 4; public final static int REACTION = 8; public final static int IUPAC_RULE = 16; public final static int POLYMER = 32; public final static int MIXTURE = 64; public final static int GROUP = 128; private final static int TOTAL_TYPES = 3; private int value; public XTYPE() { value = 0; } public void setType(int type) { if (!isType(type)) { value += type; } } public boolean isType(int type) { boolean result = false; int foo = value; for (int i = TOTAL_TYPES ; i > 0; i--) { if (((foo - power(2,i-1)) >= 0)) { if ( power(2,i-1) == type ) result = true; foo -= power(2,i-1); } } return result; } private int power(int number, int power) { int result = 1; for (int i=1; i<=power; i++) { result = result * number; } return result; } } |
Update of /cvsroot/woc/woc/src/woc/src/index In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/src/index Added Files: Makefile.am genlangxslts.pl genlangxslts.pl.in index.abbrev.xsl index.bruto.xsl index.cas2smiles.xsl index.en.xsl index.enum.xsl index.nl.xsl index.smiles2cas.xsl index.vnnum.xsl makechemtrans.sh templindex.XX-XX.xsl update.sh update.sh.in woclist.pl woclist.pl.in woclist.sh woclist.sh.in Log Message: --- NEW FILE: Makefile.am --- bindir=${prefix}/bin/index bin_SCRIPTS = \ woclist.sh \ woclist.pl \ genlangxslts.pl \ update.sh CLEANFILES = $(bin_SCRIPTS) --- NEW FILE: genlangxslts.pl --- #! /usr/bin/perl -w use strict; use diagnostics; my %langs = ( "NL" => { "EN" => "Dutch", "NL" => "Nederlands", }, "EN" => { "EN" => "English", "NL" => "Engels", }, "DE" => { "EN" => "German", "NL" => "Duits", }, "IT" => { "EN" => "Italian", "NL" => "Italiaans", }, "FR" => { "EN" => "French", "NL" => "Frans", }, "ES" => { "EN" => "Spanish", "NL" => "Spaans", }, "LA" => { "EN" => "Latin", "NL" => "Latijn", }, "FY" => { "EN" => "Frysian", "NL" => "Fries", }, ); foreach my $from (keys(%langs)) { foreach my $to (keys(%langs)) { print "$from -> $to$/"; open(INPUT, "<templindex.XX-XX.xsl"); open(OUTPUT, ">index.$from-$to.xsl"); while(<INPUT>) { s/#FROM#/$from/; s/#TO#/$to/; print OUTPUT; } } } open(OUTPUT, ">makechemtrans.sh"); print OUTPUT "#! /usr/bin/sh\n"; print OUTPUT "# This script is autogenerated with genlangxslts.pl! Do not edit!\n\n"; print OUTPUT "all=\""; foreach my $from (keys(%langs)) { foreach my $to (keys(%langs)) { if ($from ne $to) { print OUTPUT "index.$from-$to \\\n"; } } } print OUTPUT "\"\n\n"; print OUTPUT "update.sh \$all\n"; `chmod 755 makechemtrans.sh` --- NEW FILE: genlangxslts.pl.in --- #! @PATHTOPERL@ -w use strict; use diagnostics; my %langs = ( "NL" => { "EN" => "Dutch", "NL" => "Nederlands", }, "EN" => { "EN" => "English", "NL" => "Engels", }, "DE" => { "EN" => "German", "NL" => "Duits", }, "IT" => { "EN" => "Italian", "NL" => "Italiaans", }, "FR" => { "EN" => "French", "NL" => "Frans", }, "ES" => { "EN" => "Spanish", "NL" => "Spaans", }, "LA" => { "EN" => "Latin", "NL" => "Latijn", }, "FY" => { "EN" => "Frysian", "NL" => "Fries", }, ); foreach my $from (keys(%langs)) { foreach my $to (keys(%langs)) { print "$from -> $to$/"; open(INPUT, "<templindex.XX-XX.xsl"); open(OUTPUT, ">index.$from-$to.xsl"); while(<INPUT>) { s/#FROM#/$from/; s/#TO#/$to/; print OUTPUT; } } } open(OUTPUT, ">makechemtrans.sh"); print OUTPUT "#! @PATHTOSH@\n"; print OUTPUT "# This script is autogenerated with genlangxslts.pl! Do not edit!\n\n"; print OUTPUT "all=\""; foreach my $from (keys(%langs)) { foreach my $to (keys(%langs)) { if ($from ne $to) { print OUTPUT "index.$from-$to \\\n"; } } } print OUTPUT "\"\n\n"; print OUTPUT "update.sh \$all\n"; `chmod 755 makechemtrans.sh` --- NEW FILE: index.abbrev.xsl --- <?xml version="1.0"?> <xsl:stylesheet xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output mode="html"/> <xsl:template match="/"> <html> <head> <base href="http://www.sci.kun.nl/woc/"/> <link rel="stylesheet" href="http://www.sci.kun.nl/woc/gui/styles/woc.css" type="text/css"/> <script src="gui/javascript/isframe.js"></script> <script src="gui/javascript/browsertest.js"></script> <script src="gui/javascript/location.js"></script> <script><xsl:comment> setLocation("Afkortingen"); // </xsl:comment> </script> </head> <body class="main"> <hr/> <xsl:apply-templates select="woclist" /> <hr/> </body> </html> </xsl:template> <xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:for-each select="ITEM/DICT/ABBREV"> <xsl:sort /> <tr> <td class="main"><xsl:value-of select="."/></td> <xsl:choose> <xsl:when test="../NAME/LANG[@ID='NL']"> <td class="main"> <a href="http://www.sci.kun.nl/woc/gui/items/{../../@FILE}.shtml"> <xsl:value-of select="../NAME/LANG[@ID='NL']"/></a> </td> </xsl:when> <xsl:otherwise> <td class="main"> <a href="http://www.sci.kun.nl/woc/gui/items/{../../@FILE}.shtml"> <xsl:value-of select="../../@NAME"/></a> </td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </xsl:template> <!-- Poging A, B, C, etc.. voor de delen te zetten xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'A'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'B'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'C'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'D'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'E'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'F'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'G'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'H'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'I'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'J'"/> </xsl:call-template> <xsl:call-template name="letter-deel"> <xsl:with-param name="letter" select="'K'"/> </xsl:call-template> </table> </xsl:template> <xsl:template name="letter-deel"> <xsl:param name="letter" select="."/> <H3><xsl:value-of select="$letter"/></H3> <xsl:for-each select="ITEM/DICT/ABBREV[starts-with(string(),$letter)]"> <xsl:sort /> <tr> <td class="main"><a href="http://www.sci.kun.nl/woc/gui/items/{../../@FILE}.shtml"><xsl:value-of select="."/></a></td> <td class="main"><a href="http://www.sci.kun.nl/woc/gui/items/{../../@FILE}.shtml"><xsl:value-of select="../NAME/LANG[@ID='NL']"/></a></td> </tr> </xsl:for-each> </xsl:template--> </xsl:stylesheet> --- NEW FILE: index.bruto.xsl --- <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- xsl:output mode="html"/ --> <xsl:template match="/"> <html> <head> <base href="http://www.sci.kun.nl/woc/"/> <link rel="stylesheet" href="http://www.sci.kun.nl/woc/gui/styles/woc.css" type="text/css"/> <script src="gui/javascript/isframe.js"></script> <script src="gui/javascript/browsertest.js"></script> <script src="gui/javascript/location.js"></script> <script><xsl:comment> setLocation("Bruto Formule lijst"); // </xsl:comment> </script> </head> <body class="main"> <hr/> <xsl:apply-templates select="woclist"/> <hr/> </body> </html> </xsl:template> <xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:for-each select="ITEM/molecule/string[@title='StoichiometryID']"> <xsl:sort select="."/> <tr> <td class="main"><xsl:apply-templates select="../string[@title='Stoichiometry']"/></td> <td class="main"> <a href="http://www.sci.kun.nl/woc/gui/items/{../../@FILE}.shtml"> <xsl:value-of select="../../@NAME" /></a></td> </tr> </xsl:for-each> </table> </xsl:template> <xsl:template match="sub"> <sub><xsl:apply-templates /></sub> </xsl:template> </xsl:stylesheet> --- NEW FILE: index.cas2smiles.xsl --- <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output mode="html"/> <xsl:template match="/"> <html> <head> <base href="http://www.sci.kun.nl/woc/"/> <link rel="stylesheet" href="http://www.sci.kun.nl/woc/gui/styles/woc.css" type="text/css"/> <script src="gui/javascript/isframe.js"></script> <script src="gui/javascript/browsertest.js"></script> <script src="gui/javascript/location.js"></script> <script><xsl:comment> setLocation("Nederlands-Engels"); // </xsl:comment> </script> </head> <body class="main"> <hr/> <xsl:apply-templates select="woclist" /> <hr/> </body> </html> </xsl:template> <xsl:template match="NAME"> <xsl:apply-templates/> </xsl:template> <xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:for-each select="ITEM"> <xsl:sort select="INDEX[@CLASS='CAS-NUMBER']"/> <xsl:for-each select="INDEX[@CLASS='CAS-NUMBER']"> <xsl:if test="."> <tr> <td class="main"><a href="http://www.sci.kun.nl/woc/gui/items/{../@FILE}.shtml"><xsl:value-of select="."/></a></td> <td class="main"><xsl:value-of select="../INDEX[@CLASS='SMILES']"/></td> </tr> </xsl:if> </xsl:for-each> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> --- NEW FILE: index.en.xsl --- <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output mode="html"/> <xsl:template match="/"> <html> <head> <base href="http://www.sci.kun.nl/woc/"/> <link rel="stylesheet" href="http://www.sci.kun.nl/woc/gui/styles/woc.css" type="text/css"/> <script src="gui/javascript/isframe.js"></script> <script src="gui/javascript/browsertest.js"></script> <script src="gui/javascript/location.js"></script> <script><xsl:comment> setLocation("Afkortingen"); // </xsl:comment> </script> </head> <body class="main"> <hr/> <xsl:apply-templates select="woclist" /> <hr/> </body> </html> </xsl:template> <xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:for-each select="//LANG[@ID='EN']"> <xsl:sort select="."/> <tr> <td class="main"> <a href="http://www.sci.kun.nl/woc/gui/items/{../../../@FILE}.shtml"><xsl:value-of select="."/></a> </td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> --- NEW FILE: index.enum.xsl --- <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0"> <xsl:output mode="html"/> <xsl:template match="/"> <html> <head> <base href="http://www.sci.kun.nl/woc/"/> <link rel="stylesheet" href="http://www.sci.kun.nl/woc/gui/styles/woc.css" type="text/css"/> <script src="gui/javascript/isframe.js"></script> <script src="gui/javascript/browsertest.js"></script> <script src="gui/javascript/location.js"></script> <script><xsl:comment> setLocation("Nederlands-Engels"); // </xsl:comment> </script> </head> <body class="main"> <hr/> <xsl:apply-templates select="woclist" /> <hr/> </body> </html> </xsl:template> <xsl:template match="NAME"> <xsl:apply-templates/> </xsl:template> <xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:for-each select="ITEM"> <xsl:sort select="INDEX[@CLASS='E-NUMBER']"/> <xsl:for-each select="INDEX[@CLASS='E-NUMBER']"> <xsl:if test="."> <tr> <td class="main"><xsl:text>E</xsl:text><xsl:value-of select="."/></td> <td class="main"><a href="http://www.sci.kun.nl/woc/gui/items/{../@FILE}.shtml"><xsl:value-of select="../@NAME"/></a></td> </tr> </xsl:if> </xsl:for-each> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> --- NEW FILE: index.nl.xsl --- <?xml version="1.0"?> <xsl:stylesheet xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output mode="html"/> <xsl:template match="/"> <html> <head> <base href="http://www.sci.kun.nl/woc/"/> <link rel="stylesheet" href="http://www.sci.kun.nl/woc/gui/styles/woc.css" type="text/css"/> <script src="gui/javascript/isframe.js"></script> <script src="gui/javascript/browsertest.js"></script> <script src="gui/javascript/location.js"></script> <script><xsl:comment> setLocation("Afkortingen"); // </xsl:comment> </script> </head> <body class="main"> <hr/> <xsl:apply-templates select="woclist" /> <hr/> </body> </html> </xsl:template> <xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:for-each select="//LANG[@ID='NL']"> <xsl:sort select="."/> <tr> <td class="main"> <a href="http://www.sci.kun.nl/woc/gui/items/{../../../@FILE}.shtml"><xsl:value-of select="."/></a> </td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> --- NEW FILE: index.smiles2cas.xsl --- <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output mode="html"/> <xsl:template match="/"> <html> <head> <base href="http://www.sci.kun.nl/woc/"/> <link rel="stylesheet" href="http://www.sci.kun.nl/woc/gui/styles/woc.css" type="text/css"/> <script src="gui/javascript/isframe.js"></script> <script src="gui/javascript/browsertest.js"></script> <script src="gui/javascript/location.js"></script> <script><xsl:comment> setLocation("Nederlands-Engels"); // </xsl:comment> </script> </head> <body class="main"> <hr/> <xsl:apply-templates select="woclist" /> <hr/> </body> </html> </xsl:template> <xsl:template match="NAME"> <xsl:apply-templates/> </xsl:template> <xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:for-each select="ITEM"> <xsl:sort select="INDEX[@CLASS='SMILES']"/> <xsl:for-each select="INDEX[@CLASS='SMILES']"> <xsl:if test="."> <tr> <td class="main"><a href="http://www.sci.kun.nl/woc/gui/items/{../@FILE}.shtml"><xsl:value-of select="."/></a></td> <td class="main"><xsl:value-of select="../INDEX[@CLASS='CAS-NUMBER']"/></td> </tr> </xsl:if> </xsl:for-each> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> --- NEW FILE: index.vnnum.xsl --- <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output mode="html"/> <xsl:template match="/"> <html> <head> <base href="http://www.sci.kun.nl/woc/"/> <link rel="stylesheet" href="http://www.sci.kun.nl/woc/gui/styles/woc.css" type="text/css"/> <script src="gui/javascript/isframe.js"></script> <script src="gui/javascript/browsertest.js"></script> <script src="gui/javascript/location.js"></script> <script><xsl:comment> setLocation("Nederlands-Engels"); // </xsl:comment> </script> </head> <body class="main"> <hr/> <xsl:apply-templates select="woclist" /> <hr/> </body> </html> </xsl:template> <xsl:template match="NAME"> <xsl:apply-templates/> </xsl:template> <xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:for-each select="ITEM"> <xsl:sort select="INDEX[@CLASS='UN-NUMBER']"/> <xsl:for-each select="INDEX[@CLASS='UN-NUMBER']"> <xsl:if test="."> <tr> <td class="main">UN <xsl:value-of select="."/></td> <td class="main"><a href="http://www.sci.kun.nl/woc/gui/items/{../@FILE}.shtml"><xsl:value-of select="../@NAME"/></a></td> </tr> </xsl:if> </xsl:for-each> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> --- NEW FILE: makechemtrans.sh --- #! /usr/bin/sh # This script is autogenerated with genlangxslts.pl! Do not edit! all="index.EN-FR \ index.EN-ES \ index.EN-DE \ index.EN-NL \ index.EN-IT \ index.EN-LA \ index.EN-FY \ index.FR-EN \ index.FR-ES \ index.FR-DE \ index.FR-NL \ index.FR-IT \ index.FR-LA \ index.FR-FY \ index.ES-EN \ index.ES-FR \ index.ES-DE \ index.ES-NL \ index.ES-IT \ index.ES-LA \ index.ES-FY \ index.DE-EN \ index.DE-FR \ index.DE-ES \ index.DE-NL \ index.DE-IT \ index.DE-LA \ index.DE-FY \ index.NL-EN \ index.NL-FR \ index.NL-ES \ index.NL-DE \ index.NL-IT \ index.NL-LA \ index.NL-FY \ index.IT-EN \ index.IT-FR \ index.IT-ES \ index.IT-DE \ index.IT-NL \ index.IT-LA \ index.IT-FY \ index.LA-EN \ index.LA-FR \ index.LA-ES \ index.LA-DE \ index.LA-NL \ index.LA-IT \ index.LA-FY \ index.FY-EN \ index.FY-FR \ index.FY-ES \ index.FY-DE \ index.FY-NL \ index.FY-IT \ index.FY-LA \ " update.sh $all --- NEW FILE: templindex.XX-XX.xsl --- <?xml version="1.0"?> <xsl:stylesheet xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- This stylesheet is autogenerated with genlangxslts.pl! Do not edit! --> <xsl:template match="/"> <html> <head> <base href="http://www-woc.sci.kun.nl/"/> <link rel="stylesheet" href="http://www-woc.sci.kun.nl/gui/styles/woc.css" type="text/css"/> </head> <body class="main"> <hr/> <xsl:apply-templates select="woclist" /> <hr/> </body> </html> </xsl:template> <xsl:template match="NAME"> <xsl:apply-templates/> </xsl:template> <xsl:template match="woclist"> <table border="0" celpadding="0" cellspacing="0" width="100%"> <xsl:for-each select="ITEM/DICT/NAME"> <xsl:sort select="LANG[@ID='#FROM#']"/> <xsl:for-each select="LANG[@ID='#FROM#']"> <xsl:if test="../LANG[@ID='#TO#']"> <tr> <td class="main"><xsl:value-of select="."/></td> <td class="main"><a href="http://www-woc.sci.kun.nl/gui/items/{../../../@FILE}.shtml"><xsl:value-of select="../LANG[@ID='#TO#']"/></a></td> </tr> </xsl:if> </xsl:for-each> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> --- NEW FILE: update.sh --- #! /usr/bin/sh -f name="woclist" baseuri="http://www-woc.sci.kun.nl/gui/index" htmldir="../../web-docs/gui/index" datadir="." # The default makes all indices except for the pages # translating words XX-XX. Those are done with the # script makechemtrans.pl. all="index.abbrev index.bruto index.nl index.enum index.vnnum \ index.smiles2cas index.cas2smiles" if test "x$1" = "x" then echo "Usage: update.pl xml" echo "Usage: update.pl [web] all" echo "Usage: update.pl [web] <index-name> ..." else if test "x$1" = "xxml" then echo "Creating new $datadir/$name.xml..." $datadir/$name.sh exit fi if test "x$1" = "xweb" then echo "Content-type: text/html" echo "" shift fi if test "x$1" = "xall"; then shift ./update.sh $all else for index in $* do echo "Parsing $datadir/$name.xml against $datadir/$index.xsl..." xsltproc $datadir/$index.xsl $datadir/$name.xml > $htmldir/$index.html chmod 664 $htmldir/$index.html # chgrp wwwwoc $htmldir/$index.html done echo "Done!" fi fi --- NEW FILE: update.sh.in --- #! @PATHTOSH@ -f name="woclist" baseuri="http://www-woc.sci.kun.nl/gui/index" htmldir="../../web-docs/gui/index" datadir="." # The default makes all indices except for the pages # translating words XX-XX. Those are done with the # script makechemtrans.pl. all="index.abbrev index.bruto index.nl index.enum index.vnnum \ index.smiles2cas index.cas2smiles" if test "x$1" = "x" then echo "Usage: update.pl xml" echo "Usage: update.pl [web] all" echo "Usage: update.pl [web] <index-name> ..." else if test "x$1" = "xxml" then echo "Creating new $datadir/$name.xml..." $datadir/$name.sh exit fi if test "x$1" = "xweb" then echo "Content-type: text/html" echo "" shift fi if test "x$1" = "xall"; then shift ./update.sh $all else for index in $* do echo "Parsing $datadir/$name.xml against $datadir/$index.xsl..." xsltproc $datadir/$index.xsl $datadir/$name.xml > $htmldir/$index.html chmod 664 $htmldir/$index.html # chgrp wwwwoc $htmldir/$index.html done echo "Done!" fi fi --- NEW FILE: woclist.pl --- #! /usr/bin/perl use strict; use diagnostics; # Author: Geert Josten # hulp-script gebruikt door wocml.sh my $cmldir="../../data/dadml/physicalprop/cml"; my $infile; my $outfile; if (@ARGV >= 2) { $infile = shift; $outfile = shift; } else { $infile = "woclist.tmp2.xml"; $outfile = "woclist.xml"; } open (INFILE, "$infile"); open (OUTFILE, ">$outfile"); #print eerste regel alvast $_ = <INFILE>; print OUTFILE; while (<INFILE>) { my $file; if (/ITEM.*?CODE=/i) { s/CODE/FILE/i; print OUTFILE; } elsif (/INSERT.*PhysicalProperties.*>(.*)</i) { my @inserts = `awk '/<molecule/,/<\\/molecule/{print " ",\$0}' $cmldir/$1`; foreach my $insert (@inserts) { if ($insert =~ /^(.*Stoichiometry.*>)(.*)(<.*)$/i) { my $pre = $1; my $bruto = $2; my $brutoID = $2; my $post = $3; $bruto =~ s/(\d+)/<sub>$1<\/sub>/ig; print OUTFILE $pre,$bruto,$post,$/; $pre =~ s/Stoichiometry/StoichiometryID/i; $brutoID =~ s/(\d+)/{$1}/ig; while ($brutoID =~ /\{(\d+?)\}/) { my $number = sprintf "%04i", $1; $brutoID =~ s/\{\d+?\}/$number/; } print OUTFILE $pre,$brutoID,$post,$/; } else { print OUTFILE $insert; } } } elsif (/\<\?xml.*\?\>/i) { s/\<\?xml.*\?\>//i; print OUTFILE; } else { print OUTFILE; } } # zoals in Convert.java sub NAMELikeToANCHORLike { # heeft 1 parameter my $param = shift @_; $param =~ s/^\s*(.*?)\s*$/$1/ig; $param =~ s/\ /\_/g; $param =~ s/[,|.|<|>]//g; $param =~ tr/[A-Z]/[a-z]/; return $param; } --- NEW FILE: woclist.pl.in --- #! @PATHTOPERL@ use strict; use diagnostics; # Author: Geert Josten # hulp-script gebruikt door wocml.sh my $cmldir="../../data/dadml/physicalprop/cml"; my $infile; my $outfile; if (@ARGV >= 2) { $infile = shift; $outfile = shift; } else { $infile = "woclist.tmp2.xml"; $outfile = "woclist.xml"; } open (INFILE, "$infile"); open (OUTFILE, ">$outfile"); #print eerste regel alvast $_ = <INFILE>; print OUTFILE; while (<INFILE>) { my $file; if (/ITEM.*?CODE=/i) { s/CODE/FILE/i; print OUTFILE; } elsif (/INSERT.*PhysicalProperties.*>(.*)</i) { my @inserts = `awk '/<molecule/,/<\\/molecule/{print " ",\$0}' $cmldir/$1`; foreach my $insert (@inserts) { if ($insert =~ /^(.*Stoichiometry.*>)(.*)(<.*)$/i) { my $pre = $1; my $bruto = $2; my $brutoID = $2; my $post = $3; $bruto =~ s/(\d+)/<sub>$1<\/sub>/ig; print OUTFILE $pre,$bruto,$post,$/; $pre =~ s/Stoichiometry/StoichiometryID/i; $brutoID =~ s/(\d+)/{$1}/ig; while ($brutoID =~ /\{(\d+?)\}/) { my $number = sprintf "%04i", $1; $brutoID =~ s/\{\d+?\}/$number/; } print OUTFILE $pre,$brutoID,$post,$/; } else { print OUTFILE $insert; } } } elsif (/\<\?xml.*\?\>/i) { s/\<\?xml.*\?\>//i; print OUTFILE; } else { print OUTFILE; } } # zoals in Convert.java sub NAMELikeToANCHORLike { # heeft 1 parameter my $param = shift @_; $param =~ s/^\s*(.*?)\s*$/$1/ig; $param =~ s/\ /\_/g; $param =~ s/[,|.|<|>]//g; $param =~ tr/[A-Z]/[a-z]/; return $param; } --- NEW FILE: woclist.sh --- #! /usr/bin/sh -e # Author: Geert Josten NAME="woclist" EXT=".xml" TEMP=".tmp" TEMP2=".tmp2" WMLDIR="../../data/wml" # cmldir is in perl-stukje gedefinieerd echo "" > $NAME$TEMP cat `find $WMLDIR/123 -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/a -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/b -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/c -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/d -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/e -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/f -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/g -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/h -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/i -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/j -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/k -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/l -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/m -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/n -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/o -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/p -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/q -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/r -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/s -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/t -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/u -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/v -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/w -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/x -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/y -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/z -name "*.xml" | grep -v templates` >> $NAME$TEMP echo '<?xml version="1.0" encoding="ISO-8859-1"?>' > $NAME$TEMP2 echo '<!DOCTYPE ITEM SYSTEM "../../lib/xml/dtd/'$NAME'.dtd">' >> $NAME$TEMP2 echo '<'$NAME' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"' >> $NAME$TEMP2 echo ' xmlns:import="http://www.sci.kun.nl/woc/import"' >> $NAME$TEMP2 echo ' xmlns:xlink="http://www.sci.kun.nl/woc/topicmap">' >> $NAME$TEMP2 awk "/<ITEM/,/<\/ITEM/{print}" $NAME$TEMP >> $NAME$TEMP2 echo '</'$NAME'>' >> $NAME$TEMP2 /usr/bin/perl $NAME.pl $NAME$TEMP2 $NAME$EXT rm $NAME$TEMP $NAME$TEMP2 # chgrp wwwwoc $NAME$EXT chmod 664 $NAME$EXT --- NEW FILE: woclist.sh.in --- #! @PATHTOSH@ -e # Author: Geert Josten NAME="woclist" EXT=".xml" TEMP=".tmp" TEMP2=".tmp2" WMLDIR="../../data/wml" # cmldir is in perl-stukje gedefinieerd echo "" > $NAME$TEMP cat `find $WMLDIR/123 -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/a -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/b -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/c -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/d -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/e -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/f -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/g -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/h -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/i -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/j -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/k -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/l -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/m -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/n -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/o -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/p -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/q -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/r -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/s -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/t -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/u -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/v -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/w -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/x -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/y -name "*.xml" | grep -v templates` >> $NAME$TEMP cat `find $WMLDIR/z -name "*.xml" | grep -v templates` >> $NAME$TEMP echo '<?xml version="1.0" encoding="ISO-8859-1"?>' > $NAME$TEMP2 echo '<!DOCTYPE ITEM SYSTEM "../../lib/xml/dtd/'$NAME'.dtd">' >> $NAME$TEMP2 echo '<'$NAME' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"' >> $NAME$TEMP2 echo ' xmlns:import="http://www.sci.kun.nl/woc/import"' >> $NAME$TEMP2 echo ' xmlns:xlink="http://www.sci.kun.nl/woc/topicmap">' >> $NAME$TEMP2 awk "/<ITEM/,/<\/ITEM/{print}" $NAME$TEMP >> $NAME$TEMP2 echo '</'$NAME'>' >> $NAME$TEMP2 @PATHTOPERL@ $NAME.pl $NAME$TEMP2 $NAME$EXT rm $NAME$TEMP $NAME$TEMP2 # chgrp wwwwoc $NAME$EXT chmod 664 $NAME$EXT |
From: Geert J. <gj...@us...> - 2002-09-03 19:40:56
|
Update of /cvsroot/woc/woc/src/woc/wocjava/source/com/egonw/woc/exception In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/wocjava/source/com/egonw/woc/exception Added Files: BadCommentNotification.java BadItemNotification.java DuplicateItemNotification.java EmptyItemNotification.java IncompleteItemNotification.java UnknownFieldNotification.java WocException.java WocFatalError.java WocNotification.java Log Message: --- NEW FILE: BadCommentNotification.java --- package com.egonw.woc.exception; import com.egonw.woc.*; /** * Signals that an error occured during the reading of a Woc-format file. * * @author Egon Willighagen * @version 1.0, 1/7/98 */ public class BadCommentNotification extends BadItemNotification { public BadCommentNotification(Item i) { super(i); } } --- NEW FILE: BadItemNotification.java --- package com.egonw.woc.exception; import com.egonw.woc.*; /** * Signals that an error occured during the reading of a Woc-format file. * * @author Egon Willighagen * @version 1.0, 1/7/98 */ public class BadItemNotification extends WocNotification { public BadItemNotification(Item i) { super(i); } } --- NEW FILE: DuplicateItemNotification.java --- package com.egonw.woc.exception; import com.egonw.util.*; import com.egonw.woc.*; /** * Signals an non-terminal error. * * @author Egon Willighagen * @version 1.0, 1/7/98 */ public class DuplicateItemNotification extends WocNotification { /** * Constructs a <code>DuplicateItemException</code>. */ public DuplicateItemNotification(Item i) { super(i); } } --- NEW FILE: EmptyItemNotification.java --- package com.egonw.woc.exception; import com.egonw.woc.*; /** * Signals an non-terminal error. * * @author Egon Willighagen * @version 1.0, 1/7/98 */ public class EmptyItemNotification extends WocNotification { /** * Constructs a <code>EmptyItemException</code>. */ public EmptyItemNotification(Item i) { super(i); } } --- NEW FILE: IncompleteItemNotification.java --- package com.egonw.woc.exception; import com.egonw.util.*; import com.egonw.woc.*; /** * Signals an non-terminal error. * * @author Egon Willighagen * @version 1.0, 1/7/98 */ public class IncompleteItemNotification extends WocNotification { /** * Constructs a <code>IncompleteItemException</code>. */ public IncompleteItemNotification(Item i) { super(i); } } --- NEW FILE: UnknownFieldNotification.java --- package com.egonw.woc.exception; import com.egonw.woc.*; /** * Signals that an error occured during the reading of a Woc-format file. * * @author Egon Willighagen * @version 1.0, 1/7/98 */ public class UnknownFieldNotification extends BadItemNotification { public UnknownFieldNotification(Item i) { super(i); } } --- NEW FILE: WocException.java --- package com.egonw.woc.exception; import java.lang.Exception; /** * Signals an non-terminal error. * * @author Egon Willighagen * @version 1.0, 1/7/98 */ public class WocException extends Exception { /** * Constructs a <code>WocException</code> with no detail message. */ public WocException() { super(); } /** * Constructs a <code>WocException</code> with a detail message. */ public WocException(String s) { super(s); } } --- NEW FILE: WocFatalError.java --- package com.egonw.woc.exception; import com.egonw.util.*; /** * Signals an non-terminal error. * * @author Egon Willighagen * @version 1.0, 1/7/98 */ public class WocFatalError extends WocException { /** * Constructs a <code>WocFatalError</code> with no detail message. */ public WocFatalError() { super(); } /** * Constructs a <code>WocFatalError</code> with a detail message. */ public WocFatalError(String s) { super(); } } --- NEW FILE: WocNotification.java --- package com.egonw.woc.exception; import com.egonw.util.*; import com.egonw.woc.*; /** * Signals an non-terminal error. * * @author Egon Willighagen * @version 1.0, 1/7/98 */ public class WocNotification extends WocException { private Item i; /** * Constructs a <code>WocException</code> with no detail message. */ public WocNotification(Item i) { super(); this.i = i; } /** * Returns the item. */ public String toString() { return (String)i.get(Item.NAME); } } |
Update of /cvsroot/woc/woc/src/woc/src/wml2html In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/src/wml2html Added Files: Makefile.am insert-item insert-item.in make-groups make-groups.in make-items make-items.in make-woord make-woord.in Log Message: --- NEW FILE: Makefile.am --- ##### CONFIGURE DEFINITIONS ##### PREFIX="@prefix@" ##### GLOBAL DEFINITIONS ##### ##### AUTOMAKE SPECIALS ##### wml2htmlbindir=${PREFIX}/content/bin/wml2html wml2htmlbin_SCRIPTS= \ make-items \ make-groups \ make-woord \ insert-item CLEANFILES= WMLreport.txt ${bin_SCRIPTS} ##### LOCAL DEFINITIONS ##### ##### RULES ##### --- NEW FILE: insert-item --- #! /bin/sh prefix="/cygdrive/e/woc/wocnew" JAVA=/cygdrive/d/aanplant/jdk1.2.2/bin/java PERL=/usr/bin/perl if (test $# = 1) then : else echo "syntax: insert-item <item.xml>" exit 1 fi if (test -d ${prefix}/web-docs/gui/items) then : else mkdir -p ${prefix}/web-docs/gui/items fi JARS=`ls -1 ../../lib/java/*.jar | ${PERL} -ne "s/\n|\r/:/g; print;"` OPTIONS="-r woc -R ${prefix}/bin/wml2html/repository_def.xml" # convert the unix path to windows if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "posix" ] ; then JARS=`cygpath --path --windows "$JARS"` OPTIONS=`cygpath --path --windows "$OPTIONS"` fi ${JAVA} -cp ${JARS} com.egonw.woc.tools.SimpleAddItem ${OPTIONS} $1 --- NEW FILE: insert-item.in --- #! /bin/sh prefix="@prefix@" JAVA=@PATHTOJAVA@ PERL=@PATHTOPERL@ if (test $# = 1) then : else echo "syntax: insert-item <item.xml>" exit 1 fi if (test -d ${prefix}/web-docs/gui/items) then : else mkdir -p ${prefix}/web-docs/gui/items fi JARS=`ls -1 ../../lib/java/*.jar | ${PERL} -ne "s/\n|\r/:/g; print;"` OPTIONS="-r woc -R ${prefix}/bin/wml2html/repository_def.xml" # convert the unix path to windows if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "posix" ] ; then JARS=`cygpath --path --windows "$JARS"` OPTIONS=`cygpath --path --windows "$OPTIONS"` fi ${JAVA} -cp ${JARS} com.egonw.woc.tools.SimpleAddItem ${OPTIONS} $1 --- NEW FILE: make-groups --- #! /bin/sh prefix="/cygdrive/e/woc/wocnew" JAVA=java #/cygdrive/d/aanplant/jdk1.2.2/bin/java PERL=/usr/bin/perl JARS=`ls -1 ../../lib/java/*.jar | ${PERL} -ne "s/\n|\r/:/g; print;"` REPOSDEFFILE=`pwd`/repository_def.xml # convert the unix path to windows if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "posix" ] ; then JARS=`cygpath --path --windows "$JARS"` REPOSDEFFILE=`cygpath --path --windows "$REPOSDEFFILE"` fi OPTIONS="-r woc -R $REPOSDEFFILE" echo ${JAVA} -cp ${JARS} com.egonw.woc.tools.GroupFiles ${OPTIONS} ${JAVA} -cp ${JARS} com.egonw.woc.tools.GroupFiles ${OPTIONS} --- NEW FILE: make-groups.in --- #! /bin/sh prefix="@prefix@" JAVA=java #@PATHTOJAVA@ PERL=@PATHTOPERL@ JARS=`ls -1 ../../lib/java/*.jar | ${PERL} -ne "s/\n|\r/:/g; print;"` REPOSDEFFILE=`pwd`/repository_def.xml # convert the unix path to windows if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "posix" ] ; then JARS=`cygpath --path --windows "$JARS"` REPOSDEFFILE=`cygpath --path --windows "$REPOSDEFFILE"` fi OPTIONS="-r woc -R $REPOSDEFFILE" echo ${JAVA} -cp ${JARS} com.egonw.woc.tools.GroupFiles ${OPTIONS} ${JAVA} -cp ${JARS} com.egonw.woc.tools.GroupFiles ${OPTIONS} --- NEW FILE: make-items --- #! /bin/sh JAVA=/cygdrive/d/aanplant/jdk1.2.2/bin/java PERL=/usr/bin/perl JARS=`ls -1 ../../lib/java/*.jar | ${PERL} -ne "s/\n|\r/:/g; print;"` OPTIONS="-r `pwd`/repository_def.xml" # convert the unix path to windows if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "posix" ] ; then JARS=`cygpath --path --windows "$JARS"` OPTIONS=`cygpath --path --windows "$OPTIONS"` fi ${JAVA} -cp ${JARS} com.egonw.woc.tools.MaakLosseItems ${OPTIONS} --- NEW FILE: make-items.in --- #! /bin/sh JAVA=@PATHTOJAVA@ PERL=@PATHTOPERL@ JARS=`ls -1 ../../lib/java/*.jar | ${PERL} -ne "s/\n|\r/:/g; print;"` OPTIONS="-r `pwd`/repository_def.xml" # convert the unix path to windows if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "posix" ] ; then JARS=`cygpath --path --windows "$JARS"` OPTIONS=`cygpath --path --windows "$OPTIONS"` fi ${JAVA} -cp ${JARS} com.egonw.woc.tools.MaakLosseItems ${OPTIONS} --- NEW FILE: make-woord --- #! /bin/sh ##### CONFIGURE DEFINITIONS ##### PREFIX="/cygdrive/e/woc/wocnew" JAVA="/cygdrive/d/aanplant/jdk1.2.2/bin/java" PERL="/usr/bin/perl" javalibdir=${PREFIX}/shared/lib/java ##### GLOBAL DEFINITIONS ##### wocjavajardir=${javalibdir}/woc reposdir=${PREFIX}/shared/etc repos_DATA=repository_def.xml ##### LOCAL DEFINITIONS ##### JARS=`ls -1 ${javalibdir}/*.jar ${wocjavajardir}/*.jar | ${PERL} -ne "s/\n|\r/:/g; print;"` REPOSDEFFILE="$reposdir/$repos_DATA" # convert the unix path to windows if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "posix" ] ; then JARS=`cygpath --path --windows "$JARS"` REPOSDEFFILE=/`cygpath --path --windows "$REPOSDEFFILE"` fi ##### EXECUTION ##### echo ${JAVA} -cp ${JARS} com.egonw.woc.tools.Woord -r ${REPOSDEFFILE} ${JAVA} -cp ${JARS} com.egonw.woc.tools.Woord -r ${REPOSDEFFILE} --- NEW FILE: make-woord.in --- #! /bin/sh ##### CONFIGURE DEFINITIONS ##### PREFIX="@prefix@" JAVA="@PATHTOJAVA@" PERL="@PATHTOPERL@" javalibdir=${PREFIX}/shared/lib/java ##### GLOBAL DEFINITIONS ##### wocjavajardir=${javalibdir}/woc reposdir=${PREFIX}/shared/etc repos_DATA=repository_def.xml ##### LOCAL DEFINITIONS ##### JARS=`ls -1 ${javalibdir}/*.jar ${wocjavajardir}/*.jar | ${PERL} -ne "s/\n|\r/:/g; print;"` REPOSDEFFILE="$reposdir/$repos_DATA" # convert the unix path to windows if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "posix" ] ; then JARS=`cygpath --path --windows "$JARS"` REPOSDEFFILE=/`cygpath --path --windows "$REPOSDEFFILE"` fi ##### EXECUTION ##### echo ${JAVA} -cp ${JARS} com.egonw.woc.tools.Woord -r ${REPOSDEFFILE} ${JAVA} -cp ${JARS} com.egonw.woc.tools.Woord -r ${REPOSDEFFILE} |
Update of /cvsroot/woc/woc/src/woc/src/check In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/src/check Added Files: Makefile.am check_filenames.pl check_filenames.pl.in list-cas.pl list-cas.pl.in test-wmls-op-wellformed.pl test-wmls-op-wellformed.pl.in voeg-fysische-gegevens-toe.pl voeg-fysische-gegevens-toe.pl.in voeg-gif-mime-toe.pl voeg-gif-mime-toe.pl.in voeg-pdb-mime-toe.pl voeg-pdb-mime-toe.pl.in voeg-woc-nummer-toe.pl voeg-woc-nummer-toe.pl.in voeg_stylesheet_toe.pl voeg_stylesheet_toe.pl.in zet-fysisch-props-op-extensie-xml.pl zet-fysisch-props-op-extensie-xml.pl.in zet-wmls-op-ISO-8859-1-encoding.pl zet-wmls-op-ISO-8859-1-encoding.pl.in zoek-cas-bij-pdbs-voor-dadml.pl zoek-cas-bij-pdbs-voor-dadml.pl.in zoek-chems-zonder-cas.pl zoek-chems-zonder-cas.pl.in zoek-chems-zonder-fysische-props.pl zoek-chems-zonder-fysische-props.pl.in zoek-pdbs-zonder-wml.pl zoek-pdbs-zonder-wml.pl.in zoek-wmls-bij-groepen.pl zoek-wmls-bij-groepen.pl.in zoek-wmls-zonder-giflink.pl zoek-wmls-zonder-giflink.pl.in zoek-xmls-met-cas-zonder-2dcml.pl zoek-xmls-met-cas-zonder-2dcml.pl.in Log Message: --- NEW FILE: Makefile.am --- bindir=${prefix}/bin/check bin_SCRIPTS = \ check_filenames.pl \ list-cas.pl \ test-wmls-op-wellformed.pl \ voeg-fysische-gegevens-toe.pl \ voeg-gif-mime-toe.pl \ voeg-pdb-mime-toe.pl \ voeg-woc-nummer-toe.pl \ voeg_stylesheet_toe.pl \ zet-fysisch-props-op-extensie-xml.pl \ zet-wmls-op-ISO-8859-1-encoding.pl \ zoek-cas-bij-pdbs-voor-dadml.pl \ zoek-chems-zonder-cas.pl \ zoek-chems-zonder-fysische-props.pl \ zoek-pdbs-zonder-wml.pl \ zoek-wmls-bij-groepen.pl \ zoek-wmls-zonder-giflink.pl \ zoek-xmls-met-cas-zonder-2dcml.pl CLEANFILES = $(bin_SCRIPTS) --- NEW FILE: check_filenames.pl --- #! /usr/bin/perl -w use strict; if (scalar(@ARGV) == 0) { print "syntax: check_filenames.pl <*.wml>$/"; exit 0; } my @wmlfiles = @ARGV; my %accepted_codes = (); my $filecount = 0; my $filesparsed = 0; my $codesadded = 0; my $hasid = 0; my $wrongid = 0; foreach my $file (@wmlfiles) { $filecount++; my @content = (); my $changed = 0; my $correctcode = $file; $correctcode =~ s/.*\/(.*).xml/$1/; if (open (OPENFILE, "<$file")) { print "Checking $file ($correctcode)...$/"; @content = <OPENFILE>; for (my $i=0; $i < scalar(@content); $i++) { my $line = $content[$i]; if ($line =~ /<ITEM(.*?)>/i) { $filesparsed++; my $args = $1; if ($args =~ /CODE=\"(.*?)\"/) { $hasid++; my $code = $1; $code =~ s/\n//g; print " Code: $code$/"; $accepted_codes{"$code"} = "yes"; if ($code ne $correctcode) { $wrongid++; print " -> it should be: $correctcode$/"; print " Old: $line"; my $newline = "<ITEM$args CODE=\"$correctcode\">$/"; print " New: $newline"; $content[$i] = $newline; $changed = 1; } } else { # should correct this file print " Old: $line"; my $newline = "<ITEM$args CODE=\"$correctcode\">$/"; print " New: $newline"; $accepted_codes{"$correctcode"} = "yes"; $content[$i] = $newline; $changed = 1; } } } close(OPENFILE); } if ($changed) { if (open(OPENFILE, ">$file")) { $codesadded++; print OPENFILE @content; } else { print "ERROR: file $file could not be saved!"; } } } # now come the process of checking references my $wrong_group = ""; foreach my $file (@wmlfiles) { my @content = (); my $correctcode = $file; $correctcode =~ s/.*\/(.*).xml/$1/; if (open (OPENFILE, "<$file")) { print "Checking references in $file ($correctcode)...$/"; @content = <OPENFILE>; foreach my $line (@content) { if ($line =~ /<GROUP>(.*)<\/GROUP>/i) { my $group = $1; print " checking GROUP $group...$/"; if (!($accepted_codes{"$group"})) { print " ERROR: unknown GROUP $group$/"; } } } } } print "----------------------------------------$/"; print " files : $filecount$/"; print " checked : $filesparsed$/"; print " code : $hasid$/"; print " corrected: $wrongid$/"; print " added : $codesadded$/"; print "----------------------------------------$/"; --- NEW FILE: check_filenames.pl.in --- #! @PATHTOPERL@ -w use strict; if (scalar(@ARGV) == 0) { print "syntax: check_filenames.pl <*.wml>$/"; exit 0; } my @wmlfiles = @ARGV; my %accepted_codes = (); my $filecount = 0; my $filesparsed = 0; my $codesadded = 0; my $hasid = 0; my $wrongid = 0; foreach my $file (@wmlfiles) { $filecount++; my @content = (); my $changed = 0; my $correctcode = $file; $correctcode =~ s/.*\/(.*).xml/$1/; if (open (OPENFILE, "<$file")) { print "Checking $file ($correctcode)...$/"; @content = <OPENFILE>; for (my $i=0; $i < scalar(@content); $i++) { my $line = $content[$i]; if ($line =~ /<ITEM(.*?)>/i) { $filesparsed++; my $args = $1; if ($args =~ /CODE=\"(.*?)\"/) { $hasid++; my $code = $1; $code =~ s/\n//g; print " Code: $code$/"; $accepted_codes{"$code"} = "yes"; if ($code ne $correctcode) { $wrongid++; print " -> it should be: $correctcode$/"; print " Old: $line"; my $newline = "<ITEM$args CODE=\"$correctcode\">$/"; print " New: $newline"; $content[$i] = $newline; $changed = 1; } } else { # should correct this file print " Old: $line"; my $newline = "<ITEM$args CODE=\"$correctcode\">$/"; print " New: $newline"; $accepted_codes{"$correctcode"} = "yes"; $content[$i] = $newline; $changed = 1; } } } close(OPENFILE); } if ($changed) { if (open(OPENFILE, ">$file")) { $codesadded++; print OPENFILE @content; } else { print "ERROR: file $file could not be saved!"; } } } # now come the process of checking references my $wrong_group = ""; foreach my $file (@wmlfiles) { my @content = (); my $correctcode = $file; $correctcode =~ s/.*\/(.*).xml/$1/; if (open (OPENFILE, "<$file")) { print "Checking references in $file ($correctcode)...$/"; @content = <OPENFILE>; foreach my $line (@content) { if ($line =~ /<GROUP>(.*)<\/GROUP>/i) { my $group = $1; print " checking GROUP $group...$/"; if (!($accepted_codes{"$group"})) { print " ERROR: unknown GROUP $group$/"; } } } } } print "----------------------------------------$/"; print " files : $filecount$/"; print " checked : $filesparsed$/"; print " code : $hasid$/"; print " corrected: $wrongid$/"; print " added : $codesadded$/"; print "----------------------------------------$/"; --- NEW FILE: list-cas.pl --- #! /usr/bin/perl -w # # Make a list of all cas-nummers of which compounds are given # use strict; use diagnostics; my $debug = ""; my $wmldir = "../../data/wml"; opendir (DIR, $wmldir) || die "$wmldir: $!$/"; my @files = grep {/\.xml/i} readdir(DIR); closedir (DIR) || die "$wmldir: $!$/"; foreach my $file (@files) { my $cas = `grep -i CAS-NUMBER $wmldir/$file`; if ($cas) { chomp ($cas); $cas =~ s/\s*<INDEX.*?>\s*//ig; $cas =~ s/\s*<\/INDEX.*?>\s*//ig; print "$cas$/"; } } --- NEW FILE: list-cas.pl.in --- #! @PATHTOPERL@ -w # # Make a list of all cas-nummers of which compounds are given # use strict; use diagnostics; my $debug = ""; my $wmldir = "../../data/wml"; opendir (DIR, $wmldir) || die "$wmldir: $!$/"; my @files = grep {/\.xml/i} readdir(DIR); closedir (DIR) || die "$wmldir: $!$/"; foreach my $file (@files) { my $cas = `grep -i CAS-NUMBER $wmldir/$file`; if ($cas) { chomp ($cas); $cas =~ s/\s*<INDEX.*?>\s*//ig; $cas =~ s/\s*<\/INDEX.*?>\s*//ig; print "$cas$/"; } } --- NEW FILE: test-wmls-op-wellformed.pl --- #! /usr/bin/perl -w use strict; if (! @ARGV) { die "Usage: $0 <xml-files>$/"; } use XML::Parser; my $parser = new XML::Parser(ErrorContext => 2); my $nr_files = @ARGV; my $nr_notexist = 0; my $nr_processed = 0; my $nr_warnings = 0; my $nr_ignored = 0; my $nr_okay = 0; foreach my $file (@ARGV) { if (! (-e $file)) { warn "$file: does not exist!!!$/"; $nr_notexist++; } else { print "Processing $file... "; eval { $parser->parsefile("$file"); }; if ($@) { if ($@ =~ /<sub>/i) { print "Probably found a <SUB> tag inside an attribute, ignoring...$/"; $nr_ignored++; } elsif ($@ =~ /<i>/i) { print "Probably found a <I> tag inside an attribute, ignoring...$/"; $nr_ignored++; } else { warn "$/$@$/"; $nr_warnings++; } } else { print "Okay!$/"; $nr_okay++; } $nr_processed++; } } if ($nr_files) { print " -------------------------$/"; print "Files processed : $nr_files$/"; if ($nr_warnings || $nr_ignored) { print " checked okay : $nr_okay$/"; print " warnings : $nr_warnings$/" if $nr_warnings; print " ignored warnings : $nr_ignored$/" if $nr_ignored; } else { print " all files checked okay!$/"; } print "Non-existing files : $nr_notexist$/" if ($nr_notexist); } else { print "No files to process!$/"; } --- NEW FILE: test-wmls-op-wellformed.pl.in --- #! @PATHTOPERL@ -w use strict; if (! @ARGV) { die "Usage: $0 <xml-files>$/"; } use XML::Parser; my $parser = new XML::Parser(ErrorContext => 2); my $nr_files = @ARGV; my $nr_notexist = 0; my $nr_processed = 0; my $nr_warnings = 0; my $nr_ignored = 0; my $nr_okay = 0; foreach my $file (@ARGV) { if (! (-e $file)) { warn "$file: does not exist!!!$/"; $nr_notexist++; } else { print "Processing $file... "; eval { $parser->parsefile("$file"); }; if ($@) { if ($@ =~ /<sub>/i) { print "Probably found a <SUB> tag inside an attribute, ignoring...$/"; $nr_ignored++; } elsif ($@ =~ /<i>/i) { print "Probably found a <I> tag inside an attribute, ignoring...$/"; $nr_ignored++; } else { warn "$/$@$/"; $nr_warnings++; } } else { print "Okay!$/"; $nr_okay++; } $nr_processed++; } } if ($nr_files) { print " -------------------------$/"; print "Files processed : $nr_files$/"; if ($nr_warnings || $nr_ignored) { print " checked okay : $nr_okay$/"; print " warnings : $nr_warnings$/" if $nr_warnings; print " ignored warnings : $nr_ignored$/" if $nr_ignored; } else { print " all files checked okay!$/"; } print "Non-existing files : $nr_notexist$/" if ($nr_notexist); } else { print "No files to process!$/"; } --- NEW FILE: voeg-fysische-gegevens-toe.pl --- #! /usr/bin/perl -w use strict; my $debug = "yes"; my $wmldir = "../../data/wml"; my $physpropdir = "../../data/dadml/physicalprop/cml"; my $existsfile = "tmp-physprop-exists-"; # tellers my $nr_foundCAS = 0; my $nr_already_linked = 0; my $nr_gelinkt = 0; my $nr_mislukte_links = 0; opendir (physpropDIR, $physpropdir) || die "$physpropdir: $!$/"; my @physpropfiles = grep {/\.xml/i} readdir(physpropDIR); closedir (physpropDIR) || die "$physpropdir: $!$/"; &create_existskeyfile ("NUMBER"); &create_existskeyfile ("PhysicalProp"); # Loop over all files foreach my $physpropfile (@physpropfiles) { my $cas = $physpropfile; $cas =~ s/\.xml//ig; my $nummatch = &exists (("NUMBER" => $cas)); if ($nummatch) { $nr_foundCAS++; print "NUMBER found:\t$nummatch$/" if ($debug); my $linkmatch = &exists (("PhysicalProp" => $cas)); if ($linkmatch) { $nr_already_linked++; print "physprop-link found:\t$linkmatch$/" if ($debug); } else { print "$cas.xml can be linked!!:\t$nummatch$/"; #print "\tMEDIA-tag toevoegen aan wml? "; #$_ = <STDIN>; #if (/^(j|y)/i) { my ($wmlfile) = split (":", $nummatch); print "Going to chage $wmldir/$wmlfile and add $cas...$/" if $debug; if (&voeg_link_toe("$wmldir/$wmlfile", $cas)) { $nr_gelinkt++; } else { $nr_mislukte_links++; } #} } } else { print "Dangling physprop-file $cas.xml$/"; } } &remove_existskeyfile ("NUMBER"); &remove_existskeyfile ("PhysicalProp"); # Print statistics print " ----------------------------$/"; print "Files checked : ",scalar @physpropfiles, $/; if ($nr_foundCAS) { print " CAS or WOC number found : $nr_foundCAS$/"; my $nr_linkable = $nr_foundCAS - $nr_already_linked; if ($nr_linkable) { print " Linkable matches : ", $nr_foundCAS - $nr_already_linked,$/; print " Added links : $nr_gelinkt$/" if $nr_gelinkt; print " Links failed to add : $nr_mislukte_links$/" if $nr_mislukte_links; my $nr_skipped_links = $nr_linkable - $nr_gelinkt - $nr_mislukte_links; print " Skipped links : ", $nr_skipped_links,$/ if $nr_skipped_links; print " Already linked matches : $nr_already_linked$/"; } else { print " Already linked matches : $nr_already_linked$/"; print " No linkable matches...$/"; } } else { print "Not one file name matched an item name...$/"; } my $nr_danglingphysprops = @physpropfiles - $nr_foundCAS; print " Dangling files found : $nr_danglingphysprops$/"; sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } sub voeg_link_toe { my $file = shift; my $cas = shift; my $succes = "True"; my @XML_data; my $changed = ""; print "Processing $file "; if (open (FILE, $file)) { while (<FILE>) { if (/<\/ITEM/i) { push (@XML_data, " <INSERT MIME=\"chemical/cml\" CLASS=\"PhysicalProperties\">$cas.xml</INSERT>$/"); push (@XML_data, $_); $changed = "True"; } else { push (@XML_data, $_); } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; $succes = ""; } print " about to store changed file...$/" if $debug; if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "INSERT-tag added...$/"; } else { warn "$file: $!$/"; print "Unable to change...$/"; $succes = ""; } } else { print "No changes...$/"; } return ($succes); } --- NEW FILE: voeg-fysische-gegevens-toe.pl.in --- #! @PATHTOPERL@ -w use strict; my $debug = "yes"; my $wmldir = "../../data/wml"; my $physpropdir = "../../data/dadml/physicalprop/cml"; my $existsfile = "tmp-physprop-exists-"; # tellers my $nr_foundCAS = 0; my $nr_already_linked = 0; my $nr_gelinkt = 0; my $nr_mislukte_links = 0; opendir (physpropDIR, $physpropdir) || die "$physpropdir: $!$/"; my @physpropfiles = grep {/\.xml/i} readdir(physpropDIR); closedir (physpropDIR) || die "$physpropdir: $!$/"; &create_existskeyfile ("NUMBER"); &create_existskeyfile ("PhysicalProp"); # Loop over all files foreach my $physpropfile (@physpropfiles) { my $cas = $physpropfile; $cas =~ s/\.xml//ig; my $nummatch = &exists (("NUMBER" => $cas)); if ($nummatch) { $nr_foundCAS++; print "NUMBER found:\t$nummatch$/" if ($debug); my $linkmatch = &exists (("PhysicalProp" => $cas)); if ($linkmatch) { $nr_already_linked++; print "physprop-link found:\t$linkmatch$/" if ($debug); } else { print "$cas.xml can be linked!!:\t$nummatch$/"; #print "\tMEDIA-tag toevoegen aan wml? "; #$_ = <STDIN>; #if (/^(j|y)/i) { my ($wmlfile) = split (":", $nummatch); print "Going to chage $wmldir/$wmlfile and add $cas...$/" if $debug; if (&voeg_link_toe("$wmldir/$wmlfile", $cas)) { $nr_gelinkt++; } else { $nr_mislukte_links++; } #} } } else { print "Dangling physprop-file $cas.xml$/"; } } &remove_existskeyfile ("NUMBER"); &remove_existskeyfile ("PhysicalProp"); # Print statistics print " ----------------------------$/"; print "Files checked : ",scalar @physpropfiles, $/; if ($nr_foundCAS) { print " CAS or WOC number found : $nr_foundCAS$/"; my $nr_linkable = $nr_foundCAS - $nr_already_linked; if ($nr_linkable) { print " Linkable matches : ", $nr_foundCAS - $nr_already_linked,$/; print " Added links : $nr_gelinkt$/" if $nr_gelinkt; print " Links failed to add : $nr_mislukte_links$/" if $nr_mislukte_links; my $nr_skipped_links = $nr_linkable - $nr_gelinkt - $nr_mislukte_links; print " Skipped links : ", $nr_skipped_links,$/ if $nr_skipped_links; print " Already linked matches : $nr_already_linked$/"; } else { print " Already linked matches : $nr_already_linked$/"; print " No linkable matches...$/"; } } else { print "Not one file name matched an item name...$/"; } my $nr_danglingphysprops = @physpropfiles - $nr_foundCAS; print " Dangling files found : $nr_danglingphysprops$/"; sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } sub voeg_link_toe { my $file = shift; my $cas = shift; my $succes = "True"; my @XML_data; my $changed = ""; print "Processing $file "; if (open (FILE, $file)) { while (<FILE>) { if (/<\/ITEM/i) { push (@XML_data, " <INSERT MIME=\"chemical/cml\" CLASS=\"PhysicalProperties\">$cas.xml</INSERT>$/"); push (@XML_data, $_); $changed = "True"; } else { push (@XML_data, $_); } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; $succes = ""; } print " about to store changed file...$/" if $debug; if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "INSERT-tag added...$/"; } else { warn "$file: $!$/"; print "Unable to change...$/"; $succes = ""; } } else { print "No changes...$/"; } return ($succes); } --- NEW FILE: voeg-gif-mime-toe.pl --- #! /usr/bin/perl -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $gifdir = "../../data/dadml/2d/gif"; my $existsfile = "tmp-gifmime-exists"; # tellers my $nr_foundCAS = 0; my $nr_already_linked = 0; my $nr_gelinkt = 0; my $nr_mislukte_links = 0; my $nr_dadmlpath_added = 0; opendir (GIFDIR, $gifdir) || die "$gifdir: $!$/"; my @giffiles = grep {/\.gif/i} readdir(GIFDIR); closedir (GIFDIR) || die "$gifdir: $!$/"; &create_existskeyfile ("NUMBER"); &create_existskeyfile ("gif"); # Loop over all files foreach my $giffile (@giffiles) { my $cas = $giffile; $cas =~ s/\.gif//ig; my $nummatch = &exists (("NUMBER" => $cas)); if ($nummatch) { my ($wmlfile) = split (":", $nummatch); $nr_foundCAS++; print "NUMBER found:\t$nummatch$/" if ($debug); my $linkmatch = &exists (("gif" => $cas)); if ($linkmatch) { #print "$cas.gif already linked!!:\t$nummatch$/"; $nr_already_linked++; print "GIF-link found:\t$linkmatch$/" if ($debug); if ($linkmatch !~ /PATH/i) { #print "\tPATH-attribuut toevoegen aan wml? "; #$_ = <STDIN>; #if (/^(j|y)/i) { &add_dadml_path ("$wmldir/$wmlfile", $cas); $nr_dadmlpath_added++; #} } } else { print "$cas.gif can be linked!!:\t$nummatch$/"; #print "\tMEDIA-tag toevoegen aan wml? "; #$_ = <STDIN>; #if (/^(j|y)/i) { if (&voeg_link_toe("$wmldir/$wmlfile", $cas)) { $nr_gelinkt++; } else { $nr_mislukte_links++; } #} } } else { print "Dangling GIF-file $cas.gif$/"; } } &remove_existskeyfile ("NUMBER"); &remove_existskeyfile ("gif"); # Print statistics print " ----------------------------$/"; print "Files checked : ",scalar @giffiles, $/; if ($nr_foundCAS) { print " CAS or WOC number found : $nr_foundCAS$/"; my $nr_linkable = $nr_foundCAS - $nr_already_linked; if ($nr_linkable) { print " Linkable matches : ", $nr_foundCAS - $nr_already_linked,$/; print " Added links : $nr_gelinkt$/" if $nr_gelinkt; print " Links failed to add : $nr_mislukte_links$/" if $nr_mislukte_links; my $nr_skipped_links = $nr_linkable - $nr_gelinkt - $nr_mislukte_links; print " Skipped links : $nr_skipped_links$/" if $nr_skipped_links; print " Already linked matches : $nr_already_linked$/"; print " PATH-attibutes added : $nr_dadmlpath_added$/" if $nr_dadmlpath_added; } else { print " Already linked matches : $nr_already_linked$/"; print " PATH-attibutes added : $nr_dadmlpath_added$/" if $nr_dadmlpath_added; print " No linkable matches...$/"; } } else { print "Not one file name matched an item name...$/"; } my $nr_danglingGIFs = @giffiles - $nr_foundCAS; print " Dangling files found : $nr_danglingGIFs$/"; sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } sub voeg_link_toe { my $file = shift; my $cas = shift; my $succes = "True"; my @XML_data; my $changed = ""; print "Processing $file "; my $has_WOC = `grep -i "<WOC>" $file`; my $has_DICT = `grep -i "<DICT>" $file` if (! $has_WOC); my $has_INDEX = `grep -i "<INDEX" $file` if (! $has_WOC); my $last_was_INDEX = ""; my $indent = ""; if (open (FILE, $file)) { if ($has_WOC) { while (<FILE>) { if (/^(\s*)<WOC>/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent <MEDIA MIME=\"image/gif\" PATH=\"dadml\">$cas.gif</MEDIA>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } elsif ($has_INDEX) { while (<FILE>) { if (/^(\s*)<INDEX/i) { $indent = $1; push (@XML_data, $_); $last_was_INDEX = "True"; } elsif ($last_was_INDEX && ! /<INDEX/i) { push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"image/gif\" PATH=\"dadml\">$cas.gif</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); push (@XML_data, $_); $changed = "True"; $last_was_INDEX = ""; } else { push (@XML_data, $_); } } } elsif ($has_DICT) { while (<FILE>) { if (/^(\s*)<\/DICT>/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"image/gif\" PATH=\"dadml\">$cas.gif</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } else { while (<FILE>) { if (/^(\s*)<ITEM/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"image/gif\" PATH=\"dadml\">$cas.gif</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; $succes = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "MEDIA-tag added...$/"; } else { warn "$file: $!$/"; print "Unable to change...$/"; $succes = ""; } } else { print "No changes...$/"; } return ($succes); } sub add_dadml_path { my $file = shift; my $cas = shift; my $succes = "True"; my @XML_data; my $changed = ""; print "Processing $file "; if (open (FILE, $file)) { while (<FILE>) { if (/MEDIA.*image\/gif.*$cas/i) { s/MIME=\"image\/gif\">/MIME=\"image\/gif\" PATH=\"dadml\">/ig; push (@XML_data, $_); $changed = "True"; } else { push (@XML_data, $_); } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; $succes = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "PATH-attribute added...$/"; } else { warn "$file: $!$/"; print "Unable to change...$/"; $succes = ""; } } else { print "No changes...$/"; } return ($succes); } --- NEW FILE: voeg-gif-mime-toe.pl.in --- #! @PATHTOPERL@ -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $gifdir = "../../data/dadml/2d/gif"; my $existsfile = "tmp-gifmime-exists"; # tellers my $nr_foundCAS = 0; my $nr_already_linked = 0; my $nr_gelinkt = 0; my $nr_mislukte_links = 0; my $nr_dadmlpath_added = 0; opendir (GIFDIR, $gifdir) || die "$gifdir: $!$/"; my @giffiles = grep {/\.gif/i} readdir(GIFDIR); closedir (GIFDIR) || die "$gifdir: $!$/"; &create_existskeyfile ("NUMBER"); &create_existskeyfile ("gif"); # Loop over all files foreach my $giffile (@giffiles) { my $cas = $giffile; $cas =~ s/\.gif//ig; my $nummatch = &exists (("NUMBER" => $cas)); if ($nummatch) { my ($wmlfile) = split (":", $nummatch); $nr_foundCAS++; print "NUMBER found:\t$nummatch$/" if ($debug); my $linkmatch = &exists (("gif" => $cas)); if ($linkmatch) { #print "$cas.gif already linked!!:\t$nummatch$/"; $nr_already_linked++; print "GIF-link found:\t$linkmatch$/" if ($debug); if ($linkmatch !~ /PATH/i) { #print "\tPATH-attribuut toevoegen aan wml? "; #$_ = <STDIN>; #if (/^(j|y)/i) { &add_dadml_path ("$wmldir/$wmlfile", $cas); $nr_dadmlpath_added++; #} } } else { print "$cas.gif can be linked!!:\t$nummatch$/"; #print "\tMEDIA-tag toevoegen aan wml? "; #$_ = <STDIN>; #if (/^(j|y)/i) { if (&voeg_link_toe("$wmldir/$wmlfile", $cas)) { $nr_gelinkt++; } else { $nr_mislukte_links++; } #} } } else { print "Dangling GIF-file $cas.gif$/"; } } &remove_existskeyfile ("NUMBER"); &remove_existskeyfile ("gif"); # Print statistics print " ----------------------------$/"; print "Files checked : ",scalar @giffiles, $/; if ($nr_foundCAS) { print " CAS or WOC number found : $nr_foundCAS$/"; my $nr_linkable = $nr_foundCAS - $nr_already_linked; if ($nr_linkable) { print " Linkable matches : ", $nr_foundCAS - $nr_already_linked,$/; print " Added links : $nr_gelinkt$/" if $nr_gelinkt; print " Links failed to add : $nr_mislukte_links$/" if $nr_mislukte_links; my $nr_skipped_links = $nr_linkable - $nr_gelinkt - $nr_mislukte_links; print " Skipped links : $nr_skipped_links$/" if $nr_skipped_links; print " Already linked matches : $nr_already_linked$/"; print " PATH-attibutes added : $nr_dadmlpath_added$/" if $nr_dadmlpath_added; } else { print " Already linked matches : $nr_already_linked$/"; print " PATH-attibutes added : $nr_dadmlpath_added$/" if $nr_dadmlpath_added; print " No linkable matches...$/"; } } else { print "Not one file name matched an item name...$/"; } my $nr_danglingGIFs = @giffiles - $nr_foundCAS; print " Dangling files found : $nr_danglingGIFs$/"; sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } sub voeg_link_toe { my $file = shift; my $cas = shift; my $succes = "True"; my @XML_data; my $changed = ""; print "Processing $file "; my $has_WOC = `grep -i "<WOC>" $file`; my $has_DICT = `grep -i "<DICT>" $file` if (! $has_WOC); my $has_INDEX = `grep -i "<INDEX" $file` if (! $has_WOC); my $last_was_INDEX = ""; my $indent = ""; if (open (FILE, $file)) { if ($has_WOC) { while (<FILE>) { if (/^(\s*)<WOC>/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent <MEDIA MIME=\"image/gif\" PATH=\"dadml\">$cas.gif</MEDIA>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } elsif ($has_INDEX) { while (<FILE>) { if (/^(\s*)<INDEX/i) { $indent = $1; push (@XML_data, $_); $last_was_INDEX = "True"; } elsif ($last_was_INDEX && ! /<INDEX/i) { push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"image/gif\" PATH=\"dadml\">$cas.gif</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); push (@XML_data, $_); $changed = "True"; $last_was_INDEX = ""; } else { push (@XML_data, $_); } } } elsif ($has_DICT) { while (<FILE>) { if (/^(\s*)<\/DICT>/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"image/gif\" PATH=\"dadml\">$cas.gif</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } else { while (<FILE>) { if (/^(\s*)<ITEM/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"image/gif\" PATH=\"dadml\">$cas.gif</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; $succes = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "MEDIA-tag added...$/"; } else { warn "$file: $!$/"; print "Unable to change...$/"; $succes = ""; } } else { print "No changes...$/"; } return ($succes); } sub add_dadml_path { my $file = shift; my $cas = shift; my $succes = "True"; my @XML_data; my $changed = ""; print "Processing $file "; if (open (FILE, $file)) { while (<FILE>) { if (/MEDIA.*image\/gif.*$cas/i) { s/MIME=\"image\/gif\">/MIME=\"image\/gif\" PATH=\"dadml\">/ig; push (@XML_data, $_); $changed = "True"; } else { push (@XML_data, $_); } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; $succes = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "PATH-attribute added...$/"; } else { warn "$file: $!$/"; print "Unable to change...$/"; $succes = ""; } } else { print "No changes...$/"; } return ($succes); } --- NEW FILE: voeg-pdb-mime-toe.pl --- #! /usr/bin/perl -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $pdbdir = "../../data/dadml/3d/pdb"; my $existsfile = "tmp-pdbmime-exists"; # tellers my $nr_foundCAS = 0; my $nr_already_linked = 0; my $nr_gelinkt = 0; my $nr_mislukte_links = 0; opendir (PDBDIR, $pdbdir) || die "$pdbdir: $!$/"; my @pdbfiles = grep {/\.pdb/i} readdir(PDBDIR); closedir (PDBDIR) || die "$pdbdir: $!$/"; &create_existskeyfile ("NUMBER"); &create_existskeyfile ("x-pdb"); # Loop over all files foreach my $pdbfile (@pdbfiles) { my $cas = $pdbfile; $cas =~ s/\.pdb//ig; my $nummatch = &exists (("NUMBER" => $cas)); if ($nummatch) { $nr_foundCAS++; print "NUMBER found:\t$nummatch$/" if ($debug); my $linkmatch = &exists (("x-pdb" => $cas)); if ($linkmatch) { $nr_already_linked++; print "PDB-link found:\t$linkmatch$/" if ($debug); } else { print "$cas.pdb can be linked!!:\t$nummatch$/"; #print "\tMEDIA-tag toevoegen aan wml? "; #$_ = <STDIN>; #if (/^(j|y)/i) { my ($wmlfile) = split (":", $nummatch); if (&voeg_link_toe("$wmldir/$wmlfile", $cas)) { $nr_gelinkt++; } else { $nr_mislukte_links++; } #} } } else { print "Dangling PDB-file $cas.pdb$/"; } } &remove_existskeyfile ("NUMBER"); &remove_existskeyfile ("x-pdb"); # Print statistics print " ----------------------------$/"; print "Files checked : ",scalar @pdbfiles, $/; if ($nr_foundCAS) { print " CAS or WOC number found : $nr_foundCAS$/"; my $nr_linkable = $nr_foundCAS - $nr_already_linked; if ($nr_linkable) { print " Linkable matches : ", $nr_foundCAS - $nr_already_linked,$/; print " Added links : $nr_gelinkt$/" if $nr_gelinkt; print " Links failed to add : $nr_mislukte_links$/" if $nr_mislukte_links; my $nr_skipped_links = $nr_linkable - $nr_gelinkt - $nr_mislukte_links; print " Skipped links : ", $nr_skipped_links,$/ if $nr_skipped_links; print " Already linked matches : $nr_already_linked$/"; } else { print " Already linked matches : $nr_already_linked$/"; print " No linkable matches...$/"; } } else { print "Not one file name matched an item name...$/"; } my $nr_danglingPDBs = @pdbfiles - $nr_foundCAS; print " Dangling files found : $nr_danglingPDBs$/"; sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } sub voeg_link_toe { my $file = shift; my $cas = shift; my $succes = "True"; my @XML_data; my $changed = ""; print "Processing $file "; my $has_WOC = `grep -i "<WOC>" $file`; my $has_DICT = `grep -i "<DICT>" $file` if (! $has_WOC); my $has_INDEX = `grep -i "<INDEX" $file` if (! $has_WOC); my $last_was_INDEX = ""; my $indent = ""; if (open (FILE, $file)) { if ($has_WOC) { while (<FILE>) { if (/^(\s*)<WOC>/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent <MEDIA MIME=\"chemical/x-pdb\">$cas.pdb</MEDIA>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } elsif ($has_INDEX) { while (<FILE>) { if (/^(\s*)<INDEX/i) { $indent = $1; push (@XML_data, $_); $last_was_INDEX = "True"; } elsif ($last_was_INDEX && ! /<INDEX/i) { push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"chemical/x-pdb\">$cas.pdb</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); push (@XML_data, $_); $changed = "True"; $last_was_INDEX = ""; } else { push (@XML_data, $_); } } } elsif ($has_DICT) { while (<FILE>) { if (/^(\s*)<\/DICT>/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"chemical/x-pdb\">$cas.pdb</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } else { while (<FILE>) { if (/^(\s*)<ITEM/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"chemical/x-pdb\">$cas.pdb</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; $succes = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "MEDIA-tag added...$/"; } else { warn "$file: $!$/"; print "Unable to change...$/"; $succes = ""; } } else { print "No changes...$/"; } return ($succes); } --- NEW FILE: voeg-pdb-mime-toe.pl.in --- #! @PATHTOPERL@ -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $pdbdir = "../../data/dadml/3d/pdb"; my $existsfile = "tmp-pdbmime-exists"; # tellers my $nr_foundCAS = 0; my $nr_already_linked = 0; my $nr_gelinkt = 0; my $nr_mislukte_links = 0; opendir (PDBDIR, $pdbdir) || die "$pdbdir: $!$/"; my @pdbfiles = grep {/\.pdb/i} readdir(PDBDIR); closedir (PDBDIR) || die "$pdbdir: $!$/"; &create_existskeyfile ("NUMBER"); &create_existskeyfile ("x-pdb"); # Loop over all files foreach my $pdbfile (@pdbfiles) { my $cas = $pdbfile; $cas =~ s/\.pdb//ig; my $nummatch = &exists (("NUMBER" => $cas)); if ($nummatch) { $nr_foundCAS++; print "NUMBER found:\t$nummatch$/" if ($debug); my $linkmatch = &exists (("x-pdb" => $cas)); if ($linkmatch) { $nr_already_linked++; print "PDB-link found:\t$linkmatch$/" if ($debug); } else { print "$cas.pdb can be linked!!:\t$nummatch$/"; #print "\tMEDIA-tag toevoegen aan wml? "; #$_ = <STDIN>; #if (/^(j|y)/i) { my ($wmlfile) = split (":", $nummatch); if (&voeg_link_toe("$wmldir/$wmlfile", $cas)) { $nr_gelinkt++; } else { $nr_mislukte_links++; } #} } } else { print "Dangling PDB-file $cas.pdb$/"; } } &remove_existskeyfile ("NUMBER"); &remove_existskeyfile ("x-pdb"); # Print statistics print " ----------------------------$/"; print "Files checked : ",scalar @pdbfiles, $/; if ($nr_foundCAS) { print " CAS or WOC number found : $nr_foundCAS$/"; my $nr_linkable = $nr_foundCAS - $nr_already_linked; if ($nr_linkable) { print " Linkable matches : ", $nr_foundCAS - $nr_already_linked,$/; print " Added links : $nr_gelinkt$/" if $nr_gelinkt; print " Links failed to add : $nr_mislukte_links$/" if $nr_mislukte_links; my $nr_skipped_links = $nr_linkable - $nr_gelinkt - $nr_mislukte_links; print " Skipped links : ", $nr_skipped_links,$/ if $nr_skipped_links; print " Already linked matches : $nr_already_linked$/"; } else { print " Already linked matches : $nr_already_linked$/"; print " No linkable matches...$/"; } } else { print "Not one file name matched an item name...$/"; } my $nr_danglingPDBs = @pdbfiles - $nr_foundCAS; print " Dangling files found : $nr_danglingPDBs$/"; sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } sub voeg_link_toe { my $file = shift; my $cas = shift; my $succes = "True"; my @XML_data; my $changed = ""; print "Processing $file "; my $has_WOC = `grep -i "<WOC>" $file`; my $has_DICT = `grep -i "<DICT>" $file` if (! $has_WOC); my $has_INDEX = `grep -i "<INDEX" $file` if (! $has_WOC); my $last_was_INDEX = ""; my $indent = ""; if (open (FILE, $file)) { if ($has_WOC) { while (<FILE>) { if (/^(\s*)<WOC>/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent <MEDIA MIME=\"chemical/x-pdb\">$cas.pdb</MEDIA>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } elsif ($has_INDEX) { while (<FILE>) { if (/^(\s*)<INDEX/i) { $indent = $1; push (@XML_data, $_); $last_was_INDEX = "True"; } elsif ($last_was_INDEX && ! /<INDEX/i) { push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"chemical/x-pdb\">$cas.pdb</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); push (@XML_data, $_); $changed = "True"; $last_was_INDEX = ""; } else { push (@XML_data, $_); } } } elsif ($has_DICT) { while (<FILE>) { if (/^(\s*)<\/DICT>/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"chemical/x-pdb\">$cas.pdb</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } else { while (<FILE>) { if (/^(\s*)<ITEM/i) { $indent = $1; push (@XML_data, $_); push (@XML_data, "$indent<WOC>$/"); push (@XML_data, "$indent <MEDIA MIME=\"chemical/x-pdb\">$cas.pdb</MEDIA>$/"); push (@XML_data, "$indent</WOC>$/"); $changed = "True"; } else { push (@XML_data, $_); } } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; $succes = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "MEDIA-tag added...$/"; } else { warn "$file: $!$/"; print "Unable to change...$/"; $succes = ""; } } else { print "No changes...$/"; } return ($succes); } --- NEW FILE: voeg-woc-nummer-toe.pl --- #! /usr/bin/perl -w use strict; my $wmldir = "../../data/wml"; my @item_start_elements = `grep -i "ITEM" $wmldir/*.xml | grep -i "ID="`; # make a list of current ID's my @idlist; foreach my $elem (@item_start_elements) { $elem =~ /ID=\"WOC(.*?)\".*/i; #print $1 . "$/"; push (@idlist, $1); } # sort thislist @idlist = sort @idlist; # what is the highest ID? my $highestid = $idlist[-1]; #print "Highest in use: WOC" . $highestid ."$/"; my $nextfree = sprintf "%08i", $highestid + 1; print "First free: WOC" . $nextfree ."$/"; # next step is to browse trough all files and add numbers my @wmlfiles = <$wmldir/*.xml>; foreach my $file (@wmlfiles) { my $mustbeupdated = 0; if (open (OPENFILE, $file)) { while ( <OPENFILE> ) { if (/<ITEM(.*?)>/) { # oke start element ITEM found if ($1 =~ /ID=\"WOC(.*?)\".*/) { # oke, has ID at this moment... print it print "ID found in $file: $1$/"; } else { # oke, no ID at this moment... add it... $mustbeupdated = 1; } } } } if ($mustbeupdated) { print "Updating $file...$/"; my @inputfile = (); if (open (OPENFILE, $file)) { while (<OPENFILE> ) { if (/(<ITEM\ )(.*>)/) { $_ = "$1ID=\"WOC$nextfree\" $2$/"; # raise next free ID $nextfree = sprintf "%08i", $nextfree + 1; } push (@inputfile, $_); } if (open (OPENFILE, ">$file")) { print OPENFILE @inputfile; } } } } --- NEW FILE: voeg-woc-nummer-toe.pl.in --- #! @PATHTOPERL@ -w use strict; my $wmldir = "../../data/wml"; my @item_start_elements = `grep -i "ITEM" $wmldir/*.xml | grep -i "ID="`; # make a list of current ID's my @idlist; foreach my $elem (@item_start_elements) { $elem =~ /ID=\"WOC(.*?)\".*/i; #print $1 . "$/"; push (@idlist, $1); } # sort thislist @idlist = sort @idlist; # what is the highest ID? my $highestid = $idlist[-1]; #print "Highest in use: WOC" . $highestid ."$/"; my $nextfree = sprintf "%08i", $highestid + 1; print "First free: WOC" . $nextfree ."$/"; # next step is to browse trough all files and add numbers my @wmlfiles = <$wmldir/*.xml>; foreach my $file (@wmlfiles) { my $mustbeupdated = 0; if (open (OPENFILE, $file)) { while ( <OPENFILE> ) { if (/<ITEM(.*?)>/) { # oke start element ITEM found if ($1 =~ /ID=\"WOC(.*?)\".*/) { # oke, has ID at this moment... print it print "ID found in $file: $1$/"; } else { # oke, no ID at this moment... add it... $mustbeupdated = 1; } } } } if ($mustbeupdated) { print "Updating $file...$/"; my @inputfile = (); if (open (OPENFILE, $file)) { while (<OPENFILE> ) { if (/(<ITEM\ )(.*>)/) { $_ = "$1ID=\"WOC$nextfree\" $2$/"; # raise next free ID $nextfree = sprintf "%08i", $nextfree + 1; } push (@inputfile, $_); } if (open (OPENFILE, ">$file")) { print OPENFILE @inputfile; } } } } --- NEW FILE: voeg_stylesheet_toe.pl --- #! /usr/bin/perl -w use strict; my $dir = "../../data/dadml/fysisch/cml"; # next step is to browse trough all files and add numbers my @files = <$dir/*.xml>; my $insert = "<\?xml-stylesheet type=\"text\/xsl\" href=\"http:\/\/www.sci.kun.nl\/woc\/data\/dadml\/fysisch\/cml\/cml.xsl\" \?>\n"; foreach my $file (@files) { my $mustbeupdated = 1; if (open (OPENFILE, $file)) { while ( <OPENFILE> ) { if (/<\?xml-stylesheet/) { $mustbeupdated = 0; } } } if ($mustbeupdated) { print "Updating $file...$/"; my @inputfile = (); if (open (OPENFILE, $file)) { while (<OPENFILE> ) { if (/<molecule/i) { push (@inputfile, $insert); } push (@inputfile, $_); } if (open (OPENFILE, ">$file")) { print OPENFILE @inputfile; } } } } --- NEW FILE: voeg_stylesheet_toe.pl.in --- #! @PATHTOPERL@ -w use strict; my $dir = "../../data/dadml/fysisch/cml"; # next step is to browse trough all files and add numbers my @files = <$dir/*.xml>; my $insert = "<\?xml-stylesheet type=\"text\/xsl\" href=\"http:\/\/www.sci.kun.nl\/woc\/data\/dadml\/fysisch\/cml\/cml.xsl\" \?>\n"; foreach my $file (@files) { my $mustbeupdated = 1; if (open (OPENFILE, $file)) { while ( <OPENFILE> ) { if (/<\?xml-stylesheet/) { $mustbeupdated = 0; } } } if ($mustbeupdated) { print "Updating $file...$/"; my @inputfile = (); if (open (OPENFILE, $file)) { while (<OPENFILE> ) { if (/<molecule/i) { push (@inputfile, $insert); } push (@inputfile, $_); } if (open (OPENFILE, ">$file")) { print OPENFILE @inputfile; } } } } --- NEW FILE: zet-fysisch-props-op-extensie-xml.pl --- #! /usr/bin/perl -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $nr_changed = 0; ### de lange versie van opendir ### #opendir (WMLDIR, $wmldir) || die "WMLDIR: $!$/"; #my @wmlfiles = grep {/\.xml/i} readdir(WMLDIR); #closedir (WMLDIR) || die "$wmldir: $!$/"; ### de korte versie van opendir ### #my @wmlfiles = <$wmldir/*.xml>; ### Loop over all files ### # met een foreach over @ARGV kun je het script aanroepen met ../wml/*.xml # dit wordt door de shell al uitgevouwen tot ../wml/azijnzuur.xml etc.. foreach my $wmlfile (@ARGV) { my @file = (); my $change_needed = ""; print "Reading $wmlfile... "; open (FILE, "<$wmlfile") || die "$wmlfile: $!$/"; while (<FILE>) { my $line = $_; if ($line =~ m/<INSERT.*?>(.*?)\.cml<\/INSERT>/) { my $casnummer = $1; $change_needed = "yes"; print "new extension necessary ($casnummer, $line)..."; push (@file, " <INSERT MIME=\"chemical/cml\" CLASS=\"PhysicalProperties\">$casnummer.xml<\/INSERT>$/"); } else { push (@file, $line); } } close(FILE); if ($change_needed eq "yes") { open (OUT, ">$wmldir/$wmlfile") || die "File $wmlfile not writeable!$/"; foreach my $line (@file) { print OUT $line; } close(OUT); print "Changed!$/"; } else { print "Nothing done!$/"; } } print "-----------------$/"; print "Files changed: $nr_changed$/"; --- NEW FILE: zet-fysisch-props-op-extensie-xml.pl.in --- #! @PATHTOPERL@ -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $nr_changed = 0; ### de lange versie van opendir ### #opendir (WMLDIR, $wmldir) || die "WMLDIR: $!$/"; #my @wmlfiles = grep {/\.xml/i} readdir(WMLDIR); #closedir (WMLDIR) || die "$wmldir: $!$/"; ### de korte versie van opendir ### #my @wmlfiles = <$wmldir/*.xml>; ### Loop over all files ### # met een foreach over @ARGV kun je het script aanroepen met ../wml/*.xml # dit wordt door de shell al uitgevouwen tot ../wml/azijnzuur.xml etc.. foreach my $wmlfile (@ARGV) { my @file = (); my $change_needed = ""; print "Reading $wmlfile... "; open (FILE, "<$wmlfile") || die "$wmlfile: $!$/"; while (<FILE>) { my $line = $_; if ($line =~ m/<INSERT.*?>(.*?)\.cml<\/INSERT>/) { my $casnummer = $1; $change_needed = "yes"; print "new extension necessary ($casnummer, $line)..."; push (@file, " <INSERT MIME=\"chemical/cml\" CLASS=\"PhysicalProperties\">$casnummer.xml<\/INSERT>$/"); } else { push (@file, $line); } } close(FILE); if ($change_needed eq "yes") { open (OUT, ">$wmldir/$wmlfile") || die "File $wmlfile not writeable!$/"; foreach my $line (@file) { print OUT $line; } close(OUT); print "Changed!$/"; } else { print "Nothing done!$/"; } } print "-----------------$/"; print "Files changed: $nr_changed$/"; --- NEW FILE: zet-wmls-op-ISO-8859-1-encoding.pl --- #! /usr/bin/perl -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $nr_changed = 0; ### de lange versie van opendir ### #opendir (WMLDIR, $wmldir) || die "WMLDIR: $!$/"; #my @wmlfiles = grep {/\.xml/i} readdir(WMLDIR); #closedir (WMLDIR) || die "$wmldir: $!$/"; ### de korte versie van opendir ### #my @wmlfiles = <$wmldir/*.xml>; ### Loop over all files ### # met een foreach over @ARGV kun je het script aanroepen met ../wml/*.xml # dit wordt door de shell al uitgevouwen tot ../wml/azijnzuur.xml etc.. foreach my $wmlfile (@ARGV) { my @file = (); my $change_needed = ""; print "Reading $wmlfile... "; if (open (FILE, "<$wmlfile")) { while (<FILE>) { my $line = $_; if (($line =~ m/<\?xml.*?\?>/) && ($line !~ m/ISO-8859-1/)) { $change_needed = "yes"; print "new encoding necessary... "; unshift (@file, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>$/"); # geen push maar een unshift, om deze regel pertinent als eerste te krijgen # } else { push (@file, $line); } } close(FILE); } else { warn "$wmlfile: $!$/"; } if ($change_needed eq "yes") { if (open (OUT, ">$wmldir/$wmlfile")) { foreach my $line (@file) { print OUT $line; } close(OUT); print "Changed!$/"; $nr_changed++; } else { warn "File $wmlfile not writeable!$/"; } } else { print "Nothing done!$/"; } } print "-----------------$/"; print "Files changed: $nr_changed$/"; --- NEW FILE: zet-wmls-op-ISO-8859-1-encoding.pl.in --- #! @PATHTOPERL@ -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $nr_changed = 0; ### de lange versie van opendir ### #opendir (WMLDIR, $wmldir) || die "WMLDIR: $!$/"; #my @wmlfiles = grep {/\.xml/i} readdir(WMLDIR); #closedir (WMLDIR) || die "$wmldir: $!$/"; ### de korte versie van opendir ### #my @wmlfiles = <$wmldir/*.xml>; ### Loop over all files ### # met een foreach over @ARGV kun je het script aanroepen met ../wml/*.xml # dit wordt door de shell al uitgevouwen tot ../wml/azijnzuur.xml etc.. foreach my $wmlfile (@ARGV) { my @file = (); my $change_needed = ""; print "Reading $wmlfile... "; if (open (FILE, "<$wmlfile")) { while (<FILE>) { my $line = $_; if (($line =~ m/<\?xml.*?\?>/) && ($line !~ m/ISO-8859-1/)) { $change_needed = "yes"; print "new encoding necessary... "; unshift (@file, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>$/"); # geen push maar een unshift, om deze regel pertinent als eerste te krijgen # } else { push (@file, $line); } } close(FILE); } else { warn "$wmlfile: $!$/"; } if ($change_needed eq "yes") { if (open (OUT, ">$wmldir/$wmlfile")) { foreach my $line (@file) { print OUT $line; } close(OUT); print "Changed!$/"; $nr_changed++; } else { warn "File $wmlfile not writeable!$/"; } } else { print "Nothing done!$/"; } } print "-----------------$/"; print "Files changed: $nr_changed$/"; --- NEW FILE: zoek-cas-bij-pdbs-voor-dadml.pl --- #! /usr/bin/perl -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $pdbdir = "../../data/compounds/pdb/new"; my $existsfile = "tmp-find-cas-exists"; opendir (PDBDIR, $pdbdir) || die "$pdbdir: $!$/"; my @pdbfiles = grep {/\.pdb/i} readdir(PDBDIR); closedir (PDBDIR) || die "$pdbdir: $!$/"; &create_existskeyfile ("LANG"); foreach my $pdbfile (@pdbfiles) { $pdbfile =~ s/\.pdb//ig; $pdbfile =~ tr/A-Z/a-z/; my $namematch = &exists (("LANG" => $pdbfile)); if ($namematch) { print "NAME match for $pdbfile.pdb:\t$namematch$/" if $debug; my ($wmlfile) = split (":", $namematch); $wmlfile =~ s/^\s*//i; print "WMLFILE:$wmlfile.$/" if $debug; my $cas = `grep -i CAS-NUMBER $wmldir/$wmlfile`; if ($cas) { chomp ($cas); $cas =~ s/\s*<INDEX.*?>\s*//ig; $cas =~ s/\s*<\/INDEX.*?>\s*//ig; print "CAS number $cas\tfound for $pdbfile.pdb\tin $wmlfile$/"; } else { print "no CAS number found for $pdbfile.pdb in $wmlfile$/" if $debug; } } else { print "Dangling PDB-file $pdbfile.pdb$/" if $debug; } } &remove_existskeyfile ("LANG"); sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } --- NEW FILE: zoek-cas-bij-pdbs-voor-dadml.pl.in --- #! @PATHTOPERL@ -w use strict; my $debug = ""; my $wmldir = "../../data/wml"; my $pdbdir = "../../data/compounds/pdb/new"; my $existsfile = "tmp-find-cas-exists"; opendir (PDBDIR, $pdbdir) || die "$pdbdir: $!$/"; my @pdbfiles = grep {/\.pdb/i} readdir(PDBDIR); closedir (PDBDIR) || die "$pdbdir: $!$/"; &create_existskeyfile ("LANG"); foreach my $pdbfile (@pdbfiles) { $pdbfile =~ s/\.pdb//ig; $pdbfile =~ tr/A-Z/a-z/; my $namematch = &exists (("LANG" => $pdbfile)); if ($namematch) { print "NAME match for $pdbfile.pdb:\t$namematch$/" if $debug; my ($wmlfile) = split (":", $namematch); $wmlfile =~ s/^\s*//i; print "WMLFILE:$wmlfile.$/" if $debug; my $cas = `grep -i CAS-NUMBER $wmldir/$wmlfile`; if ($cas) { chomp ($cas); $cas =~ s/\s*<INDEX.*?>\s*//ig; $cas =~ s/\s*<\/INDEX.*?>\s*//ig; print "CAS number $cas\tfound for $pdbfile.pdb\tin $wmlfile$/"; } else { print "no CAS number found for $pdbfile.pdb in $wmlfile$/" if $debug; } } else { print "Dangling PDB-file $pdbfile.pdb$/" if $debug; } } &remove_existskeyfile ("LANG"); sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } --- NEW FILE: zoek-chems-zonder-cas.pl --- #! /usr/bin/perl -w use strict; my $debug = ""; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my $nr_checked = 0; my $nr_chemicals = 0; my $nr_groups = 0; my $nr_noCAS = 0; # Loop over all files foreach my $arg (@ARGV) { &look_for_CAS_in_file ($arg); } # Print statistics print " ------------------------$/"; print "Files checked : $nr_checked$/"; if ($nr_chemicals) { print "Chemicals found : $nr_chemicals$/"; print "Chemical groups found : $nr_groups$/" if ($nr_groups); if ($nr_noCAS) { print "Chemicals without CAS : $nr_noCAS$/"; } else { print "All chemicals had CAS!$/"; } } else { print "No Chemicals found.$/"; } sub look_for_CAS_in_file { my $file = shift; my $changed = ""; print "Processing $file\t"; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; my $group = ""; while (<FILE>) { if (/CHEMICAL/i) { print "CHEMICAL! " if (!$chemical); # 1 hit is enough # $chemical = "True"; $nr_chemicals++; } elsif (/CLASS="GROUP"/i) { print "GROUP! " if (!$group); # 1 hit is enough # $group = "True"; $nr_groups++; } elsif (/(CAS|WOC)-NUMBER/i && /\>(.+?)\</) { my $type = $1; print "$type number found...$/" if ($debug && ! $cas_found); # 1 hit is enough # $cas_found = "True"; } } if ($chemical && !$group && !$cas_found) { $nr_noCAS++; print "No CAS number found...$/"; } else { print "$/" unless $debug; } close (FILE) || warn "$file: $!$/"; $nr_checked++; } else { warn "$file: $!$/"; } } --- NEW FILE: zoek-chems-zonder-cas.pl.in --- #! @PATHTOPERL@ -w use strict; my $debug = ""; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my $nr_checked = 0; my $nr_chemicals = 0; my $nr_groups = 0; my $nr_noCAS = 0; # Loop over all files foreach my $arg (@ARGV) { &look_for_CAS_in_file ($arg); } # Print statistics print " ------------------------$/"; print "Files checked : $nr_checked$/"; if ($nr_chemicals) { print "Chemicals found : $nr_chemicals$/"; print "Chemical groups found : $nr_groups$/" if ($nr_groups); if ($nr_noCAS) { print "Chemicals without CAS : $nr_noCAS$/"; } else { print "All chemicals had CAS!$/"; } } else { print "No Chemicals found.$/"; } sub look_for_CA... [truncated message content] |
Update of /cvsroot/woc/woc/src/woc/src/cas In directory usw-pr-cvs1:/tmp/cvs-serv23171/woc/src/cas Added Files: CAS2NSC.txt CAS2SMILES.txt CAS2UN.txt Makefile.am add_nsc_number.pl add_nsc_number.pl.in add_numbers.pl add_numbers.pl.in add_smiles.pl add_smiles.pl.in add_un_nummers.pl add_un_nummers.pl.in check_cas_nummers.pl check_cas_nummers.pl.in check_doublenumbers.pl check_doublenumbers.pl.in zoek-UNs-zonder-wml.pl zoek-UNs-zonder-wml.pl.in Log Message: --- NEW FILE: CAS2NSC.txt --- 100-00-5 9792 100-01-6 9797 100-02-7 1317 100-06-1 5601 100-06-1 209523 100-07-2 86125 100-09-4 7926 100-09-4 32742 100-10-7 5517 100-11-8 4609 100-12-9 858 100-14-1 9803 100-15-2 5390 100-16-3 4079 100-17-4 5507 100-18-5 84198 100-19-6 41590 100-20-9 41885 100-21-0 36973 [...126750 lines suppressed...] 998-29-8 96837 998-30-1 124134 998-40-3 91700 998-41-4 111642 998-91-4 2321 998-91-4 224119 998-98-1 79255 999-21-3 4799 999-23-5 6406 999-29-1 58406 999-30-4 16588 999-33-7 223056 999-37-1 509380 999-47-3 34835 999-50-8 58807 999-55-3 20945 999-68-8 93208 999-79-1 525131 999-81-5 34858 999-97-3 93895 --- NEW FILE: CAS2SMILES.txt --- 100-00-5 [N+]([O-])(=O)C1=CC=C(Cl)C=C1 100-01-6 [N+]([O-])(=O)C1=CC=C(N)C=C1 100-02-7 [N+]([O-])(=O)C1=CC=C(O)C=C1 100-06-1 C(C)(=O)C1=CC=C(OC)C=C1 100-09-4 C(=O)(O)C1=CC=C(OC)C=C1 100-10-7 N(C)(C)C1=CC=C(C=O)C=C1 100-11-8 [N+]([O-])(=O)C1=CC=C(CBr)C=C1 100-12-9 [N+]([O-])(=O)C1=CC=C(CC)C=C1 100-14-1 [N+]([O-])(=O)C1=CC=C(CCl)C=C1 100-15-2 [N+]([O-])(=O)C1=CC=C(NC)C=C1 100-16-3 [N+]([O-])(=O)C1=CC=C(NN)C=C1 100-17-4 [N+]([O-])(=O)C1=CC=C(OC)C=C1 100-23-2 N(C)(C)C1=CC=C([N+](=O)[O-])C=C1 100-25-4 [N+]([O-])(=O)C1=CC=C([N+](=O)[O-])C=C1 100-26-5 C(=O)(O)C1=CC=C(C(=O)O)N=C1 100-28-7 [N+]([O-])(=O)C1=CC=C(N=C=O)C=C1 100-29-8 [N+]([O-])(=O)C1=CC=C(OCC)C=C1 100-32-3 [N+]([O-])(=O)C2=CC=C(SSC1=CC=C([N+](=O)[O-])C=C1)C=C2 100-33-4 C(=N)(N)C2=CC=C(OCCCCCOC1=CC=C(C(=N)N)C=C1)C=C2 [...9537 lines suppressed...] 99-87-6 C(C)(C)C1=CC=C(C)C=C1 99-88-7 C(C)(C)C1=CC=C(N)C=C1 99-89-8 C(C)(C)C1=CC=C(O)C=C1 99-91-2 C(C)(=O)C1=CC=C(Cl)C=C1 99-92-3 C(C)(=O)C1=CC=C(N)C=C1 99-93-4 C(C)(=O)C1=CC=C(O)C=C1 99-94-5 C(=O)(O)C1=CC=C(C)C=C1 99-96-7 C(=O)(O)C1=CC=C(O)C=C1 99-97-8 N(C)(C)C1=CC=C(C)C=C1 99-98-9 N(C)(C)C1=CC=C(N)C=C1 99-99-0 [N+]([O-])(=O)C1=CC=C(C)C=C1 992-59-6 S(=O)(=O)(O)C1=C6C(=C(N)C(=C1)N=NC5=C(C)C=C(C4=CC(=C(N=NC3=C(N)C2=C(C=CC=C2)C(=C3)S(=O)(=O)O)C=C4)C)C=C5)C=CC=C6 994-31-0 [Sn](CC)(CC)(CC)Cl 996-19-0 S(=O)(=O)(O)O.C(NN)(=N)N 996-97-4 N(C(CCCCCCC)=O)(CC)CC 996-98-5 C(C(NN)=O)(NN)=O 997-95-5 N(CC(C)C)(CC(C)C)N=O 998-91-4 C(=CC(OCC)=O)(OCC)C 999-21-3 C(C=CC(OCC=C)=O)(OCC=C)=O 999-23-5 N(CCN(CCC#N)C)(CCC#N)C --- NEW FILE: CAS2UN.txt --- #CAS-nummer <=> UN-nummer 100-00-5 1578 100-01-6 1661 100-02-7 1663 100-25-4 1597 100-37-8 2686 100-39-0 1737 100-40-3 1993 100-41-4 1175 100-42-5 2055 100-44-7 1738 100-47-0 2224 100-51-6 2810 100-52-7 1990 100-61-8 2294 100-63-0 2572 100-80-1 2618 100-97-0 1328 10024-97-2 1070 10025-67-9 1828 10025-69-1 2923 10025-78-2 1295 10025-87-3 1810 10025-91-9 1733 10026-04-7 1818 10026-13-8 1806 10031-13-7 1618 10035-10-6 1048 10045-94-0 1625 10048-95-0 1685 101-02-0 2811 101-68-8 2489 101-72-4 2811 101-77-9 2651 101-84-8 3077 10102-18-8 2630 10102-44-0 1067 10103-50-1 1622 10103-61-4 1557 10108-64-2 2570 10112-91-1 2025 10124-50-2 1678 10192-30-0 2693 102-82-9 2542 10265-92-6 2783 10290-12-7 1586 10294-33-4 2692 10294-34-5 1741 10326-27-9 1564 10361-37-2 1564 104-15-4 2585 104-94-9 02431 105-46-4 1123 105-58-8 2366 105-74-8 2124, 106-35-4 1224 106-42-3 1307 106-44-5 2076 106-46-7 2811 106-47-8 2018 106-48-9 2020 106-49-0 1708 106-50-3 1673 106-51-4 2587 106-87-6 2810 106-88-7 3022 106-89-8 2023 106-92-3 2219 106-93-4 1605 106-97-8 1011 106-98-9 1012 106-99-0 1010 107-01-7 1012 107-02-8 1092 107-05-1 1100 107-06-2 1184 107-07-3 1135 107-10-8 1277 107-11-9 2334 107-12-0 2404 107-13-1 1093 107-14-2 2668 107-15-3 1604 107-18-6 1098 107-19-7 2929 107-20-0 2232 107-30-2 1239 107-31-3 1243 107-39-1 2050 107-40-4 2050 107-49-3 3018 107-83-5 1208 107-87-9 1249 107-98-2 3092 108-01-0 2051 108-03-2 2608 108-05-4 1301 108-10-1 1245 108-11-2 2053 108-18-9 1158 108-20-3 1159 108-21-4 1220 108-23-6 2407 108-24-7 1715 108-31-6 2215 108-38-3 1307 108-39-4 2076 108-42-9 2019 108-43-0 2020 108-44-1 1708 108-46-3 2876 108-65-6 1993 108-67-8 2325 108-70-3 2321 108-77-0 2670 108-83-8 1157 108-87-2 2296 108-88-3 1294 108-89-4 2313 108-90-7 1134 108-91-8 2357 108-94-1 1915 108-95-2 1671 108-98-5 2337 108-99-6 2313 109-06-8 2313 109-55-7 2734 109-60-4 1276 109-66-0 1265 109-69-3 1127 109-73-9 1125 109-79-5 2347 109-86-4 1188 109-87-5 1234 109-89-7 1154 109-92-2 1302 109-94-4 1190 109-99-9 2056 110-00-9 2389 110-01-0 2412 110-02-1 2414 110-12-3 2302 110-16-7 1759 110-19-0 1213 110-43-0 1110 110-49-6 1189 110-54-3 1208 110-63-4 2810 110-80-5 1171 110-82-7 1145 110-83-8 2256 110-86-1 1282 110-89-4 2401 110-91-8 2054 11097-69-1 2315 111-14-8 3265 111-15-9 1172 111-30-8 2810 111-40-0 2079 111-65-9 1262 111-66-0 1993 111-69-3 2205 111-76-2 2369 111-84-2 1920 1113-38-8 2811 112-24-3 2259 112-55-0 1228 114-26-1 2757 115-11-7 1055 115-29-7 2761 115-32-2 2761 116-06-3 2757 116-29-0 2761 118-74-1 2729 118-75-2 2588 118-96-7 0209 119-93-7 2811 120-36-5 2765 120-51-4 2810 120-71-8 2431 120-80-9 2811 120-82-1 2321 120-83-2 2020 120-92-3 2245 12001-29-5 2590 12057-74-8 2011 12079-65-1 2811 121-14-2 2038 121-43-7 2416 121-44-8 1296 121-69-7 2253 121-75-5 3082 12108-13-3 2810 12122-67-7 2771 12125-01-8 2505 12136-45-7 2033 122-14-5 3018 122-34-9 2763 122-39-4 2811 122-52-1 2323 122-79-2 2810 123-05-7 1191 123-31-9 2662 123-38-6 1275 123-51-3 1105 123-54-6 2310 123-62-6 2496 123-72-8 1129 123-77-3 3242 123-86-4 1123 123-91-1 1165 123-92-2 1104 124-02-7 2359 124-09-4 2280 124-18-5 2247 124-38-9 1013 124-40-3 1032 124-41-4 1431 124-58-3 1557 124-63-0 3246 12427-38-2 2210 126-30-7 1325 126-75-0 3018 126-98-7 3079 126-99-8 1991 127-18-4 1897 1300-73-8 1711 1302-42-7 2812 1303-28-2 1559 1304-28-5 1884 1304-29-6 1449 1305-62-0 1759 1305-78-8 1910 1306-19-0 2570 1309-64-4 1549 131-17-9 2810 131-52-2 2567 1310-58-3 1813 1310-65-2 2680 1310-66-3 2680 1310-73-2 1823 1312-73-8 1382 1313-99-1 2811 1314-34-7 3285 1314-56-3 1807 1314-62-1 2862 1314-84-7 1714 1317-36-8 3288 13171-21-6 3018 1319-77-3 2076, 1321-65-9 2811 1327-53-3 1561 133-06-2 2773 1333-74-0 1049 1333-82-0 1463 1333-86-4 1361 1336-21-6 2672 1338-02-9 3009 13463-39-3 1259 13463-40-6 1994 13477-00-4 1445 13494-80-9 2811 137-26-8 2771 137-30-4 2771 137-32-6 1105 13768-86-0 2928 13952-84-6 1992 140-88-5 1917 141-32-2 2348 141-43-5 2491 141-66-2 3018 141-78-6 1173 141-79-7 1229 142-04-1 1548 142-28-9 1992 142-62-1 2829 142-82-5 1206 142-96-1 1149 143-10-2 1228 143-33-9 1689 144-49-0 2642 144-62-7 2923 14484-64-1 2771 14977-61-8 1758 151-50-8 1680 151-56-4 1185 151-67-7 1610 1563-66-2 2757 1569-69-3 3054 15950-66-0 2020 15972-60-8 2588 1600-27-7 1629 16219-75-3 1993 1634-04-4 2398 16752-77-5 2757 16871-90-2 2655 16872-11-0 1775 1689-83-4 2588 16893-85-9 2674 16961-83-4 1778 17702-41-9 1868 17804-35-2 2757 1836-75-5 2779 1897-45-6 2588 1910-42-5 2781 1912-24-9 2763 1912-26-1 2763 1918-00-9 2769 19287-45-7 1911 19624-22-7 1380 19750-95-9 2588 2032-59-9 2757 2050-92-2 2841 20816-12-0 2471 20859-73-8 1397 2104-64-5 2783 21908-53-2 1641 22224-92-6 2783 2243-62-1 None 2303-17-5 2757 2310-17-0 2783 2425-06-1 2773 25013-15-4 2618 25057-89-0 2588 25154-52-3 3082 25154-54-5 1597 2524-04-1 2751 25321-14-6 2038 25340-17-4 2049 2551-62-4 1080 26628-22-8 1687 2807-30-9 1993 2813-95-8 3014 28434-00-6 2902 2855-13-2 2289 287-92-3 1146 2893-78-9 2465 2921-88-2 2783 298-00-0 2783 299-86-5 2783 300-76-5 3018 301-04-2 1616 302-01-2 2029 302-17-0 2811 30525-89-4 2213 309-00-2 2761 3173-53-3 2488 3209-22-1 1578 3268-49-3 2785 333-41-5 3018 3333-67-3 2811 3383-96-8 2783 3452-97-9 n.o.s 353-50-4 2417 353-59-3 1974 35400-43-2 3018 3689-24-5 1704 3710-30-3 2309 3724-65-0 2823 3811-04-9 1485 39300-45-3 3013 3982-91-0 1837 4098-71-9 2290 4109-96-0 2189 4170-30-3 1143 420-04-2 3276 431-03-8 2346 479-45-8 0208 485-31-4 2779 50-00-0 1198 50-29-3 2761 50-78-2 2811 504-29-0 2671 506-68-3 1889 506-77-4 1589 506-78-5 1588 506-93-4 1467 506-96-7 1716 507-09-5 2436 51-28-5 1320 513-36-0 1127 51630-58-1 2902 52-51-7 3241 52-68-6 2783 52315-07-8 2902 52645-53-1 2902 528-29-0 1597 52918-63-5 2588 532-27-4 1697 5329-14-6 2967 533-74-4 2588 54-11-5 1654 540-59-0 1150 540-84-1 1262 541-41-3 1182 542-88-1 2249 542-92-7 1993 55-38-9 3018 55-63-0 0143 55-68-5 1895 554-00-7 1590 554-13-2 2811 556-52-5 2810 558-13-4 2516 56-23-5 1846 56-35-9 3020 56-38-2 3018 56-72-4 3027 563-12-2 3018 563-80-4 2397 57-06-7 1545 57-14-7 1163 57-24-9 1692 57-57-8 2810 57-74-9 2996 58-08-2 1544 58-89-9 2761 583-59-5 2617 583-78-8 2020 584-02-1 1105 584-79-2 2902 584-84-9 2078 59-50-7 2669 590-01-2 1914 590-18-1 1012 591-35-5 2020 591-78-6 1224 592-01-8 1575 592-27-8 1262 592-41-6 2370 592-57-4 1993 592-84-7 1128 594-42-3 1670 60-24-2 2966 60-29-7 1155 60-34-4 1244 60-35-5 2811 60-41-3 1692 60-51-5 2783 60-57-1 2761 602-01-7 2038 606-20-2 2038 608-27-5 1590 608-31-1 1590 608-73-1 2761 61-82-5 2588 610-39-9 2038 610-40-2 1577 611-06-3 1578 611-15-4 2618 6164-98-3 2588 61789-51-3 2001 61790-14-5 2810 62-38-4 1674 62-53-3 1547 62-55-5 2811 62-56-6 2810 62-73-7 3018 62-74-8 2629 62-75-9 2810 622-45-7 2243 622-97-9 2618 624-64-6 1012 624-83-9 2480 626-38-0 1104 626-93-7 2282 628-63-7 1104 63-25-2 2757 630-08-0 1016 63989-69-5 1607 64-17-5 1170 64-18-6 1779 64-19-7 2789 64-67-5 1594 640-15-3 3018 6484-52-2 1942 65-30-5 1658 65-31-6 1659 66-81-9 2588 67-56-1 1230 67-63-0 1219 67-64-1 1090 67-66-3 1888 674-82-8 2521 68-12-2 2265 68085-85-8 2902 681-84-5 2606 6834-92-0 1759 68694-11-1 2588 6923-22-4 2783 70-30-4 2875 71-23-8 1274 71-36-3 1120 71-41-0 1105 71-43-2 1114 71-55-6 2831 732-11-6 2783 74-82-8 1971 74-83-9 1062 74-84-0 1035 74-85-1 1962 74-86-2 1001 74-87-3 1063 74-89-5 1061 74-90-8 1051 74-93-1 1064 74-95-3 2664 74-97-5 1887 74-98-6 1978 74-99-7 1954 7439-90-9 1970 7439-92-1 3288 7439-93-2 1415 7439-95-4 1418 7439-95-4 1869 7439-97-6 2809 7440-01-9 1065 7440-16-6 3089 7440-28-0 1707 7440-29-1 2975 7440-36-0 2871 7440-37-1 1951 7440-38-2 1558 7440-39-3 1400 7440-41-7 1567 7440-43-9 2570 7440-44-0 1361 7440-48-4 3178 7440-58-6 2545 7440-59-7 1963 7440-63-3 2036 7440-66-6 1436 7440-70-2 1401 7446-08-4 2811 7446-09-5 1079 7446-18-6 1707 7487-94-7 1624 75-00-3 1037 75-01-4 1086 75-02-5 1860 75-04-7 1036 75-05-8 1648 75-07-0 1089 75-08-1 2363 75-09-2 1593 75-15-0 1131 75-18-3 1164 75-20-7 1402 75-21-8 1040 75-25-2 2515 75-31-0 1221 75-34-3 2362 75-35-4 1303 75-36-5 1717 75-38-7 1959 75-43-4 1029 75-44-5 1076 75-45-6 1018 75-46-7 1984 75-50-3 1083 75-52-5 1261 75-54-7 1242 75-55-8 1921 75-56-9 1280 75-63-8 1009 75-65-0 1120 75-69-4 1017 75-71-8 1028 75-72-9 1022 75-73-0 1982 75-74-1 1649 75-77-4 1298 75-79-6 1250 75-86-5 1541 75-91-2 3109 75-98-9 1759 7550-45-0 1838 7580-67-8 1414 759-94-4 2992 76-15-3 1020 76-44-8 2761 7601-89-0 1502 7616-94-6 3083 7631-99-4 1498 7632-00-0 1500 7637-07-2 1008 7646-78-8 1827 7647-01-0 1050 7664-38-2 1805 7664-39-3 1052 7664-41-7 1005 7664-93-9 1830 768-52-5 2810 7681-52-9 1791 7697-37-2 2031 77-58-7 2788 77-78-1 1595 7704-34-9 1350 7719-12-2 1809 7722-84-1 2015 7723-14-0 1381 7726-95-6 1744 7727-37-9 1066 7727-37-9 1977 7727-43-7 1564 7757-79-1 1486 7758-01-2 1484 7758-09-0 1488 7761-88-8 1493 7772-99-8 2923 7775-09-9 1495 7778-43-0 1685 7778-44-1 1573 7778-74-7 1489 7779-88-6 1514 7782-41-4 1045 7782-44-7 1072 7782-44-7 1073 7782-49-2 2658 7782-50-5 1017 7782-65-2 2192 7783-00-8 2811 7783-06-4 1053 7783-07-5 2202 7783-35-9 1645 7783-41-7 2190 7783-47-3 3288 7783-54-2 2451 7783-61-1 1859 7783-70-2 1732 7783-79-1 2194 7783-81-5 2978 7784-34-1 1560 7784-40-9 1617 7784-41-0 1677 7784-42-1 2188 7784-44-3 1546 7786-34-7 3018 7789-06-2 2811 7789-30-2 1745 7789-38-0 1494 7790-91-2 1749 7791-23-3 2879 7791-25-5 1834 78-00-2 1649 78-10-4 1292 78-30-8 2574 78-34-2 3018 78-78-4 1265 78-79-5 1218 78-81-9 1214 78-83-1 1212 78-84-2 2045 78-85-3 2396 78-87-5 1279 78-90-0 2258 78-92-2 1120 78-93-3 1193 78-95-5 1695 78-96-6 2735 78-99-9 1992 7803-51-2 2199 7803-52-3 2676 7803-62-5 2203 786-19-6 3018 79-00-5 3082 79-01-6 1710 79-04-9 1752 79-06-1 2074 79-07-2 2811 79-09-4 1848 79-10-7 2218 79-11-8 1751 79-20-9 1231 79-22-1 1238 79-24-3 2842 79-27-6 2504 79-34-5 1702 79-36-7 1765 79-41-4 2531 79-43-6 1764 79-46-9 2608 80-15-9 3109 80-62-6 1247 8001-35-2 2761 8008-20-6 1223 8018-01-7 2771 8052-41-3 1268 81-81-2 3027 811-97-2 3159 818-08-6 3146 822-06-0 2281 83-79-4 2588 836-30-6 1325 84-74-2 3082 85-44-9 2214 86-50-0 2783 86-88-4 1651 867-27-6 3018 87-61-6 2811 87-66-1 2811 87-68-3 2279 87-86-5 3155 873-66-5 2618 88-06-2 2020 88-72-2 1664 88-73-3 1578 88-74-4 1661 88-85-7 2779 88-89-1 0154 89-98-5 1760 90-04-0 2431 90-30-2 2811 90035-08-8 3027 91-22-5 2656 91-64-5 2811 91465-08-6 2588 919-86-8 3018 92-67-1 2811 92-87-5 1885 93-58-3 2938 93-65-2 2765 93-76-5 2765 933-75-5 2020 933-78-8 2020 935-95-5 2020 94-36-0 3102 94-74-6 2765 94-75-7 2765 944-22-9 3018 95-47-6 1307 95-48-7 2076 95-50-1 1591 95-51-2 2019 95-53-4 1708 95-55-6 2512 95-57-8 2021 95-76-1 1590 95-80-7 1709 95-82-9 1590 95-95-4 2020 95266-40-3 2588 957-51-7 2588 96-12-8 2872 96-14-0 1208 96-18-4 2810 96-22-0 1156 96-33-3 1919 97-00-7 1577 97-02-9 1596 97-63-2 2277 98-00-0 2874 98-01-1 1199 98-05-5 1557 98-07-7 2226 98-82-8 1918 98-83-9 2303 98-87-3 1886 98-88-4 1736 98-95-3 1662 99-09-2 1661 99-54-7 1578 99-65-0 1597 99-87-6 2046 99-97-8 2810 99-99-0 1664 999-61-1 1760 --- NEW FILE: Makefile.am --- bindir=${prefix}/bin/cas bin_SCRIPTS = \ add_nsc_number.pl \ add_numbers.pl \ add_smiles.pl \ add_un_nummers.pl \ check_cas_nummers.pl \ check_doublenumbers.pl \ zoek-UNs-zonder-wml.pl CLEANFILES = $(bin_SCRIPTS) --- NEW FILE: add_nsc_number.pl --- #! /usr/bin/perl -w use strict; use diagnostics; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my $CAS_NSC_table_file = "CAS2NSC.txt"; my @CAS_NSC_table; my $nr_NSC_numbers = 0; my $nr_added_NSC_numbers = 0; my $nr_unable = 0; # Read CAS<=>NSC table if (open (FILE, $CAS_NSC_table_file)) { while (<FILE>) { chomp; push (@CAS_NSC_table, $_); } close (FILE) || die "$CAS_NSC_table_file: $!$/"; } else { die "$CAS_NSC_table_file: $!$/"; } # Loop over all files foreach my $arg (@ARGV) { &add_NSC_number_to_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_NSC_numbers) { print "NSC numbers found : $nr_NSC_numbers$/"; } else { print "No NSC numbers found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_added_NSC_numbers) { print "NSC numbers added : $nr_added_NSC_numbers$/"; print "NSC numbers total : ",$nr_NSC_numbers+$nr_added_NSC_numbers,$/; } else { print "No NSC numbers added.$/"; } sub add_NSC_number_to_file { my $file = shift; my @XML_data; my $changed = ""; print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/CAS-NUMBER/i && /\>(.+?)\</) { $cas_found = "True"; my $CAS_line = $_; my $NSC_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /NSC-NUMBER/) { push (@XML_data, $next_line); $nr_NSC_numbers++; } else { my $NSC_number; if ($NSC_number = &get_NSC_number($CAS_number)) { $NSC_line =~ s/CAS-NUMBER/NSC-NUMBER/; $NSC_line =~ s/\>.*?\</\>$NSC_number\</; push (@XML_data, $NSC_line); $changed = "True"; } push (@XML_data, $next_line); } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "NSC number added...$/"; $nr_added_NSC_numbers++; } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_NSC_number { my $CAS_number = shift; my $NSC_number = ""; foreach my $line (@CAS_NSC_table) { if ($line =~ /^$CAS_number\s*(.*)/) { $NSC_number = $1; } } return $NSC_number; } --- NEW FILE: add_nsc_number.pl.in --- #! @PATHTOPERL@ -w use strict; use diagnostics; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my $CAS_NSC_table_file = "CAS2NSC.txt"; my @CAS_NSC_table; my $nr_NSC_numbers = 0; my $nr_added_NSC_numbers = 0; my $nr_unable = 0; # Read CAS<=>NSC table if (open (FILE, $CAS_NSC_table_file)) { while (<FILE>) { chomp; push (@CAS_NSC_table, $_); } close (FILE) || die "$CAS_NSC_table_file: $!$/"; } else { die "$CAS_NSC_table_file: $!$/"; } # Loop over all files foreach my $arg (@ARGV) { &add_NSC_number_to_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_NSC_numbers) { print "NSC numbers found : $nr_NSC_numbers$/"; } else { print "No NSC numbers found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_added_NSC_numbers) { print "NSC numbers added : $nr_added_NSC_numbers$/"; print "NSC numbers total : ",$nr_NSC_numbers+$nr_added_NSC_numbers,$/; } else { print "No NSC numbers added.$/"; } sub add_NSC_number_to_file { my $file = shift; my @XML_data; my $changed = ""; print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/CAS-NUMBER/i && /\>(.+?)\</) { $cas_found = "True"; my $CAS_line = $_; my $NSC_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /NSC-NUMBER/) { push (@XML_data, $next_line); $nr_NSC_numbers++; } else { my $NSC_number; if ($NSC_number = &get_NSC_number($CAS_number)) { $NSC_line =~ s/CAS-NUMBER/NSC-NUMBER/; $NSC_line =~ s/\>.*?\</\>$NSC_number\</; push (@XML_data, $NSC_line); $changed = "True"; } push (@XML_data, $next_line); } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "NSC number added...$/"; $nr_added_NSC_numbers++; } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_NSC_number { my $CAS_number = shift; my $NSC_number = ""; foreach my $line (@CAS_NSC_table) { if ($line =~ /^$CAS_number\s*(.*)/) { $NSC_number = $1; } } return $NSC_number; } --- NEW FILE: add_numbers.pl --- #! /usr/bin/perl -w use strict; use diagnostics; my $number_type = "SMILES"; # Check command line options if (@ARGV < 1) { print "Usage: $0 [-type <TYPE>] <xml-files>$/"; print "\t<TYPE> = (SMILES | UN[-NUMBER] | NSC[-NUMBER])$/"; exit; } elsif ((@ARGV >= 3) && ($ARGV[0] =~ /^-t/i)) { shift @ARGV; $number_type = shift @ARGV; } # Global variables my $CAS_Lookup_table_file = "CAS2SMILES.txt"; my @CAS_Lookup_table; my $nr_numbers = 0; my $nr_added_numbers = 0; my $nr_unable = 0; my $nr_double = 0; if ($number_type =~ /^SMILES/i) { $number_type = "SMILES"; $CAS_Lookup_table_file = "CAS2SMILES.txt"; } elsif ($number_type =~ /^NSC/i) { $number_type = "NSC-NUMBER"; $CAS_Lookup_table_file = "CAS2NSC.txt"; } elsif ($number_type =~ /^UN/i) { $number_type = "UN-NUMBER"; $CAS_Lookup_table_file = "CAS2UN.txt"; } else { print "Error: unrecognized type $number_type!$/"; print "Usage: $0 [-type <TYPE>] <xml-files>$/"; print "\t<TYPE> = (SMILES | UN[-NUMBER] | NSC[-NUMBER])$/"; exit; } # Read CAS<=><TYPE> table if (open (FILE, $CAS_Lookup_table_file)) { while (<FILE>) { chomp; push (@CAS_Lookup_table, $_); } close (FILE) || die "$CAS_Lookup_table_file: $!$/"; } else { die "$CAS_Lookup_table_file: $!$/"; } # Loop over all files foreach my $arg (@ARGV) { &add_number_to_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_numbers) { print "$number_type strings found : $nr_numbers$/"; } else { print "No $number_type strings found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_double) { print "Double $number_type strings: $nr_double$/" if ($nr_double); } if ($nr_added_numbers) { print "$number_type strings added : $nr_added_numbers$/"; print "$number_type strings total : ",$nr_numbers+$nr_added_numbers,$/; } else { print "No $number_type strings added.$/"; } sub add_number_to_file { my $file = shift; my @XML_data; my $changed = ""; my $number_found = ""; my $double_number = ""; my @numbers = (); print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/CAS-NUMBER/i && /\>(.+?)\</) { $cas_found = "True"; if (!$number_found) { my $CAS_line = $_; my $number_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /$number_type/) { push (@XML_data, $next_line); $number_found = "True"; } else { my $number; if ($number = &get_number($CAS_number)) { $number_line =~ s/CAS-NUMBER/$number_type/; $number_line =~ s/\>.*?\</\>$number\</; push (@numbers, $number); push (@XML_data, $number_line); $changed = "True"; } push (@XML_data, $next_line); } } } elsif (/$number_type/ && /\>(.+?)\</) { push (@numbers, $1); if (!$number_found) { push (@XML_data, $_); $number_found = "True"; } else { $double_number = "True"; } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($double_number) { print "Double $number_type string found!"; $nr_numbers++; $nr_double++; $changed = "True"; } elsif ($number_found) { print "No changes needed...$/"; $nr_numbers++; $changed = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; if ($double_number) { print " Attempting to remove...$/"; } else { print "$number_type number added...$/"; $nr_added_numbers++; } } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_number { my $CAS_number = shift; my $number = ""; foreach my $line (@CAS_Lookup_table) { if ($line =~ /^$CAS_number\s*(.*)/) { $number = $1; } } return $number; } --- NEW FILE: add_numbers.pl.in --- #! @PATHTOPERL@ -w use strict; use diagnostics; my $number_type = "SMILES"; # Check command line options if (@ARGV < 1) { print "Usage: $0 [-type <TYPE>] <xml-files>$/"; print "\t<TYPE> = (SMILES | UN[-NUMBER] | NSC[-NUMBER])$/"; exit; } elsif ((@ARGV >= 3) && ($ARGV[0] =~ /^-t/i)) { shift @ARGV; $number_type = shift @ARGV; } # Global variables my $CAS_Lookup_table_file = "CAS2SMILES.txt"; my @CAS_Lookup_table; my $nr_numbers = 0; my $nr_added_numbers = 0; my $nr_unable = 0; my $nr_double = 0; if ($number_type =~ /^SMILES/i) { $number_type = "SMILES"; $CAS_Lookup_table_file = "CAS2SMILES.txt"; } elsif ($number_type =~ /^NSC/i) { $number_type = "NSC-NUMBER"; $CAS_Lookup_table_file = "CAS2NSC.txt"; } elsif ($number_type =~ /^UN/i) { $number_type = "UN-NUMBER"; $CAS_Lookup_table_file = "CAS2UN.txt"; } else { print "Error: unrecognized type $number_type!$/"; print "Usage: $0 [-type <TYPE>] <xml-files>$/"; print "\t<TYPE> = (SMILES | UN[-NUMBER] | NSC[-NUMBER])$/"; exit; } # Read CAS<=><TYPE> table if (open (FILE, $CAS_Lookup_table_file)) { while (<FILE>) { chomp; push (@CAS_Lookup_table, $_); } close (FILE) || die "$CAS_Lookup_table_file: $!$/"; } else { die "$CAS_Lookup_table_file: $!$/"; } # Loop over all files foreach my $arg (@ARGV) { &add_number_to_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_numbers) { print "$number_type strings found : $nr_numbers$/"; } else { print "No $number_type strings found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_double) { print "Double $number_type strings: $nr_double$/" if ($nr_double); } if ($nr_added_numbers) { print "$number_type strings added : $nr_added_numbers$/"; print "$number_type strings total : ",$nr_numbers+$nr_added_numbers,$/; } else { print "No $number_type strings added.$/"; } sub add_number_to_file { my $file = shift; my @XML_data; my $changed = ""; my $number_found = ""; my $double_number = ""; my @numbers = (); print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/CAS-NUMBER/i && /\>(.+?)\</) { $cas_found = "True"; if (!$number_found) { my $CAS_line = $_; my $number_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /$number_type/) { push (@XML_data, $next_line); $number_found = "True"; } else { my $number; if ($number = &get_number($CAS_number)) { $number_line =~ s/CAS-NUMBER/$number_type/; $number_line =~ s/\>.*?\</\>$number\</; push (@numbers, $number); push (@XML_data, $number_line); $changed = "True"; } push (@XML_data, $next_line); } } } elsif (/$number_type/ && /\>(.+?)\</) { push (@numbers, $1); if (!$number_found) { push (@XML_data, $_); $number_found = "True"; } else { $double_number = "True"; } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($double_number) { print "Double $number_type string found!"; $nr_numbers++; $nr_double++; $changed = "True"; } elsif ($number_found) { print "No changes needed...$/"; $nr_numbers++; $changed = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; if ($double_number) { print " Attempting to remove...$/"; } else { print "$number_type number added...$/"; $nr_added_numbers++; } } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_number { my $CAS_number = shift; my $number = ""; foreach my $line (@CAS_Lookup_table) { if ($line =~ /^$CAS_number\s*(.*)/) { $number = $1; } } return $number; } --- NEW FILE: add_smiles.pl --- #! /usr/bin/perl -w use strict; use diagnostics; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my $CAS_SMILES_table_file = "CAS2SMILES.txt"; my @CAS_SMILES_table; my $nr_SMILES_numbers = 0; my $nr_added_SMILES_numbers = 0; my $nr_unable = 0; my $nr_double = 0; # Read CAS<=>SMILES table if (open (FILE, $CAS_SMILES_table_file)) { while (<FILE>) { chomp; push (@CAS_SMILES_table, $_); } close (FILE) || die "$CAS_SMILES_table_file: $!$/"; } else { die "$CAS_SMILES_table_file: $!$/"; } # Loop over all files foreach my $arg (@ARGV) { &add_SMILES_number_to_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_SMILES_numbers) { print "SMILES strings found : $nr_SMILES_numbers$/"; } else { print "No SMILES strings found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_double) { print "Double SMILES strings: $nr_double$/" if ($nr_double); } if ($nr_added_SMILES_numbers) { print "SMILES strings added : $nr_added_SMILES_numbers$/"; print "SMILES strings total : ",$nr_SMILES_numbers+$nr_added_SMILES_numbers,$/; } else { print "No SMILES strings added.$/"; } sub add_SMILES_number_to_file { my $file = shift; my @XML_data; my $changed = ""; my $smiles_found = ""; my $double_smiles = ""; my @smiles = (); print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/CAS-NUMBER/i && /\>(.+?)\</) { $cas_found = "True"; if (!$smiles_found) { my $CAS_line = $_; my $SMILES_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /SMILES/) { push (@XML_data, $next_line); $smiles_found = "True"; } else { my $SMILES_number; if ($SMILES_number = &get_SMILES_number($CAS_number)) { $SMILES_line =~ s/CAS-NUMBER/SMILES/; $SMILES_line =~ s/\>.*?\</\>$SMILES_number\</; push (@XML_data, $SMILES_line); $changed = "True"; } push (@XML_data, $next_line); } } } elsif (/SMILES/ && /\>(.+?)\</) { if (!$smiles_found) { push (@XML_data, $_); $smiles_found = "True"; } else { $double_smiles = "True"; } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($double_smiles) { print "Double SMILES string found!"; $nr_SMILES_numbers++; $nr_double++; $changed = "True"; } elsif ($smiles_found) { print "No changes needed...$/"; $nr_SMILES_numbers++; $changed = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; if ($double_smiles) { print " Attempting to remove...$/"; } else { print "SMILES number added...$/"; $nr_added_SMILES_numbers++; } } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_SMILES_number { my $CAS_number = shift; my $SMILES_number = ""; foreach my $line (@CAS_SMILES_table) { if ($line =~ /^$CAS_number\s*(.*)/) { $SMILES_number = $1; } } return $SMILES_number; } --- NEW FILE: add_smiles.pl.in --- #! @PATHTOPERL@ -w use strict; use diagnostics; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my $CAS_SMILES_table_file = "CAS2SMILES.txt"; my @CAS_SMILES_table; my $nr_SMILES_numbers = 0; my $nr_added_SMILES_numbers = 0; my $nr_unable = 0; my $nr_double = 0; # Read CAS<=>SMILES table if (open (FILE, $CAS_SMILES_table_file)) { while (<FILE>) { chomp; push (@CAS_SMILES_table, $_); } close (FILE) || die "$CAS_SMILES_table_file: $!$/"; } else { die "$CAS_SMILES_table_file: $!$/"; } # Loop over all files foreach my $arg (@ARGV) { &add_SMILES_number_to_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_SMILES_numbers) { print "SMILES strings found : $nr_SMILES_numbers$/"; } else { print "No SMILES strings found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_double) { print "Double SMILES strings: $nr_double$/" if ($nr_double); } if ($nr_added_SMILES_numbers) { print "SMILES strings added : $nr_added_SMILES_numbers$/"; print "SMILES strings total : ",$nr_SMILES_numbers+$nr_added_SMILES_numbers,$/; } else { print "No SMILES strings added.$/"; } sub add_SMILES_number_to_file { my $file = shift; my @XML_data; my $changed = ""; my $smiles_found = ""; my $double_smiles = ""; my @smiles = (); print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/CAS-NUMBER/i && /\>(.+?)\</) { $cas_found = "True"; if (!$smiles_found) { my $CAS_line = $_; my $SMILES_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /SMILES/) { push (@XML_data, $next_line); $smiles_found = "True"; } else { my $SMILES_number; if ($SMILES_number = &get_SMILES_number($CAS_number)) { $SMILES_line =~ s/CAS-NUMBER/SMILES/; $SMILES_line =~ s/\>.*?\</\>$SMILES_number\</; push (@XML_data, $SMILES_line); $changed = "True"; } push (@XML_data, $next_line); } } } elsif (/SMILES/ && /\>(.+?)\</) { if (!$smiles_found) { push (@XML_data, $_); $smiles_found = "True"; } else { $double_smiles = "True"; } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($double_smiles) { print "Double SMILES string found!"; $nr_SMILES_numbers++; $nr_double++; $changed = "True"; } elsif ($smiles_found) { print "No changes needed...$/"; $nr_SMILES_numbers++; $changed = ""; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; if ($double_smiles) { print " Attempting to remove...$/"; } else { print "SMILES number added...$/"; $nr_added_SMILES_numbers++; } } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_SMILES_number { my $CAS_number = shift; my $SMILES_number = ""; foreach my $line (@CAS_SMILES_table) { if ($line =~ /^$CAS_number\s*(.*)/) { $SMILES_number = $1; } } return $SMILES_number; } --- NEW FILE: add_un_nummers.pl --- #! /usr/bin/perl -w use strict; use diagnostics; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my $CAS_UN_table_file = "CAS2UN.txt"; my @CAS_UN_table; my $nr_UN_numbers = 0; my $nr_added_UN_numbers = 0; my $nr_unable = 0; # Read CAS<=>UN table if (open (FILE, $CAS_UN_table_file)) { while (<FILE>) { chomp; push (@CAS_UN_table, $_); } close (FILE) || die "$CAS_UN_table_file: $!$/"; } else { die "$CAS_UN_table_file: $!$/"; } # Loop over all files foreach my $arg (@ARGV) { &add_UN_number_to_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_UN_numbers) { print "UN numbers found : $nr_UN_numbers$/"; } else { print "No UN numbers found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_added_UN_numbers) { print "UN numbers added : $nr_added_UN_numbers$/"; print "UN numbers total : ",$nr_UN_numbers+$nr_added_UN_numbers,$/; } else { print "No UN numbers added.$/"; } sub add_UN_number_to_file { my $file = shift; my @XML_data; my $changed = ""; print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/CAS-NUMBER/i && /\>(.+?)\</) { $cas_found = "True"; my $CAS_line = $_; my $UN_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /UN-NUMBER/) { push (@XML_data, $next_line); $nr_UN_numbers++; } else { my $UN_number; if ($UN_number = &get_UN_number($CAS_number)) { $UN_line =~ s/CAS-NUMBER/UN-NUMBER/; $UN_line =~ s/\>.*?\</\>$UN_number\</; push (@XML_data, $UN_line); $changed = "True"; } push (@XML_data, $next_line); } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "UN number added...$/"; $nr_added_UN_numbers++; } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_UN_number { my $CAS_number = shift; my $UN_number = ""; foreach my $line (@CAS_UN_table) { if ($line =~ /^$CAS_number\s*\<\=\>\s*(.*)/) { $UN_number = $1; } } return $UN_number; } --- NEW FILE: add_un_nummers.pl.in --- #! @PATHTOPERL@ -w use strict; use diagnostics; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my $CAS_UN_table_file = "CAS2UN.txt"; my @CAS_UN_table; my $nr_UN_numbers = 0; my $nr_added_UN_numbers = 0; my $nr_unable = 0; # Read CAS<=>UN table if (open (FILE, $CAS_UN_table_file)) { while (<FILE>) { chomp; push (@CAS_UN_table, $_); } close (FILE) || die "$CAS_UN_table_file: $!$/"; } else { die "$CAS_UN_table_file: $!$/"; } # Loop over all files foreach my $arg (@ARGV) { &add_UN_number_to_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_UN_numbers) { print "UN numbers found : $nr_UN_numbers$/"; } else { print "No UN numbers found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_added_UN_numbers) { print "UN numbers added : $nr_added_UN_numbers$/"; print "UN numbers total : ",$nr_UN_numbers+$nr_added_UN_numbers,$/; } else { print "No UN numbers added.$/"; } sub add_UN_number_to_file { my $file = shift; my @XML_data; my $changed = ""; print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/CAS-NUMBER/i && /\>(.+?)\</) { $cas_found = "True"; my $CAS_line = $_; my $UN_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /UN-NUMBER/) { push (@XML_data, $next_line); $nr_UN_numbers++; } else { my $UN_number; if ($UN_number = &get_UN_number($CAS_number)) { $UN_line =~ s/CAS-NUMBER/UN-NUMBER/; $UN_line =~ s/\>.*?\</\>$UN_number\</; push (@XML_data, $UN_line); $changed = "True"; } push (@XML_data, $next_line); } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "UN number added...$/"; $nr_added_UN_numbers++; } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_UN_number { my $CAS_number = shift; my $UN_number = ""; foreach my $line (@CAS_UN_table) { if ($line =~ /^$CAS_number\s*\<\=\>\s*(.*)/) { $UN_number = $1; } } return $UN_number; } --- NEW FILE: check_cas_nummers.pl --- #! /usr/bin/perl -w use strict; use diagnostics; # Check argument line if (@ARGV == 0) { print "Usage: $0 <XML-files>$/"; exit; } # Global variables my $nr_ignored = 0; my $nr_inserted = 0; my $nr_unable = 0; # Loop over all files foreach my $arg (@ARGV) { &check_CAS_and_WOC_numbers_in_file ($arg); } # Print statistics print " ------------------------$/"; if ($nr_ignored + $nr_inserted == 0) { print "All files passed check.$/"; } else { print "Errors ignored : $nr_ignored$/" if ($nr_ignored); print "Unable to changes : $nr_unable$/" if ($nr_unable); print "Check digits inserted: $nr_inserted$/" if ($nr_inserted); } sub check_CAS_and_WOC_numbers_in_file { my $file = shift; my @XML_data; my $changed = ""; print "Processing $file, "; if (open (FILE, $file)) { while (<FILE>) { if (/(CAS|WOC)-NUMBER.*?\>(.+?)\</) { my $type = $1; my $line = $_; my $number = $2; my $check = &check_digit ($number); if (!$check) { print "$/ Wrong check digit or typing error in $type number in $file! Ignoring error...$/ "; $nr_ignored++; #chop ($number); #chop ($number); #$number = &check_digit ($number); #$line =~ s/\>.*?\</\>$number\</; #print "Corrected...$/"; #$nr_corrected++; #$changed = "True"; } elsif ($check =~ /Error/i) { print "$/ $check in $file! Ignoring error...$/ "; $nr_ignored++; } elsif ($check !~ /Correct/i) { print "$/ Missing check digit of $type number in $file!$/ "; $number = &check_digit ($number); $line =~ s/\>.*?\</\>$number\</; $changed = "True"; } push (@XML_data, $line); } else { push (@XML_data, $_); } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die "$file: $!$/"; print "Check digit inserted...$/"; $nr_inserted++; } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } --- NEW FILE: check_cas_nummers.pl.in --- #! @PATHTOPERL@ -w use strict; use diagnostics; # Check argument line if (@ARGV == 0) { print "Usage: $0 <XML-files>$/"; exit; } # Global variables my $nr_ignored = 0; my $nr_inserted = 0; my $nr_unable = 0; # Loop over all files foreach my $arg (@ARGV) { &check_CAS_and_WOC_numbers_in_file ($arg); } # Print statistics print " ------------------------$/"; if ($nr_ignored + $nr_inserted == 0) { print "All files passed check.$/"; } else { print "Errors ignored : $nr_ignored$/" if ($nr_ignored); print "Unable to changes : $nr_unable$/" if ($nr_unable); print "Check digits inserted: $nr_inserted$/" if ($nr_inserted); } sub check_CAS_and_WOC_numbers_in_file { my $file = shift; my @XML_data; my $changed = ""; print "Processing $file, "; if (open (FILE, $file)) { while (<FILE>) { if (/(CAS|WOC)-NUMBER.*?\>(.+?)\</) { my $type = $1; my $line = $_; my $number = $2; my $check = &check_digit ($number); if (!$check) { print "$/ Wrong check digit or typing error in $type number in $file! Ignoring error...$/ "; $nr_ignored++; #chop ($number); #chop ($number); #$number = &check_digit ($number); #$line =~ s/\>.*?\</\>$number\</; #print "Corrected...$/"; #$nr_corrected++; #$changed = "True"; } elsif ($check =~ /Error/i) { print "$/ $check in $file! Ignoring error...$/ "; $nr_ignored++; } elsif ($check !~ /Correct/i) { print "$/ Missing check digit of $type number in $file!$/ "; $number = &check_digit ($number); $line =~ s/\>.*?\</\>$number\</; $changed = "True"; } push (@XML_data, $line); } else { push (@XML_data, $_); } } close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die "$file: $!$/"; print "Check digit inserted...$/"; $nr_inserted++; } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } --- NEW FILE: check_doublenumbers.pl --- #! /usr/bin/perl -w use strict; use diagnostics; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my @NUMBER_count = (); my @NUMBER_doublecount = (); # Loop over all files foreach my $arg (@ARGV) { &check_numbers_in_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_SMILES_numbers) { print "SMILES strings found : $nr_SMILES_numbers$/"; } else { print "No SMILES strings found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_double) { print "Double SMILES strings: $nr_double$/" if ($nr_double); } if ($nr_added_SMILES_numbers) { print "SMILES strings added : $nr_added_SMILES_numbers$/"; print "SMILES strings total : ",$nr_SMILES_numbers+$nr_added_SMILES_numbers,$/; } else { print "No SMILES strings added.$/"; } sub check_numbers_in_file { my $file = shift; my @XML_data; my $changed = ""; my $doubles_found = ""; my $mismatching_doubles_found = ""; my @NUMBERS = (); print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/INDEX CLASS/i && /\>(.+?)\</) { $number_found = "True"; my $CAS_line = $_; my $SMILES_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /SMILES/) { push (@XML_data, $next_line); $smiles_found = "True"; } else { my $SMILES_number; if ($SMILES_number = &get_SMILES_number($CAS_number)) { $SMILES_line =~ s/CAS-NUMBER/SMILES/; $SMILES_line =~ s/\>.*?\</\>$SMILES_number\</; push (@XML_data, $SMILES_line); $changed = "True"; } push (@XML_data, $next_line); } } } elsif (/SMILES/ && /\>(.+?)\</) { if (!$smiles_found) { push (@XML_data, $_); $smiles_found = "True"; } else { $double_smiles = "True"; } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($double_smiles) { print "Double SMILES string found...$/"; $nr_SMILES_numbers++; $nr_double++; } elsif ($changed && $smiles_found) { print "No changes needed...$/"; $nr_SMILES_numbers++; } elsif ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "SMILES number added...$/"; $nr_added_SMILES_numbers++; } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_SMILES_number { my $CAS_number = shift; my $SMILES_number = ""; foreach my $line (@CAS_SMILES_table) { if ($line =~ /^$CAS_number\s*(.*)/) { $SMILES_number = $1; } } return $SMILES_number; } --- NEW FILE: check_doublenumbers.pl.in --- #! @PATHTOPERL@ -w use strict; use diagnostics; # Check command line options if (@ARGV == 0) { print "Usage: $0 <xml-files>$/"; exit; } # Global variables my @NUMBER_count = (); my @NUMBER_doublecount = (); # Loop over all files foreach my $arg (@ARGV) { &check_numbers_in_file ($arg); } # Print statistics print " ------------------$/"; if ($nr_SMILES_numbers) { print "SMILES strings found : $nr_SMILES_numbers$/"; } else { print "No SMILES strings found.$/"; } if ($nr_unable) { print "Unable to changes: $nr_unable$/" if ($nr_unable); } if ($nr_double) { print "Double SMILES strings: $nr_double$/" if ($nr_double); } if ($nr_added_SMILES_numbers) { print "SMILES strings added : $nr_added_SMILES_numbers$/"; print "SMILES strings total : ",$nr_SMILES_numbers+$nr_added_SMILES_numbers,$/; } else { print "No SMILES strings added.$/"; } sub check_numbers_in_file { my $file = shift; my @XML_data; my $changed = ""; my $doubles_found = ""; my $mismatching_doubles_found = ""; my @NUMBERS = (); print "Processing $file. "; if (open (FILE, $file)) { my $cas_found = ""; my $chemical = ""; while (<FILE>) { if (/CHEMICAL/i) { push (@XML_data, $_); $chemical = "True"; } elsif (/INDEX CLASS/i && /\>(.+?)\</) { $number_found = "True"; my $CAS_line = $_; my $SMILES_line = $CAS_line; my $CAS_number = $1; push (@XML_data, $CAS_line); my $next_line = <FILE> if (!eof(FILE)); if ($next_line =~ /SMILES/) { push (@XML_data, $next_line); $smiles_found = "True"; } else { my $SMILES_number; if ($SMILES_number = &get_SMILES_number($CAS_number)) { $SMILES_line =~ s/CAS-NUMBER/SMILES/; $SMILES_line =~ s/\>.*?\</\>$SMILES_number\</; push (@XML_data, $SMILES_line); $changed = "True"; } push (@XML_data, $next_line); } } } elsif (/SMILES/ && /\>(.+?)\</) { if (!$smiles_found) { push (@XML_data, $_); $smiles_found = "True"; } else { $double_smiles = "True"; } } elsif (/WOC-NUMBER/ && /\>(.+?)\</) { push (@XML_data, $_); $cas_found = "True"; } else { push (@XML_data, $_); } } print "No CAS number found!! " if ($chemical && !$cas_found); close (FILE) || warn "$file: $!$/"; } else { warn "$file: $!$/"; } if ($double_smiles) { print "Double SMILES string found...$/"; $nr_SMILES_numbers++; $nr_double++; } elsif ($changed && $smiles_found) { print "No changes needed...$/"; $nr_SMILES_numbers++; } elsif ($changed) { if (open (FILE, ">$file")) { foreach my $line (@XML_data) { print FILE $line; } close (FILE) || die $!; print "SMILES number added...$/"; $nr_added_SMILES_numbers++; } else { warn "$file: $!$/"; print "Unable to change...$/"; $nr_unable++; } } else { print "No changes...$/"; } } sub get_SMILES_number { my $CAS_number = shift; my $SMILES_number = ""; foreach my $line (@CAS_SMILES_table) { if ($line =~ /^$CAS_number\s*(.*)/) { $SMILES_number = $1; } } return $SMILES_number; } --- NEW FILE: zoek-UNs-zonder-wml.pl --- #! /usr/bin/perl -w use strict; use diagnostics; my $debug = ""; my $wmldir = "../../web-docs/data/wml"; my $existsfile = "tmp-nowml-exists"; # Check command line options #if (@ARGV == 0) { # print "Usage: $0 <xml-files>$/"; # exit; #} # Global variables my $CAS_UN_table_file = "CAS-UN.table"; my @CAS_UN_table; my $nr_UN_numbers = 0; my $nr_added_UN_numbers = 0; my $nr_unable = 0; # Read CAS<=>UN table if (open (FILE, $CAS_UN_table_file)) { <FILE>; # skip first line (comment) # while (<FILE>) { chomp; push (@CAS_UN_table, $_); } close (FILE) || die "$CAS_UN_table_file: $!$/"; } else { die "$CAS_UN_table_file: $!$/"; } &create_existskeyfile ("NUMBER"); foreach my $line (@CAS_UN_table) { my ($cas) = split (/\s*<=>\s*/, $line); my $nummatch = &exists (("NUMBER" => $cas)); if ($nummatch) { print "NUMBER found:\t$nummatch$/" if ($debug); } else { print "Dangling CAS/UN pair: $line$/"; } } &remove_existskeyfile ("NUMBER"); sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } --- NEW FILE: zoek-UNs-zonder-wml.pl.in --- #! @PATHTOPERL@ -w use strict; use diagnostics; my $debug = ""; my $wmldir = "../../web-docs/data/wml"; my $existsfile = "tmp-nowml-exists"; # Check command line options #if (@ARGV == 0) { # print "Usage: $0 <xml-files>$/"; # exit; #} # Global variables my $CAS_UN_table_file = "CAS-UN.table"; my @CAS_UN_table; my $nr_UN_numbers = 0; my $nr_added_UN_numbers = 0; my $nr_unable = 0; # Read CAS<=>UN table if (open (FILE, $CAS_UN_table_file)) { <FILE>; # skip first line (comment) # while (<FILE>) { chomp; push (@CAS_UN_table, $_); } close (FILE) || die "$CAS_UN_table_file: $!$/"; } else { die "$CAS_UN_table_file: $!$/"; } &create_existskeyfile ("NUMBER"); foreach my $line (@CAS_UN_table) { my ($cas) = split (/\s*<=>\s*/, $line); my $nummatch = &exists (("NUMBER" => $cas)); if ($nummatch) { print "NUMBER found:\t$nummatch$/" if ($debug); } else { print "Dangling CAS/UN pair: $line$/"; } } &remove_existskeyfile ("NUMBER"); sub create_existskeyfile { my $key = shift; `grep -i $key $wmldir/*.xml > $existsfile$key`; } sub remove_existskeyfile { my $key = shift; `rm $existsfile$key`; } sub exists { my %filters = @_; foreach my $key (keys %filters) { my $out = `grep -i $filters{$key} $existsfile$key`; if ($out) { chomp ($out); $out =~ s/$wmldir\///ig; $out =~ s/:\s*/:\t/ig; return "$out"; } } return ""; } |