| Server IP : 216.92.14.13 / Your IP : 216.73.216.171 Web Server : Apache System : Linux vps4089.pairvps.com 5.15.0-190-generic #200-Ubuntu SMP Fri Aug 7 15:06:04 UTC 2026 x86_64 User : rmlac2fmr ( 1040637) PHP Version : 8.2.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /bin/ |
Upload File : |
#!/bin/sh
#
# po4a-display-man shows a translated manpage, recompiling everything on the fly with po4a.
# Translators can see the effects of their work without reinstalling everything.
#
OPTIONS=""
usage() {
echo "Usage: $0 -p PO_FILE [-m MASTER_FILE] [-o PO4A_OPT]"
return 0
}
error () {
echo "Error: $1" 1>&2
exit 1
}
while getopts m:p:ho: option
do
case $option in
m)
MASTER="$OPTARG"
;;
p)
PO="$OPTARG"
;;
o)
OPTIONS="$OPTIONS $OPTARG"
;;
h)
usage
exit 0
;;
[?])
usage 1>&2
exit 1
;;
esac
done
if [ -z "$PO" ]
then
usage 1>&2
exit 1
fi
if [ ! -f "$PO" ]
then
error "could not find PO file: $PO"
fi
if [ -z "$MASTER" ]
then
echo "No manpage specified."
echo "Trying to find the manpage according to a line reference in the PO."
MASTER=$(grep -m 1 "^#:" $PO | sed -e 's/^.* \(.*\):.*$/\1/')
fi
find_man()
{
section="$1"
man="$2"
echo -n "Looking for manpage $file"
[ -n "$section" ] && echo " in section $section" || echo ""
MAN_NUMBER=`man --all --where --locale=C $section "$man" 2> /dev/null | wc -l`
if [ "$MAN_NUMBER" = "0" ]
then
return 1
elif [ "$MAN_NUMBER" != "1" ]; then
MAN_NUMBER=`man --all --where --locale=C $section "$man" 2> /dev/null | \
grep "\/$man\.$section\(.gz\)\?$" | wc -l`
if [ "$MAN_NUMBER" = "1" ]
then
MASTER=`man --where --locale=C "$section" "$man" | grep "\/$man\.$section\(.gz\)\?$"`
echo "Multiple manpages in section $section: $(man -aw -L C $section "$man"), only one exactly matches the section."
else
error "Too many possible manpages: $(man -aw -L C $section "$man"), you must specify the manpage or the section"
fi
else
MASTER=`man --where --locale=C "$section" "$man"`
fi
return 0
}
if [ ! -f "$MASTER" ]
then
echo "Can't find the master man page $MASTER"
file=$(basename "$MASTER")
MASTER=""
section=""
if ! find_man "" "$file"
then
# Maybe $file contains a section
# (in the form of file.section.extension)
section=$(echo "$file" | sed -ne 's/^.*\.\([1-9].*\)$/\1/; s/\..*//; p')
file=$(echo "$file" | sed -e 's/\.[1-9].*//')
if ! find_man "$section" "$file"
then
# Maybe there is an extension at the end of the manpage (e.g. .man)
file=$(echo "$file" | sed -e 's/\..*//')
if ! find_man "$section" "$file"
then
echo "No manpage found"
echo "You must provide the manpage with the -m option"
MASTER=""
fi
fi
fi
if [ -n "$MASTER" ]
then
echo "Using: $MASTER as the original manpage"
fi
fi
# checking mandatory options
if [ -z "$MASTER" ]
then
usage 1>&2
exit 1
fi
# checking files
if [ ! -e "$MASTER" ]
then
error "could not find master file: $MASTER"
fi
if [ "${MASTER%.gz}" = "$MASTER" ]
then
MAINNAME="$MASTER"
else
MAINNAME=`mktemp`
trap "rm \"$MAINNAME\"" EXIT INT
gunzip -c "$MASTER" > "$MAINNAME"
fi
CHARSET_MASTER=`file -i "$MAINNAME" | cut -d "=" -f 2`
CHARSET_PO=`file -i "$PO" | cut -d "=" -f 2`
po4a-translate -f man -k 0 -m "$MAINNAME" -M "$CHARSET_MASTER" \
-p "$PO" $OPTIONS| iconv -f "$CHARSET_PO" -t // | man -l -
# TODO: man may need some options (e.g. -L)
# as we cannot detect what options are needed, they will have to be
# specified on the po4a-display-man command line.