Subversion Repositories LCARS

Rev

Rev 16 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 16 Rev 288
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=$(readlink $(basename "$0"))
6
APPFILEDIR=`echo $0 | sed 's/'$APPFILENAME$'//'`
6
[ -n "$appfilename" ] && 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
[ -z "$dict" ] && dict=$appfiledir
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
title() {
27
  if [ $SINGLE_PAGE -eq 0 ]; then clear ; fi
27
  #[ $single_page -eq 0 ] && clear
28
  echo
28
  echo "
29
  echo $APPNAME" "$APPVER" - Stream editor to use and to manage dictionary files"
29
$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
Requires 'basename', 'grep' and 'sed', optionally 'sort' and 'mktemp' in PATH
31
  echo
31
"
32
}
32
}
33
33
34
function copyright {
34
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
Be sure to have 'easyTrans' or similar in mail subject line for fast response.
37
  echo
37
"
38
}
38
}
39
39
40
function pause {
40
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
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
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
the Free Software Foundation; either version 2 of the License, or
55
  echo "(at your option) any later version."
55
(at your option) any later version.
56
  echo
56

57
  echo "This program is distributed in the hope that it will be useful,"
57
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
but WITHOUT ANY WARRANTY; without even the implied warranty of
59
  echo "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the"
59
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
60
  echo "GNU General Public License for more details."
60
GNU General Public License for more details.
61
  echo
61

62
  echo "You should have received a copy of the GNU General Public License"
62
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
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
Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
65
  echo
65
"
66
}
66
}
67
67
68
function cmdHelp {
68
cmdHelp() {
69
  title
69
  title
70
  echo $APPFILENAME" EXPRESSION DICTIONARY [OPTIONS]"
70
  echo "$appfilename EXPRESSION DICTIONARY [OPTIONS]
71
  echo
71

72
  echo "Tries to translate EXPRESSION looking up DICTIONARY and writes the result"
72
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)."
-
 
74
  echo
73

75
  echo "Environment:"
74
Environment:
76
  echo
75

77
  echo "TRANSLATE_DIR     Dictionary folder root (absolute path '/')"
76
TRANSLATE_DIR     Dictionary folder root (absolute path '/')"
78
if [ -n "$TRANSLATE_DIR" ]; then
77
  if [ -n "$TRANSLATE_DIR" ]; then
79
  local INVALID_PATH=" -- INVALID PATH!"
78
    local INVALID_PATH=" -- INVALID PATH!"
80
  local INVALID_FORMAT=" -- INVALID FORMAT!"
79
    local INVALID_FORMAT=" -- INVALID FORMAT!"
81
  # : AutoCorrect performed!
80
    # : AutoCorrect performed!
82
  local INVALID_MSG=""
81
    local INVALID_MSG=""
83
  if [ ! -e $TRANSLATE_DIR ]; then
82
    if [ ! -e $TRANSLATE_DIR ]; then
84
    INVALID_MSG=$INVALID_PATH
83
      INVALID_MSG=$INVALID_PATH
85
  else
84
    else
86
    local GREPRES=`echo $TRANSLATE_DIR | grep -e "\/$"`
85
      local GREPRES=$(echo $TRANSLATE_DIR | grep -e "\/$")
87
    if [ -z "$GREPRES" ]; then INVALID_MSG=$INVALID_FORMAT ; fi
86
      [ -z "$GREPRES" ] && INVALID_MSG=$INVALID_FORMAT
88
  fi
87
    fi
89
  echo "                  (currently '"$TRANSLATE_DIR"'"$INVALID_MSG")"
88
    echo "                  (currently '"$TRANSLATE_DIR"'"$INVALID_MSG")"
90
  #if [ "$INVALID_MSG" == "$INVALID_FORMAT" ]; then
89
    #if [ "$INVALID_MSG" == "$INVALID_FORMAT" ]; then
91
    #export TRANSLATE_DIR=$TRANSLATE_DIR"/"
90
      #export TRANSLATE_DIR=$TRANSLATE_DIR"/"
92
    #set -a
91
      #set -a
93
  #fi
92
    #fi
94
fi
93
  fi
-
 
94
  echo "\
95
  echo "                  If undefined, this is the program directory"
95
                    If undefined, this is the program directory
96
  echo "                  (currently '"$APPFILEDIR"')."
96
                    (currently '$appfiledir').
97
  echo "TRANSLATE_OPTIONS Default options to overwrite command-line options"
97
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
Arguments:
103
  echo
103

104
  echo "EXPRESSION        Word or (double-quoted) phrase to be translated"
104
EXPRESSION        Word or (double-quoted) phrase to be translated
105
  echo "DICTIONARY        Path of dictionary file relative to TRANSLATE_DIR"
105
DICTIONARY        Path of dictionary file relative to TRANSLATE_DIR
106
  echo
106
"
107
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
107
  [ $single_page -eq 0 ] && pause "c"
-
 
108
  echo "\
108
  echo "Translation OPTIONS:"
109
Translation OPTIONS:
109
  echo "  -b, --brackets  If not in DICTIONARY, writes given WORD or EXPRESSION"
110
  -b, --brackets  If not in DICTIONARY, writes given WORD or EXPRESSION
110
  echo "                  as [WORD] or [EXPRESSION]."
111
                    as [WORD] or [EXPRESSION].
111
  echo "  -m, --messages  Return error messages instead of null-strings."
112
  -m, --messages  Return error messages instead of null-strings.
112
  echo "  -p, --phrase    Translate EXPRESSION as entire phrase. If not given,"
113
  -p, --phrase    Translate EXPRESSION as entire phrase. If not given,
113
  echo "                  each WORD of EXPRESSION is translated seperately."
114
                    each WORD of EXPRESSION is translated seperately.
114
  echo "  -r, --reverse   Perform reverse translation. Recommended only if"
115
  -r, --reverse   Perform reverse translation. Recommended only if
115
  echo "                  no appropriate dictionary file for vice-versa translation is"
116
                    no appropriate dictionary file for vice-versa translation is
116
  echo "                  available and -p is also used."
117
                    available and -p is also used.
117
  echo "  -s, --sound     Beep on fatal errors."
118
  -s, --sound     Beep on fatal errors.
118
  echo "  -v, --verbose   Display flow of operation. Includes -m behavior."
119
  -v, --verbose   Display flow of operation. Includes -m behavior.
119
  echo "  -z, --zero      Return not translatable tokens as null-strings."
120
  -z, --zero      Return not translatable tokens as null-strings.
120
  echo "                  Overwrites -b."
121
                    Overwrites -b.
121
  echo
122
"
122
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
123
  [ $single_page -eq 0 ] && pause "c"
-
 
124
  echo "\
123
  echo $APPFILENAME" EXPRESSION DICTIONARY COMMAND TRANSLATION [INFO] [OPTIONS]"
125
$appfilename EXPRESSION DICTIONARY COMMAND TRANSLATION [INFO] [OPTIONS]
124
  echo $APPFILENAME" COMMAND DICTIONARY [INFO] [OPTIONS]"
126
$appfilename COMMAND DICTIONARY [INFO] [OPTIONS]
125
  echo
127

126
  echo "Dictionary file COMMANDs:"
128
Dictionary file COMMANDs:
127
  echo "  -a,  --add      If not in DICTIONARY, add EXPRESSION with TRANSLATION"
129
  -a,  --add      If not in DICTIONARY, add EXPRESSION with TRANSLATION
128
  echo "                  to DICTIONARY and write TRANSLATION."
130
                    to DICTIONARY and write TRANSLATION.
129
  echo "                  If DICTIONARY not exists, create the file with INFO"
131
                    If DICTIONARY not exists, create the file with INFO
130
  echo "                  and add the entry; if INFO is a null-string,"
132
                    and add the entry; if INFO is a null-string,
131
  echo "                  default INFO is added, containing program version,"
133
                    default INFO is added, containing program version,
132
  echo "                  user name and timestamp. Requires 'sort'."
134
                    user name and timestamp. Requires 'sort'.
133
  echo "  -ai, --addinfo  Add information data INFO to DICTIONARY."
135
  -ai, --addinfo  Add information data INFO to DICTIONARY.
134
  echo "                  Must be used as first argument."
136
                    Must be used as first argument.
135
  echo "  -c,  --create   Create new DICTIONARY with INFO (see -a)."
137
  -c,  --create   Create new DICTIONARY with INFO (see -a).
136
  echo "                  Existing files are replaced. Must be used as first argument."
138
                    Existing files are replaced. Must be used as first argument.
-
 
139

137
  echo "  -d,  --delete   If used with EXPRESSION and DICTIONARY, remove EXPRESSION"
140
  -d,  --delete   If used with EXPRESSION and DICTIONARY, remove EXPRESSION
138
  echo "                  from DICTIONARY instead of translating."
141
                    from DICTIONARY instead of translating.
139
  echo "                  If used as first argument, delete DICTIONARY."
142
                    If used as first argument, delete DICTIONARY.
140
  echo "  -i,  --info     Display information about DICTIONARY."
143
  -i,  --info     Display information about DICTIONARY.
141
  echo "                  Must be used as first argument."
144
                    Must be used as first argument.
142
  echo
145
"
143
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
146
  [ $single_page -eq 0 ] && pause "c"
-
 
147
  echo "\
144
  echo "  -o, --overwrite Like -a but overwrite a contained translation of"
148
  -o, --overwrite Like -a but overwrite a contained translation of
145
  echo "                  EXPRESSION with TRANSLATION without question."
149
                    EXPRESSION with TRANSLATION without question.
146
  echo "                  Additionally requires 'mktemp'."
150
                    Additionally requires 'mktemp'.
147
  echo "  -R, --repair    Repair DICTIONARY instead of translating. Requires 'mktemp'."
151
  -R, --repair    Repair DICTIONARY instead of translating. Requires 'mktemp'.
148
  echo "                  Info data is be kept but invalid entries are removed."
152
                    Info data is be kept but invalid entries are removed.
149
  echo "                  USE WITH CAUTION!"
153
                    USE WITH CAUTION!
150
  echo "  -s, --sort      Sort DICTIONARY instead of translating. Requires 'sort'."
154
  -s, --sort      Sort DICTIONARY instead of translating. Requires 'sort'.
151
  echo "                  Includes --sound when used with -v."
155
                    Includes --sound when used with -v.
152
  echo "                  Must be used as first argument."
156
                    Must be used as first argument.
153
  echo
157
"
154
  if [ $SINGLE_PAGE -eq 0 ]; then pause "c" ; fi
158
  [ $single_page -eq 0 ] && pause "c"
-
 
159
  echo "\
155
  echo $APPFILENAME" OPTION [OPTION]"
160
$appfilename OPTION [OPTION]
156
  echo
161

157
  echo "Help page OPTIONs:"
162
Help page OPTIONs:
158
  echo "  --1             Display help on one page (without 'clear' and user input)."
163
  --1             Display help on one page (without 'clear' and user input).
159
  echo "                  Useful with redirection "
164
                    Useful with redirection
160
  echo "                  (try '"$APPFILENAME" --1 --? > translate.doc.txt')."
165
                    (try '"$appfilename" --1 --? > translate.doc.txt').
161
  echo "                  Must be given before all other help page options."
166
                    Must be given before all other help page options.
162
  echo "  --a, --about    Display information about the program."
167
  --a, --about    Display information about the program.
163
  echo "  --c, --cmd      Display this help page."
168
  --c, --cmd      Display this help page.
164
  echo "  --d, --dict     Display help about dictionary files."
169
  --d, --dict     Display help about dictionary files.
165
  echo "  --dev, --emp    Display special information for developers and employers."
170
  --dev, --emp    Display special information for developers and employers.
166
  echo "  --x, --example  Display example."
171
  --x, --example  Display example.
167
  echo "  --?, --help     Display all help pages."
172
  --?, --help     Display all help pages.
168
  echo
173
"
169
}
174
}
170
175
171
function example {
176
example() {
172
  title
177
  title
173
  echo "EXAMPLE: If you would like to translate the English words 'a few' into German,"
178
  echo "EXAMPLE: If you would like to translate the English words 'a few' into German,
174
  echo
179

175
  echo "  "$APPFILENAME" ''a few'' en-de"
180
  $appfilename 'a few' en-de
176
  echo
181

177
  echo "should write the German words"
182
should write the German words
178
  echo
183

179
  echo "  ein(e) wenig(e)\n"
184
  ein(e) wenig(e)\n
180
  echo
185

181
  echo "(without indent) to stdout if the echo dictionary file 'en-de' contains"
186
(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"
187
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):"
188
entire phrase (which seems to make more sense here):
184
  echo
189

185
  echo "  "$APPFILENAME" ''a few'' en-de -p"
190
  $appfilename 'a few' en-de -p
186
  echo
191

187
  echo "should instead write the German word 'einige\n'"
192
should instead write the German word 'einige\n'
188
  echo "(replace '' in input with the double-quote character)."
193
(replace '' in input with the double-quote character).
-
 
194

189
  echo
195
"
190
}
196
}
191
197
192
function dictHelp {
198
dictHelp() {
193
  title
199
  title
-
 
200
  echo "\
194
  echo "DICTIONARY FILES:"
201
DICTIONARY FILES:
195
  echo "You may create/improve dictionary files to be used with "$APPNAME
202
You may create/improve dictionary files to be used with $appname
196
  echo "of your own. Translation data must match the following expression:"
203
of your own. Translation data must match the following expression:
197
  echo
204

198
  echo "#"$DELIMITER"File description displayed when option -i is used\n[#"$DELIMITER"File description\n]"
205
#${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]]"
206
[Expression"$delimiter"translation\\n[Next expression"$delimiter"next translation\\n]]
200
  echo "Last expression"$DELIMITER"last translation\z"
207
Last expression"$delimiter"last translation\z
201
  echo
208

202
  echo "Parts enclosed in rectangle brackets are optional. The "$DELIMITER_NAME" ("$DELIMITER") is to be used"
209
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."
210
as delimiter character between original and translated expression only.
204
  echo "Dictionary file names should contain common language identifiers separated"
211
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)."
212
by a dash (such as 'en-de.dic' for an English-German dictionary file).
206
  echo
213

207
  echo "Program updates and dictionaries can be obtained from"
214
Program updates and dictionaries can be obtained from
208
  echo "'http://pointedears.de/dev/unix/translate/'."
215
'http://pointedears.de/tools/eazytrans/'.
209
  echo "Thank you for using a program by PointedEars."
216
Thank you for using a program by PointedEars.
210
  echo
217
"
211
}
218
}
212
219
213
function devInfo {
220
devInfo() {
214
  title
221
  title
215
  copyright
222
  copyright
216
  echo "INFORMATION FOR DEVELOPERS (KNOWN ISSUES)..."
-
 
217
  echo
223
  echo "\
218
  echo "- Sorting the dictionary unfortunately also sorts its info data by now."
-
 
219
  echo
224
KNOWN ISSUES
220
  echo "...AND FOR EMPLOYERS:"
-
 
221
  echo
225

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,"
226
- Sorting the dictionary unfortunately also sorts its info data by now.
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"
-
 
226
  echo
227
"
227
}
228
}
228
229
229
function help {
230
help() {
230
  copying
231
  copying
231
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
232
  [ $single_page -eq 0 ] && pause
232
  cmdHelp
233
  cmdHelp
233
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
234
  [ $single_page -eq 0 ] && pause
234
  example
235
  example
235
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
236
  [ $single_page -eq 0 ] && pause
236
  dictHelp
237
  dictHelp
237
  if [ $SINGLE_PAGE -eq 0 ]; then pause ; fi
238
  [ $single_page -eq 0 ] && pause
238
  devInfo
239
  devInfo
239
}
240
}
240
241
241
function translateReverse {
242
check_dictionary() {
242
  local EXPR="$1"
243
  # check if dictionary file (contains at least '#$delimiter')
243
  if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -i -e '"$DELIMITER$EXPR"$' '"$DICT"'" ; fi
244
  [ $verbose -eq 1 ] && echo "Executing: grep -e '."$delimiter".' '"$dict"'"
244
  RESULT=`grep -i -e "$DELIMITER$EXPR$" "$DICT"`
245
  result=$(grep -e "#$delimiter." "$dict")
-
 
246
  if [ -z "$result" ]; then
245
  if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi
247
    [ $verbose -eq 1 ] && echo "grep returned: ''"
-
 
248
    echo $dict": Not a (valid) dictionary file (type '"$appfilename" --d' for details)."
246
  if [ -n "$RESULT" ]; then
249
    [ $verbose -eq 1 ] && echo
-
 
250
    exit $EDICT_WRONG_FORMAT
-
 
251
  else
247
    if [ $VERBOSE -eq 1 ]; then
252
    if [ $verbose -eq 1 ]; then
248
      echo "Reading expression from recordset (with sed requires only 1 step! :o)" ;
253
      echo "grep returned not a null-string: '$dict' seems to be a dictionary file"
249
      echo "Executing: echo $RESULT | sed 's/$DELIMITER[ ]*[^$DELIMITER]*//'"
-
 
250
    fi
254
    fi
251
    RESULT=`echo $RESULT | sed 's/'$DELIMITER'[ ]*[^'$DELIMITER']*//'`
-
 
252
    if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi
-
 
253
  fi
255
  fi
254
256
  result=""
255
  # Should return only characters before the delimiter until BOL (expression)
-
 
256
}
257
}
257
258
258
function translate {
259
create() {
259
  local EXPR="$1"
-
 
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
-
 
262
  RESULT=`grep -i -e "^$EXPR$DELIMITER" "$DICT"`
-
 
263
  if [ $VERBOSE -eq 1 ]; then echo "grep returned: '"$RESULT"'" ; fi
260
  [ $verbose -eq 1 ] && echo $dict": Creating dictionary"
264
  if [ -n "$RESULT" ]; then
261
  if [ -z "$3" ]; then
265
    if [ $VERBOSE -eq 1 ]; then
-
 
266
      echo "Reading translation from recordset (with sed requires only 1 step! :o)" ;
262
    [ $verbose -eq 1 ] && echo $dict": Adding information: '"$DEFAULT_INFO
267
      echo "Executing: echo $RESULT | sed 's/[^$DELIMITER]*$DELIMITER[ ]*//'"
263
    echo "#"$delimiter$DEFAULT_INFO &>$dict
268
    fi
264
  else
269
    RESULT=`echo $RESULT | sed 's/[^'$DELIMITER']*'$DELIMITER'[ ]*//'`
265
    [ $verbose -eq 1 ] && echo $dict": Adding information: '"$3"'"
270
    if [ $VERBOSE -eq 1 ]; then echo "sed returned: '"$RESULT"'" ; fi
266
    echo "#"$delimiter$3 &>$dict
271
  fi
267
  fi
272
-
 
273
  # Should return only characters after the separation character until EOL
268
  [ $verbose -eq 1 ] && echo
274
  # (translation)
269
  exit $?
275
}
270
}
276
271
277
# exit codes
272
add_info() {
278
ESUCCESS=0
-
 
279
ENO_DICT=1
-
 
280
EDICT_DIR_NOT_FOUND=2
273
  if [ -z "$3" ]; then
-
 
274
    [ $verbose -eq 1 ] && echo $dict": Adding information: '"$DEFAULT_INFO"'"
281
EDICT_NOT_FOUND=3
275
    echo "#"$delimiter$DEFAULT_INFO >>$dict
282
EDICT_WRONG_FORMAT=4
276
  else
283
EDICT_EXPR_CONTAINED=5
277
    [ $verbose -eq 1 ] && echo $dict": Adding information: '"$3"'"
284
EDICT_TEMP_ERROR=6
278
    echo "#"$delimiter$3 >>$dict
285
EDICT_CREATE_ERROR=7
279
  fi
286
EDICT_DELETE_EXPR_NOT_FOUND=8
280
  [ $verbose -eq 1 ] && echo
287
EDICT_REMOVE=9
281
  exit $?
288
282
}
289
# argument flags
-
 
290
DICTIONARY=0 # if 1, -d refers to the dictionary file instead of an entry
-
 
291
283
292
# option flags - may be replaced by declare -i FLAG
-
 
293
ADD=0
-
 
294
ADDINFO=0
284
info() {
295
BRACKETS=0
285
  if [ $verbose -eq 1 ]; then
296
CREATE=0
286
    echo "Obtaining information..."
297
DELETE=0
287
    echo
298
INFO=0
288
  fi
-
 
289
  grep "^#$delimiter" "$dict" | sed 's/^#'$delimiter'//'
299
MESSAGES=0
290
  result=$(grep -e "^#$delimiter" "$dict")
-
 
291
  [ -z "$result" ] && echo $ch_sound$dict": No information available"
300
OVERWRITE=0
292
  [ $verbose -eq 1 ] && echo
301
PHRASE=0
-
 
302
REPAIR=0
-
 
303
REVERSE=0
-
 
304
SORT=0
-
 
305
SOUND=0
-
 
306
VERBOSE=0
293
  exit $ESUCCESS
307
ZERO=0
294
}
308
295
309
if [ -n "$1" ]; then
-
 
310
  # retrieve arguments and use default settings from environment variable
-
 
311
  ARGUMENTS=$* ; if [ -n "$TRANSLATE_OPTIONS" ]; then ARGUMENTS=$ARGUMENTS" "$TRANSLATE_OPTIONS ; fi
-
 
312
  # check options
296
add_translation() {
313
  for argument in $ARGUMENTS; do
-
 
314
    case "$argument" in
297
  [ $verbose -eq 1 ] && echo
315
      "-b" | "--brackets") BRACKETS=1;;
-
 
316
      "-m" | "--messages") MESSAGES=1;;
-
 
317
      "-p" | "--phrase")   PHRASE=1;;
-
 
318
      "-r" | "--reverse")  REVERSE=1;;
-
 
319
      "-s" | "--sound")    SOUND=1;;
-
 
320
      "-v" | "--verbose")  VERBOSE=1 ; title ; copyright;;
298
  result=$(grep -i -e "^$1$delimiter" "$dict")
321
      "-z" | "--zero")     ZERO=1;;
299
  if [ -z "$result" ]; then
322
      "--a" | "--about")   copying ; exit $ESUCCESS;;
-
 
323
      "--c" | "--cmd")     cmdHelp ; exit $ESUCCESS;;
-
 
324
      "--d" | "--dict")    dictHelp ; exit $ESUCCESS;;
300
    echo $dict": Adding expression: '"$1"'"
325
      "--dev" | "--emp")   devInfo ; exit $ESUCCESS;;
301
    echo $dict": Adding translation: '"$4"'"
326
      "--1") SINGLE_PAGE=1;;
302
    if [ -n "$4" ]; then
327
      "--x" | "--example") example ; exit $ESUCCESS;;
-
 
328
      "--?" | "--help")    help ; exit $ESUCCESS;;
303
      echo $1$delimiter$4 >>$dict
329
    esac
304
    else
330
  done
-
 
331
  if [ $SOUND -eq 1 ]; then CH_SOUND=$CH_SOUND_ON ; fi
305
      [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound$appfilename": No translation given for '"$1"'"
332
  if [ -n "$2" ]; then
-
 
333
# concatenate dictionary root and given dictionary file
-
 
334
    DICT="$DICT$2"
306
    fi
335
# check for dictionary commands
-
 
336
    case "$1" in
307
    sort=1
337
      "-d" | "--delete") DELETE=1 ; DICTIONARY=1 ;;
-
 
338
      "-c" | "--create") CREATE=1;;
-
 
339
      "-i" | "--info")   INFO=1;;
-
 
340
      "-s" | "--sort")   SORT=1;;
-
 
341
      "-R" | "--repair") REPAIR=1;;
-
 
342
    esac
308
  else
343
    case "$3" in
309
    translate "$1"
344
      "-a"  | "--add")       ADD=1;;
-
 
345
      "-ai" | "--addinfo")   ADDINFO=1;;
310
    echo $ch_sound$dict": Expression already contained: '"$1"':"$result
346
      "-d"  | "--delete")    DELETE=1;;
311
    [ $verbose -eq 1 ] && echo
347
      "-o"  | "--overwrite") OVERWRITE=1;;
312
    exit $EDICT_EXPR_CONTAINED
348
    esac
313
  fi
-
 
314
}
349
315
-
 
316
replace_translation() {
-
 
317
  [ $verbose -eq 1 ] && echo
-
 
318
  echo $dict": Replacing expression: '"$1"'"
-
 
319
  echo $dict": Replacing translation: '"$4"'"
-
 
320
  TMPFILE=$(mktemp -q /tmp/$appfilename.XXXXXX)
350
    if [ $VERBOSE -eq 1 ]; then
321
  if [ $? -ne 0 ]; then
-
 
322
    [ $verbose -eq 1 ] && echo $appfilename": Can't create temp file, exiting..."
-
 
323
    exit EDICT_TEMP_ERROR
-
 
324
  else
351
      if [ -z "$TRANSLATE_DIR" ]; then
325
    if [ -n "$4" ]; then
-
 
326
      grep -iv -e "^$1$delimiter" "$dict" &>$TMPFILE
352
        echo "Dictionary root (program directory): '"$APPFILEDIR"'"
327
      [ $? -eq 0 ] && echo $1$delimiter$4 >>$TMPFILE
-
 
328
      [ $? -eq 0 ] && mv $TMPFILE $dict &>/dev/null
-
 
329
      if [ $? -ne 0 ]; then
-
 
330
        [ $verbose -eq 1 ] && echo $appfilename": Unable to replace dictionary file: '"$dict"'"
-
 
331
        exit EDICT_REPLACE_ERROR
353
      else
332
      else
354
        echo "Dictionary root (TRANSLATE_DIR): '"$TRANSLATE_DIR"'"
333
        sort=1
355
      fi
334
      fi
356
      echo "Dictionary file: '"$2"'"
335
    else
357
      echo "Dictionary file path: '"$DICT"'"
336
      [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound$appfilename": No translation given for '"$1"'"
358
    fi
337
    fi
-
 
338
  fi
-
 
339
}
359
340
-
 
341
delete() {
-
 
342
  if [ $dictionary -eq 0 ]; then
-
 
343
    # delete entry
360
    DEFAULT_INFO=$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date`
344
    [ $verbose -eq 1 ] && echo $dict": Removing expression: "$1
361
-
 
-
 
345
    result=$(grep -i -e "^$1$delimiter" "$dict")
362
    if [ $CREATE -eq 1 ]; then
346
    if [ -z "$result" ]; then
-
 
347
        [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $dict": Expression not contained in dictionary: '"$1"'"
-
 
348
        exit $EDICT_DELETE_EXPR_NOT_FOUND
-
 
349
    fi
-
 
350
    TMPFILE=$(mktemp -q /tmp/$appfilename.XXXXXX)
363
      if [ $VERBOSE -eq 1 ]; then
351
    if [ $? -ne 0 ]; then
-
 
352
      [ $verbose -eq 1 ] && echo $appfilename": Can't create temp file, exiting..."
364
        echo $DICT": Creating dictionary"
353
      exit EDICT_TEMP_ERROR
365
      fi
354
    else
-
 
355
      grep -iv -e "$1$delimiter" "$dict" &>$TMPFILE
-
 
356
      [ $? -eq 0 ] && mv $TMPFILE $dict &>/dev/null
366
      if [ -z "$3" ]; then
357
      if [ $? -ne 0 ]; then
367
        if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO ; fi
358
        [ $verbose -eq 1 ] && echo $dict": Unable to modify dictionary (cannot replace file)"
368
        echo "#"$DELIMITER$EFAULT_INFO &>$DICT
359
        exit EDICT_REPLACE_ERROR
369
      else
360
      else
370
        if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi
361
        [ $verbose -eq 1 ] && echo $dict": Modification successful"
371
        echo "#"$DELIMITER$3 &>$DICT
362
        exit $ESUCCESS
372
      fi
363
      fi
373
      if [ $VERBOSE -eq 1 ]; then echo ; fi
-
 
374
      exit $?
-
 
375
    fi
364
    fi
376
365
  else
-
 
366
    # delete dictionary
377
    if [ -e "$DICT" ]; then # if dictionary file exists
367
    if [ $verbose -eq 1 ]; then
378
      # check if dictionary file (contains at least '#$DELIMITER')
368
      echo $appfilename": Deleting dictionary: '"$dict"'"
379
      if [ $VERBOSE -eq 1 ]; then echo "Executing: grep -e '."$DELIMITER".' '"$DICT"'" ; fi
369
      echo $appfilename": Executing: rm '"$dict"' &>/dev/null"
-
 
370
    fi
380
      RESULT=`grep -e "#$DELIMITER." "$DICT"`
371
    rm $dict &>/dev/null
381
      if [ -z "$RESULT" ]; then
372
    if [ $? -ne 0 ]; then
382
        if [ $VERBOSE -eq 1 ]; then echo "grep returned: ''" ; fi
373
      [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $dict": Unable to remove dictionary"
383
        echo $DICT": Not a (valid) dictionary file (type '"$APPFILENAME" --d' for details)."
-
 
384
        if [ $VERBOSE -eq 1 ]; then echo ; fi
-
 
385
        exit $EDICT_WRONG_FORMAT
374
      exit $EDICT_REMOVE
386
      else
375
    else
387
        if [ $VERBOSE -eq 1 ]; then
376
      if [ $verbose -eq 1 ]; then
388
          echo "grep returned not a null-string: '$DICT' seems to be a dictionary file"
377
        echo $dict": Dictionary successfully removed"
389
        fi
378
        echo
390
      fi
379
      fi
391
      RESULT=""
380
      exit $ESUCCESS
-
 
381
    fi
-
 
382
  fi
-
 
383
}
392
384
-
 
385
sort_dictionary() {
393
      if [ $ADDINFO -eq 1 ]; then
386
  if [ $verbose -eq 1 ]; then
394
        if [ -z "$3" ]; then
387
    echo "Sorting dictionary: '"$dict"'"
395
          if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$DEFAULT_INFO"'" ; fi
388
    echo "Executing: sort -d -f -o "$dict" -t "$delimiter" "$dict
-
 
389
  fi
396
          echo "#"$DELIMITER$DEFAULT_INFO >>$DICT
390
  result=$(sort -d -f -o "$dict" -t $delimiter "$dict")
397
        else
391
  SORT_EXIT=$?
-
 
392
  if [ $verbose -eq 1 ]; then
398
          if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$3"'" ; fi
393
    echo "sort returned exit code "$SORT_EXIT
-
 
394
    if [ $SORT_EXIT -eq 0 ]; then
399
          echo "#"$DELIMITER$3 >>$DICT
395
      echo "Sorting successful: '"$dict"'"
400
        fi
396
    else
401
        if [ $VERBOSE -eq 1 ]; then echo ; fi
397
      echo "Sorting failed: '"$dict"'"
402
        exit $?
398
    fi
403
      fi
399
    echo
-
 
400
  fi
-
 
401
  exit $SORT_EXIT
-
 
402
}
404
403
-
 
404
repair() {
405
      if [ $INFO -eq 1 ]; then
405
  [ $verbose -eq 1 ] && echo $dict": Repairing dictionary"
-
 
406
  TMPFILE=$(mktemp -q /tmp/$appfilename.XXXXXX)
406
        if [ $VERBOSE -eq 1 ]; then
407
  if [ $? -ne 0 ]; then
407
          echo "Obtaining information..."
408
    [ $verbose -eq 1 ] && echo $appfilename": Can't create temp file, exiting..."
408
          echo
409
    exit EDICT_TEMP_ERROR
409
        fi
410
  else
410
        grep "^#$DELIMITER" "$DICT" | sed 's/^#'$DELIMITER'//'
411
    grep -e "^#$delimiter" "$dict" &>$TMPFILE
411
        RESULT=`grep -e "^#$DELIMITER" "$DICT"`
412
    grep -e ".$delimiter." "$dict" >>$TMPFILE
412
        if [ -z "$RESULT" ]; then echo $CH_SOUND$DICT": No information available" ; fi
413
    [ $? -eq 0 ] && mv $TMPFILE $dict &>/dev/null
413
        if [ $VERBOSE -eq 1 ]; then echo ; fi
414
    if [ $? -ne 0 ]; then
-
 
415
      [ $verbose -eq 1 ] && echo $dict": Unable to repair dictionary (cannot replace file)"
414
        exit $ESUCCESS
416
      exit EDICT_REPLACE_ERROR
-
 
417
    else
-
 
418
      $dict": Repair successful"
415
      fi
419
    fi
-
 
420
  fi
-
 
421
}
416
422
417
      if [ $ADD -eq 1 ]; then
423
translateReverse() {
418
        if [ $VERBOSE -eq 1 ]; then echo ; fi
424
  local EXPR="$1"
419
        RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"`
425
  [ $verbose -eq 1 ] && echo >&2 "Executing: grep -i -e '"$delimiter$EXPR"$' '"$dict"'"
420
        if [ -z "$RESULT" ]; then
426
  result=$(egrep -i -e "$delimiter(\([^\)]+\))?.*\<$EXPR\>.*(\([^\)]+\))?$" "$dict")
421
          echo $DICT": Adding expression: '"$1"'"
427
  [ $verbose -eq 1 ] && echo >&2 "grep returned: '"$result"'"
422
          echo $DICT": Adding translation: '"$4"'"
428
  if [ -n "$result" ]; then
423
          if [ -n "$4" ]; then
429
    if [ $verbose -eq 1 ]; then
424
            echo $1$DELIMITER$4 >>$DICT
430
      echo >&2 "Reading expression from recordset (with sed requires only 1 step! :o)
425
          else
-
 
426
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi
431
Executing: echo $result | sed 's/$delimiter[ ]*[^$delimiter]*//'"
427
          fi
432
    fi
428
          SORT=1
-
 
429
        else
-
 
430
          translate "$1"
-
 
431
          echo $CH_SOUND$DICT": Expression already contained: '"$1"':"$RESULT
433
  # result=$(echo $result | sed 's/'$delimiter'[ ]*[^'$delimiter']*//')
432
          if [ $VERBOSE -eq 1 ]; then echo ; fi
434
  result=$(echo $result | sed 's/'$delimiter'.*$//')
433
          exit $EDICT_EXPR_CONTAINED
435
    [ $verbose -eq 1 ] && echo >&2 "sed returned: '"$result"'"
434
        fi
436
  fi
-
 
437
-
 
438
  # Should return only characters before the delimiter until BOL (expression)
435
      fi
439
}
436
440
-
 
441
translate() {
-
 
442
  local EXPR="$1"
437
      if [ $OVERWRITE -eq 1 ]; then
443
  if [ $reverse -eq 1 ]; then
-
 
444
    translateReverse "$1"
-
 
445
    return
-
 
446
  fi
-
 
447
  [ $verbose -eq 1 ] && echo >&2 "Executing: grep -i -e '^"$EXPR$delimiter"' '"$dict"'"
-
 
448
  result=$(grep -i -e "^$EXPR$delimiter" "$dict")
-
 
449
  [ $verbose -eq 1 ] && echo >&2 "grep returned: '"$result"'"
-
 
450
  if [ -n "$result" ]; then
438
        if [ $VERBOSE -eq 1 ]; then echo ; fi
451
    if [ $verbose -eq 1 ]; then
-
 
452
      echo >&2 "Reading translation from recordset (with sed requires only 1 step! :o)
-
 
453
Executing: echo $result | sed 's/[^$delimiter]*$delimiter[ ]*//'"
-
 
454
    fi
-
 
455
    result=$(echo $result | sed 's/[^'$delimiter']*'$delimiter'[ ]*//')
439
        echo $DICT": Replacing expression: '"$1"'"
456
    [ $verbose -eq 1 ] && echo >&2 "sed returned: '"$result"'"
-
 
457
  fi
-
 
458
-
 
459
  # Should return only characters after the separation character until EOL
-
 
460
  # (translation)
-
 
461
}
-
 
462
-
 
463
translate_all() {
-
 
464
  local second_pass=0
-
 
465
  [ "$1" = "-2" ] && {
-
 
466
    shift
-
 
467
    second_pass=1
-
 
468
  }
-
 
469
  TRANSL=""
-
 
470
  REVERSE_TRANSL=""
-
 
471
  REVERSE_TRANSL_CAPT="T"
-
 
472
  REVERSE_TRANSL_on=" (reverse)"
-
 
473
  REVERSE_TRANSL_CAPT_on="Reverse t"
-
 
474
  if [ $reverse -eq 1 ]; then
-
 
475
    REVERSE_TRANSL=$REVERSE_TRANSL_on
-
 
476
    REVERSE_TRANSL_CAPT=$REVERSE_TRANSL_CAPT_on
-
 
477
  fi
-
 
478
  if [ $phrase -eq 1 ] ; then
440
        echo $DICT": Replacing translation: '"$4"'"
479
    [ $verbose -eq 1 ] && echo "Looking up phrase"$REVERSE_TRANSL": '"$1"'"
-
 
480
    if [ $zero -eq 0 ]; then
-
 
481
      TRANSL="$1"
441
        TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`
482
      [ $brackets -eq 1 ] && TRANSL="["$TRANSL"]"
-
 
483
    fi
-
 
484
    translate "$1"
442
        if [ $? -ne 0 ]; then
485
    if [ -n "$result" ]; then
-
 
486
      TRANSL=$result
443
          if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi
487
      [ $verbose -eq 1 ] && echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSL"'"
-
 
488
    else
-
 
489
      if [ $verbose -eq 1 ]; then
444
          exit EDICT_TEMP_ERROR
490
        if [ $zero -eq 1 ]; then
-
 
491
          echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): '"$1"'"
445
        else
492
        else
446
          if [ -n "$4" ]; then
-
 
447
            grep -iv -e "^$1$DELIMITER" "$DICT" &>$TMPFILE
-
 
448
            if [ $? -eq 0 ]; then echo $1$DELIMITER$4 >>$TMPFILE ; fi
-
 
449
            if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi
-
 
450
            if [ $? -ne 0 ]; then
493
          if [ $brackets -eq 1 ]; then
451
              if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Unable to replace dictionary file: '"$DICT"'" ; fi
494
            echo $ch_sound$REVERSE_TRANSL_CAPT"ranslation failed (enclosing phrase in brackets): '"$1"'"
452
              exit EDICT_REPLACE_ERROR
-
 
453
            else
-
 
454
              SORT=1
-
 
455
            fi
-
 
456
          else
495
          else
457
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi
496
            echo $ch_sound$REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): '"$1"'"
458
          fi
497
          fi
459
        fi
498
        fi
460
      fi
499
      fi
-
 
500
    fi
461
501
  else
-
 
502
    for word in $@; do
462
      if [ $DELETE -eq 1 ]; then
503
      if [ $zero -eq 0 ]; then
463
        if [ $DICTIONARY -eq 0 ]; then
504
        TRANSLWORD="$word"
-
 
505
      else
464
          # delete entry
506
        TRANSLWORD=""
-
 
507
      fi
465
          if [ $VERBOSE -eq 1 ]; then echo $DICT": Removing expression: "$1 ; fi
508
      [ $verbose -eq 1 ] && echo "Looking up word"$REVERSE_TRANSL": "$word
466
          RESULT=`grep -i -e "^$1$DELIMITER" "$DICT"`
509
      translate "$word"
467
          if [ -z "$RESULT" ]; then
510
      if [ -n "$result" ]; then
-
 
511
        TRANSLWORD=$result
468
              if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Expression not contained in dictionary: '"$1"'" ; fi
512
      elif [ -n "$wsep" ] && [ $second_pass -eq 0 ]; then
-
 
513
        word=${word//$wsep/ }
-
 
514
        translate_all -2 $word
469
              exit $EDICT_DELETE_EXPR_NOT_FOUND
515
        if [ -n "$result" ]; then
-
 
516
          TRANSLWORD=$result
470
          fi
517
        fi
-
 
518
      fi
471
          TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`
519
      [ -n "$result" ] && [ $verbose -eq 1 ] && echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSLWORD"'"
-
 
520
472
          if [ $? -ne 0 ]; then
521
      if [ -z "$result" ]; then
473
            if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi
522
        [ $zero -eq 0 ] && [ $brackets -eq 1 ] && TRANSLWORD="["$TRANSLWORD"]"
-
 
523
        if [ $verbose -eq 1 ]; then
474
            exit EDICT_TEMP_ERROR
524
          if [ $zero -eq 1 ]; then
-
 
525
            echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): "$word
475
          else
526
          else
476
            grep -iv -e "$1$DELIMITER" "$DICT" &>$TMPFILE
-
 
477
            if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi
-
 
478
            if [ $? -ne 0 ]; then
527
            if [ $brackets -eq 1 ]; then
479
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to modify dictionary (cannot replace file)" ; fi
528
              echo $REVERSE_TRANSL_CAPT"ranslation failed (enclosing word in brackets): "$word
480
              exit EDICT_REPLACE_ERROR
-
 
481
            else
529
            else
482
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Modification successful" ; fi
530
              echo $REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): "$word
483
              exit $ESUCCESS
-
 
484
            fi
531
            fi
485
          fi
532
          fi
486
        else
-
 
487
          # delete dictionary
-
 
488
          if [ $VERBOSE -eq 1 ]; then
-
 
489
            echo $APPFILENAME": Deleting dictionary: '"$DICT"'"
-
 
490
            echo $APPFILENAME": Executing: rm '"$DICT"' &>/dev/null"
-
 
491
          fi
-
 
492
          rm $DICT &>/dev/null
-
 
493
          if [ $? -ne 0 ]; then
-
 
494
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to remove dictionary" ; fi
-
 
495
            exit $EDICT_REMOVE
-
 
496
          else
-
 
497
            if [ $VERBOSE -eq 1 ]; then
-
 
498
              echo $DICT": Dictionary successfully removed"
-
 
499
              echo
-
 
500
            fi
-
 
501
            exit $ESUCCESS
-
 
502
          fi
-
 
503
        fi
533
        fi
504
      fi
534
      fi
-
 
535
      TRANSL=$TRANSL" "$TRANSLWORD
-
 
536
    done
-
 
537
  fi
-
 
538
}
505
539
506
      if [ $SORT -eq 1 ]; then
540
# exit codes
507
        if [ $VERBOSE -eq 1 ]; then
-
 
508
          echo "Sorting vocabulary: '"$DICT"'"
-
 
509
          echo "Executing: sort -d -f -o "$DICT" -t "$DELIMITER" "$DICT
-
 
510
        fi
541
ESUCCESS=0
511
        RESULT=`sort -d -f -o "$DICT" -t $DELIMITER "$DICT"`
-
 
512
        SORT_EXIT=$?
542
ENO_DICT=1
513
        if [ $VERBOSE -eq 1 ]; then
-
 
514
          echo "sort returned exit code "$SORT_EXIT
-
 
515
          if [ $SORT_EXIT -eq 0 ]; then
543
EDICT_DIR_NOT_FOUND=2
516
            echo "Sorting successful: '"$DICT"'"
-
 
517
          else
544
EDICT_NOT_FOUND=3
518
            echo "Sorting failed: '"$DICT"'"
545
EDICT_WRONG_FORMAT=4
519
          fi
546
EDICT_EXPR_CONTAINED=5
520
          echo
547
EDICT_TEMP_ERROR=6
521
        fi
548
EDICT_CREATE_ERROR=7
522
        exit $SORT_EXIT
549
EDICT_DELETE_EXPR_NOT_FOUND=8
523
      fi
550
EDICT_REMOVE=9
524
551
525
      if [ $REPAIR -eq 1 ]; then
-
 
526
        if [ $VERBOSE -eq 1 ]; then echo $DICT": Repairing dictionary" ; fi
-
 
527
        TMPFILE=`mktemp -q /tmp/$APPFILENAME.XXXXXX`
-
 
528
        if [ $? -ne 0 ]; then
-
 
529
          if [ $VERBOSE -eq 1 ]; then echo $APPFILENAME": Can't create temp file, exiting..." ; fi
-
 
530
          exit EDICT_TEMP_ERROR
-
 
531
        else
552
# argument flags
532
          grep -e "^#$DELIMITER" "$DICT" &>$TMPFILE
-
 
533
          grep -e ".$DELIMITER." "$DICT" >>$TMPFILE
-
 
534
          if [ $? -eq 0 ]; then mv $TMPFILE $DICT &>/dev/null ; fi
553
dictionary=0 # if 1, -d refers to the dictionary file instead of an entry
535
          if [ $? -ne 0 ]; then
-
 
536
            if [ $VERBOSE -eq 1 ]; then echo $DICT": Unable to repair dictionary (cannot replace file)" ; fi
-
 
537
            exit EDICT_REPLACE_ERROR
-
 
538
          else
-
 
539
            $DICT": Repair successful"
-
 
540
          fi
-
 
541
        fi
-
 
542
      fi
-
 
543
554
-
 
555
# option flags - may be replaced by declare -i FLAG
-
 
556
add=0
-
 
557
addinfo=0
-
 
558
brackets=0
-
 
559
create=0
-
 
560
delete=0
-
 
561
info=0
-
 
562
messages=0
-
 
563
overwrite=0
-
 
564
phrase=0
-
 
565
repair=0
-
 
566
reverse=0
544
      TRANSL=""
567
show_version=0
-
 
568
sort=0
-
 
569
sound=0
-
 
570
verbose=0
-
 
571
zero=0
-
 
572
-
 
573
if $(getopt -T >/dev/null 2>&1); [ $? = 4 ]; then
545
      REVERSE_TRANSL=""
574
  getopt_type=long
546
      REVERSE_TRANSL_CAPT="T"
575
#  echo "getopt(1) type:     enhanced" >&2
-
 
576
  tmp=$(getopt -o hVbmpoRrSsvzA:a:c:D:d:E:e:i:t: \
547
      REVERSE_TRANSL_ON=" (reverse)"
577
               -l help,version\
-
 
578
,brackets,messages,phrase,overwrite,repair,reverse,sort,sound,verbose,zero\
-
 
579
,add:,addinfo:,dictionary:,delete:word-separator:\
-
 
580
,about,cmd,dictionary-help,dev,emp,1,x,example \
548
      REVERSE_TRANSL_CAPT_ON="Reverse t"
581
               -n "$appname" \
549
      if [ $REVERSE -eq 1 ]; then
582
               -- "$@")
-
 
583
else
-
 
584
  getopt_type=short
550
        REVERSE_TRANSL=$REVERSE_TRANSL_ON
585
#  echo "getopt(1) type:     old" >&2
551
        REVERSE_TRANSL_CAPT=$REVERSE_TRANSL_CAPT_ON
586
  tmp=$(getopt bdhVmpoRrSsvzA:a:c:D:E:e:i: "$@")
552
      fi
587
fi
-
 
588
-
 
589
getopt_exit_code=$?
-
 
590
553
      if [ $PHRASE -eq 1 ] ; then
591
if [ $getopt_exit_code -eq 0 ]; then
554
        if [ $VERBOSE -eq 1 ]; then echo "Looking up phrase"$REVERSE_TRANSL": '"$1"'" ; fi
592
##     getopt  returns  error  code 0 for successful parsing, 1 if
-
 
593
##     getopt(3) returns errors, 2 if it does not understand its
-
 
594
##     own parameters, 3 if an internal error occurs like out-of-
555
        if [ $ZERO -eq 0 ]; then
595
##     memory, and 4 if it is called with -T.
-
 
596
#
-
 
597
# Note the quotes around '$tmp': they are essential!
-
 
598
#  echo $tmp
-
 
599
# remove "--"
556
          TRANSL="$1" ; if [ $BRACKETS -eq 1 ]; then TRANSL="["$TRANSL"]" ; fi
600
#  for i in $tmp; do if [ "$i" != "--" ]; then tmp2="${tmp2} $i"; fi; done
-
 
601
  eval set -- "$tmp"
-
 
602
  echo "${extd}New arguments:      $*$norm" >&2
-
 
603
-
 
604
  # First pass to make sure that only help is displayed if wanted
557
        fi
605
  for arg in $*
-
 
606
  do
558
        translate "$1"
607
    case "$arg" in
-
 
608
      -h | --help)      help; exit $ESUCCESS;;
559
        if [ -n "$RESULT" ]; then
609
#      -V | --version)  show_version=1;;
560
          TRANSL=$RESULT
610
      --)               break;;
-
 
611
    esac
-
 
612
  done
-
 
613
561
          if [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSL"'" ; fi
614
  # Second pass to deal with the other options
-
 
615
  while true
-
 
616
  do
-
 
617
    case "$1" in
562
        else
618
      # switches
563
          if [ $VERBOSE -eq 1 ]; then
619
      -b | --brackets)       brackets=1;;
564
            if [ $ZERO -eq 1 ]; then
620
      -r | --reverse)        reverse=1;;
565
              echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): '"$1"'"
621
      -v | --verbose)        verbose=1; title; copyright;;
566
            else
622
      # options
567
              if [ $BRACKETS -eq 1 ]; then
623
      -D | --dictionary)     shift; dict="$1";;
568
                echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (enclosing phrase in brackets): '"$1"'"
624
      -t | --word-separator) shift; wsep="$1";;
569
              else
625
      --)                    shift; break;;
-
 
626
    esac
-
 
627
    shift
-
 
628
  done
-
 
629
  [ -n "$*" ] && args=$args" $*"
570
                echo $CH_SOUND$REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): '"$1"'"
630
  [ -z "$args" -a $show_version -eq 0 -a -z "$dict" ] && echo help
571
              fi
631
  set -- $args
-
 
632
else
-
 
633
#  echo "getopt exited: $getopt_exit_code
572
            fi
634
#  " >&2
-
 
635
  if [ $getopt_exit_code -eq 1 ] || [ $getopt_exit_code -eq 2 ]; then
573
          fi
636
    echo
574
        fi
637
    echo help
575
      else
638
  else
576
        for word in $1; do
639
    exit $getopt_exit_code
-
 
640
  fi
-
 
641
fi
-
 
642
-
 
643
if [ -n "$1" ]; then
577
          if [ $ZERO -eq 0 ]; then  TRANSLWORD="$word" ; else TRANSLWORD="" ; fi
644
  # retrieve arguments and use default settings from environment variable
-
 
645
  arguments=$*
578
          if [ $VERBOSE -eq 1 ]; then echo "Looking up word"$REVERSE_TRANSL": "$word ; fi
646
  [ -n "$TRANSLATE_OPTIONS" ] && arguments=$arguments" "$TRANSLATE_OPTIONS
-
 
647
 
-
 
648
  # check options
-
 
649
#  for argument in $arguments
-
 
650
#  do
579
          translate "$word"
651
#    case "$argument" in
-
 
652
#      "-m" | "--messages") messages=1;;
580
          if [ -n "$RESULT" ]; then
653
#      "-p" | "--phrase")   phrase=1;;
-
 
654
#      "-r" | "--reverse")  reverse=1;;
-
 
655
#      "-s" | "--sound")    sound=1;;
581
            TRANSLWORD=$RESULT
656
#      "-z" | "--zero")     zero=1;;
-
 
657
#      "--a" | "--about")   copying; exit $ESUCCESS;;
-
 
658
#      "--c" | "--cmd")     cmdHelp; exit $ESUCCESS;;
582
            if [ -n "$RESULT" ] && [ $VERBOSE -eq 1 ]; then echo $REVERSE_TRANSL_CAPT"ranslation: '"$TRANSLWORD"'" ; fi
659
#      "--d" | "--dictionary-help")    dictHelp; exit $ESUCCESS;;
-
 
660
#      "--dev" | "--emp")   devInfo; exit $ESUCCESS;;
583
          else
661
#      "--1") single_page=1;;
584
            if [ $ZERO -eq 0 ] && [ $BRACKETS -eq 1 ]; then TRANSLWORD="["$TRANSLWORD"]" ; fi
662
#      "--x" | "--example") example; exit $ESUCCESS;;
585
            if [ $VERBOSE -eq 1 ]; then
663
#      "-h" | "--help")    help; exit $ESUCCESS;;
-
 
664
#    esac
-
 
665
#  done
-
 
666
 
-
 
667
  [ $sound -eq 1 ] && ch_sound=$ch_sound_on
-
 
668
 
586
              if [ $ZERO -eq 1 ]; then
669
  if [ -n "$dict" ]; then
587
                echo $REVERSE_TRANSL_CAPT"ranslation failed (return not translatable tokens as null-string): "$word
670
#    # concatenate dictionary root and given dictionary file
588
              else
671
#    dict="$dict$2"
589
                if [ $BRACKETS -eq 1 ]; then
672
#    # check for dictionary commands
-
 
673
#    case "$1" in
590
                  echo $REVERSE_TRANSL_CAPT"ranslation failed (enclosing word in brackets): "$word
674
#      "-d" | "--delete") delete=1 ; dictionary=1 ;;
591
                else
675
#      "-c" | "--create") create1;;
592
                  echo $REVERSE_TRANSL_CAPT"ranslation failed (leave 'as is'): "$word
676
#      "-i" | "--info")   info=1;;
593
                fi
677
#      "-S" | "--sort")   sort=1;;
-
 
678
#      "-R" | "--repair") repair=1;;
594
              fi
679
#    esac
-
 
680
#    
595
            fi
681
#    case "$3" in
-
 
682
#      "-a"  | "--add")       add=1;;
-
 
683
#      "-A" | "--addinfo")   addinfo=1;;
-
 
684
#      "-d"  | "--delete")    delete=1;;
-
 
685
#      "-o"  | "--overwrite") overwrite=1;;
596
          fi
686
#    esac
-
 
687
#
-
 
688
#    if [ $verbose -eq 1 ]; then
597
          TRANSL=$TRANSL" "$TRANSLWORD
689
#      if [ -z "$TRANSLATE_DIR" ]; then
-
 
690
#        echo "Dictionary root (program directory): '"$appfiledir"'"
598
        done
691
#      else
-
 
692
#        echo "Dictionary root (TRANSLATE_DIR): '"$TRANSLATE_DIR"'"
599
      fi
693
#      fi
-
 
694
#      echo "Dictionary file: '$2'"
-
 
695
#      echo "Dictionary file path: '$dict'"
-
 
696
#    fi
-
 
697
#
-
 
698
#    DEFAULT_INFO="$appname $appver dictionary file created by '$(whoami)' on $(date)"
-
 
699
#
-
 
700
#    [ $create -eq 1 ] && create
-
 
701
#
-
 
702
    if [ -e "$dict" ]; then # if dictionary file exists
-
 
703
      check_dictionary
-
 
704
-
 
705
#      [ $addinfo -eq 1 ] && add_info
-
 
706
#      [ $info -eq 1 ] && info
-
 
707
#      [ $add -eq 1 ] && add_translation
-
 
708
#      [ $overwrite -eq 1 ] && replace_translation
-
 
709
#      [ $delete -eq 1 ] && delete
-
 
710
#      [ $sort -eq 1 ] && sort_dictionary
-
 
711
#      [ $repair -eq 1 ] && repair
-
 
712
     
-
 
713
      translate_all "$@"
-
 
714
           
600
      if [ $VERBOSE -eq 1 ]; then echo "Overall translation:" ; fi
715
      [ $verbose -eq 1 ] && echo "Overall translation:"
601
      if [ -n "$TRANSL" ]; then echo $TRANSL ; fi
716
      [ -n "$TRANSL" ] && echo $TRANSL
602
      if [ $VERBOSE -eq 1 ]; then echo ; fi
717
      [ $verbose -eq 1 ] && echo
603
    else
718
    else
604
      # send errmsg to stderr
719
      # send errmsg to stderr
605
      if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then
720
      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
721
        [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound"$appfilename: Unable to locate dictionary root: '"$TRANSLATE_DIR"'" 1>&2
607
      else
722
      else
608
        if [ $INFO -eq 0 ] && [ $ADD -eq 1 ] || [ $OVERWRITE -eq 1 ]; then
723
        if [ $info -eq 0 ] && [ $add -eq 1 ] || [ $overwrite -eq 1 ]; then
609
          if [ $VERBOSE -eq 1 ]; then
724
          if [ $verbose -eq 1 ]; then
610
            echo
725
            echo
611
            echo $DICT": Creating dictionary"
726
            echo $dict": Creating dictionary"
612
          fi
727
          fi
613
          if [ -n "$4" ]; then
728
          if [ -n "$4" ]; then
614
            if [ -z "$5" ]; then
729
            if [ -z "$5" ]; then
615
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date`"'" ; fi
730
              [ $verbose -eq 1 ] && echo $dict": Adding information: '"$appname" "$appver" dictionary file created by '"$(whoami)"' on "$(date)"'"
616
              echo "#"$DELIMITER$APPNAME" "$APPVER" dictionary file created by '"`whoami`"' on "`date` &>$DICT
731
              echo "#"$delimiter$appname" "$appver" dictionary file created by '"$(whoami)"' on "$(date) &>$dict
617
            else
732
            else
618
              if [ $VERBOSE -eq 1 ]; then echo $DICT": Adding information: '"$5"'" ; fi
733
              [ $verbose -eq 1 ] && echo $dict": Adding information: '"$5"'"
619
              echo "#"$DELIMITER$5 &>$DICT
734
              echo "#"$delimiter$5 &>$dict
620
            fi
735
            fi
621
            if [ $? -eq 0 ]; then
736
            if [ $? -eq 0 ]; then
622
              if [ $VERBOSE -eq 1 ]; then
737
              if [ $verbose -eq 1 ]; then
623
                echo $DICT": Adding expression: '"$1"'"
738
                echo $dict": Adding expression: '"$1"'"
624
                echo $DICT": Adding translation: '"$4"'"
739
                echo $dict": Adding translation: '"$4"'"
625
              fi
740
              fi
626
              echo $1$DELIMITER$4 >>$DICT
741
              echo $1$delimiter$4 >>$dict
627
            else
742
            else
628
              if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": Unable to create dictionary file: '"$DICT"'" ; fi
743
              [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound$appfilename": Unable to create dictionary file: '"$dict"'"
629
              exit EDICT_CREATE_ERROR
744
              exit EDICT_CREATE_ERROR
630
            fi
745
            fi
631
          else
746
          else
632
            if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then echo $CH_SOUND$APPFILENAME": No translation given for '"$1"'" ; fi
747
            [ $messages -eq 1 ] || [ $verbose -eq 1 ] && echo $ch_sound$appfilename": No translation given for '"$1"'"
633
          fi
748
          fi
634
        else
749
        else
-
 
750
          if [ $messages -eq 1 ] || [ $verbose -eq 1 ]; then
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
751
           echo >&2 "$ch_sound$appfilename: Unable to locate dictionary file: '$dict'"
-
 
752
          fi
636
        fi
753
        fi
637
      fi
754
      fi
638
      if [ $VERBOSE -eq 1 ]; then echo ; fi
755
      [ $verbose -eq 1 ] && echo
639
      if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then
756
      if [ -n "$TRANSLATE_DIR" ] && [ ! -e "$TRANSLATE_DIR" ]; then
640
        exit $EDICT_DIR_NOT_FOUND
757
        exit $EDICT_DIR_NOT_FOUND
641
      else
758
      else
642
        exit $EDICT_NOT_FOUND
759
        exit $EDICT_NOT_FOUND
643
      fi
760
      fi
644
    fi
761
    fi
645
  else
762
  else
646
    if [ $MESSAGES -eq 1 ] || [ $VERBOSE -eq 1 ]; then
763
    if [ $messages -eq 1 ] || [ $verbose -eq 1 ]; then
647
      # send errmsg to stderr
764
      # send errmsg to stderr
648
      echo $CH_SOUND$APPFILENAME": No dictionary file given" 1>&2
765
      echo >&2 $ch_sound$appfilename": No dictionary file given"
649
    fi
766
    fi
650
    if [ $VERBOSE -eq 1 ]; then echo ; fi
767
    [ $verbose -eq 1 ] && echo
651
    exit $ENO_DICT
768
    exit $ENO_DICT
652
  fi
769
  fi
653
else
770
else
654
  help
771
  help
655
fi
772
fi
656
 
773