Subversion Repositories LCARS

Rev

Rev 15 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 15 Rev 16
1
#!/bin/bash
1
#!/bin/bash
2
2
3
APPNAME="EazyTranslator"
3
APPNAME="EazyTranslator"
4
APPVER="0.97a"
4
APPVER="0.97a"
5
APPFILENAME=`basename $0`
5
APPFILENAME=`basename $0`
6
APPFILEDIR=`echo $0 | sed 's/'$APPFILENAME$'//'`
6
APPFILEDIR=`echo $0 | sed 's/'$APPFILENAME$'//'`
7
7
8
# dictionary file
8
# dictionary file
9
DICT="$TRANSLATE_DIR"
9
DICT="$TRANSLATE_DIR"
10
if [ -z "$DICT" ]; then DICT=$APPFILEDIR ; fi
10
if [ -z "$DICT" ]; then DICT=$APPFILEDIR ; fi
11
11
12
# delimiter name (for help page only) and character (string) for separating original expression
12
# delimiter name (for help page only) and character (string) for separating original expression
13
# and translation in dictionary file
13
# and translation in dictionary file
14
DELIMITER_NAME="colon"
14
DELIMITER_NAME="colon"
15
DELIMITER=":"
15
DELIMITER=":"
16
16
17
# all help on a single page
17
# all help on a single page
18
SINGLE_PAGE=0
18
SINGLE_PAGE=0
19
19
20
# bell character
20
# bell character
21
CH_SOUND=""
21
CH_SOUND=""
22
CH_SOUND_ON=$'\a'
22
CH_SOUND_ON=$'\a'
23
23
24
RESULT=""
24
RESULT=""
25
25
26
function title {
26
function title {
27
  if [ $SINGLE_PAGE -eq 0 ]; then clear ; fi
27
  if [ $SINGLE_PAGE -eq 0 ]; then clear ; fi
28
  echo
28
  echo
29
  echo $APPNAME" "$APPVER" - Stream editor to use and to manage dictionary files"
29
  echo $APPNAME" "$APPVER" - Stream editor to use and to manage dictionary files"
30
  echo "Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH"
30
  echo "Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH"
31
  echo
31
  echo
32
}
32
}
33
33
34
function copyright {
34
function copyright {
35
  echo "Copyright (C) 2001  Thomas Lahn (webmaster@PointedEars.de)"
35
  echo "Copyright (C) 2001  Thomas Lahn (webmaster@PointedEars.de)"
36
  echo "Be sure to have 'easyTrans' or similar in mail subject line for fast response."
36
  echo "Be sure to have 'easyTrans' or similar in mail subject line for fast response."
37
  echo
37
  echo
38
}
38
}
39
39
40
function pause {
40
function pause {
41
  if [ "$1" == "c" ]; then
41
  if [ "$1" == "c" ]; then
42
    echo "Hit RETURN to continue..."
42
    echo "Hit RETURN to continue..."
43
  else
43
  else
44
    echo "Hit RETURN for the next page"
44
    echo "Hit RETURN for the next page"
45
  fi
45
  fi
46
  read
46
  read
47
}
47
}
48
48
49
function copying {
49
function copying {
50
  title
50
  title
51
  copyright
51
  copyright
52
  echo "This program is free software; you can redistribute it and/or modify"
52
  echo "This program is free software; you can redistribute it and/or modify"
53
  echo "it under the terms of the GNU General Public License as published by"
53
  echo "it under the terms of the GNU General Public License as published by"
54
  echo "the Free Software Foundation; either version 2 of the License, or"
54
  echo "the Free Software Foundation; either version 2 of the License, or"
55
  echo "(at your option) any later version."
55
  echo "(at your option) any later version."
56
  echo
56
  echo
57
  echo "This program is distributed in the hope that it will be useful,"
57
  echo "This program is distributed in the hope that it will be useful,"
58
  echo "but WITHOUT ANY WARRANTY; without even the implied warranty of"
58
  echo "but WITHOUT ANY WARRANTY; without even the implied warranty of"
59
  echo "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the"
59
  echo "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the"
60
  echo "GNU General Public License for more details."
60
  echo "GNU General Public License for more details."
61
  echo
61
  echo
62
  echo "You should have received a copy of the GNU General Public License"
62
  echo "You should have received a copy of the GNU General Public License"
63
  echo "along with this program (COPYING file); if not, write to the"
63
  echo "along with this program (COPYING file); if not, write to the"
64
  echo "Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."
64
  echo "Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."
65
  echo
65
  echo
66
}
66
}
67
67
68
function cmdHelp {
68
function cmdHelp {
69
  title
69
  title
70
  echo $APPFILENAME" EXPRESSION DICTIONARY [OPTIONS]"
70
  echo $APPFILENAME" EXPRESSION DICTIONARY [OPTIONS]"
71
  echo
71
  echo
72
  echo "Tries to translate EXPRESSION looking up DICTIONARY and writes the result"
72
  echo "Tries to translate EXPRESSION looking up DICTIONARY and writes the result"
73
  echo "to standard output (stdout) in a single line followed by a newline (\n)."
73
  echo "to standard output (stdout) in a single line followed by a newline (\n)."
74
  echo
74
  echo
75
  echo "Environment:"
75
  echo "Environment:"
76
  echo
76
  echo
77
  echo "TRANSLATE_DIR     Dictionary folder root (absolute path '/')"
77
  echo "TRANSLATE_DIR     Dictionary folder root (absolute path '/')"
78
if [ -n "$TRANSLATE_DIR" ]; then
78
if [ -n "$TRANSLATE_DIR" ]; then
79
  local INVALID_PATH=" -- INVALID PATH!"
79
  local INVALID_PATH=" -- INVALID PATH!"
80
  local INVALID_FORMAT=" -- INVALID FORMAT!"
80
  local INVALID_FORMAT=" -- INVALID FORMAT!"
81
  # : AutoCorrect performed!
81
  # : AutoCorrect performed!
82
  local INVALID_MSG=""
82
  local INVALID_MSG=""
83
  if [ ! -e $TRANSLATE_DIR ]; then
83
  if [ ! -e $TRANSLATE_DIR ]; then
84
    INVALID_MSG=$INVALID_PATH
84
    INVALID_MSG=$INVALID_PATH
85
  else
85
  else
86
    local GREPRES=`echo $TRANSLATE_DIR | grep -e "\/$"`
86
    local GREPRES=`echo $TRANSLATE_DIR | grep -e "\/$"`
87
    if [ -z "$GREPRES" ]; then INVALID_MSG=$INVALID_FORMAT ; fi
87
    if [ -z "$GREPRES" ]; then INVALID_MSG=$INVALID_FORMAT ; fi
88
  fi
88
  fi
89
  echo "                  (currently '"$TRANSLATE_DIR"'"$INVALID_MSG")"
89
  echo "                  (currently '"$TRANSLATE_DIR"'"$INVALID_MSG")"
90
  #if [ "$INVALID_MSG" == "$INVALID_FORMAT" ]; then
90
  #if [ "$INVALID_MSG" == "$INVALID_FORMAT" ]; then
91
    #export TRANSLATE_DIR=$TRANSLATE_DIR"/"
91
    #export TRANSLATE_DIR=$TRANSLATE_DIR"/"
92
    #set -a
92
    #set -a
93
  #fi
93
  #fi
94
fi
94
fi
95
  echo "                  If undefined, this is the program directory"
95
  echo "                  If undefined, this is the program directory"
96
  echo "                  (currently '"$APPFILEDIR"')."
96
  echo "                  (currently '"$APPFILEDIR"')."
97
  echo "TRANSLATE_OPTIONS Default options to overwrite command-line options"
97
  echo "TRANSLATE_OPTIONS Default options to overwrite command-line options"
98
if [ -n "$TRANSLATE_OPTIONS" ]; then
98
if [ -n "$TRANSLATE_OPTIONS" ]; then
99
  echo "                  (currently '"$TRANSLATE_OPTIONS"')"
99
  echo "                  (currently '"$TRANSLATE_OPTIONS"')"
100
fi
100
fi
101
  echo
101
  echo
102
  echo "Arguments:"
102
  echo "Arguments:"
103
  echo
103
  echo
104
  echo "EXPRESSION        Word or (double-quoted) phrase to be translated"
104
  echo "EXPRESSION        Word or (double-quoted) phrase to be translated"
105
  echo "DICTIONARY        Path of dictionary file relative to TRANSLATE_DIR"
105
  echo "DICTIONARY        Path of dictionary file relative to TRANSLATE_DIR"
106
  echo
106
  echo
107
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
107
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
108
  echo "Translation OPTIONS:"
108
  echo "Translation OPTIONS:"
109
  echo "  -b, --brackets  If not in DICTIONARY, writes given WORD or EXPRESSION"
109
  echo "  -b, --brackets  If not in DICTIONARY, writes given WORD or EXPRESSION"
110
  echo "                  as [WORD] or [EXPRESSION]."
110
  echo "                  as [WORD] or [EXPRESSION]."
111
  echo "  -m, --messages  Return error messages instead of null-strings."
111
  echo "  -m, --messages  Return error messages instead of null-strings."
112
  echo "  -p, --phrase    Translate EXPRESSION as entire phrase. If not given,"
112
  echo "  -p, --phrase    Translate EXPRESSION as entire phrase. If not given,"
113
  echo "                  each WORD of EXPRESSION is translated seperately."
113
  echo "                  each WORD of EXPRESSION is translated seperately."
114
  echo "  -r, --reverse   Perform reverse translation. Recommended only if"
114
  echo "  -r, --reverse   Perform reverse translation. Recommended only if"
115
  echo "                  no appropriate dictionary file for vice-versa translation is"
115
  echo "                  no appropriate dictionary file for vice-versa translation is"
116
  echo "                  available and -p is also used."
116
  echo "                  available and -p is also used."
117
  echo "  -s, --sound     Beep on fatal errors."
117
  echo "  -s, --sound     Beep on fatal errors."
118
  echo "  -v, --verbose   Display flow of operation. Includes -m behavior."
118
  echo "  -v, --verbose   Display flow of operation. Includes -m behavior."
119
  echo "  -z, --zero      Return not translatable tokens as null-strings."
119
  echo "  -z, --zero      Return not translatable tokens as null-strings."
120
  echo "                  Overwrites -b."
120
  echo "                  Overwrites -b."
121
  echo
121
  echo
122
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
122
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
123
  echo $APPFILENAME" EXPRESSION DICTIONARY COMMAND TRANSLATION [INFO] [OPTIONS]"
123
  echo $APPFILENAME" EXPRESSION DICTIONARY COMMAND TRANSLATION [INFO] [OPTIONS]"
124
  echo $APPFILENAME" COMMAND DICTIONARY [INFO] [OPTIONS]"
124
  echo $APPFILENAME" COMMAND DICTIONARY [INFO] [OPTIONS]"
125
  echo
125
  echo
126
  echo "Dictionary file COMMANDs:"
126
  echo "Dictionary file COMMANDs:"
127
  echo "  -a,  --add      If not in DICTIONARY, add EXPRESSION with TRANSLATION"
127
  echo "  -a,  --add      If not in DICTIONARY, add EXPRESSION with TRANSLATION"
128
  echo "                  to DICTIONARY and write TRANSLATION."
128
  echo "                  to DICTIONARY and write TRANSLATION."
129
  echo "                  If DICTIONARY not exists, create the file with INFO"
129
  echo "                  If DICTIONARY not exists, create the file with INFO"
130
  echo "                  and add the entry; if INFO is a null-string,"
130
  echo "                  and add the entry; if INFO is a null-string,"
131
  echo "                  default INFO is added, containing program version,"
131
  echo "                  default INFO is added, containing program version,"
132
  echo "                  user name and timestamp. Requires 'sort'."
132
  echo "                  user name and timestamp. Requires 'sort'."
133
  echo "  -ai, --addinfo  Add information data INFO to DICTIONARY."
133
  echo "  -ai, --addinfo  Add information data INFO to DICTIONARY."
134
  echo "                  Must be used as first argument."
134
  echo "                  Must be used as first argument."
135
  echo "  -c,  --create   Create new DICTIONARY with INFO (see -a)."
135
  echo "  -c,  --create   Create new DICTIONARY with INFO (see -a)."
136
  echo "                  Existing files are replaced. Must be used as first argument."
136
  echo "                  Existing files are replaced. Must be used as first argument."
137
  echo "  -d,  --delete   If used with EXPRESSION and DICTIONARY, remove EXPRESSION"
137
  echo "  -d,  --delete   If used with EXPRESSION and DICTIONARY, remove EXPRESSION"
138
  echo "                  from DICTIONARY instead of translating."
138
  echo "                  from DICTIONARY instead of translating."
139
  echo "                  If used as first argument, delete DICTIONARY."
139
  echo "                  If used as first argument, delete DICTIONARY."
140
  echo "  -i,  --info     Display information about DICTIONARY."
140
  echo "  -i,  --info     Display information about DICTIONARY."
141
  echo "                  Must be used as first argument."
141
  echo "                  Must be used as first argument."
142
  echo
142
  echo
143
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
143
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
144
  echo "  -o, --overwrite Like -a but overwrite a contained translation of"
144
  echo "  -o, --overwrite Like -a but overwrite a contained translation of"
145
  echo "                  EXPRESSION with TRANSLATION without question."
145
  echo "                  EXPRESSION with TRANSLATION without question."
146
  echo "                  Additionally requires 'mktemp'."
146
  echo "                  Additionally requires 'mktemp'."
147
  echo "  -R, --repair    Repair DICTIONARY instead of translating. Requires 'mktemp'."
147
  echo "  -R, --repair    Repair DICTIONARY instead of translating. Requires 'mktemp'."
148
  echo "                  Info data is be kept but invalid entries are removed."
148
  echo "                  Info data is be kept but invalid entries are removed."
149
  echo "                  USE WITH CAUTION!"
149
  echo "                  USE WITH CAUTION!"
150
  echo "  -s, --sort      Sort DICTIONARY instead of translating. Requires 'sort'."
150
  echo "  -s, --sort      Sort DICTIONARY instead of translating. Requires 'sort'."
151
  echo "                  Includes --sound when used with -v."
151
  echo "                  Includes --sound when used with -v."
152
  echo "                  Must be used as first argument."
152
  echo "                  Must be used as first argument."
153
  echo
153
  echo
154
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
154
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
155
  echo $APPFILENAME" OPTION [OPTION]"
155
  echo $APPFILENAME" OPTION [OPTION]"
156
  echo
156
  echo
157
  echo "Help page OPTIONs:"
157
  echo "Help page OPTIONs:"
158
  echo "  --1             Display help on one page (without 'clear' and user input)."
158
  echo "  --1             Display help on one page (without 'clear' and user input)."
159
  echo "                  Useful with redirection "
159
  echo "                  Useful with redirection "
160
  echo "                  (try '"$APPFILENAME" --1 --? > translate.doc.txt')."
160
  echo "                  (try '"$APPFILENAME" --1 --? > translate.doc.txt')."
161
  echo "                  Must be given before all other help page options."
161
  echo "                  Must be given before all other help page options."
162
  echo "  --a, --about    Display information about the program."
162
  echo "  --a, --about    Display information about the program."
163
  echo "  --c, --cmd      Display this help page."
163
  echo "  --c, --cmd      Display this help page."
164
  echo "  --d, --dict     Display help about dictionary files."
164
  echo "  --d, --dict     Display help about dictionary files."
165
  echo "  --dev, --emp    Display special information for developers and employers."
165
  echo "  --dev, --emp    Display special information for developers and employers."
166
  echo "  --x, --example  Display example."
166
  echo "  --x, --example  Display example."
167
  echo "  --?, --help     Display all help pages."
167
  echo "  --?, --help     Display all help pages."
168
  echo
168
  echo
169
}
169
}
170
170
171
function example {
171
function example {
172
  title
172
  title
173
  echo "EXAMPLE: If you would like to translate the English words 'a few' into German,"
173
  echo "EXAMPLE: If you would like to translate the English words 'a few' into German,"
174
  echo
174
  echo
175
  echo "  "$APPFILENAME" ''a few'' en-de"
175
  echo "  "$APPFILENAME" ''a few'' en-de"
176
  echo
176
  echo
177
  echo "should write the German words"
177
  echo "should write the German words"
178
  echo
178
  echo
179
  echo "  ein(e) wenig(e)\n"
179
  echo "  ein(e) wenig(e)\n"
180
  echo
180
  echo
181
  echo "(without indent) to stdout if the echo dictionary file 'en-de' contains"
181
  echo "(without indent) to stdout if the echo dictionary file 'en-de' contains"
182
  echo "a correct entry for it (see next page). You may also translate it as"
182
  echo "a correct entry for it (see next page). You may also translate it as"
183
  echo "entire phrase (which seems to make more sense here):"
183
  echo "entire phrase (which seems to make more sense here):"
184
  echo
184
  echo
185
  echo "  "$APPFILENAME" ''a few'' en-de -p"
185
  echo "  "$APPFILENAME" ''a few'' en-de -p"
186
  echo
186
  echo
187
  echo "should instead write the German word 'einige\n'"
187
  echo "should instead write the German word 'einige\n'"
188
  echo "(replace '' in input with the double-quote character)."
188
  echo "(replace '' in input with the double-quote character)."
189
  echo
189
  echo
190
}
190
}
191
191
192
function dictHelp {
192
function dictHelp {
193
  title
193
  title
194
  echo "DICTIONARY FILES:"
194
  echo "DICTIONARY FILES:"
195
  echo "You may create/improve dictionary files to be used with "$APPNAME
195
  echo "You may create/improve dictionary files to be used with "$APPNAME
196
  echo "of your own. Translation data must match the following expression:"
196
  echo "of your own. Translation data must match the following expression:"
197
  echo
197
  echo
198
  echo "#"$DELIMITER"File description displayed when option -i is used\n[#"$DELIMITER"File description\n]"
198
  echo "#"$DELIMITER"File description displayed when option -i is used\n[#"$DELIMITER"File description\n]"
199
  echo "[Expression"$DELIMITER"translation\n[Next expression"$DELIMITER"next translation\n]]"
199
  echo "[Expression"$DELIMITER"translation\n[Next expression"$DELIMITER"next translation\n]]"
200
  echo "Last expression"$DELIMITER"last translation\z"
200
  echo "Last expression"$DELIMITER"last translation\z"
201
  echo
201
  echo
202
  echo "Parts enclosed in rectangle brackets are optional. The "$DELIMITER_NAME" ("$DELIMITER") is to be used"
202
  echo "Parts enclosed in rectangle brackets are optional. The "$DELIMITER_NAME" ("$DELIMITER") is to be used"
203
  echo "as delimiter character between original and translated expression only."
203
  echo "as delimiter character between original and translated expression only."
204
  echo "Dictionary file names should contain common language identifiers separated"
204
  echo "Dictionary file names should contain common language identifiers separated"
205
  echo "by a dash (such as 'en-de.dic' for an English-German dictionary file)."
205
  echo "by a dash (such as 'en-de.dic' for an English-German dictionary file)."
206
  echo
206
  echo
207
  echo "Program updates and dictionaries can be obtained from"
207
  echo "Program updates and dictionaries can be obtained from"
208
  echo "'http://pointedears.de/dev/unix/translate/'."
208
  echo "'http://pointedears.de/dev/unix/translate/'."
209
  echo "Thank you for using a program by PointedEars."
209
  echo "Thank you for using a program by PointedEars."
210
  echo
210
  echo
211
}
211
}
212
212
213
function devInfo {
213
function devInfo {
214
  title
214
  title
215
  copyright
215
  copyright
216
  echo "INFORMATION FOR DEVELOPERS (KNOWN ISSUES)..."
216
  echo "INFORMATION FOR DEVELOPERS (KNOWN ISSUES)..."
217
  echo
217
  echo
218
  echo "- Sorting the dictionary unfortunately also sorts its info data by now."
218
  echo "- Sorting the dictionary unfortunately also sorts its info data by now."
219
  echo
219
  echo
220
  echo "...AND FOR EMPLOYERS:"
220
  echo "...AND FOR EMPLOYERS:"
221
  echo
221
  echo
222
  echo "BTW, if you have an idea for improving EasyTranslator or for another (field of)"
222
  echo "BTW, if you have an idea for improving EasyTranslator or for another (field of)"
223
  echo "application you want me to develop for you (BASIC, DOS batch, Windows INF,"
223
  echo "application you want me to develop for you (BASIC, DOS batch, Windows INF,"
224
  echo "Visual Basic, bash, Pascal, Delphi, C, HTML/JavaScript, and I am still learning"
224
  echo "Visual Basic, bash, Pascal, Delphi, C, HTML/JavaScript, and I am still learning"
225
  echo "other languages) feel free to mail me, too. THNX!    -- PointedEars, 2001-03-28"
225
  echo "other languages) feel free to mail me, too. THNX!    -- PointedEars, 2001-03-28"
226
  echo
226
  echo
227
}
227
}
228
228
229
function help {
229
function help {
230
  copying
230
  copying
231
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
231
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
232
  cmdHelp
232
  cmdHelp
233
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
233
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
234
  example
234
  example
235
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
235
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
236
  dictHelp
236
  dictHelp
237
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
237
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
238
  devInfo
238
  devInfo
239
}
239
}
240
240
241
function translateReverse {
241
function translateReverse {
242
  local EXPR="$1"
242
  local EXPR="$1"
243
  if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -i -e '"$DELIMITER$EXPR"$' '"$DICT"'" ; fi
243
  if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -i -e '"$DELIMITER$EXPR"$' '"$DICT"'" ; fi
244
  RESULT=`grep -i -e "$DELIMITER$EXPR$" "$DICT"`
244
  RESULT=`grep -i -e "$DELIMITER$EXPR$" "$DICT"`
245
  if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi
245
  if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi
246
  if [ -n "$RESULT" ]; then
246
  if [ -n "$RESULT" ]; then
247
    if [ $VERBOSE -eq 1 ]; then
247
    if [ $VERBOSE -eq 1 ]; then
248
      echo "Reading expression from recordset (with sed requires only 1 step! :o)" ;
248
      echo "Reading expression from recordset (with sed requires only 1 step! :o)" ;
249
      echo "Executing: echo $RESULT | sed 's/$DELIMITER[ ]*[^$DELIMITER]*//'"
249
      echo "Executing: echo $RESULT | sed 's/$DELIMITER[ ]*[^$DELIMITER]*//'"
250
    fi
250
    fi
251
    RESULT=`echo $RESULT | sed 's/'$DELIMITER'[ ]*[^'$DELIMITER']*//'`
251
    RESULT=`echo $RESULT | sed 's/'$DELIMITER'[ ]*[^'$DELIMITER']*//'`
252
    if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi
252
    if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi
253
  fi
253
  fi
254
254
255
  # Should return only characters before the delimiter until BOL (expression)
255
  # Should return only characters before the delimiter until BOL (expression)
256
}
256
}
257
257
258
function translate {
258
function translate {
259
  local EXPR="$1"
259
  local EXPR="$1"
260
  if [ $REVERSE -eq 1 ]; then translateReverse "$1" ; return ; fi
260
  if [ $REVERSE -eq 1 ]; then translateReverse "$1" ; return ; fi
261
  if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -i -e '^"$EXPR$DELIMITER"' '"$DICT"'" ; fi
261
  if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -i -e '^"$EXPR$DELIMITER"' '"$DICT"'" ; fi
262
  RESULT=`grep -i -e "^$EXPR$DELIMITER" "$DICT"`
262
  RESULT=`grep -i -e "^$EXPR$DELIMITER" "$DICT"`
263
  if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi
263
  if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi
264
  if [ -n "$RESULT" ]; then
264
  if [ -n "$RESULT" ]; then
265
    if [ $VERBOSE -eq 1 ]; then
265
    if [ $VERBOSE -eq 1 ]; then
266
      echo "Reading translation from recordset (with sed requires only 1 step! :o)" ;
266
      echo "Reading translation from recordset (with sed requires only 1 step! :o)" ;
267
      echo "Executing: echo $RESULT | sed 's/[^$DELIMITER]*$DELIMITER[ ]*//'"
267
      echo "Executing: echo $RESULT | sed 's/[^$DELIMITER]*$DELIMITER[ ]*//'"
268
    fi
268
    fi
269
    RESULT=`echo $RESULT | sed 's/[^'$DELIMITER']*'$DELIMITER'[ ]*//'`
269
    RESULT=`echo $RESULT | sed 's/[^'$DELIMITER']*'$DELIMITER'[ ]*//'`
270
    if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi
270
    if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi
271
  fi
271
  fi
272
272
273
  # Should return only characters after the separation character until EOL
273
  # Should return only characters after the separation character until EOL
274
  # (translation)
274
  # (translation)
275
}
275
}
276
276
277
# exit codes
277
# exit codes
278
ESUCCESS=0
278
ESUCCESS=0
279
ENO_DICT=1
279
ENO_DICT=1
280
EDICT_DIR_NOT_FOUND=2
280
EDICT_DIR_NOT_FOUND=2
281
EDICT_NOT_FOUND=3
281
EDICT_NOT_FOUND=3
282
EDICT_WRONG_FORMAT=4
282
EDICT_WRONG_FORMAT=4
283
EDICT_EXPR_CONTAINED=5
283
EDICT_EXPR_CONTAINED=5
284
EDICT_TEMP_ERROR=6
284
EDICT_TEMP_ERROR=6
285
EDICT_CREATE_ERROR=7
285
EDICT_CREATE_ERROR=7
286
EDICT_DELETE_EXPR_NOT_FOUND=8
286
EDICT_DELETE_EXPR_NOT_FOUND=8
287
EDICT_REMOVE=9
287
EDICT_REMOVE=9
288
288
289
# argument flags
289
# argument flags
290
DICTIONARY=0 # if 1, -d refers to the dictionary file instead of an entry
290
DICTIONARY=0 # if 1, -d refers to the dictionary file instead of an entry
291
291
292
# option flags - may be replaced by declare -i FLAG
292
# option flags - may be replaced by declare -i FLAG
293
ADD=0
293
ADD=0
294
ADDINFO=0
294
ADDINFO=0
295
BRACKETS=0
295
BRACKETS=0
296
CREATE=0
296
CREATE=0
297
DELETE=0
297
DELETE=0
298
INFO=0
298
INFO=0
299
MESSAGES=0
299
MESSAGES=0
300
OVERWRITE=0
300
OVERWRITE=0
301
PHRASE=0
301
PHRASE=0
302
REPAIR=0
302
REPAIR=0
303
REVERSE=0
303
REVERSE=0
304
SORT=0
304
SORT=0
305
SOUND=0
305
SOUND=0
306
VERBOSE=0
306
VERBOSE=0
307
ZERO=0
307
ZERO=0
308
308
309
if [ -n "$1" ]; then
309
if [ -n "$1" ]; then
310
  # retrieve arguments and use default settings from environment variable
310
  # retrieve arguments and use default settings from environment variable
311
  ARGUMENTS=$* ; if [ -n "$TRANSLATE_OPTIONS" ]; then ARGUMENTS=$ARGUMENTS" "$TRANSLATE_OPTIONS ; fi
311
  ARGUMENTS=$* ; if [ -n "$TRANSLATE_OPTIONS" ]; then ARGUMENTS=$ARGUMENTS" "$TRANSLATE_OPTIONS ; fi
312
  # check options
312
  # check options
313
  for argument in $ARGUMENTS; do
313
  for argument in $ARGUMENTS; do
314
    case "$argument" in
314
    case "$argument" in
315
      "-b" | "--brackets") BRACKETS=1;;
315
      "-b" | "--brackets") BRACKETS=1;;
316
      "-m" | "--messages") MESSAGES=1;;
316
      "-m" | "--messages") MESSAGES=1;;
317
      "-p" | "--phrase")   PHRASE=1;;
317
      "-p" | "--phrase")   PHRASE=1;;
318
      "-r" | "--reverse")  REVERSE=1;;
318
      "-r" | "--reverse")  REVERSE=1;;
319
      "-s" | "--sound")    SOUND=1;;
319
      "-s" | "--sound")    SOUND=1;;
320
      "-v" | "--verbose")  VERBOSE=1 ; title ; copyright;;
320
      "-v" | "--verbose")  VERBOSE=1 ; title ; copyright;;
321
      "-z" | "--zero")     ZERO=1;;
321
      "-z" | "--zero")     ZERO=1;;
322
      "--a" | "--about")   copying ; exit $ESUCCESS;;
322
      "--a" | "--about")   copying ; exit $ESUCCESS;;
323
      "--c" | "--cmd")     cmdHelp ; exit $ESUCCESS;;
323
      "--c" | "--cmd")     cmdHelp ; exit $ESUCCESS;;
324
      "--d" | "--dict")    dictHelp ; exit $ESUCCESS;;
324
      "--d" | "--dict")    dictHelp ; exit $ESUCCESS;;
325
      "--dev" | "--emp")   devInfo ; exit $ESUCCESS;;
325
      "--dev" | "--emp")   devInfo ; exit $ESUCCESS;;
326
      "--1") SINGLE_PAGE=1;;
326
      "--1") SINGLE_PAGE=1;;
327
      "--x" | "--example") example ; exit $ESUCCESS;;
327
      "--x" | "--example") example ; exit $ESUCCESS;;
328
      "--?" | "--help")    help ; exit $ESUCCESS;;
328
      "--?" | "--help")    help ; exit $ESUCCESS;;
329
    esac
329
    esac
330
  done
330
  done
331
  if [ $SOUND -eq 1 ]; then CH_SOUND=$CH_SOUND_ON ; fi
331
  if [ $SOUND -eq 1 ]; then CH_SOUND=$CH_SOUND_ON ; fi
332
  if [ -n "$2" ]; then
332
  if [ -n "$2" ]; then
333
# concatenate dictionary root and given dictionary file
333
# concatenate dictionary root and given dictionary file
334
    DICT="$DICT$2"
334
    DICT="$DICT$2"
335
# check for dictionary commands
335
# check for dictionary commands
336
    case "$1" in
336
    case "$1" in
337
      "-d" | "--delete") DELETE=1 ; DICTIONARY=1 ;;
337
      "-d" | "--delete") DELETE=1 ; DICTIONARY=1 ;;
338
      "-c" | "--create") CREATE=1;;
338
      "-c" | "--create") CREATE=1;;
339
      "-i" | "--info")   INFO=1;;
339
      "-i" | "--info")   INFO=1;;
340
      "-s" | "--sort")   SORT=1;;
340
      "-s" | "--sort")   SORT=1;;
341
      "-R" | "--repair") REPAIR=1;;
341
      "-R" | "--repair") REPAIR=1;;
342
    esac
342
    esac
343
    case "$3" in
343
    case "$3" in
344
      "-a"  | "--add")       ADD=1;;
344
      "-a"  | "--add")       ADD=1;;
345
      "-ai" | "--addinfo")   ADDINFO=1;;
345
      "-ai" | "--addinfo")   ADDINFO=1;;
346
      "-d"  | "--delete")    DELETE=1;;
346
      "-d"  | "--delete")    DELETE=1;;
347
      "-o"  | "--overwrite") OVERWRITE=1;;
347
      "-o"  | "--overwrite") OVERWRITE=1;;
348
    esac
348
    esac
349
349
350
    if [ $VERBOSE -eq 1 ]; then
350
    if [ $VERBOSE -eq 1 ]; then
351
      if [ -z "$TRANSLATE_DIR" ]; then
351
      if [ -z "$TRANSLATE_DIR" ]; then
352
        echo "Dictionary root (program directory): '"$APPFILEDIR"'"
352
        echo "Dictionary root (program directory): '"$APPFILEDIR"'"
353
      else
353
      else
354
        echo "Dictionary root (TRANSLATE_DIR): '"$TRANSLATE_DIR"'"
354
        echo "Dictionary root (TRANSLATE_DIR): '"$TRANSLATE_DIR"'"
355
      fi
355
      fi
356
      echo "Dictionary file: '"$2"'"
356
      echo "Dictionary file: '"$2"'"
357
      echo "Dictionary file path: '"$DICT"'"
357
      echo "Dictionary file path: '"$DICT"'"
358
    fi
358
    fi
359
359
360
    DEFAULT_INFO=$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date`
360
    DEFAULT_INFO=$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date`
361
361
362
    if [ $CREATE -eq 1 ]; then
362
    if [ $CREATE -eq 1 ]; then
363
      if [ $VERBOSE -eq 1 ]; then
363
      if [ $VERBOSE -eq 1 ]; then
364
        echo $DICT": Creating dictionary"
364
        echo $DICT": Creating dictionary"
365
      fi
365
      fi
366
      if [ -z "$3" ]; then
366
      if [ -z "$3" ]; then
367
        if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO ; fi
367
        if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO ; fi
368
        echo "#"$DELIMITER$EFAULT_INFO &>$DICT
368
        echo "#"$DELIMITER$EFAULT_INFO &>$DICT
369
      else
369
      else
370
        if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi
370
        if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi
371
        echo "#"$DELIMITER$3 &>$DICT
371
        echo "#"$DELIMITER$3 &>$DICT
372
      fi
372
      fi
373
      if [ $VERBOSE -eq 1 ]; then echo ; fi
373
      if [ $VERBOSE -eq 1 ]; then echo ; fi
374
      exit $?
374
      exit $?
375
    fi
375
    fi
376
376
377
    if [ -e "$DICT" ]; then # if dictionary file exists
377
    if [ -e "$DICT" ]; then # if dictionary file exists
378
      # check if dictionary file (contains at least '#$DELIMITER')
378
      # check if dictionary file (contains at least '#$DELIMITER')
379
      if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -e '."$DELIMITER".' '"$DICT"'" ; fi
379
      if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -e '."$DELIMITER".' '"$DICT"'" ; fi
380
      RESULT=`grep -e "#$DELIMITER." "$DICT"`
380
      RESULT=`grep -e "#$DELIMITER." "$DICT"`
381
      if [ -z "$RESULT" ]; then
381
      if [ -z "$RESULT" ]; then
382
        if [ $VERBOSE -eq 1 ]; then echo "grep returned: ''" ; fi
382
        if [ $VERBOSE -eq 1 ]; then echo "grep returned: ''" ; fi
383
        echo $DICT": Not a (valid) dictionary file (type '"$APPFILENAME" --d' for details)."
383
        echo $DICT": Not a (valid) dictionary file (type '"$APPFILENAME" --d' for details)."
384
        if [ $VERBOSE -eq 1 ]; then echo ; fi
384
        if [ $VERBOSE -eq 1 ]; then echo ; fi
385
        exit $EDICT_WRONG_FORMAT
385
        exit $EDICT_WRONG_FORMAT
386
      else
386
      else
387
        if [ $VERBOSE -eq 1 ]; then
387
        if [ $VERBOSE -eq 1 ]; then
388
          echo "grep returned not a null-string: '$DICT' seems to be a dictionary file"
388
          echo "grep returned not a null-string: '$DICT' seems to be a dictionary file"
389
        fi
389
        fi
390
      fi
390
      fi
391
      RESULT=""
391
      RESULT=""
392
392
393
      if [ $ADDINFO -eq 1 ]; then
393
      if [ $ADDINFO -eq 1 ]; then
394
        if [ -z "$3" ]; then
394
        if [ -z "$3" ]; then
395
          if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO"'" ; fi
395
          if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO"'" ; fi
396
          echo "#"$DELIMITER$DEFAULT_INFO >>$DICT
396
          echo "#"$DELIMITER$DEFAULT_INFO >>$DICT
397
        else
397
        else
398
          if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi
398
          if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi
399
          echo "#"$DELIMITER$3 >>$DICT
399
          echo "#"$DELIMITER$3 >>$DICT
400
        fi
400
        fi
401
        if [ $VERBOSE -eq 1 ]; then echo ; fi
401
        if [ $VERBOSE -eq 1 ]; then echo ; fi
402
        exit $?
402
        exit $?
403
      fi
403
      fi
404
404
405
      if [ $INFO -eq 1 ]; then
405
      if [ $INFO -eq 1 ]; then
406
        if [ $VERBOSE -eq 1 ]; then
406
        if [ $VERBOSE -eq 1 ]; then
407
          echo "Obtaining information..."
407
          echo "Obtaining information..."
408
          echo
408
          echo
409
        fi
409
        fi
410
        grep "^#$DELIMITER" "$DICT" | sed 's/^#'$DELIMITER'//'
410
        grep "^#$DELIMITER" "$DICT" | sed 's/^#'$DELIMITER'//'
411
        RESULT=`grep -e "^#$DELIMITER" "$DICT"`
411
        RESULT=`grep -e "^#$DELIMITER" "$DICT"`
412
        if [ -z "$RESULT" ]; then echo $CH_SOUND$DICT": No information available" ; fi
412
        if [ -z "$RESULT" ]; then echo $CH_SOUND$DICT": No information available" ; fi
413
        if [ $VERBOSE -eq 1 ]; then echo ; fi
413
        if [ $VERBOSE -eq 1 ]; then echo ; fi
414
        exit $ESUCCESS
414
        exit $ESUCCESS
415
      fi
415
      fi
416
416
417
      if [ $ADD -eq 1 ]; then
417
      if [ $ADD -eq 1 ]; then
418
        if [ $VERBOSE -eq 1 ]; then echo ; fi
418
        if [ $VERBOSE -eq 1 ]; then echo ; fi
419
        RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"`
419
        RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"`
420
        if [ -z "$RESULT" ]; then
420
        if [ -z "$RESULT" ]; then
421
          echo $DICT": Adding expression: '"$1"'"
421
          echo $DICT": Adding expression: '"$1"'"
422
          echo $DICT": Adding translation: '"$4"'"
422
          echo $DICT": Adding translation: '"$4"'"
423
          if [ -n "$4" ]; then
423
          if [ -n "$4" ]; then
424
            echo $1$DELIMITER$4 >>$DICT
424
            echo $1$DELIMITER$4 >>$DICT
425
          else
425
          else
426
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi
426
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi
427
          fi
427
          fi
428
          SORT=1
428
          SORT=1
429
        else
429
        else
430
          translate "$1"
430
          translate "$1"
431
          echo $CH_SOUND$DICT": Expression already contained: '"$1"':"$RESULT
431
          echo $CH_SOUND$DICT": Expression already contained: '"$1"':"$RESULT
432
          if [ $VERBOSE -eq 1 ]; then echo ; fi
432
          if [ $VERBOSE -eq 1 ]; then echo ; fi
433
          exit $EDICT_EXPR_CONTAINED
433
          exit $EDICT_EXPR_CONTAINED
434
        fi
434
        fi
435
      fi
435
      fi
436
436
437
      if [ $OVERWRITE -eq 1 ]; then
437
      if [ $OVERWRITE -eq 1 ]; then
438
        if [ $VERBOSE -eq 1 ]; then echo ; fi
438
        if [ $VERBOSE -eq 1 ]; then echo ; fi
439
        echo $DICT": Replacing expression: '"$1"'"
439
        echo $DICT": Replacing expression: '"$1"'"
440
        echo $DICT": Replacing translation: '"$4"'"
440
        echo $DICT": Replacing translation: '"$4"'"
441
        TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`
441
        TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`
442
        if [ $? -ne 0 ]; then
442
        if [ $? -ne 0 ]; then
443
          if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi
443
          if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi
444
          exit EDICT_TEMP_ERROR
444
          exit EDICT_TEMP_ERROR
445
        else
445
        else
446
          if [ -n "$4" ]; then
446
          if [ -n "$4" ]; then
447
            grep -iv -e "^$1$DELIMITER" "$DICT" &>$TMPFILE
447
            grep -iv -e "^$1$DELIMITER" "$DICT" &>$TMPFILE
448
            if [ $? -eq 0 ]; then echo $1$DELIMITER$4 >>$TMPFILE ; fi
448
            if [ $? -eq 0 ]; then echo $1$DELIMITER$4 >>$TMPFILE ; fi
449
            if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi
449
            if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi
450
            if [ $? -ne 0 ]; then
450
            if [ $? -ne 0 ]; then
451
              if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Unable to replace dictionary file: '"$DICT"'" ; fi
451
              if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Unable to replace dictionary file: '"$DICT"'" ; fi
452
              exit EDICT_REPLACE_ERROR
452
              exit EDICT_REPLACE_ERROR
453
            else
453
            else
454
              SORT=1
454
              SORT=1
455
            fi
455
            fi
456
          else
456
          else
457
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi
457
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi
458
          fi
458
          fi
459
        fi
459
        fi
460
      fi
460
      fi
461
461
462
      if [ $DELETE -eq 1 ]; then
462
      if [ $DELETE -eq 1 ]; then
463
        if [ $DICTIONARY -eq 0 ]; then
463
        if [ $DICTIONARY -eq 0 ]; then
464
          # delete entry
464
          # delete entry
465
          if [ $VERBOSE -eq 1 ]; then echo $DICT": Removing expression: "$1 ; fi
465
          if [ $VERBOSE -eq 1 ]; then echo $DICT": Removing expression: "$1 ; fi
466
          RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"`
466
          RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"`
467
          if [ -z "$RESULT" ]; then
467
          if [ -z "$RESULT" ]; then
468
              if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Expression not contained in dictionary: '"$1"'" ; fi
468
              if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Expression not contained in dictionary: '"$1"'" ; fi
469
              exit $EDICT_DELETE_EXPR_NOT_FOUND
469
              exit $EDICT_DELETE_EXPR_NOT_FOUND
470
          fi
470
          fi
471
          TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`
471
          TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`
472
          if [ $? -ne 0 ]; then
472
          if [ $? -ne 0 ]; then
473
            if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi
473
            if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi
474
            exit EDICT_TEMP_ERROR
474
            exit EDICT_TEMP_ERROR
475
          else
475
          else
476
            grep -iv -e "$1$DELIMITER" "$DICT" &>$TMPFILE
476
            grep -iv -e "$1$DELIMITER" "$DICT" &>$TMPFILE
477
            if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi
477
            if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi
478
            if [ $? -ne 0 ]; then
478
            if [ $? -ne 0 ]; then
479
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to modify dictionary (cannot replace file)" ; fi
479
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to modify dictionary (cannot replace file)" ; fi
480
              exit EDICT_REPLACE_ERROR
480
              exit EDICT_REPLACE_ERROR
481
            else
481
            else
482
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Modification successful" ; fi
482
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Modification successful" ; fi
483
              exit $ESUCCESS
483
              exit $ESUCCESS
484
            fi
484
            fi
485
          fi
485
          fi
486
        else
486
        else
487
          # delete dictionary
487
          # delete dictionary
488
          if [ $VERBOSE -eq 1 ]; then
488
          if [ $VERBOSE -eq 1 ]; then
489
            echo $APPFILENAME": Deleting dictionary: '"$DICT"'"
489
            echo $APPFILENAME": Deleting dictionary: '"$DICT"'"
490
            echo $APPFILENAME": Executing: rm '"$DICT"' &>/dev/null"
490
            echo $APPFILENAME": Executing: rm '"$DICT"' &>/dev/null"
491
          fi
491
          fi
492
          rm $DICT &>/dev/null
492
          rm $DICT &>/dev/null
493
          if [ $? -ne 0 ]; then
493
          if [ $? -ne 0 ]; then
494
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to remove dictionary" ; fi
494
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to remove dictionary" ; fi
495
            exit $EDICT_REMOVE
495
            exit $EDICT_REMOVE
496
          else
496
          else
497
            if [ $VERBOSE -eq 1 ]; then
497
            if [ $VERBOSE -eq 1 ]; then
498
              echo $DICT": Dictionary successfully removed"
498
              echo $DICT": Dictionary successfully removed"
499
              echo
499
              echo
500
            fi
500
            fi
501
            exit $ESUCCESS
501
            exit $ESUCCESS
502
          fi
502
          fi
503
        fi
503
        fi
504
      fi
504
      fi
505
505
506
      if [ $SORT -eq 1 ]; then
506
      if [ $SORT -eq 1 ]; then
507
        if [ $VERBOSE -eq 1 ]; then
507
        if [ $VERBOSE -eq 1 ]; then
508
          echo "Sorting vocabulary: '"$DICT"'"
508
          echo "Sorting vocabulary: '"$DICT"'"
509
          echo "Executing: sort -d -f -o "$DICT" -t "$DELIMITER" "$DICT
509
          echo "Executing: sort -d -f -o "$DICT" -t "$DELIMITER" "$DICT
510
        fi
510
        fi
511
        RESULT=`sort -d -f -o "$DICT" -t $DELIMITER "$DICT"`
511
        RESULT=`sort -d -f -o "$DICT" -t $DELIMITER "$DICT"`
512
        SORT_EXIT=$?
512
        SORT_EXIT=$?
513
        if [ $VERBOSE -eq 1 ]; then
513
        if [ $VERBOSE -eq 1 ]; then
514
          echo "sort returned exit code "$SORT_EXIT
514
          echo "sort returned exit code "$SORT_EXIT
515
          if [ $SORT_EXIT -eq 0 ]; then
515
          if [ $SORT_EXIT -eq 0 ]; then
516
            echo "Sorting successful: '"$DICT"'"
516
            echo "Sorting successful: '"$DICT"'"
517
          else
517
          else
518
            echo "Sorting failed: '"$DICT"'"
518
            echo "Sorting failed: '"$DICT"'"
519
          fi
519
          fi
520
          echo
520
          echo
521
        fi
521
        fi
522
        exit $SORT_EXIT
522
        exit $SORT_EXIT
523
      fi
523
      fi
524
524
525
      if [ $REPAIR -eq 1 ]; then
525
      if [ $REPAIR -eq 1 ]; then
526
        if [ $VERBOSE -eq 1 ]; then echo $DICT": Repairing dictionary" ; fi
526
        if [ $VERBOSE -eq 1 ]; then echo $DICT": Repairing dictionary" ; fi
527
        TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`
527
        TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`
528
        if [ $? -ne 0 ]; then
528
        if [ $? -ne 0 ]; then
529
          if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi
529
          if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi
530
          exit EDICT_TEMP_ERROR
530
          exit EDICT_TEMP_ERROR
531
        else
531
        else
532
          grep -e "^#$DELIMITER" "$DICT" &>$TMPFILE
532
          grep -e "^#$DELIMITER" "$DICT" &>$TMPFILE
533
          grep -e ".$DELIMITER." "$DICT" >>$TMPFILE
533
          grep -e ".$DELIMITER." "$DICT" >>$TMPFILE
534
          if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi
534
          if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi
535
          if [ $? -ne 0 ]; then
535
          if [ $? -ne 0 ]; then
536
            if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to repair dictionary (cannot replace file)" ; fi
536
            if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to repair dictionary (cannot replace file)" ; fi
537
            exit EDICT_REPLACE_ERROR
537
            exit EDICT_REPLACE_ERROR
538
          else
538
          else
539
            $DICT": Repair successful"
539
            $DICT": Repair successful"
540
          fi
540
          fi
541
        fi
541
        fi
542
      fi
542
      fi
543
543
544
      TRANSL=""
544
      TRANSL=""
545
      REVERSE_TRANSL=""
545
      REVERSE_TRANSL=""
546
      REVERSE_TRANSL_CAPT="T"
546
      REVERSE_TRANSL_CAPT="T"
547
      REVERSE_TRANSL_ON=" (reverse)"
547
      REVERSE_TRANSL_ON=" (reverse)"
548
      REVERSE_TRANSL_CAPT_ON="Reverse t"
548
      REVERSE_TRANSL_CAPT_ON="Reverse t"
549
      if [ $REVERSE -eq 1 ]; then
549
      if [ $REVERSE -eq 1 ]; then
550
        REVERSE_TRANSL=$REVERSE_TRANSL_ON
550
        REVERSE_TRANSL=$REVERSE_TRANSL_ON
551
        REVERSE_TRANSL_CAPT=$REVERSE_TRANSL_CAPT_ON
551
        REVERSE_TRANSL_CAPT=$REVERSE_TRANSL_CAPT_ON
552
      fi
552
      fi
553
      if [ $PHRASE -eq 1 ] ; then
553
      if [ $PHRASE -eq 1 ] ; then
554
        if [ $VERBOSE -eq 1 ]; then echo "Looking up phrase"$REVERSE_TRANSL": '"$1"'" ; fi
554
        if [ $VERBOSE -eq 1 ]; then echo "Looking up phrase"$REVERSE_TRANSL": '"$1"'" ; fi
555
        if [ $ZERO -eq 0 ]; then
555
        if [ $ZERO -eq 0 ]; then
556
          TRANSL="$1" ; if [ $BRACKETS -eq 1 ]; then TRANSL="["$TRANSL"]" ; fi
556
          TRANSL="$1" ; if [ $BRACKETS -eq 1 ]; then TRANSL="["$TRANSL"]" ; fi
557
        fi
557
        fi
558
        translate "$1"
558
        translate "$1"
559
        if [ -n "$RESULT" ]; then
559
        if [ -n "$RESULT" ]; then
560
          TRANSL=$RESULT
560
          TRANSL=$RESULT
561
          if [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSL"'" ; fi
561
          if [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSL"'" ; fi
562
        else
562
        else
563
          if [ $VERBOSE -eq 1 ]; then
563
          if [ $VERBOSE -eq 1 ]; then
564
            if [ $ZERO -eq 1 ]; then
564
            if [ $ZERO -eq 1 ]; then
565
              echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): '"$1"'"
565
              echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): '"$1"'"
566
            else
566
            else
567
              if [ $BRACKETS -eq 1 ]; then
567
              if [ $BRACKETS -eq 1 ]; then
568
                echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (enclosing phrase in brackets): '"$1"'"
568
                echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (enclosing phrase in brackets): '"$1"'"
569
              else
569
              else
570
                echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): '"$1"'"
570
                echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): '"$1"'"
571
              fi
571
              fi
572
            fi
572
            fi
573
          fi
573
          fi
574
        fi
574
        fi
575
      else
575
      else
576
        for word in $1; do
576
        for word in $1; do
577
          if [ $ZERO -eq 0 ]; then  TRANSLWORD="$word" ; else TRANSLWORD="" ; fi
577
          if [ $ZERO -eq 0 ]; then  TRANSLWORD="$word" ; else TRANSLWORD="" ; fi
578
          if [ $VERBOSE -eq 1 ]; then echo "Looking up word"$REVERSE_TRANSL": "$word ; fi
578
          if [ $VERBOSE -eq 1 ]; then echo "Looking up word"$REVERSE_TRANSL": "$word ; fi
579
          translate "$word"
579
          translate "$word"
580
          if [ -n "$RESULT" ]; then
580
          if [ -n "$RESULT" ]; then
581
            TRANSLWORD=$RESULT
581
            TRANSLWORD=$RESULT
582
            if [ -n "$RESULT" ] && [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSLWORD"'" ; fi
582
            if [ -n "$RESULT" ] && [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSLWORD"'" ; fi
583
          else
583
          else
584
            if [ $ZERO -eq 0 ] && [ $BRACKETS -eq 1 ]; then TRANSLWORD="["$TRANSLWORD"]" ; fi
584
            if [ $ZERO -eq 0 ] && [ $BRACKETS -eq 1 ]; then TRANSLWORD="["$TRANSLWORD"]" ; fi
585
            if [ $VERBOSE -eq 1 ]; then
585
            if [ $VERBOSE -eq 1 ]; then
586
              if [ $ZERO -eq 1 ]; then
586
              if [ $ZERO -eq 1 ]; then
587
                echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): "$word
587
                echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): "$word
588
              else
588
              else
589
                if [ $BRACKETS -eq 1 ]; then
589
                if [ $BRACKETS -eq 1 ]; then
590
                  echo $REVERSE_TRANSL_CAPT"ranslation failed (enclosing word in brackets): "$word
590
                  echo $REVERSE_TRANSL_CAPT"ranslation failed (enclosing word in brackets): "$word
591
                else
591
                else
592
                  echo $REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): "$word
592
                  echo $REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): "$word
593
                fi
593
                fi
594
              fi
594
              fi
595
            fi
595
            fi
596
          fi
596
          fi
597
          TRANSL=$TRANSL" "$TRANSLWORD
597
          TRANSL=$TRANSL" "$TRANSLWORD
598
        done
598
        done
599
      fi
599
      fi
600
      if [ $VERBOSE -eq 1 ]; then echo "Overall translation:" ; fi
600
      if [ $VERBOSE -eq 1 ]; then echo "Overall translation:" ; fi
601
      if [ -n "$TRANSL" ]; then echo $TRANSL ; fi
601
      if [ -n "$TRANSL" ]; then echo $TRANSL ; fi
602
      if [ $VERBOSE -eq 1 ]; then echo ; fi
602
      if [ $VERBOSE -eq 1 ]; then echo ; fi
603
    else
603
    else
604
      # send errmsg to stderr
604
      # send errmsg to stderr
605
      if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then
605
      if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then
606
        if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND"$APPFILENAME: Unable to locate dictionary root: '"$TRANSLATE_DIR"'" 1>&2 ; fi
606
        if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND"$APPFILENAME: Unable to locate dictionary root: '"$TRANSLATE_DIR"'" 1>&2 ; fi
607
      else
607
      else
608
        if [ $INFO -eq 0 ] && [ $ADD -eq 1 ] || [ $OVERWRITE -eq 1 ]; then
608
        if [ $INFO -eq 0 ] && [ $ADD -eq 1 ] || [ $OVERWRITE -eq 1 ]; then
609
          if [ $VERBOSE -eq 1 ]; then
609
          if [ $VERBOSE -eq 1 ]; then
610
            echo
610
            echo
611
            echo $DICT": Creating dictionary"
611
            echo $DICT": Creating dictionary"
612
          fi
612
          fi
613
          if [ -n "$4" ]; then
613
          if [ -n "$4" ]; then
614
            if [ -z "$5" ]; then
614
            if [ -z "$5" ]; then
615
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date`"'" ; fi
615
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date`"'" ; fi
616
              echo "#"$DELIMITER$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date` &>$DICT
616
              echo "#"$DELIMITER$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date` &>$DICT
617
            else
617
            else
618
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$5"'" ; fi
618
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$5"'" ; fi
619
              echo "#"$DELIMITER$5 &>$DICT
619
              echo "#"$DELIMITER$5 &>$DICT
620
            fi
620
            fi
621
            if [ $? -eq 0 ]; then
621
            if [ $? -eq 0 ]; then
622
              if [ $VERBOSE -eq 1 ]; then
622
              if [ $VERBOSE -eq 1 ]; then
623
                echo $DICT": Adding expression: '"$1"'"
623
                echo $DICT": Adding expression: '"$1"'"
624
                echo $DICT": Adding translation: '"$4"'"
624
                echo $DICT": Adding translation: '"$4"'"
625
              fi
625
              fi
626
              echo $1$DELIMITER$4 >>$DICT
626
              echo $1$DELIMITER$4 >>$DICT
627
            else
627
            else
628
              if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": Unable to create dictionary file: '"$DICT"'" ; fi
628
              if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": Unable to create dictionary file: '"$DICT"'" ; fi
629
              exit EDICT_CREATE_ERROR
629
              exit EDICT_CREATE_ERROR
630
            fi
630
            fi
631
          else
631
          else
632
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi
632
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi
633
          fi
633
          fi
634
        else
634
        else
635
          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
635
          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
636
        fi
636
        fi
637
      fi
637
      fi
638
      if [ $VERBOSE -eq 1 ]; then echo ; fi
638
      if [ $VERBOSE -eq 1 ]; then echo ; fi
639
      if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then
639
      if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then
640
        exit $EDICT_DIR_NOT_FOUND
640
        exit $EDICT_DIR_NOT_FOUND
641
      else
641
      else
642
        exit $EDICT_NOT_FOUND
642
        exit $EDICT_NOT_FOUND
643
      fi
643
      fi
644
    fi
644
    fi
645
  else
645
  else
646
    if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then
646
    if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then
647
      # send errmsg to stderr
647
      # send errmsg to stderr
648
      echo $CH_SOUND$APPFILENAME": No dictionary file given" 1>&2
648
      echo $CH_SOUND$APPFILENAME": No dictionary file given" 1>&2
649
    fi
649
    fi
650
    if [ $VERBOSE -eq 1 ]; then echo ; fi
650
    if [ $VERBOSE -eq 1 ]; then echo ; fi
651
    exit $ENO_DICT
651
    exit $ENO_DICT
652
  fi
652
  fi
653
else
653
else
654
  help
654
  help
655
fi
655
fi
656
 
656