Skip to content


ASU – Administracja systemami unixowymi – projekt 2.7

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

Be Sociable, Share!

Posted in dev, general, ja już zaliczyłem - czas na Ciebie, uczelnia.

Tagged with , , .


0 Responses

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



Some HTML is OK

or, reply to this post via trackback.



SEO Powered by Platinum SEO from Techblissonline