Subversion Repositories LCARS

Compare Revisions

Last modification

Ignore whitespace Rev 14 → Rev 15

/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: tools/eazytrans/uninstall.sh
===================================================================
--- tools/eazytrans/uninstall.sh (nonexistent)
+++ tools/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
/tools/eazytrans/uninstall.sh
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: tools/eazytrans/option-parser.sh
===================================================================
--- tools/eazytrans/option-parser.sh (nonexistent)
+++ tools/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
/tools/eazytrans/option-parser.sh
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: tools/eazytrans/README
===================================================================
--- tools/eazytrans/README (nonexistent)
+++ tools/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: tools/eazytrans/dummy.dict
===================================================================
--- tools/eazytrans/dummy.dict (nonexistent)
+++ tools/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: tools/eazytrans/translate
===================================================================
--- tools/eazytrans/translate (nonexistent)
+++ tools/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
/tools/eazytrans/translate
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property