Subversion Repositories LCARS

Rev

Details | Last modification | View Log | RSS feed

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