Home Wiki > openSUSE:Перевод документации/Скрипты
Sign up | Login

openSUSE:Перевод документации/Скрипты

tagline: Материал из openSUSE

Сборка документации

html

Здесь находятся стабильные версии скриптов для автоматического обновления из svn репозитория и сборки документации openSUSE.

Последние версии скриптов и дополнительную информацию можно найти тут

Скрипт make_susedochtml.sh

  • обновляет данные из svn репозитория
  • если данные обновились, производит html сборку документации
  • если сборка завершилась успешно, копирует файлы в директорию web сервера
#! /bin/bash
 
PIDFILE=~/.make_susedochtml.pid
dSource=~/121_trans
dTarget=/srv/www/htdocs/xboct.org/doc/121_trans
 
if [ -e $PIDFILE ]
then
  PID=$(cat $PIDFILE)
  date -u "+%F %T Процесс сборки HTML уже запущен. $PID" >&2
  exit 4
fi
 
echo $$ >$PIDFILE
 
cd $dSource
 
date -u "+%F %T Проверяем, есть ли обновления в репозитории"
SVNret=$(svn up | tail -n 1)
if [[ $SVNret =~ ^Updated\ to\ revision\ [0-9]*\.$ ]] 
then
  date -u "+%F %T Репозиторий обновлен ($SVNret), приступаем к сборке."
  daps -e ENV-opensuse-html html || {
    date -u "+%F %T Сбой при выполнении make html. $?" >&2
    rm $PIDFILE
    exit 1
  }
 
  date -u "+%F %T Сборка HTML версии выполнена, копируем в каталог веб сервера"
 
  if [ -d $dTarget ] 
  then
    ( rsync -au --delete-after --exclude=images $dSource/build/opensuse-html/html/opensuse-html/* $dTarget &&
      rsync -au --delete-after --copy-links $dSource/build/opensuse-html/html/opensuse-html/images $dTarget ) || {
      date -u "+%F %T Сбой при копировании файлов в каталог '$dTarget'. $?" >&2
      rm $PIDFILE
      exit 3
    }
    date -u "+%F %T Сборка новой версии завершена успешно ($SVNret)."  >&2
    date -u "+%F %T ======================================================"
  else
    date -u "+%F %T Целевой каталог '$dTarget' недоступен." >&2
    rm $PIDFILE
    exit 2
  fi
else
    date -u "+%F %T Обновлений нет ($SVNret)."
fi
 
rm $PIDFILE
exit 0

PDF

в разработке

Построение дерева вложений

#! /bin/bash

 

dXML=~/temp/susedocs/114_trans/xml

fMain=MAIN.opensuse.xml

sTab=".   "

 

if [ -n "$1" ] 

then

	fMain=$1

fi



function maketree {

	list=$(perl -0777 -p -e "s/<!--.*?-->//gs; s/<(\w+)(?=[^>]*os=)(?![^>]*osuse)[^>\/]*>.*?<\/\1>//gsi; s/.*?(<xi:include(?(?=[^>]*os=)[^>]*(?=osuse)[^>]*|[^>]*)>)|.*/\1\n/gs; s/.*?href=\"([^\"]*)[^<]*/\1 /gs" $dXML/$1)

	#echo "list: $list"

	for item in $list; do

		echo "$2$item"

		maketree $item "$sTab$2"

	done

}





echo $fMain

maketree $fMain "$sTab"



 

exit 0

Статистика

Скрипты для подсчета количества переведенных слов производят следующие действия

Очищают данные находящиеся в xml файлах от:

  • Комментариев (s/<!--.*?-->//gs;)
  • Содержимого тегов screen, remark, keycap (s/<screen>.*?<\/screen>//gsi; s/<remark>.*?<\/remark>//gsi; s/<keycap>.*?<\/keycap>//gsi;)
  • От содержимого тегов, которые не относятся к osuse (s/<(\w+)(?=[^>]*os=)(?![^>]*osuse)[^>\/]*>.*?<\/\1>//gsi;)
  • От таблиц, превращая их в параграфы не содержащие тегов(while (s/<table[^>]*>(.*?)<\/table>//si) {print $1=~ m/(?<=>)[^<]*(?=<)/gsi; print "</para>";})
  • От переносов строк, перенос строки ставится в конце абзаца (s/\n//gsi; s/<\/para>/\n/;)
  • Самих тегов (s/<.*?>//gs;)
  • От переменных(s/[&%][a-z]*?;//gi;)
  • От надписи "Have a lot of fun" (s/Have a lot of fun//gi;)
  • От любых символов кроме букв и пробелов (s/[^ a-zA-Zа-яА-Я]*//g;)
  • От пробелов в начале строки (s/^ *//g;)
  • От пустых строк (/^ *$/d;)

Дальше подсчитывают количество всех слов, и количество слов в строках, где встречаются русские буквы.

в виде списка

#! /bin/bash
 
dXML=~/temp/susedocs/121_trans/xml
tmpfile=/tmp/statsusedoc.$$

if [ -n "$1" ]; then
	dXML=$(echo "$1" | sed "s/\/$//")
fi
 
cd $dXML
 
for file in *.xml
do
	#tmpfile=$file.tmp~
	perl -0777 -p -e 's/<!--.*?-->//gs; s/<screen>.*?<\/screen>//gsi; s/<remark>.*?<\/remark>//gsi; s/<keycap>.*?<\/keycap>//gsi; s/<(\w+)(?=[^>]*os=)(?![^>]*osuse)[^>\/]*>.*?<\/\1>//gsi; while (s/<table[^>]*>(.*?)<\/table>//si) {print $1=~ m/(?<=>)[^<]*(?=<)/gsi; print "</para>";}' $file | perl -0777 -p -e 's/\n/ /gsi; s/<\/para>/\n/gsi; s/<.*?>//gs; s/[&%][a-z]*?;//gi; s/Have a lot of fun//gi;' | sed 's/[^ a-zA-Zа-яА-Я]*//g; s/  */ /g;' > $tmpfile
	sWall=$(cat $tmpfile | wc -w)
	if [ $sWall != 0 ]
	then
		sWtrans=$(grep -i "[а-я]" $tmpfile | wc -w)
		let "sPerc = sWtrans * 100 / sWall"
		echo "$file слов $sWall переведено $sWtrans ($sPerc%)"
		let "sAll = sAll + sWall"
		let "sAtrans = sAtrans + sWtrans"
	fi
	#rm $tmpfile
done
 
let "sPerc = sAtrans * 100 / sAll"
echo "Итого: слов $sAll переведено $sAtrans ($sPerc%)"
 
rm $tmpfile
 
exit 0

в виде дерева

#! /bin/bash
 
dXML=~/temp/susedocs/121_trans/xml
fMain=MAIN.opensuse.xml
sTab=".   "

cd $dXML
 
for file in *.xml
do
	tmpfile=$file.tmp~
	perl -0777 -p -e 's/<!--.*?-->//gs; s/<screen>.*?<\/screen>//gsi; s/<remark>.*?<\/remark>//gsi; s/<keycap>.*?<\/keycap>//gsi; s/<(\w+)(?=[^>]*os=)(?![^>]*osuse)[^>\/]*>.*?<\/\1>//gsi; while (s/<table[^>]*>(.*?)<\/table>//si) {print $1=~ m/(?<=>)[^<]*(?=<)/gsi; print "</para>";}' $file | perl -0777 -p -e 's/\n/ /gsi; s/<\/para>/\n/gsi; s/<.*?>//gs; s/[&%][a-z]*?;//gi; s/Have a lot of fun//gi;' | sed 's/[^ a-zA-Zа-яА-Я]*//g; s/  */ /g;' > $tmpfile
done


function maketree {
	sAll="0"
	sAtrans="0"
	sWall="0"
	sWtrans="0"
	val=""

	if [ -z "$1" ]
	then
		list=`echo $fMain`
#		$2=$sTab
	else
		list=$(perl -0777 -p -e "s/<!--.*?-->//gs; s/<(\w+)(?=[^>]*os=)(?![^>]*osuse)[^>\/]*>.*?<\/\1>//gsi; s/.*?(<xi:include(?(?=[^>]*os=)[^>]*(?=osuse)[^>]*|[^>]*)>)|.*/\1\n/gs; s/.*?href=\"([^\"]*)[^<]*/\1 /gs" $1)
		#echo "list: $list"
	fi

	for item in $list; do
		retval=`maketree $item "$sTab$2"`
		if [ -s $item.tmp~ ]
		then
			sWall=$(cat $item.tmp~ | wc -w)
			#if [ $sWall != 0 ]
			#then
			sWtrans=$(grep -i "[а-я]" $item.tmp~ | wc -w)
			rm $item.tmp~
			let "sPerc = sWtrans * 100 / sWall"
			if [ -z "$val" ]; then
				val="$2$item $sWtrans из $sWall ($sPerc%)"
			else
				val="$val
$2$item $sWtrans из $sWall ($sPerc%)"
			fi
			let "sAll = sAll + sWall"
			let "sAtrans = sAtrans + sWtrans"
		else
			if [ -z "$val" ]; then
				val="$2$item ( ^ )"
			else
				val="$val
$2$item ( ^ )"
			fi
		fi

		if [ -n "$retval" ]; then
			ret=`echo "$retval" | tail -n 1` 
			sInclAll=`echo "$ret" | awk '{print $1}'`
			sInclTrans=`echo "$ret" | awk '{print $2}'`
			if [ "$sInclAll" != "0" ]; then
				let "sInclPerc = sInclTrans * 100 / sInclAll"
				val="$val + $sInclTrans из $sInclAll ($sInclPerc%)"
				let "sAll = sAll + sInclAll"
				let "sAtrans = sAtrans + sInclTrans"
				let "sSumAll = sWall + sInclAll"
				let "sSumTrans = sWtrans + sInclTrans"
				let "sSumPerc = sSumTrans * 100 / sSumAll"
				val="$val = $sSumTrans из $sSumAll ( $sSumPerc% )"; 
			fi
			val=`echo "$val"; echo "$retval" | sed '$d'`
		fi
	done
	if [ -n "$val" ]
	then
		echo "$val
$sAll $sAtrans"
	fi
}


#echo $fMain
#maketree $fMain "$sTab"
wow=`maketree`
echo "$wow" | sed '$d'
 
exit 0

в виде дерева с wiki разметкой

#! /bin/bash
 
dXML=~/temp/susedocs/121_trans/xml
fMain=MAIN.opensuse.xml
sTab="*"

br="
"

cd $dXML
 
for file in *.xml
do
	tmpfile=$file.tmp~
	perl -0777 -p -e 's/<!--.*?-->//gs; s/<screen>.*?<\/screen>//gsi; s/<remark>.*?<\/remark>//gsi; s/<keycap>.*?<\/keycap>//gsi; s/<(\w+)(?=[^>]*os=)(?![^>]*osuse)[^>\/]*>.*?<\/\1>//gsi; while (s/<table[^>]*>(.*?)<\/table>//si) {print $1=~ m/(?<=>)[^<]*(?=<)/gsi; print "</para>";}' $file | perl -0777 -p -e 's/\n/ /gsi; s/<\/para>/\n/gsi; s/<.*?>//gs; s/[&%][a-z]*?;//gi; s/Have a lot of fun//gi;' | sed 's/[^ a-zA-Zа-яА-Я]*//g; s/  */ /g;' > $tmpfile
done


function maketree {
	sAll="0"
	sAtrans="0"
	sWall="0"
	sWtrans="0"
	val=""

	if [ -z "$1" ]
	then
		list=`echo $fMain`
#		$2=$sTab
	else
		list=$(perl -0777 -p -e "s/<!--.*?-->//gs; s/<(\w+)(?=[^>]*os=)(?![^>]*osuse)[^>\/]*>.*?<\/\1>//gsi; s/.*?(<xi:include(?(?=[^>]*os=)[^>]*(?=osuse)[^>]*|[^>]*)>)|.*/\1\n/gs; s/.*?href=\"([^\"]*)[^<]*/\1 /gs" $1)
		#echo "list: $list"
	fi

	for item in $list; do
		retval=`maketree $item "$sTab$2"`
		if [ -s $item.tmp~ ]
		then
			sWall=$(cat $item.tmp~ | wc -w)
			#if [ $sWall != 0 ]
			#then
			sWtrans=$(grep -i "[а-я]" $item.tmp~ | wc -w)
			rm $item.tmp~
			let "sPerc = sWtrans * 100 / sWall"
			if [ -n "$val" ]; then
				val="$val$br"
			fi
			if [ "$2" == "*" ]; then
				val="$val
==$item==
"
			fi
			val="$val$2{{Docprogress|file=$item|fileTrans=$sWtrans|fileAll=$sWall|filePerc=$sPerc%"

			let "sAll = sAll + sWall"
			let "sAtrans = sAtrans + sWtrans"
		else
			if [ -n "$val" ]; then
				val="$val$br"
			fi
			val="$val$2{{Docprogress|file=$item"
		fi

		if [ -n "$retval" ]; then
			ret=`echo "$retval" | tail -n 1` 
			sInclAll=`echo "$ret" | awk '{print $1}'`
			sInclTrans=`echo "$ret" | awk '{print $2}'`
			if [ "$sInclAll" != "0" ]; then
				let "sInclPerc = sInclTrans * 100 / sInclAll"
#				val="$val + $sInclTrans из $sInclAll ($sInclPerc%)"
				let "sAll = sAll + sInclAll"
				let "sAtrans = sAtrans + sInclTrans"
				let "sSumAll = sWall + sInclAll"
				let "sSumTrans = sWtrans + sInclTrans"
				let "sSumPerc = sSumTrans * 100 / sSumAll"
				val="$val|inclTrans=$sSumTrans|inclAll=$sSumAll|inclPerc=$sSumPerc%"
			fi
			val=`echo "$val}}"; echo "$retval" | sed '$d'`
		else
			val="$val}}"
		fi
	done
	if [ -n "$val" ]
	then
		echo "$val
$sAll $sAtrans"
	fi
}

wikitree=`maketree`
echo "$wikitree" | sed '$d'

ret=`echo "$wikitree" | tail -n 1`
sInclAll=`echo "$ret" | awk '{print $1}'`
sInclTrans=`echo "$ret" | awk '{print $2}'`
echo "
[[Слов в документации::$sInclAll| ]] [[Переведено слов в документации::$sInclTrans| ]]"
 
exit 0

Cкорость перевода для wiki

#! /bin/bash
 
svnurl=http://svn.opensuse.org/svn/opensuse-doc/trunk/documents/distribution/ru
days=14


tmpdir=susedocoldxml.$$
tmpfile=/tmp/statsusedoc.$$
mkdir $tmpdir

cd /tmp

date=$(date --utc +%s)
let "date=date-86400*$days"
svndate=$(date +%F --date "1970-01-01 $date sec")

svn co -r \{$svndate\} $svnurl $tmpdir/

cd $tmpdir
for file in *.xml
do
	#tmpfile=$file.tmp~
	perl -0777 -p -e 's/<!--.*?-->//gs; s/<screen>.*?<\/screen>//gsi; s/<remark>.*?<\/remark>//gsi; s/<keycap>.*?<\/keycap>//gsi; s/<(\w+)(?=[^>]*os=)(?![^>]*osuse)[^>\/]*>.*?<\/\1>//gsi; while (s/<table[^>]*>(.*?)<\/table>//si) {print $1=~ m/(?<=>)[^<]*(?=<)/gsi; print "</para>";}' $file | perl -0777 -p -e 's/\n/ /gsi; s/<\/para>/\n/gsi; s/<.*?>//gs; s/[&%][a-z]*?;//gi; s/Have a lot of fun//gi;' | sed 's/[^ a-zA-Zа-яА-Я]*//g; s/  */ /g;' > $tmpfile
	sWall=$(cat $tmpfile | wc -w)
	if [ $sWall != 0 ]
	then
		sWtrans=$(grep -i "[а-я]" $tmpfile | wc -w)
		let "sAll = sAll + sWall"
		let "sAtrans = sAtrans + sWtrans"
	fi
	#rm $tmpfile
done

echo "
_______________________________________________________________

{{docspeed|переведено=$sAtrans|time=$date}}
_______________________________________________________________
"

cd ..
rm $tmpfile
rm -rf $tmpdir
exit 0