littool

What’s this これは何

これはソースコードをマークダウンに変換する簡単なツールである。

まずは定数を定義する。

# 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

以上でプログラムは終わりである。