読者です 読者をやめる 読者になる 読者になる

astyleを拡張forに対応させる

シェルスクリプト
Debianのstatableリポジトリの)astyleが拡張forに対応してないのでsedでどうにかしてみた

sed -e "s/\([:blank:]*for[:blank:]*\)\(.*\):\(.*\)/\1\2;;\3/g" | astyle -j | sed -e "s/\([:blank:]*for[:blank:]*\)\(.*\);;\(.*\)/\1\2:\3/g"

:を;;に置き換えてastyleしたあとに;;をもう一度:に置換する

でもこれだと
;;で無限ループ書く人が使うとえらい目に合う.

そこで,
:

;/* dummy for astyle */;
に置き換えて
astyleしたあとに
;/* dummy for astyle */;
をもう一度
:
に置換する

sed -e "s/\([:blank:]*for[:blank:]*\)\(.*\):\(.*\)/\1\2;\/\* dummy for astyle \*\/;\3/g" | astyle -j | sed -e "s/\([:blank:]*for[:blank:]*\)\(.*\);\/\* dummy for astyle \*\/;\(.*\)/\1\2:\3/g"

まさか/* dummy for astyle */などと書くやつはおるまい.

さらにC#とどれにも当てはまらないと全部消えちゃうバグを修正して

#!/bin/sh

case "$GEDIT_CURRENT_DOCUMENT_TYPE" in
 "text/x-csrc" )
  astyle -c
  ;;
 "text/x-c++src" )
  astyle -c
  ;;
 "text/x-csharp" )
  astyle -c --brackets=break --indent-namespaces
  ;;
 "text/x-java" )
  sed -e "s/\([:blank:]*for[:blank:]*\)\(.*\):\(.*\)/\1\2;\/\* dummy for astyle \*\/;\3/g" | astyle -j | sed -e "s/\([:blank:]*for[:blank:]*\)\(.*\);\/\* dummy for astyle \*\/;\(.*\)/\1\2:\3/g"
  ;;
 "text/x-python" )
  ;;
 "text/x-tex" )
  ;;
 "text/html" )
  tidy -utf8 -i --tab-size 2 | unexpand -t 2
  ;;
 * )
  cat
  ;;
esac