Обсуждение:GentooBookRU
Материал из Gentoo Linux Wiki
Цель - составить содержание и скрипт MakeGentooBookRU.sh такие чтобы можна было автоматически создавать отформатированую книгу "Сборник статей о Gentoo Linux" в html формате.
Содержание |
[править] MakeGentooBookRU.sh
#!/bin/bash
# 20071215 MakeGentooBookRU.sh hse@ukr.net
# Distributed under the terms of the GNU General Public License v3 or later
# Depends on:
# converter - wiki2html http://tools.wikimedia.de/~merphant/wiki2html/
# converter - odt2html http://holloway.co.nz/docvert/
# Edit to suite yours configuration:
# Location of documentations:
gentoodoc=~/GentooBookRU
# url:
link='http://ru.gentoo-wiki.com'
# page:
page='/index.php'
# Documentation name:
name='GentooBookRU'
# Download format
if [ -z $1 ]
then
# download='wiki'
download='html'
else
download="$1"
fi
if [[ "$download" == 'wiki' ]]
then
ext=''; sufix='&action=raw'
elif [[ "$download" == 'html' ]]
then
ext='.html'; sufix='&printable=yes'
else
echo "Usage:
MakeGentooBookRU.sh wiki
MakeGentooBookRU.sh html
"
exit 1
fi
echo -n "Create list of documentations and $gentoodoc/index ... "
# Create if needed output dir:
mkdir -p $gentoodoc
wget -q -c -N -O $gentoodoc/index "${link}${page}?title=${name}&action=raw"
echo "index" > $gentoodoc/doclist
echo ' OK!'
((i=1)); s=`awk "{if (NR==$i) print}" $gentoodoc/index`
while [ -n "$s" ]
do
s6="`echo $s |cut -c -6`"
s5="`echo $s |cut -c -5`"
# Download wiki formated documentations from ru.gentoo-wiki.com to local file:
if [[ "`echo $s |cut -c -2`" == '[[' ]]
then
pagename="`echo $s |cut -c 3- |awk -F'|' '{print$1}'`"
filename=`echo $pagename |sed "s/$name\///"`
echo -n "Download to: $gentoodoc/$filename$ext ..."
wget -q -c -N -O $gentoodoc/$filename$ext "${link}${page}?title=$pagename$sufix"
echo "$filename$ext" >> $gentoodoc/doclist
echo ' OK!'
elif [[ "$s6" == '<h1>[[' || "$s6" == '<h2>[[' || "$s6" == '<h3>[[' || "$s6" == '<h4>[[' ]]
then
pagename="`echo $s |cut -c 7- |awk -F'|' '{print$1}'`"
filename=`echo $pagename |sed "s/$name\///"`
echo -n "Download to: $gentoodoc/$filename$ext ..."
wget -q -c -N -O $gentoodoc/$filename$ext "${link}${page}?title=$pagename$sufix"
echo "$filename$ext" >> $gentoodoc/doclist
echo ' OK!'
# Download html formated documentations from other site to local file:
elif [[ "`echo $s |cut -c -1`" == '[' ]]
then
url="`echo $s |cut -c 2- |awk '{print $1}'`"
pagename=`echo $s |cut -c 2- |awk -F']' '{print $1}' |awk -F"$url " '{print $2}'`
((j=10))
while [ -z "$pagename" ];
do
u="`echo $url |cut -c $j-`"; ((j=$j+10))
pagename=`echo $s |cut -c 2- |awk -F']' '{print $1}' |awk -F"$u " '{print $2}'`
done
echo -n "Download to: $gentoodoc/$pagename.html ..."
wget -q -c -N -O "$gentoodoc/$pagename.html" "$url"
echo ' OK!'
elif [[ "$s5" == '<h1>[' || "$s5" == '<h2>[' || "$s5" == '<h3>[' || "$s5" == '<h4>[' ]]
then
url="`echo $s |cut -c 6- |awk '{print $1}'`"
pagename=`echo $s |cut -c 6- |awk -F']' '{print $1}' |awk -F"$url " '{print $2}'`
((j=10))
while [ -z "$pagename" ];
do
u="`echo $url |cut -c $j-`"; ((j=$j+10))
pagename=`echo $s |cut -c 2- |awk -F']' '{print $1}' |awk -F"$u " '{print $2}'`
done
echo -n "Download to: $gentoodoc/$pagename.html ..."
wget -q -c -N -O "$gentoodoc/$pagename.html" "$url"
echo ' OK!'
fi
((i=$i+1)); s=`awk "{if (NR==$i) print}" $gentoodoc/index`
done
# Download immages for documentations to local file:
for i in `cat $gentoodoc/doclist`
do
cat $gentoodoc/$i |grep '\[\[Image:' |awk -F'Image:' '{print $2 }' |awk '{print $1 }' |awk -F']]' '{print $1 }' >> $gentoodoc/imglist
done
page='/Изображение:'
for i in `cat $gentoodoc/imglist`
do
echo -n "Download to: $gentoodoc/$i ..."
wget -q -c -N -O $gentoodoc/$i "${link}${page}$i"
page1=`cat $gentoodoc/$i | grep '<a href="/images/' |awk '{if (NR==1) print}' |awk -F'<a href="' '{print $2}' |awk -F'"' '{print $1}'`
rm $gentoodoc/$i
wget -q -c -N -O $gentoodoc/$i "${link}${page1}"
echo ' OK!'
done
sed 's/|/.html|/' $gentoodoc/index > $gentoodoc/index.tmp && mv $gentoodoc/index.tmp $gentoodoc/index
sed "s/\[\[$name\//\[\[/" $gentoodoc/index > $gentoodoc/index.tmp && mv $gentoodoc/index.tmp $gentoodoc/index
# Converting to UTF-8
iconv -f KOI8-R -t UTF-8 -o "$gentoodoc/Создание файловых систем.tmp" "$gentoodoc/Создание файловых систем.html" && mv "$gentoodoc/Создание файловых систем.tmp" "$gentoodoc/Создание файловых систем.html"
iconv -f CP1251 -t UTF-8 -o "$gentoodoc/Linux и файловые системы: еще раз о проблеме выбора.tmp" "$gentoodoc/Linux и файловые системы: еще раз о проблеме выбора.html" && mv "$gentoodoc/Linux и файловые системы: еще раз о проблеме выбора.tmp" "$gentoodoc/Linux и файловые системы: еще раз о проблеме выбора.html"
iconv -f CP1251 -t UTF-8 -o "$gentoodoc/Советы пользователям Gentoo.tmp" "$gentoodoc/Советы пользователям Gentoo.html" && mv "$gentoodoc/Советы пользователям Gentoo.tmp" "$gentoodoc/Советы пользователям Gentoo.html"
iconv -f CP1251 -t UTF-8 -o "$gentoodoc/Тонкая настройка IDE дисков с помощью hdparm.tmp" "$gentoodoc/Тонкая настройка IDE дисков с помощью hdparm.html" && mv "$gentoodoc/Тонкая настройка IDE дисков с помощью hdparm.tmp" "$gentoodoc/Тонкая настройка IDE дисков с помощью hdparm.html"
# Converting odt to html
cp "$gentoodoc/Linux не для идиотов: сборник рассказов и рецептов.html" "$gentoodoc/Linux_не_для_идиотов.odt"
odt2html "$gentoodoc/Linux_не_для_идиотов.odt" > "$gentoodoc/Linux не для идиотов: сборник рассказов и рецептов.html"
# Converting wiki2html
echo -n "Converting wiki to html ... "
for i in `cat $gentoodoc/doclist`
do
if [[ "${i##*.}" == 'html' ]]
then
sed -s 's/>\[</></' "$gentoodoc/$i" > "$gentoodoc/tmp"
sed -s 's/>править<\/a>\]/><\/a>/' "$gentoodoc/tmp" > "$gentoodoc/$i"
sed -s 's/<div id="jump-to-nav">Перейти к: <a href="#column-one">навигация<\/a>, <a href="#searchInput">поиск<\/a><\/div>//' "$gentoodoc/$i" > "$gentoodoc/tmp"
echo '</body></html>' >> "$gentoodoc/tmp" # to prevent error
rm -f "$gentoodoc/$i"
((j=1)); s=`awk "{if (NR==$j) print}" $gentoodoc/tmp`
while [[ "`echo $s |cut -c -35`" != '<!-- Saved in parser cache with key' && "`echo $s |cut -c -14`" != '</body></html>' ]]
do
echo $s >> "$gentoodoc/$i"
((j=$j+1)); s=`awk "{if (NR==$j) print}" $gentoodoc/tmp`
done
echo '</body></html>' >> "$gentoodoc/$i"
else
wiki2html -b . -i . -t $name -o $gentoodoc/$i.html $gentoodoc/$i
sed 's/<title>GentooBookRU<\/title>/<meta http-equiv=Content-Type content="text\/html; charset=UTF-8">\n<title>GentooBookRU<\/title>/' $gentoodoc/$i.html > $gentoodoc/$i.tmp && mv $gentoodoc/$i.tmp $gentoodoc/$i.html
sed 's/<link rel="stylesheet" type="text\/css" href="http:\/\/localhost\/wiki.css">/ /' $gentoodoc/$i.html > $gentoodoc/$i.tmp && mv $gentoodoc/$i.tmp $gentoodoc/$i.html
sed 's/=".\//="/' $gentoodoc/$i.html > $gentoodoc/$i.tmp && mv $gentoodoc/$i.tmp $gentoodoc/$i.html
sed 's/<body>/<body>\n<a name="top" id="top"><\/a>/' $gentoodoc/$i.html > $gentoodoc/$i.tmp && mv $gentoodoc/$i.tmp $gentoodoc/$i.html
sed 's/<\/body>/\n<br><br><a href="#top">наверх<\/a><br>\n<\/body>/' $gentoodoc/$i.html > $gentoodoc/$i.tmp && mv $gentoodoc/$i.tmp $gentoodoc/$i.html
rm $gentoodoc/$i
fi
done
rm -f "$gentoodoc/tmp"
echo " OK!"
echo -n "Create indexes ... "
rm -f $gentoodoc/index
((i=1)); s=`awk "{if (NR==$i) print}" $gentoodoc/index.html`
while [ -n "$s" ]
do
if [[ "`echo $s |cut -c -32`" == '<a class="extlink" href="http://' ]]
then
pagename="`echo $s |awk -F'>' '{print $2}' |awk -F'<' '{print $1}'`"
echo '<a class="internal" href="'$pagename.html'">'"$pagename</a>`echo $s |awk -F'</a>' '{print $2}'`" >> $gentoodoc/index
elif [[ "`echo $s |cut -c -36`" == '<h1><a class="extlink" href="http://' ]]
then
pagename="`echo $s |awk -F'>' '{print $3}' |awk -F'<' '{print $1}'`"
echo '<h1><a class="internal" href="'$pagename.html'">'"$pagename</a>`echo $s |awk -F'</a>' '{print $2}'`" >> $gentoodoc/index
elif [[ "`echo $s |cut -c -36`" == '<h2><a class="extlink" href="http://' ]]
then
pagename="`echo $s |awk -F'>' '{print $3}' |awk -F'<' '{print $1}'`"
echo '<h2><a class="internal" href="'$pagename.html'">'"$pagename</a>`echo $s |awk -F'</a>' '{print $2}'`" >> $gentoodoc/index
elif [[ "`echo $s |cut -c -36`" == '<h3><a class="extlink" href="http://' ]]
then
pagename="`echo $s |awk -F'>' '{print $3}' |awk -F'<' '{print $1}'`"
echo '<h3><a class="internal" href="'$pagename.html'">'"$pagename</a>`echo $s |awk -F'</a>' '{print $2}'`" >> $gentoodoc/index
elif [[ "`echo $s |cut -c -36`" == '<h4><a class="extlink" href="http://' ]]
then
pagename="`echo $s |awk -F'>' '{print $3}' |awk -F'<' '{print $1}'`"
echo '<h4><a class="internal" href="'$pagename.html'">'"$pagename</a>`echo $s |awk -F'</a>' '{print $2}'`" >> $gentoodoc/index
else
echo "$s" >> $gentoodoc/index
fi
((i=$i+1)); s=`awk "{if (NR==$i) print}" $gentoodoc/index.html`
done
mv $gentoodoc/index $gentoodoc/index.html && sed 's/index/index.html/' $gentoodoc/doclist > $gentoodoc/doclist.tmp && mv $gentoodoc/doclist.tmp $gentoodoc/doclist
cd $gentoodoc/
ls A.* B.* C.* D.* > $gentoodoc/doclist
declare -a symbolnum; symbolnum=(A B C D)
echo 'Настольная книга Gentoo Linux x86.html' >> $gentoodoc/doclist
echo 'Настольная книга по безопасности Gentoo.html' >> $gentoodoc/doclist
((i=1)); f=`awk "{if (NR==$i) print}" $gentoodoc/doclist`
while [ -n "$f" ]
do
rm -f "$gentoodoc/$f.tmp"
((j=1)); s=`awk "{if (NR==$j) print}" "$gentoodoc/$f"`; ((symboln=0))
while [ -n "$s" ]
do
if [[ "`echo $s |cut -c -18`" == '<b><a href="?part=' ]]
then
pagename="`echo $s |awk -F'>' '{print $3}' |awk -F'<' '{print $1}'`"
# num="`echo $s |awk -F'&chap=' '{print $2}' |awk -F'\">' '{print $1}' |awk -F'&' '{print $1}' `"
num="`echo $s |awk -F'chap=' '{print $2}' |awk -F'\">' '{print $1}' |awk -F'&' '{print $1}' `"
[ -z "$num" ] && num="${symbolnum[$symboln]}" && ((symboln=$symboln+1))
echo '<a class="internal" href="'$num. $pagename.html'">'"$pagename</a>`echo $s |awk -F'</a>' '{print $2}'`" >> "$gentoodoc/$f.tmp"
else
echo "$s" >> "$gentoodoc/$f.tmp"
fi
((j=$j+1)); s=`awk "{if (NR==$j) print}" "$gentoodoc/$f"`
done
mv "$gentoodoc/$f.tmp" "$gentoodoc/$f"
((i=$i+1)); f=`awk "{if (NR==$i) print}" $gentoodoc/doclist`
done
sed -s 's/пользователей\/групп/пользователей и групп/' "A. Безопасность системы.html" > "A. Безопасность системы.html.tmp" && mv "A. Безопасность системы.html.tmp" "A. Безопасность системы.html"
sed -s 's/пользователей\/групп/пользователей и групп/' "Настольная книга по безопасности Gentoo.html" > "Настольная книга по безопасности Gentoo.html.tmp" && mv "Настольная книга по безопасности Gentoo.html.tmp" "Настольная книга по безопасности Gentoo.html"
echo " OK!"
rm $gentoodoc/doclist
rm $gentoodoc/imglist
exit 0
[править] Bugs
1. Мой konqueror не открывает http://ru.wikipedia.org/wiki/UNIX это страница такая навороченая или какаято зараза к ней ципляется?
2. Содержание может иметь пустые строки только в конце!
3. Плохо написан и долго работает, надо бы бампануть код...
Других багов пока не замечено.
[править] To do
1. Протестировать скрипт и подправить где надо чтобы лучше формировались страницы, проверить ссылки, добавить опцию дающюю возможность создавать всю книгу в одном html файле.
2. Думаю целесообразно завести второй том книги куда скидывать ссылки на прикладное програмное обеспечение.
3. Нарисовать красивую обложку :)
[править] <br>
Скриптик которым добавлял <br> в конец строки.
#!/bin/bash
echo '' > 2
((i=1))
s=`awk "{if (NR==$i) print}" 1`
while [ -n "$s" ];
do
echo "${s}"'<br>' >> 2
((i=$i+1))
s=`awk "{if (NR==$i) print}" 1`
done
mv -f 2 1
exit 0
Табличька делается простой заменой.
