![]()
![]()
Kolejny semestr studiowania, kolejne projekty. Znów okazja, by podzielić się dobrami studenckimi w myśl “ja już zaliczyłem, czas na Ciebie“. Tym razem ASU i projekt nr 2, dwuczęściowy. Pierwsza obejmowała Perla + Tk przy zarządzaniu użytkownikami i grupami. Podobno 12h roboty, jak nic. Nie zrobiłem
Druga część projektu była zróżnicowana, mi dostało się zadanie z transformowaniem tekstu. Proszę się częstować!
Treść zadania
Projekt 7
Konwerter plików tekstowych na HTML. Plik wejściowy przestrzego następujących konwencji:
- paragrafy oddzielone pustą linią,
- obrazy są umieszczone w katalogu images, odwołania do nich pojawiają się w pliku tekstowym w nawiasach kwadratowych
- tekst otoczony podkreśleniami (ze spacjami, czyli ” _” i “_ “) powinien być wyświetlany czcionką pochyłą,
- tekst otoczony gwiazdkami (ze spacjami, czyli ” *” i “* “) powinien być wyświetlany czcionką wytłuszczoną,
- tekst w nawiasach klamrowych jest łączem lub parą tekst|łącze (pionowa kreska), np.{http://example.com} lub {przykładowe łącze|http://example.com}.
Rozwiązanie
#!/bin/bash
# a scripthat transforms text file into html
# detailed rules are in attached pdf
# ASU 11L, Michal Pasieka aka profetes. http://profetes.pl/
# Some rights reserved, distributed under MIT Licence.
# checking the arguments
# there are 5 tags to be searched,
# <p> => beginning of the file till the end,
# </p><p> => on \n\n
# <b> on " *" and </b> on "* "
# {lll} into link with link as a test
# {aaa|bbb} into link with alternated text
usage="Usage: $0 -f outfile|- [<infile ]"
outfile=""
if [ $# -ne 2 ]; then
echo "$usage"
exit 1
fi
if [ $# -eq 2 ]; then
while getopts ":f:h" optname
do
case "$optname" in
"h")
echo "$usage"
;;
"f")
if [[ "$optname" == "" ]]; then
echo "no output filename provided! Exit!"
exit 2
fi
outfile=$OPTARG
;;
*)
echo "Unknown error while processing options"
echo "$usage"
;;
esac
done
fi
out=tmp
function subst {
echo $( cat $out | sed s/"$1"/"$2"/g ) > tmp2
mv tmp2 $out
}
# main loop for input
echo '<html><head></head><body><p>' > $out
#IFS=$'\n'
while read line # For as many lines as the input file has...
do
if [ "$line" == "" ]; then
echo "</p>\n<p>" >> $out
else
echo "$line" >> $out
fi
done
echo "</p></body></html>" >> $out
subst " _" " <i>"
subst "_ " "< \/i> "
subst " \*" " <b>"
subst "\* " "< \/b> "
subst " \[" "<img src=\"images\/"
subst "\] " "\" \/> "
# convert {.*|.*} into a link:
echo $( grep {.*} $out | sed -e 's/{\([^|}]*\)|\([^}]*\)}/<a href=\"\2\">\1< \/a>/g' ) > tmp2
mv tmp2 $out
#convert {.*} into a link:
echo $( grep {.*} $out | sed -e 's/{\([^}]*\)}/</a><a href=\"\1\">\1< \/a>/g' ) > tmp2
mv tmp2 $out
if [[ "$outfile" == "-" ]]; then
cat $out
rm $out
else
mv $out $outfile
fi
#eof!
Download
Paczuszkę z kodem, testami i przykładowym plikiem tekstowym można pobrać o tu

0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.