これはソースコードをマークダウンに変換する簡単なツールである。
まずは定数を定義する。
# In/Out Begin/End
IB='#{'
IE='#}'
OB='```sh'
OE='```'
# Comment char(s)
IC='#'
次に、モードを初期化する。モードには ini, txt, c の3種類がある。 ini は初期状態で、次の入力によって状態遷移する。 txt はコメント部分を読んでいる状態。 c はコード部分を読んでいる状態である。
mode=ini
cat "$@" |
sed '/^#!/d' |
sed 's/^/X/' |
while read l
do
case "$l" in
"X$IB"*) if [ $mode = c ]; then echo $OE; fi; mode=txt ;;
"X$IE"*) if [ $mode = txt ]; then mode=ini; fi ;;
"X$IC"*) if [ $mode = txt ]; then echo "$l" | sed "s/^X$IC //";
elif [ $mode = c ]; then echo "$l";
else echo $OB; mode=c; echo "$l"; fi ;;
*) if [ $mode = ini ]; then echo $OB; mode=c; fi; echo "$l" ;;
esac
done |
sed 's/^X//'
もしも、最終行がコードの中だった場合は、コードの終了をマークする。ただし、この箇所にはバグがあり、現状では機能しない。なんで?
[ $mode = c ] && echo $OE
: # exit 0
以上でプログラムは終わりである。