slitaz-base-files view rootfs/lib/libtaz.sh @ rev 288

libtaz.sh: use familiar separator in output=raw
author Aleksej Bobylev <al.bobylev@gmail.com>
date Mon Nov 30 02:33:22 2015 +0200 (2015-11-30)
parents efc8f188db6e
children cca198d5952c
line source
1 #!/bin/sh
2 #
3 # SliTaz Base functions.
4 # Documentation: `man libtaz` or /usr/share/doc/slitaz/libtaz.txt
5 #
6 # Copyright (C) 2012-2015 SliTaz GNU/Linux - BSD License
7 #
9 . /usr/bin/gettext.sh
10 alias sed="busybox sed"
12 # Internal
13 lgettext() { gettext -d 'slitaz-base' "$@"; }
14 translate_query() {
15 case $1 in
16 y) lgettext "y";;
17 Y) lgettext "Y";;
18 n) lgettext "n";;
19 N) lgettext "N";;
20 # Support other cases but keep them untranslated.
21 *) echo "$1" ;;
22 esac
23 }
24 okmsg="$(lgettext 'Done')"
25 ermsg="$(lgettext 'Failed')"
26 : ${okcolor=32}
27 : ${ercolor=31}
28 : ${decolor=36}
30 # Parse cmdline options and store values in a variable.
31 for opt in "$@"; do
32 opt_name="${opt%%=*}"; opt_name="$(echo -n "${opt_name#--}" | tr -c 'a-zA-Z0-9' '_')"
33 case "$opt" in
34 --[0-9]*=*) export _$opt_name="${opt#*=}" ;;
35 --[0-9]*) export _$opt_name=yes ;;
36 --*=*) export $opt_name="${opt#*=}" ;;
37 --*) export $opt_name=yes ;;
38 esac
39 done
40 [ "$HTTP_REFERER" ] && output='html'
45 # i18n functions
46 _() { local T="$1"; shift; printf "$(eval_gettext "$T")" "$@"; echo; }
47 _n() { local T="$1"; shift; printf "$(eval_gettext "$T")" "$@"; }
48 _p() { local S="$1" P="$2" N="$3"; shift 3; printf "$(ngettext "$S" "$P" "$N")" "$@"; }
50 # Get terminal columns
51 get_cols() { stty size 2>/dev/null | busybox cut -d' ' -f2; }
53 # Last command status
54 status() {
55 local check=$?
56 case $output in
57 raw|gtk)
58 done=" $okmsg"
59 error=" $ermsg";;
60 html)
61 done=" <span class=\"float-right color$okcolor\">$okmsg</span>"
62 error=" <span class=\"float-right color$ercolor\">$ermsg</span>";;
63 *)
64 done="[ \\033[1;${okcolor}m${okmsg}\\033[0;39m ]"
65 error="[ \\033[1;${ercolor}m${ermsg}\\033[0;39m ]";;
66 esac
67 case $check in
68 0) echo -e "$done";;
69 *) echo -e "$error";;
70 esac
71 }
73 # Line separator
74 separator() {
75 case $output in
76 gtk) echo '--------';;
77 html) echo -n '<hr/>';;
78 *)
79 local cols=$(get_cols)
80 printf "%${cols:-80}s\n" | tr ' ' "${1:-=}";;
81 esac
82 }
84 # New line
85 newline() { echo; }
87 # Display a bold message
88 boldify() {
89 case $output in
90 raw) echo "$@" ;;
91 gtk) echo "<b>$@</b>" ;;
92 html) echo "<strong>$@</strong>" ;;
93 *) echo -e "\\033[1m$@\\033[0m" ;;
94 esac
95 }
97 # Colorize message
98 colorize() {
99 : ${color=$1}
100 shift
101 case $output in
102 raw|gtk) echo "$@";;
103 html) echo -n "<span class=\"color$color\">$@</span>";;
104 *) case $color in
105 0*) echo -e "\\033[${color:-38}m$@\\033[39m";;
106 *) echo -e "\\033[1;${color:-38}m$@\\033[0;39m";;
107 esac;;
108 esac
109 unset color
110 }
112 # Indent text
113 indent() {
114 local in="$1"
115 shift
116 echo -e "\033["$in"G $@";
117 }
119 # Extended MeSsaGe output
120 emsg() {
121 local sep="\n--------\n"
122 case $output in
123 raw)
124 echo "$@" | sed -e 's|<b>||g; s|</b>||g; s|<c [0-9]*>||g; \
125 s|</c>||g; s|<->|'$sep'|g; s|<n>|\n|g; s|<i [0-9]*>| |g' ;;
126 gtk)
127 echo "$@" | sed -e 's|<c [0-9]*>||g; s|</c>||g; s|<->|'$sep'|g; \
128 s|<n>|\n|g; s|<i [0-9]*>| |g' ;;
129 html)
130 echo "$@" | sed -e 's|<b>|<strong>|g; s|</b>|</strong>|g; \
131 s|<c \([0-9]*\)>|<span class="color\1">|g; s|</c>|</span>|g; \
132 s|<n>|<br/>|g; s|<->|<hr/>|g; s|<i [0-9]*>| |g' ;;
133 *)
134 local sep="\n"
135 local cols=$(get_cols)
136 [ "$cols" ] || cols=80
137 for c in $(seq 1 $cols); do
138 sep="${sep}="
139 done
140 echo -en "$(echo "$@" | sed -e 's|<b>|\\033[1m|g; s|</b>|\\033[0m|g;
141 s|<c 0\([0-9]*\)>|\\033[\1m|g; s|<c \([1-9][0-9]*\)>|\\033[1;\1m|g;
142 s|</c>|\\033[0;39m|g; s|<n>|\n|g;
143 s|<->|'$sep'|g; s|<i \([0-9]*\)>|\\033[\1G|g')"
144 [ "$1" != "-n" ] && echo
145 ;;
146 esac
147 }
149 # Check if user is logged as root
150 check_root() {
151 if [ $(id -u) != 0 ]; then
152 lgettext "You must be root to execute:"; echo " $(basename $0) $@"
153 exit 1
154 fi
155 }
157 # Display debug info when --debug is used.
158 debug() {
159 [ -n "$debug" ] && echo "$(colorize $decolor 'DEBUG:') $1"
160 }
162 # Confirmation
163 confirm() {
164 if [ -n "$yes" ]; then
165 true
166 else
167 if [ -n "$1" ]; then
168 echo -n "$1 "
169 else
170 echo -n " ($(translate_query y)/$(translate_query N)) ? "
171 fi
172 read answer
173 [ "$answer" == "$(translate_query y)" ]
174 fi
175 }
177 # Log activities
178 log() {
179 echo "$(date '+%F %R') : $@" >> ${activity:-/var/log/slitaz/libtaz.log}
180 }
182 # Print two-column list of options with descriptions
183 optlist() {
184 local in cols col1=1 line
185 in="$(echo "$1" | sed 's| *| |g')"
186 cols=$(get_cols); [ "$cols" ] || cols=80
187 IFS=$'\n'
188 for line in $in; do
189 col=$(echo -n "$line" | cut -f1 | wc -m)
190 [ $col -gt $col1 ] && col1=$col
191 done
192 echo "$in" | sed 's|\t|&\n|' | fold -sw$((cols - col1 - 4)) | \
193 sed "/\t/!{s|^.*$|[$((col1 + 4))G&|g}" | sed "/\t$/{N;s|.*| &|;s|\t\n||}"
194 }
196 # Wrap words in long terminal message
197 longline() {
198 cols=$(get_cols)
199 echo -e "$@" | fold -sw${cols:-80}
200 }
202 # Print localized title
203 title() {
204 case $output in
205 html) echo "<section><header>$(_ "$@")</header><pre class=\"scroll\">";;
206 *) newline; boldify "$(_ "$@")"; separator;;
207 esac
208 }
210 # Print footer
211 footer() {
212 case $output in
213 html) echo "</pre><footer>$1</footer></section>";;
214 *) separator; echo "$1"; [ -n "$1" ] && newline;;
215 esac
216 }
218 # Print current action
219 action() {
220 local w cols scol msg chars padding
221 w=$(_ 'w'); w=${w/w/10}
222 cols=$(get_cols); cols=${cols:-80}; scol=$(( $cols - $w ))
223 msg="$(_n "$@" | fold -sw$scol)"
224 chars=$(echo -n "$msg" | tail -n1 | wc -m); padding=$(( $scol - $chars ))
225 msg="$(printf '%s%'$padding's' "$msg" "")"
227 case $output in
228 raw|gtk|html) echo -n "$msg";;
229 *) echo -ne "\033[0;33m$msg\033[0m";;
230 esac
231 }
233 # Print long line as list item
234 itemize() {
235 case $output in
236 gtk) echo "$@";;
237 *)
238 local inp="$@" cols=$(get_cols) first offset
239 cols="${cols:-80}"
240 first="$(echo -e "$inp" | fold -sw$cols | head -n1)"
241 echo "$first"
242 cols1="$(echo "${first:1}" | wc -c)"
243 offset=$(echo "$first" | sed -n 's|^\([^:\*-]*[:\*-]\).*$|\1|p' | wc -m)
244 echo "${inp:$cols1}" | fold -sw$((cols - offset)) | awk \
245 '($0){printf "%'$offset's%s\n","",$0}'
246 ;;
247 esac
248 }