bash.hilight for HmJre.dllNo.03882
安久津 さん 03/09/28 04:08
 
あくつです。
HmJre.dll の具合がいいです。(^^)
bash のハイライトで使ってみました。

● bash.hilight for HmJre.dll
//    カラー表示 -> モード = なし
//    特に強調表示1をコメントらしい色。
//    特に強調表示2を文字列らしい色に設定。
//--------------------
//行の強調表示1
//function
//21,^(function +)?[A-Za-z_][0-9A-Za-z_]* \(\)
21,^[A-Za-z_][0-9A-Za-z_]* \(\)
21,^function[\t ]+[A-Za-z_][0-9A-Za-z_]* \(\)
//--------------------
//特に強調表示1
//comment
27,^[\t ]*#.*$
27,(?<=[\t ;])#.*$
//--------------------
//特に強調表示2
//string,command
91,(?<!\\)(\\\\)*"[^"\\]*(\\.[^"\\]*)*"
91,(?<!\\)(\\\\)*'[^']*'
91,(?<!\\)(\\\\)*`[^`\\]*(\\.[^`\\]*)*`

● a.sh
echo hello# world
echo hello # world
echo ""
echo hello# world
echo hello;# world
echo ""
echo " # "
echo \" # "
echo \"#
echo \#
echo ""; var=ff
echo $(( 16#$var ))
echo $(( 2#11111111 ))
echo ""; var=abcXYZabc
echo ${var#*b}
echo ${var##*b}
echo ${var/#abc/---}
echo ${#var}
echo ""
set -- a b c; echo $#;

echo "hello"; echo \"hello\";
echo "\"hello world\""
echo \\"hello world"
echo \\\"hello world\"

echo `date`; echo \`date\`;

echo \'hello \'world
echo 'hello\' world'
next line'
echo ''

[ ]
RE:03882 HmJre による正規表現リテラルのNo.03883
IKKI さん 03/09/28 17:32
 
IKKI です。

> HmJre.dll の具合がいいです。(^^)
なかなかですね。(^^)b
私も Ruby 用のハイライトで正規表現リテラル / 〜 / の強調を試みました。

 // 正規表現リテラル(特に強調1)
 51,(?<!([a-zA-Z0-9_]+[!?]?|[)\]}"'`/$])[ \t]*)/([^/]|\\/)*/[iomxnesu]*(?![
\t]*[/"'`([{])
 51,(?<=(^|[^a-zA-Z0-9_$@.])(if|elsif|unless|when|while|until|and|or|not)([
\t]*\([^()]*(\([^()]*\)[^()]*)*\))?[ \t]*)/([^/]|\\/)*/[iomxnesu]*

文脈依存ですが、まあまあ実用レベルの色分けが実現できたと思います。
しかし(前方|後方)(一致|不一致)はかなりコストが高いようですね。
調子に乗って全部のキーワードを

 49,(?<![$@.])if(?![!?])
 49,(?<![$@.])elsif(?![!?])
 49,(?<![$@.])unless(?![!?])

という具合にしたら描画の様子が見えるくらい重くなりました。この場合、

 49,(?<![$@.])(if|elsif|unless)(?![!?])

という具合にまとめると軽くなります。 JRE32.DLL は | を 7 個までしか並べられ
ませんでしたが、 HMJRE.DLL は 128 個まで行けるようです。


ところで、括弧内で後方(一致|不一致)を使う

 hoge(a(?=b)|b(?=a))

のような書き方もできるようですが、これは仕様上問題ないのかな?

[ ]