Rev 15 | Go to most recent revision | Only display areas with differences | Ignore 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 |