wesnoth-l10n-tools/statistics

275 rader
9.8 KiB
Bash
Executable File
Permalänk Blame Historik

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Check translations, generate verbose statistics.
# Copyright (C) 2004 Recai Oktas <roktas@omu.edu.tr>
# Copyright (C) 2007-2008 Andrius Štikonas <andrius@stikonas.eu> (my code can also be used under GPLv3 or any later)
# MediaWiki 'glamdrol' style sheet Copyright (C) 2005 by Jordą Polo <jorda AT ettin DOT org> Based on 'monobook', by Gabriel Wicke
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as published by
# the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
source "$(dirname $0)/variables"
LC_ALL=C
ODD_CHARS='<27>'
CL=0 # counter for css style
STATUS="OK" # Total status of translations
while getopts ":c" opt; do
case $opt in
c)
CORE_TEXTDOMAINS="wesnoth lib editor help units multiplayer anl tutorial" ;;
esac
done
for BRANCH in $BRANCHES; do
echo -e "Repository: $BLUE$BRANCH$ENDCOLOR"
STATSFILE="statistics-$BRANCH.html"
ERRORS="translation-errors-$BRANCH"
nerror=0; nwarn=0; npo=0; nt=0; nu=0; nf=0
rm -f "$STATSFILE"
echo -e "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"
\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">
<head>
<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=utf-8\" />
<title>Battle for Wesnoth</title>
<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.wesnoth.org/wesmere/css/wesmere-1.1.0.css\" />
<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.wesnoth.org/wesmere/css/gettext-1.1.0.css\" />
</head>
<body>
<div id=\"main\">
<div id=\"nav\" role=\"banner\">
<div class=\"centerbox\">
<div id=\"logo\">
<a href=\"https://www.wesnoth.org/\" aria-label=\"Wesnoth logo\"></a>
</div>
<div id=\"nav\">
<ul>
<li><a href=\"https://www.wesnoth.org/\">Home</a></li>
<li><a href=\"https://www.wesnoth.org/wiki/Play\">Play</a></li>
<li><a href=\"https://www.wesnoth.org/wiki/Create\">Create</a></li>
<li><a href=\"https://www.wesnoth.org/forum/\">Forums</a></li>
<li><a href=\"https://www.wesnoth.org/wiki/Support\">Support</a></li>
<li><a href=\"https://www.wesnoth.org/wiki/Project\">Project</a></li>
<li><a href=\"https://www.wesnoth.org/wiki/Credits\">Credits</a></li>
</ul>
</div>
</div>
</div>
</div>
<h1 style=\"display:inline\">Wesnoth translation stats</h1>
<div> <br/> </div><p style=\"display:inline\">Last update: <strong>
$(LC_TIME="en_US.UTF-8" date)
</strong></p>
<div> <br/> </div>
<table class=\"gettext-stats\">
<thead><thead><tr>
<th class=\"title\" scope=\"col\">Textdomain</th>
<th scope=\"col\">Status</th>
<th class=\"translated\" scope=\"col\">Translated</th>
<th class=\"translated percent\" scope=\"col\">%</th>
<th class=\"fuzzy\" scope=\"col\">Fuzzy</th>
<th class=\"fuzzy percent\" scope=\"col\">%</th>
<th class=\"untranslated\" scope=\"col\">Untranslated</th>
<th class=\"untranslated percent\" scope=\"col\">%</th>
<th class=\"strcount\" scope=\"col\">Total</th>
<th class=\"graph\" scope=\"col\">Graph</th></tr></thead>
<tbody><tr>" >> "$STATSFILE"
if [ -n "$CORE_TEXTDOMAINS" ]; then
POFILES=$BRANCH/$(echo "$CORE_TEXTDOMAINS" | awk '$NF=$NF "*.po"' OFS="*.po $BRANCH/")
else
POFILES="$BRANCH/*.po"
fi
for files in $POFILES; do
file=$(basename "$files")
filename=$(basename "$file" .po)
npo=$((npo + 1)); has_errors="no"; has_warnings="no";
# Extract the declared charset, may be we use this in future.
charset=$(sed -n '/^"Content-Type:/ s/.*charset=\([a-zA-Z0-9_-]*\).*/\1/p' "$BRANCH/$file")
echo -n "Checking $file for UTF-8 inconsistencies... "
if $ISUTF8 < "$BRANCH/$file" > /dev/null 2>&1; then
if ! echo "$charset" | grep -qi "UTF-8"; then
has_errors="yes"
echo -e "${RED}FAILED; non UTF-8 charset declaration for UTF-8 content$ENDCOLOR"
echo "$file: non UTF-8 charset declared for UTF-8 content; expect to see 'charset=UTF-8'." >> "$ERRORS"
else
echo -e "${GREEN}OK$ENDCOLOR"
fi
else
if echo "$charset" | grep -qi "UTF-8"; then
has_errors="yes"
echo -e "${RED}FAILED; non UTF-8 content for UTF-8 charset declaration$ENDCOLOR"
echo "$file: UTF-8 charset declared for non UTF-8 content; expect to see a non UTF-8 charset." >> "$ERRORS"
else
echo -e "${GREEN}OK$ENDCOLOR"
fi
fi
echo -n "Checking $file for odd characters... "
if grep -nH $ODD_CHARS "$BRANCH/$file" >> "$ERRORS"; then
has_warnings="yes"
echo -e "${RED}FAILED; odd characters found$ENDCOLOR"
echo "$file: one or more odd character from the '$ODD_CHARS' set found." >> "$ERRORS"
else
echo -e "${GREEN}OK$ENDCOLOR"
fi
# Makes sense only if the file passed the UTF-8 check.
if [ "$has_errors" = "no" ]; then
echo -n "Checking $file with msgfmt... "
if ! LC_MESSAGES=C $MSGFMT --check -o /dev/null "$BRANCH/$file" >> "$ERRORS"; then
has_errors="yes"
echo -e "${RED}FAILED$ENDCOLOR"
else
echo -e "${GREEN}OK$ENDCOLOR"
fi
fi
rf=0; ru=0; t=0; u=0; f=0; rt=0
if [ "$has_errors" = "yes" ]; then
nerror=$((nerror + 1))
sum=0
st="Error"
if [ $STATUS = "OK" ]; then
STATUS="Error"
fi
if [ $STATUS = "Warning" ]; then
STATUS="Error"
fi
else
stat=$(LC_MESSAGES=C $MSGFMT --statistics -o /dev/null "$BRANCH/$file" 2>&1)
t=$(echo "$stat" | sed -ne 's/\([0-9]\+\) translated .*/\1/p'); t=${t:-0}
u=$(echo "$stat" | sed -ne 's/.* \([0-9]\+\) untranslated .*/\1/p'); u=${u:-0}
f=$(echo "$stat" | sed -ne 's/.* \([0-9]\+\) fuzzy translation.*/\1/p'); f=${f:-0}
sum=$((t + f + u))
if [ ! "$sum" -eq 0 ]; then
rt=$(printf '%s%d%s%d\n' "scale=2; 100*" "$t" "/" $sum | bc)
fi
if [ ! "$sum" -eq 0 ]; then
rf=$(printf '%s%d%s%d\n' "scale=2; 100*" "$f" "/" $sum | bc)
fi
if [ ! "$sum" -eq 0 ]; then
ru=$(printf '%s%d%s%d\n' "scale=2; 100*" "$u" "/" $sum | bc)
fi
nt=$((nt + t)); nu=$((nu + u)); nf=$((nf + f))
st="OK"
if [ "$has_warnings" = "yes" ]; then
nwarn=$((nwarn + 1))
st='Warning'
if [ "$STATUS" = "OK" ]; then
STATUS='Warning'
fi
fi
fi
echo "<tr class=\"row-$CL\">" >> "$STATSFILE"
CL=$(( (CL+1)%2 ))
echo " <td class=\"textdomain-name\" align=\"left\"><strong><a href=\"$BRANCH/$filename.po\">$(basename "$filename")</a></strong></td>
<td align=\"center\">$st</td>
<td class=\"translated\" align=\"right\">$t</td>" >> "$STATSFILE"
printf '%s%.2f%s\n' " <td class=\"percent\" align=\"right\">" "$rt" "</td>" >> "$STATSFILE"
echo " <td class=\"fuzzy\" align=\"right\">$f</td>" >> "$STATSFILE"
printf '%s%.2f%s\n' " <td class=\"percent\" align=\"right\">" "$rf" "</td>" >> "$STATSFILE"
echo " <td class=\"untranslated\" align=\"right\">$u</td>" >> "$STATSFILE"
printf '%s%.2f%s\n' " <td class=\"percent\" align=\"right\">" "$ru" "</td>" >> "$STATSFILE"
echo " <td class=\"strcount\" align=\"right\">$sum</td>" >> "$STATSFILE"
n4=$(printf '%s%f\n' "scale=2; 9*" "$rt" | bc)
n6=$(printf '%s%f\n' "scale=2; 9*" "$rf" | bc)
n8=$(printf '%s%f\n' "scale=2; 9*" "$ru" | bc)
printf '%s%.2f%s%.2f%s%.2f%s\n' " <td class=\"graph\"><span class=\"stats-bar green-bar\" style=\"width:" "$n4" "px\"></span><span class=\"stats-bar blue-bar\" style=\"width:" "$n6" "px\"></span><span class=\"stats-bar red-bar\" style=\"width:" "$n8" "px\"></span></td>" >> "$STATSFILE"
echo "</tr>" >> "$STATSFILE"
done
if [ "$npo" -eq 0 ]; then
echo -e "${RED}No '${PO}.po' file under '$BRANCH'.$ENDCOLOR"
exit 0
fi
if [ "$nerror" -gt 0 ]; then
echo -n -e "${RED}Fatal errors found. See '"
tput smso; echo -n "$ERRORS"; tput rmso
echo -ne "' for details.$ENDCOLOR"
echo ""
else
echo -ne "${GREEN}No fatal errors found.$ENDCOLOR"
echo ""
if [ -s "$ERRORS" ]; then
echo -n -e "$RED See '"
tput smso; echo -n "$ERRORS"; tput rmso
echo -ne "' for warnings.$ENDCOLOR"
echo ""
else
rm -f "$ERRORS"
fi
fi
if [ "$npo" = "$nerror" ]; then
echo -en "${RED}All files have fatal errors.$ENDCOLOR"
echo ""
else
sum=$((nt + nf + nu))
nrt=$(printf '%s%d%s%d\n' "scale=2; 100*" $nt "/" $sum | bc)
nrf=$(printf '%s%d%s%d\n' "scale=2; 100*" $nf "/" $sum | bc)
nru=$(printf '%s%d%s%d\n' "scale=2; 100*" $nu "/" $sum | bc)
echo "<tfoot><tr class=\"teamstats\">
<th class=\"title\" scope=\"row\">Total</th>
<td align=\"center\">$STATUS</td>
<td class=\"translated\">$nt</td>" >> "$STATSFILE"
printf '%s%.2f%s\n' "<td align=\"right\">" "$nrt" "</td>" >> "$STATSFILE"
echo "<td class=\"fuzzy\">$nf</td>" >> "$STATSFILE"
printf '%s%.2f%s\n' "<td align=\"right\">" "$nrf" "</td>" >> "$STATSFILE"
echo "<td class=\"untranslated\">$nu</td>" >> "$STATSFILE"
printf '%s%.2f%s\n' "<td align=\"right\">" "$nru" "</td>" >> "$STATSFILE"
echo "<td class=\"strcount\">$((nt + nf + nu))</td>" >> "$STATSFILE"
nrt=$(printf '%s%f\n' "scale=2; 9*" "$nrt" | bc)
nrf=$(printf '%s%f\n' "scale=2; 9*" "$nrf" | bc)
nru=$(printf '%s%f\n' "scale=2; 9*" "$nru" | bc)
printf '%s%.2f%s%.2f%s%.2f%s\n' " <td class=\"graph\"><span class=\"stats-bar green-bar\" style=\"width:" "$nrt" "px\"></span><span class=\"stats-bar blue-bar\" style=\"width:" "$nrf" "px\"></span><span class=\"stats-bar red-bar\" style=\"width:" "$nru" "px\"></span></td>" >> "$STATSFILE"
echo "</tr>
</table>
</td>
</tr>
</table>
<div><br/></div>
<div id=\"footer\">
<div id=\"footnote\">
&copy; 2003-$(date +%Y) The Battle for Wesnoth<br/>
Site design Copyright © 20172018 by Iris Morelle.
<br/>
</div>
</div>
</div>
</body>
</html>" >> "$STATSFILE"
fi
done
# Exit with error count just because it may sense.
exit $nerror