Added eazytrans of 2006-06-11
| /trunk/tools/eazytrans/install.sh |
|---|
| 0,0 → 1,186 |
| #!/bin/bash |
| APPNAME="EazyTranslator" |
| APPVER="0.96a Setup" |
| APPFILEDIR=`pwd` |
| APPFILENAME="translate" |
| function title { |
| clear |
| echo $APPNAME" "$APPVER" - (C) 2001 Thomas Lahn (webmaster@PointedEars.de)" |
| } |
| function Error { |
| echo |
| pause "c" |
| } |
| function EFailed { |
| echo -e "$rc_failed" |
| Error |
| } |
| X="" |
| function val2x { |
| case $1 in |
| -1) X="-";; |
| 0) X=" ";; |
| 1) X="x";; |
| esac |
| } |
| # Acquire default text values for process success/failure messages |
| . /etc/rc.config |
| if [ -n "$1" ]; then CPDEST=$1 ; else CPDEST="/opt/EazyTrans" ; fi |
| CREATELNK=1 |
| MODI_USERS=1 |
| MODI_ROOT=1 |
| MODI_SKEL=1 |
| YES="Yes!" |
| NO="No." |
| DEF="Default" |
| YESNO="$YES $NO" |
| YESNODEF="$YES $NO $DEF" |
| CONTINUE=0 |
| while [ $CONTINUE -eq 0 ]; do |
| title |
| echo |
| # if [ `whoami` != "root" ]; then echo "Sorry, only 'root' can do this!" ; echo ; exit 1 ; fi |
| echo "This program will do the following:" |
| echo |
| echo "1) Copy the program files to: '"$CPDEST"'" |
| val2x $CREATELNK |
| echo "2) ["$X"] Create a symbolic link to /usr/bin" |
| val2x $MODI_USERS |
| echo "3) ["$X"] Modify the ~/.bashrc file of existing users (default)" |
| val2x $MODI_ROOT |
| echo "4) ["$X"] Modify the /root/.bashrc file (default)" |
| val2x $MODI_SKEL |
| echo "5) ["$X"] Modify the /etc/skel/.bashrc file (default)" |
| echo |
| echo "Select the value to be changed, proceed with these values or cancel:" |
| OPT_PROCEED="Proceed!" |
| OPT_CANCEL="Cancel." |
| OPTIONS="1 2 3 4 5 $OPT_PROCEED $OPT_CANCEL" |
| select SELOPT in $OPTIONS; do |
| case $SELOPT in |
| "1") |
| echo |
| echo "Where should the program files be copied to? (RETURN cancels):" |
| echo -n "> " |
| read S |
| if [ -n "$S" ]; then CPDEST=$S ; fi |
| break;; |
| "2") |
| echo |
| echo "Should a symbolic link '/usr/bin/"$APPFILENAME"' be created" |
| echo "so that the program becomes available to all users?" |
| select SELOPT in $YESNODEF; do |
| case $SELOPT in |
| $YES) |
| CREATELNK=1 |
| break;; |
| $NO) |
| CREATELNK=0 |
| break;; |
| $DEF) |
| CREATELNK=1 |
| break;; |
| *) |
| echo "Bad option" |
| echo;; |
| esac |
| done |
| break;; |
| "3") |
| echo |
| echo "Should the ~/.bashrc file of existing users be modified" |
| echo "so that they can use the global dictionary files without typing a path?" |
| select SELOPT in $YESNODEF; do |
| case $SELOPT in |
| $YES) |
| MODI_USERS=1 |
| break;; |
| $NO) |
| MODI_USERS=0 |
| break;; |
| $DEF) |
| MODI_USERS=1 |
| break;; |
| *) |
| echo "Bad option" |
| echo;; |
| esac |
| done |
| break;; |
| "4") |
| echo |
| echo "Should /root/.bashrc be modified so that 'root' can use" |
| echo "the global dictionary files without typing a path?" |
| select SELOPT in $YESNODEF; do |
| case $SELOPT in |
| $YES) |
| MODI_ROOT=1 |
| break;; |
| $NO) |
| MODI_ROOT=0 |
| break;; |
| $DEF) |
| MODI_ROOT=1 |
| break;; |
| *) |
| echo "Bad option" |
| echo |
| esac |
| done |
| break;; |
| "5") |
| echo |
| echo "Should /etc/skel/.bashrc be modified so that new users" |
| echo "can use the global dictionary files without typing a path?" |
| select SELOPT in $YESNODEF; do |
| case $SELOPT in |
| $YES) |
| MODI_SKEL=1 |
| break;; |
| $NO) |
| MODI_SKEL=0 |
| break;; |
| $DEF) |
| MODI_SKEL=1 |
| break;; |
| *) |
| echo "Bad option" |
| echo |
| esac |
| done |
| break;; |
| $OPT_PROCEED) |
| title |
| echo |
| echo "Creating program directory '"$CPDEST"'" |
| if [ -d |
| if [ -x "$APPFILENAME" ]; then |
| ln -s -v $APPFILEDIR/$APPFILENAME /usr/bin/$APPFILENAME |
| else |
| echo $0": Unable to find the file "$APPFILEDIR/$APPFILENAME"' in current directory." |
| fi |
| echo |
| echo |
| exit 0;; |
| $OPT_CANCEL) |
| title |
| echo |
| echo "Canceled." |
| echo |
| exit 0;; |
| *) |
| break;; |
| esac |
| done |
| done |
| exit 0 |
| Property changes: |
| Added: svn:executable |
| ## -0,0 +1 ## |
| +* |
| \ No newline at end of property |
| Index: eazytrans/uninstall.sh |
| =================================================================== |
| --- eazytrans/uninstall.sh (nonexistent) |
| +++ eazytrans/uninstall.sh (revision 15) |
| @@ -0,0 +1,10 @@ |
| +#!/bin/bash |
| + |
| +APPFILENAME="translate" |
| + |
| +echo |
| +rm /usr/bin/$APPFILENAME |
| +if [ $? -eq 0 ]; then |
| + echo "Successfully removed symbolic link: /usr/bin/"$APPFILENAME |
| +fi |
| +echo |
| /eazytrans/uninstall.sh |
|---|
| Property changes: |
| Added: svn:executable |
| ## -0,0 +1 ## |
| +* |
| \ No newline at end of property |
| Index: eazytrans/option-parser.sh |
| =================================================================== |
| --- eazytrans/option-parser.sh (nonexistent) |
| +++ eazytrans/option-parser.sh (revision 15) |
| @@ -0,0 +1,34 @@ |
| +#!/bin/bash |
| +echo |
| + |
| +interactive=0 |
| + |
| +echo $\*=$* |
| +for i in "$*"; do |
| + opt=0 |
| + idx=1 |
| + while [ -n "`echo $i | cut -c $idx`" ] ; do |
| + j=`echo $i | cut -c $idx` |
| + let idx=$idx+1 |
| + if [ "$j" = "-" ]; then |
| + opt=1 |
| + continue 1 |
| + else |
| + if [ $opt -eq 1 ]; then |
| + case "$j" in |
| + "i") interactive=1 ;; |
| + esac |
| + lastopt=$j |
| + else |
| + phrase=$phrase" "$j |
| + fi |
| + fi |
| + done |
| +done |
| + |
| +echo opt=$opt |
| +echo idx=$idx |
| +echo lastopt=$lastopt |
| +echo phrase=$phrase |
| +echo interactive=$interactive |
| +echo |
| /eazytrans/option-parser.sh |
|---|
| Property changes: |
| Added: svn:executable |
| ## -0,0 +1 ## |
| +* |
| \ No newline at end of property |
| Index: eazytrans/README |
| =================================================================== |
| --- eazytrans/README (nonexistent) |
| +++ eazytrans/README (revision 15) |
| @@ -0,0 +1,165 @@ |
| + |
| +EasyTranslator 0.95a - Stream editor to manage dictionary files |
| +Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH |
| + |
| +Copyright (C) 2001 Thomas Lahn (webmaster@PointedEars.de) |
| +Be sure to have 'easyTrans' or similar in mail subject line for fast response. |
| + |
| +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 of the License, 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 (COPYING file); if not, write to the |
| +Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| + |
| + |
| +EasyTranslator 0.95a - Stream editor to manage dictionary files |
| +Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH |
| + |
| +translate EXPRESSION DICTIONARY [OPTIONS] |
| + |
| +Tries to translate EXPRESSION looking up DICTIONARY and writes the result |
| +to standard output (stdout) in a single line followed by a newline (\n). |
| + |
| +Environment: |
| + |
| +TRANSLATE_DIR Dictionary folder root (absolute path '/') |
| + If undefined, this is the program directory |
| + (currently './'). |
| +TRANSLATE_OPTIONS Default options to overwrite command-line options |
| + |
| +Arguments: |
| + |
| +EXPRESSION Word or (double-quoted) phrase to be translated |
| +DICTIONARY Path of dictionary file relative to TRANSLATE_DIR |
| + |
| +Translation OPTIONS: |
| + -b, --brackets If not in DICTIONARY, writes given WORD or EXPRESSION |
| + as [WORD] or [EXPRESSION]. |
| + -m, --messages Return error messages instead of null-strings. |
| + -p, --phrase Translate EXPRESSION as entire phrase. If not given, |
| + each WORD of EXPRESSION is translated seperately. |
| + -r, --reverse Perform reverse translation. Recommended only if |
| + no appropriate dictionary file for vice-versa translation is |
| + available and -p is also used. |
| + -s, --sound Beep on fatal errors. |
| + -v, --verbose Display flow of operation. Includes -m behavior. |
| + -z, --zero Return not translatable tokens as null-strings. |
| + Overwrites -b. |
| + |
| +translate EXPRESSION DICTIONARY COMMAND TRANSLATION [INFO] [OPTIONS] |
| +translate COMMAND DICTIONARY [INFO] [OPTIONS] |
| + |
| +Dictionary file COMMANDs: |
| + -a, --add If not in DICTIONARY, add EXPRESSION with TRANSLATION |
| + to DICTIONARY and write TRANSLATION. |
| + If DICTIONARY not exists, create the file with INFO |
| + and add the entry; if INFO is a null-string, |
| + default INFO is added, containing program version, |
| + user name and timestamp. Requires 'sort'. |
| + -ai, -addinfo Add information data INFO to DICTIONARY. |
| + Must be used as first argument. |
| + -c, --create Create new DICTIONARY with INFO (see -a). |
| + Existing files are replaced. Must be used as first argument. |
| + -d, --delete If used with EXPRESSION and DICTIONARY, remove EXPRESSION |
| + from DICTIONARY instead of translating. |
| + If used as first argument, delete DICTIONARY. |
| + -i, --info Display information about DICTIONARY. |
| + Must be used as first argument. |
| + |
| + -o, --overwrite Like -a but overwrite a contained translation of |
| + EXPRESSION with TRANSLATION without question. |
| + Additionally requires 'mktemp'. |
| + -R, --repair Repair DICTIONARY instead of translating. Requires 'mktemp'. |
| + Info data is be kept but invalid entries are removed. |
| + USE WITH CAUTION! |
| + -s, --sort Sort DICTIONARY instead of translating. Requires 'sort'. |
| + Includes --sound when used with -v. |
| + Must be used as first argument. |
| + |
| +translate OPTION [OPTION] |
| + |
| +Help page OPTIONs: |
| + --1 Display help on one page (without 'clear' and user input). |
| + Useful with redirection |
| + (try 'translate --1 --? > translate.doc.txt'). |
| + Must be given before all other help page options. |
| + --a, --about Display information about the program. |
| + --c, --cmd Display this help page. |
| + --d, --dict Display help about dictionary files. |
| + --dev, --emp Display special information for developers and employers. |
| + --x, --example Display example. |
| + --?, --help Display all help pages. |
| + |
| + |
| +EasyTranslator 0.95a - Stream editor to manage dictionary files |
| +Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH |
| + |
| +EXAMPLE: If you would like to translate the English words 'a few' into German, |
| + |
| + translate ''a few'' en-de |
| + |
| +should write the German words |
| + |
| + ein(e) wenig(e)\n |
| + |
| +(without indent) to stdout if the echo dictionary file 'en-de' contains |
| +a correct entry for it (see next page). You may also translate it as |
| +entire phrase (which seems to make more sense here): |
| + |
| + translate ''a few'' en-de -p |
| + |
| +should instead write the German word 'einige\n' |
| +(replace '' in input with the double-quote character). |
| + |
| + |
| +EasyTranslator 0.95a - Stream editor to manage dictionary files |
| +Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH |
| + |
| +DICTIONARY FILES: |
| +You may create/improve dictionary files to be used with EasyTranslator |
| +of your own. Translation data must be contained therein as follows: |
| + |
| +#:File description displayed when option -i is used\n[#:File description\n] |
| +[Expression:translation\n[Next expression:next translation\n]] |
| +Last expression:last translation\z |
| + |
| +Parts enclosed in rectangle brackets are optional. The colon (:) is to be used |
| +as delimiter character between original and translated expression only. |
| +Dictionary file names should contain common language identifiers separated |
| +by a dash (such as 'en-de.dic' for an English-German dictionary file). |
| + |
| +Program updates and dictionaries can be obtained from |
| +'http://pointedears.de/dev/unix/translate/'. |
| +Thank you for using a program by PointedEars. |
| + |
| + |
| +EasyTranslator 0.95a - Stream editor to manage dictionary files |
| +Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH |
| + |
| +Copyright (C) 2001 Thomas Lahn (webmaster@PointedEars.de) |
| +Be sure to have 'easyTrans' or similar in mail subject line for fast response. |
| + |
| +INFORMATION FOR DEVELOPERS (KNOWN ISSUES)... |
| + |
| +1) As I have not found out the correct /REGEXP/ for 'sed' to remove all |
| + characters before/after another one including this character (delimiter) |
| + to date, removing each single printable character before/after |
| + delimiter is, for the time being, my only solution in bash. Please mail |
| + me if you have a more efficient solution, especially the correct /REGEXP/. |
| +2) Sorting the dictionary unfortunately also sorts its the info data by now. |
| + |
| +...AND FOR EMPLOYERS: |
| + |
| +BTW, if you have an idea for improving EasyTranslator or for another (field of) |
| +application you want me to develop for you (BASIC, DOS batch, Windows INF, |
| +Visual Basic, bash, Pascal, Delphi, C, HTML/JavaScript, and I am still learning |
| +other languages) feel free to mail me, too. THNX! -- PointedEars, 2001-03-28 |
| + |
| Index: eazytrans/dummy.dict |
| =================================================================== |
| --- eazytrans/dummy.dict (nonexistent) |
| +++ eazytrans/dummy.dict (revision 15) |
| @@ -0,0 +1 @@ |
| +#:EasyTranslator 0.95a dictionary file created by 'pelinux' on Mit Mär 28 13:51:49 CEST 2001 |
| Index: eazytrans/translate |
| =================================================================== |
| --- eazytrans/translate (nonexistent) |
| +++ eazytrans/translate (revision 15) |
| @@ -0,0 +1,655 @@ |
| +#!/bin/bash |
| + |
| +APPNAME="EazyTranslator" |
| +APPVER="0.97a" |
| +APPFILENAME=`basename $0` |
| +APPFILEDIR=`echo $0 | sed 's/'$APPFILENAME$'//'` |
| + |
| +# dictionary file |
| +DICT="$TRANSLATE_DIR" |
| +if [ -z "$DICT" ]; then DICT=$APPFILEDIR ; fi |
| + |
| +# delimiter name (for help page only) and character (string) for separating original expression |
| +# and translation in dictionary file |
| +DELIMITER_NAME="colon" |
| +DELIMITER=":" |
| + |
| +# all help on a single page |
| +SINGLE_PAGE=0 |
| + |
| +# bell character |
| +CH_SOUND="" |
| +CH_SOUND_ON=$'\a' |
| + |
| +RESULT="" |
| + |
| +function title { |
| + if [ $SINGLE_PAGE -eq 0 ]; then clear ; fi |
| + echo |
| + echo $APPNAME" "$APPVER" - Stream editor to use and to manage dictionary files" |
| + echo "Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH" |
| + echo |
| +} |
| + |
| +function copyright { |
| + echo "Copyright (C) 2001 Thomas Lahn (webmaster@PointedEars.de)" |
| + echo "Be sure to have 'easyTrans' or similar in mail subject line for fast response." |
| + echo |
| +} |
| + |
| +function pause { |
| + if [ "$1" == "c" ]; then |
| + echo "Hit RETURN to continue..." |
| + else |
| + echo "Hit RETURN for the next page" |
| + fi |
| + read |
| +} |
| + |
| +function copying { |
| + title |
| + copyright |
| + echo "This program is free software; you can redistribute it and/or modify" |
| + echo "it under the terms of the GNU General Public License as published by" |
| + echo "the Free Software Foundation; either version 2 of the License, or" |
| + echo "(at your option) any later version." |
| + echo |
| + echo "This program is distributed in the hope that it will be useful," |
| + echo "but WITHOUT ANY WARRANTY; without even the implied warranty of" |
| + echo "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" |
| + echo "GNU General Public License for more details." |
| + echo |
| + echo "You should have received a copy of the GNU General Public License" |
| + echo "along with this program (COPYING file); if not, write to the" |
| + echo "Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." |
| + echo |
| +} |
| + |
| +function cmdHelp { |
| + title |
| + echo $APPFILENAME" EXPRESSION DICTIONARY [OPTIONS]" |
| + echo |
| + echo "Tries to translate EXPRESSION looking up DICTIONARY and writes the result" |
| + echo "to standard output (stdout) in a single line followed by a newline (\n)." |
| + echo |
| + echo "Environment:" |
| + echo |
| + echo "TRANSLATE_DIR Dictionary folder root (absolute path '/')" |
| +if [ -n "$TRANSLATE_DIR" ]; then |
| + local INVALID_PATH=" -- INVALID PATH!" |
| + local INVALID_FORMAT=" -- INVALID FORMAT!" |
| + # : AutoCorrect performed! |
| + local INVALID_MSG="" |
| + if [ ! -e $TRANSLATE_DIR ]; then |
| + INVALID_MSG=$INVALID_PATH |
| + else |
| + local GREPRES=`echo $TRANSLATE_DIR | grep -e "\/$"` |
| + if [ -z "$GREPRES" ]; then INVALID_MSG=$INVALID_FORMAT ; fi |
| + fi |
| + echo " (currently '"$TRANSLATE_DIR"'"$INVALID_MSG")" |
| + #if [ "$INVALID_MSG" == "$INVALID_FORMAT" ]; then |
| + #export TRANSLATE_DIR=$TRANSLATE_DIR"/" |
| + #set -a |
| + #fi |
| +fi |
| + echo " If undefined, this is the program directory" |
| + echo " (currently '"$APPFILEDIR"')." |
| + echo "TRANSLATE_OPTIONS Default options to overwrite command-line options" |
| +if [ -n "$TRANSLATE_OPTIONS" ]; then |
| + echo " (currently '"$TRANSLATE_OPTIONS"')" |
| +fi |
| + echo |
| + echo "Arguments:" |
| + echo |
| + echo "EXPRESSION Word or (double-quoted) phrase to be translated" |
| + echo "DICTIONARY Path of dictionary file relative to TRANSLATE_DIR" |
| + echo |
| + if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi |
| + echo "Translation OPTIONS:" |
| + echo " -b, --brackets If not in DICTIONARY, writes given WORD or EXPRESSION" |
| + echo " as [WORD] or [EXPRESSION]." |
| + echo " -m, --messages Return error messages instead of null-strings." |
| + echo " -p, --phrase Translate EXPRESSION as entire phrase. If not given," |
| + echo " each WORD of EXPRESSION is translated seperately." |
| + echo " -r, --reverse Perform reverse translation. Recommended only if" |
| + echo " no appropriate dictionary file for vice-versa translation is" |
| + echo " available and -p is also used." |
| + echo " -s, --sound Beep on fatal errors." |
| + echo " -v, --verbose Display flow of operation. Includes -m behavior." |
| + echo " -z, --zero Return not translatable tokens as null-strings." |
| + echo " Overwrites -b." |
| + echo |
| + if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi |
| + echo $APPFILENAME" EXPRESSION DICTIONARY COMMAND TRANSLATION [INFO] [OPTIONS]" |
| + echo $APPFILENAME" COMMAND DICTIONARY [INFO] [OPTIONS]" |
| + echo |
| + echo "Dictionary file COMMANDs:" |
| + echo " -a, --add If not in DICTIONARY, add EXPRESSION with TRANSLATION" |
| + echo " to DICTIONARY and write TRANSLATION." |
| + echo " If DICTIONARY not exists, create the file with INFO" |
| + echo " and add the entry; if INFO is a null-string," |
| + echo " default INFO is added, containing program version," |
| + echo " user name and timestamp. Requires 'sort'." |
| + echo " -ai, --addinfo Add information data INFO to DICTIONARY." |
| + echo " Must be used as first argument." |
| + echo " -c, --create Create new DICTIONARY with INFO (see -a)." |
| + echo " Existing files are replaced. Must be used as first argument." |
| + echo " -d, --delete If used with EXPRESSION and DICTIONARY, remove EXPRESSION" |
| + echo " from DICTIONARY instead of translating." |
| + echo " If used as first argument, delete DICTIONARY." |
| + echo " -i, --info Display information about DICTIONARY." |
| + echo " Must be used as first argument." |
| + echo |
| + if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi |
| + echo " -o, --overwrite Like -a but overwrite a contained translation of" |
| + echo " EXPRESSION with TRANSLATION without question." |
| + echo " Additionally requires 'mktemp'." |
| + echo " -R, --repair Repair DICTIONARY instead of translating. Requires 'mktemp'." |
| + echo " Info data is be kept but invalid entries are removed." |
| + echo " USE WITH CAUTION!" |
| + echo " -s, --sort Sort DICTIONARY instead of translating. Requires 'sort'." |
| + echo " Includes --sound when used with -v." |
| + echo " Must be used as first argument." |
| + echo |
| + if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi |
| + echo $APPFILENAME" OPTION [OPTION]" |
| + echo |
| + echo "Help page OPTIONs:" |
| + echo " --1 Display help on one page (without 'clear' and user input)." |
| + echo " Useful with redirection " |
| + echo " (try '"$APPFILENAME" --1 --? > translate.doc.txt')." |
| + echo " Must be given before all other help page options." |
| + echo " --a, --about Display information about the program." |
| + echo " --c, --cmd Display this help page." |
| + echo " --d, --dict Display help about dictionary files." |
| + echo " --dev, --emp Display special information for developers and employers." |
| + echo " --x, --example Display example." |
| + echo " --?, --help Display all help pages." |
| + echo |
| +} |
| + |
| +function example { |
| + title |
| + echo "EXAMPLE: If you would like to translate the English words 'a few' into German," |
| + echo |
| + echo " "$APPFILENAME" ''a few'' en-de" |
| + echo |
| + echo "should write the German words" |
| + echo |
| + echo " ein(e) wenig(e)\n" |
| + echo |
| + echo "(without indent) to stdout if the echo dictionary file 'en-de' contains" |
| + echo "a correct entry for it (see next page). You may also translate it as" |
| + echo "entire phrase (which seems to make more sense here):" |
| + echo |
| + echo " "$APPFILENAME" ''a few'' en-de -p" |
| + echo |
| + echo "should instead write the German word 'einige\n'" |
| + echo "(replace '' in input with the double-quote character)." |
| + echo |
| +} |
| + |
| +function dictHelp { |
| + title |
| + echo "DICTIONARY FILES:" |
| + echo "You may create/improve dictionary files to be used with "$APPNAME |
| + echo "of your own. Translation data must match the following expression:" |
| + echo |
| + echo "#"$DELIMITER"File description displayed when option -i is used\n[#"$DELIMITER"File description\n]" |
| + echo "[Expression"$DELIMITER"translation\n[Next expression"$DELIMITER"next translation\n]]" |
| + echo "Last expression"$DELIMITER"last translation\z" |
| + echo |
| + echo "Parts enclosed in rectangle brackets are optional. The "$DELIMITER_NAME" ("$DELIMITER") is to be used" |
| + echo "as delimiter character between original and translated expression only." |
| + echo "Dictionary file names should contain common language identifiers separated" |
| + echo "by a dash (such as 'en-de.dic' for an English-German dictionary file)." |
| + echo |
| + echo "Program updates and dictionaries can be obtained from" |
| + echo "'http://pointedears.de/dev/unix/translate/'." |
| + echo "Thank you for using a program by PointedEars." |
| + echo |
| +} |
| + |
| +function devInfo { |
| + title |
| + copyright |
| + echo "INFORMATION FOR DEVELOPERS (KNOWN ISSUES)..." |
| + echo |
| + echo "- Sorting the dictionary unfortunately also sorts its info data by now." |
| + echo |
| + echo "...AND FOR EMPLOYERS:" |
| + echo |
| + echo "BTW, if you have an idea for improving EasyTranslator or for another (field of)" |
| + echo "application you want me to develop for you (BASIC, DOS batch, Windows INF," |
| + echo "Visual Basic, bash, Pascal, Delphi, C, HTML/JavaScript, and I am still learning" |
| + echo "other languages) feel free to mail me, too. THNX! -- PointedEars, 2001-03-28" |
| + echo |
| +} |
| + |
| +function help { |
| + copying |
| + if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi |
| + cmdHelp |
| + if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi |
| + example |
| + if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi |
| + dictHelp |
| + if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi |
| + devInfo |
| +} |
| + |
| +function translateReverse { |
| + local EXPR="$1" |
| + if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -i -e '"$DELIMITER$EXPR"$' '"$DICT"'" ; fi |
| + RESULT=`grep -i -e "$DELIMITER$EXPR$" "$DICT"` |
| + if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi |
| + if [ -n "$RESULT" ]; then |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo "Reading expression from recordset (with sed requires only 1 step! :o)" ; |
| + echo "Executing: echo $RESULT | sed 's/$DELIMITER[ ]*[^$DELIMITER]*//'" |
| + fi |
| + RESULT=`echo $RESULT | sed 's/'$DELIMITER'[ ]*[^'$DELIMITER']*//'` |
| + if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi |
| + fi |
| + |
| + # Should return only characters before the delimiter until BOL (expression) |
| +} |
| + |
| +function translate { |
| + local EXPR="$1" |
| + if [ $REVERSE -eq 1 ]; then translateReverse "$1" ; return ; fi |
| + if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -i -e '^"$EXPR$DELIMITER"' '"$DICT"'" ; fi |
| + RESULT=`grep -i -e "^$EXPR$DELIMITER" "$DICT"` |
| + if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi |
| + if [ -n "$RESULT" ]; then |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo "Reading translation from recordset (with sed requires only 1 step! :o)" ; |
| + echo "Executing: echo $RESULT | sed 's/[^$DELIMITER]*$DELIMITER[ ]*//'" |
| + fi |
| + RESULT=`echo $RESULT | sed 's/[^'$DELIMITER']*'$DELIMITER'[ ]*//'` |
| + if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi |
| + fi |
| + |
| + # Should return only characters after the separation character until EOL |
| + # (translation) |
| +} |
| + |
| +# exit codes |
| +ESUCCESS=0 |
| +ENO_DICT=1 |
| +EDICT_DIR_NOT_FOUND=2 |
| +EDICT_NOT_FOUND=3 |
| +EDICT_WRONG_FORMAT=4 |
| +EDICT_EXPR_CONTAINED=5 |
| +EDICT_TEMP_ERROR=6 |
| +EDICT_CREATE_ERROR=7 |
| +EDICT_DELETE_EXPR_NOT_FOUND=8 |
| +EDICT_REMOVE=9 |
| + |
| +# argument flags |
| +DICTIONARY=0 # if 1, -d refers to the dictionary file instead of an entry |
| + |
| +# option flags - may be replaced by declare -i FLAG |
| +ADD=0 |
| +ADDINFO=0 |
| +BRACKETS=0 |
| +CREATE=0 |
| +DELETE=0 |
| +INFO=0 |
| +MESSAGES=0 |
| +OVERWRITE=0 |
| +PHRASE=0 |
| +REPAIR=0 |
| +REVERSE=0 |
| +SORT=0 |
| +SOUND=0 |
| +VERBOSE=0 |
| +ZERO=0 |
| + |
| +if [ -n "$1" ]; then |
| + # retrieve arguments and use default settings from environment variable |
| + ARGUMENTS=$* ; if [ -n "$TRANSLATE_OPTIONS" ]; then ARGUMENTS=$ARGUMENTS" "$TRANSLATE_OPTIONS ; fi |
| + # check options |
| + for argument in $ARGUMENTS; do |
| + case "$argument" in |
| + "-b" | "--brackets") BRACKETS=1;; |
| + "-m" | "--messages") MESSAGES=1;; |
| + "-p" | "--phrase") PHRASE=1;; |
| + "-r" | "--reverse") REVERSE=1;; |
| + "-s" | "--sound") SOUND=1;; |
| + "-v" | "--verbose") VERBOSE=1 ; title ; copyright;; |
| + "-z" | "--zero") ZERO=1;; |
| + "--a" | "--about") copying ; exit $ESUCCESS;; |
| + "--c" | "--cmd") cmdHelp ; exit $ESUCCESS;; |
| + "--d" | "--dict") dictHelp ; exit $ESUCCESS;; |
| + "--dev" | "--emp") devInfo ; exit $ESUCCESS;; |
| + "--1") SINGLE_PAGE=1;; |
| + "--x" | "--example") example ; exit $ESUCCESS;; |
| + "--?" | "--help") help ; exit $ESUCCESS;; |
| + esac |
| + done |
| + if [ $SOUND -eq 1 ]; then CH_SOUND=$CH_SOUND_ON ; fi |
| + if [ -n "$2" ]; then |
| +# concatenate dictionary root and given dictionary file |
| + DICT="$DICT$2" |
| +# check for dictionary commands |
| + case "$1" in |
| + "-d" | "--delete") DELETE=1 ; DICTIONARY=1 ;; |
| + "-c" | "--create") CREATE=1;; |
| + "-i" | "--info") INFO=1;; |
| + "-s" | "--sort") SORT=1;; |
| + "-R" | "--repair") REPAIR=1;; |
| + esac |
| + case "$3" in |
| + "-a" | "--add") ADD=1;; |
| + "-ai" | "--addinfo") ADDINFO=1;; |
| + "-d" | "--delete") DELETE=1;; |
| + "-o" | "--overwrite") OVERWRITE=1;; |
| + esac |
| + |
| + if [ $VERBOSE -eq 1 ]; then |
| + if [ -z "$TRANSLATE_DIR" ]; then |
| + echo "Dictionary root (program directory): '"$APPFILEDIR"'" |
| + else |
| + echo "Dictionary root (TRANSLATE_DIR): '"$TRANSLATE_DIR"'" |
| + fi |
| + echo "Dictionary file: '"$2"'" |
| + echo "Dictionary file path: '"$DICT"'" |
| + fi |
| + |
| + DEFAULT_INFO=$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date` |
| + |
| + if [ $CREATE -eq 1 ]; then |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo $DICT": Creating dictionary" |
| + fi |
| + if [ -z "$3" ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO ; fi |
| + echo "#"$DELIMITER$EFAULT_INFO &>$DICT |
| + else |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi |
| + echo "#"$DELIMITER$3 &>$DICT |
| + fi |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + exit $? |
| + fi |
| + |
| + if [ -e "$DICT" ]; then # if dictionary file exists |
| + # check if dictionary file (contains at least '#$DELIMITER') |
| + if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -e '."$DELIMITER".' '"$DICT"'" ; fi |
| + RESULT=`grep -e "#$DELIMITER." "$DICT"` |
| + if [ -z "$RESULT" ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo "grep returned: ''" ; fi |
| + echo $DICT": Not a (valid) dictionary file (type '"$APPFILENAME" --d' for details)." |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + exit $EDICT_WRONG_FORMAT |
| + else |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo "grep returned not a null-string: '$DICT' seems to be a dictionary file" |
| + fi |
| + fi |
| + RESULT="" |
| + |
| + if [ $ADDINFO -eq 1 ]; then |
| + if [ -z "$3" ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO"'" ; fi |
| + echo "#"$DELIMITER$DEFAULT_INFO >>$DICT |
| + else |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi |
| + echo "#"$DELIMITER$3 >>$DICT |
| + fi |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + exit $? |
| + fi |
| + |
| + if [ $INFO -eq 1 ]; then |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo "Obtaining information..." |
| + echo |
| + fi |
| + grep "^#$DELIMITER" "$DICT" | sed 's/^#'$DELIMITER'//' |
| + RESULT=`grep -e "^#$DELIMITER" "$DICT"` |
| + if [ -z "$RESULT" ]; then echo $CH_SOUND$DICT": No information available" ; fi |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + exit $ESUCCESS |
| + fi |
| + |
| + if [ $ADD -eq 1 ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"` |
| + if [ -z "$RESULT" ]; then |
| + echo $DICT": Adding expression: '"$1"'" |
| + echo $DICT": Adding translation: '"$4"'" |
| + if [ -n "$4" ]; then |
| + echo $1$DELIMITER$4 >>$DICT |
| + else |
| + if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi |
| + fi |
| + SORT=1 |
| + else |
| + translate "$1" |
| + echo $CH_SOUND$DICT": Expression already contained: '"$1"':"$RESULT |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + exit $EDICT_EXPR_CONTAINED |
| + fi |
| + fi |
| + |
| + if [ $OVERWRITE -eq 1 ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + echo $DICT": Replacing expression: '"$1"'" |
| + echo $DICT": Replacing translation: '"$4"'" |
| + TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX` |
| + if [ $? -ne 0 ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi |
| + exit EDICT_TEMP_ERROR |
| + else |
| + if [ -n "$4" ]; then |
| + grep -iv -e "^$1$DELIMITER" "$DICT" &>$TMPFILE |
| + if [ $? -eq 0 ]; then echo $1$DELIMITER$4 >>$TMPFILE ; fi |
| + if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi |
| + if [ $? -ne 0 ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Unable to replace dictionary file: '"$DICT"'" ; fi |
| + exit EDICT_REPLACE_ERROR |
| + else |
| + SORT=1 |
| + fi |
| + else |
| + if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi |
| + fi |
| + fi |
| + fi |
| + |
| + if [ $DELETE -eq 1 ]; then |
| + if [ $DICTIONARY -eq 0 ]; then |
| + # delete entry |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Removing expression: "$1 ; fi |
| + RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"` |
| + if [ -z "$RESULT" ]; then |
| + if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Expression not contained in dictionary: '"$1"'" ; fi |
| + exit $EDICT_DELETE_EXPR_NOT_FOUND |
| + fi |
| + TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX` |
| + if [ $? -ne 0 ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi |
| + exit EDICT_TEMP_ERROR |
| + else |
| + grep -iv -e "$1$DELIMITER" "$DICT" &>$TMPFILE |
| + if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi |
| + if [ $? -ne 0 ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to modify dictionary (cannot replace file)" ; fi |
| + exit EDICT_REPLACE_ERROR |
| + else |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Modification successful" ; fi |
| + exit $ESUCCESS |
| + fi |
| + fi |
| + else |
| + # delete dictionary |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo $APPFILENAME": Deleting dictionary: '"$DICT"'" |
| + echo $APPFILENAME": Executing: rm '"$DICT"' &>/dev/null" |
| + fi |
| + rm $DICT &>/dev/null |
| + if [ $? -ne 0 ]; then |
| + if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to remove dictionary" ; fi |
| + exit $EDICT_REMOVE |
| + else |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo $DICT": Dictionary successfully removed" |
| + echo |
| + fi |
| + exit $ESUCCESS |
| + fi |
| + fi |
| + fi |
| + |
| + if [ $SORT -eq 1 ]; then |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo "Sorting vocabulary: '"$DICT"'" |
| + echo "Executing: sort -d -f -o "$DICT" -t "$DELIMITER" "$DICT |
| + fi |
| + RESULT=`sort -d -f -o "$DICT" -t $DELIMITER "$DICT"` |
| + SORT_EXIT=$? |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo "sort returned exit code "$SORT_EXIT |
| + if [ $SORT_EXIT -eq 0 ]; then |
| + echo "Sorting successful: '"$DICT"'" |
| + else |
| + echo "Sorting failed: '"$DICT"'" |
| + fi |
| + echo |
| + fi |
| + exit $SORT_EXIT |
| + fi |
| + |
| + if [ $REPAIR -eq 1 ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Repairing dictionary" ; fi |
| + TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX` |
| + if [ $? -ne 0 ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi |
| + exit EDICT_TEMP_ERROR |
| + else |
| + grep -e "^#$DELIMITER" "$DICT" &>$TMPFILE |
| + grep -e ".$DELIMITER." "$DICT" >>$TMPFILE |
| + if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi |
| + if [ $? -ne 0 ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to repair dictionary (cannot replace file)" ; fi |
| + exit EDICT_REPLACE_ERROR |
| + else |
| + $DICT": Repair successful" |
| + fi |
| + fi |
| + fi |
| + |
| + TRANSL="" |
| + REVERSE_TRANSL="" |
| + REVERSE_TRANSL_CAPT="T" |
| + REVERSE_TRANSL_ON=" (reverse)" |
| + REVERSE_TRANSL_CAPT_ON="Reverse t" |
| + if [ $REVERSE -eq 1 ]; then |
| + REVERSE_TRANSL=$REVERSE_TRANSL_ON |
| + REVERSE_TRANSL_CAPT=$REVERSE_TRANSL_CAPT_ON |
| + fi |
| + if [ $PHRASE -eq 1 ] ; then |
| + if [ $VERBOSE -eq 1 ]; then echo "Looking up phrase"$REVERSE_TRANSL": '"$1"'" ; fi |
| + if [ $ZERO -eq 0 ]; then |
| + TRANSL="$1" ; if [ $BRACKETS -eq 1 ]; then TRANSL="["$TRANSL"]" ; fi |
| + fi |
| + translate "$1" |
| + if [ -n "$RESULT" ]; then |
| + TRANSL=$RESULT |
| + if [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSL"'" ; fi |
| + else |
| + if [ $VERBOSE -eq 1 ]; then |
| + if [ $ZERO -eq 1 ]; then |
| + echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): '"$1"'" |
| + else |
| + if [ $BRACKETS -eq 1 ]; then |
| + echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (enclosing phrase in brackets): '"$1"'" |
| + else |
| + echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): '"$1"'" |
| + fi |
| + fi |
| + fi |
| + fi |
| + else |
| + for word in $1; do |
| + if [ $ZERO -eq 0 ]; then TRANSLWORD="$word" ; else TRANSLWORD="" ; fi |
| + if [ $VERBOSE -eq 1 ]; then echo "Looking up word"$REVERSE_TRANSL": "$word ; fi |
| + translate "$word" |
| + if [ -n "$RESULT" ]; then |
| + TRANSLWORD=$RESULT |
| + if [ -n "$RESULT" ] && [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSLWORD"'" ; fi |
| + else |
| + if [ $ZERO -eq 0 ] && [ $BRACKETS -eq 1 ]; then TRANSLWORD="["$TRANSLWORD"]" ; fi |
| + if [ $VERBOSE -eq 1 ]; then |
| + if [ $ZERO -eq 1 ]; then |
| + echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): "$word |
| + else |
| + if [ $BRACKETS -eq 1 ]; then |
| + echo $REVERSE_TRANSL_CAPT"ranslation failed (enclosing word in brackets): "$word |
| + else |
| + echo $REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): "$word |
| + fi |
| + fi |
| + fi |
| + fi |
| + TRANSL=$TRANSL" "$TRANSLWORD |
| + done |
| + fi |
| + if [ $VERBOSE -eq 1 ]; then echo "Overall translation:" ; fi |
| + if [ -n "$TRANSL" ]; then echo $TRANSL ; fi |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + else |
| + # send errmsg to stderr |
| + if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then |
| + if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND"$APPFILENAME: Unable to locate dictionary root: '"$TRANSLATE_DIR"'" 1>&2 ; fi |
| + else |
| + if [ $INFO -eq 0 ] && [ $ADD -eq 1 ] || [ $OVERWRITE -eq 1 ]; then |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo |
| + echo $DICT": Creating dictionary" |
| + fi |
| + if [ -n "$4" ]; then |
| + if [ -z "$5" ]; then |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date`"'" ; fi |
| + echo "#"$DELIMITER$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date` &>$DICT |
| + else |
| + if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$5"'" ; fi |
| + echo "#"$DELIMITER$5 &>$DICT |
| + fi |
| + if [ $? -eq 0 ]; then |
| + if [ $VERBOSE -eq 1 ]; then |
| + echo $DICT": Adding expression: '"$1"'" |
| + echo $DICT": Adding translation: '"$4"'" |
| + fi |
| + echo $1$DELIMITER$4 >>$DICT |
| + else |
| + if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": Unable to create dictionary file: '"$DICT"'" ; fi |
| + exit EDICT_CREATE_ERROR |
| + fi |
| + else |
| + if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi |
| + fi |
| + else |
| + if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": Unable to locate dictionary file: '"$DICT"' (please double-quote phrases)" 1>&2 ; fi |
| + fi |
| + fi |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then |
| + exit $EDICT_DIR_NOT_FOUND |
| + else |
| + exit $EDICT_NOT_FOUND |
| + fi |
| + fi |
| + else |
| + if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then |
| + # send errmsg to stderr |
| + echo $CH_SOUND$APPFILENAME": No dictionary file given" 1>&2 |
| + fi |
| + if [ $VERBOSE -eq 1 ]; then echo ; fi |
| + exit $ENO_DICT |
| + fi |
| +else |
| + help |
| +fi |
| /eazytrans/translate |
|---|
| Property changes: |
| Added: svn:executable |
| ## -0,0 +1 ## |
| +* |
| \ No newline at end of property |