Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/msgcc/msgadmin.sh
1808 views
1
########################################################################
2
# #
3
# This software is part of the ast package #
4
# Copyright (c) 2000-2011 AT&T Intellectual Property #
5
# and is licensed under the #
6
# Eclipse Public License, Version 1.0 #
7
# by AT&T Intellectual Property #
8
# #
9
# A copy of the License is available at #
10
# http://www.eclipse.org/org/documents/epl-v10.html #
11
# (with md5 checksum b35adb5213ca9657e911e9befb180842) #
12
# #
13
# Information and Software Systems Research #
14
# AT&T Research #
15
# Florham Park NJ #
16
# #
17
# Glenn Fowler <[email protected]> #
18
# #
19
########################################################################
20
: message catalog administration
21
22
command=msgadmin
23
24
case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
25
0123) ARGV0="-a $command"
26
USAGE=$'
27
[-?
28
@(#)$Id: msgadmin (AT&T Labs Research) 2001-06-08 $
29
]
30
'$USAGE_LICENSE$'
31
[+NAME?'$command$' - message catalog file administration]
32
[+DESCRIPTION?\b'$command$'\b administers message catalog files. If no \afile\a
33
operands are specified then all message files in the local
34
\b$INSTALLROOT\b source tree are operated on. Exactly one of
35
\b--generate\b, \b--remove\b, \b--translate\b, or \b--verify\b
36
must be specified.]
37
[D:debug?Passed to \btranslate\b(1).]
38
[a:all?Passed to \btranslate\b(1).]
39
[c:cache?Passed to \btranslate\b(1).]
40
[d:dialect?Operate on the dialects in the \b,\b separated \adialect\a list.
41
\b-\b means all dialects supported by \btranslate\b(1).]:[dialect:=-]
42
[f:force?Force binary catalog generation even when the current binary is newer
43
than the source.]
44
[g:generate?Generate and install \bgencat\b(1) binary message catalogs.]
45
[l:list?List each installed message catalog name paired with its input source.]
46
[n:show?Show commands but do not execute.]
47
[o:omit?Omit \btranslate\b(1) methods matching the \bksh\b(1)
48
\apattern\a.]:[pattern]
49
[r:remove?Remove all translated message files and work directories.]
50
[s:share?Generate and install \bmsggen\b(1) machine independent binary
51
message catalogs.]
52
[t:translate?Translate using \btranslate\b(1).]
53
[v:verify?Verify that translated message files satisfy \bgencat\b(1) syntax.]
54
55
[ file ... ]
56
57
[+SEE ALSO?\bgencat\b(1), \bksh\b(1), \bmsggen\b(1), \btranslate\b(1)]
58
'
59
;;
60
*) ARGV0=""
61
USAGE="Dcd:gno:rstv [ file ... ]"
62
;;
63
esac
64
65
usage()
66
{
67
OPTIND=0
68
getopts $ARGV0 "$USAGE" OPT '-?'
69
exit 2
70
}
71
72
messages()
73
{
74
if [[ $PACKAGEROOT && -d $PACKAGEROOT ]]
75
then MSGROOT=$PACKAGEROOT
76
else MSGROOT=$HOME
77
fi
78
set -- $MSGROOT/arch/*/src/cmd/INIT/INIT.msg
79
[[ -f $1 ]] || { print -u2 $"$command: INIT.msg: not found"; exit 1; }
80
MSGROOT=${1%/src/cmd/INIT/INIT.msg}
81
grep -l '^1' $MSGROOT/src/@(cmd|lib)/*/*.msg
82
}
83
84
integer n
85
typeset all cache dialect=- exec force omit op show verbose
86
typeset dir=$INSTALLROOT gen=gencat
87
88
while getopts $ARGV0 "$USAGE" OPT
89
do case $OPT in
90
D) debug=-D ;;
91
a) all=-a ;;
92
c) cache=-c ;;
93
d) dialect=$OPTARG ;;
94
f) force=1 ;;
95
g) op=generate ;;
96
l) op=list ;;
97
n) exec=print show=-n ;;
98
o) omit="-o $OPTARG" ;;
99
r) op=remove ;;
100
s) gen=msggen dir=$dir/share ;;
101
t) op=translate ;;
102
v) op=verify ;;
103
*) usage ;;
104
esac
105
done
106
shift $OPTIND-1
107
108
[[ $INSTALLROOT ]] || { print -u2 $"$command: INSTALLROOT not defined"; exit 1; }
109
110
case $op in
111
112
generate)
113
dir=$dir/lib/locale
114
[[ -d $dir ]] || { print -u2 $"$command: $dir: not found"; exit 1; }
115
(( ! $# )) && set -- C $(ls *-*.msg 2>/dev/null | sed 's,.*-\(.*\)\.msg,\1,' | sort -u)
116
owd=$PWD
117
for locale
118
do case $locale in
119
C) set -- $(messages) ;;
120
*) set -- *-$locale.msg ;;
121
esac
122
if [[ ! -f $1 ]]
123
then print -u2 "$command: $locale: no message files"
124
else nwd=$dir/$locale/LC_MESSAGES
125
[[ -d $nwd ]] || $exec mkdir -p $nwd || exit
126
[[ -d $nwd ]] && { cd $nwd || exit; }
127
for file
128
do case $file in
129
/*) name=${file##*/}
130
name=${name%*.msg}
131
;;
132
*) name=${file%-$locale.msg}
133
file=$owd/$file
134
;;
135
esac
136
if [[ $force || ! $name -nt $file ]]
137
then print -u2 $locale $name:
138
$exec rm -f $name $name.*
139
$exec $gen $name $file
140
fi
141
done
142
cd $owd
143
fi
144
done
145
;;
146
147
list) messages | sed 's,^.*/\(.*\)\.msg$,\1 &,'
148
;;
149
150
remove) (( !$# )) && set -- *.msg translate.tmp
151
$exec rm -rf "$@"
152
;;
153
154
translate)
155
(( !$# )) && set -- $(messages)
156
translate -lmv $all $cache $debug $omit $show $dialect "$@"
157
;;
158
159
verify) (( ! $# )) && set -- *.msg
160
for file
161
do n=0
162
while read -r num txt
163
do if [[ $num == +([0-9]) ]]
164
then ((n++))
165
if [[ $n != $num ]]
166
then if (( n == $num-1 ))
167
then print -u2 "$file: [$n] missing"
168
else print -u2 "$file: [$n-$(($num-1))] missing"
169
fi
170
n=$num
171
fi
172
fi
173
done < $file
174
done
175
;;
176
177
*) usage
178
;;
179
180
esac
181
182