HTMLモードでの正規表現を使った色分けの不具合?

  1. MeryWikiにHTML5の構文ファイルを投稿させていただきました。

    HTML5の要素・属性の追加に加え、同名の要素・属性があるものはそれぞれ色分けされるように要素名を正規表現で
    (?<=<|</)要素名(?=>| |$)
    のようにしてみました。

    これである程度テストしてうまく色分けできていたので投稿したのですが、その後色々HTMLファイルを見てみるとうまくいっていない(属性の色になってしまう)ケースがありました。

    カーソルの位置によって色が変わったりタブを切り替えると色が戻ったりと再現方法がいまいちわからないのでもしかしたら正規表現の書き方が悪いのかもしれませんが、styleタグが引金になってる気がします。

    例えば投稿させていただHTML5の構文ファイルをインポートし
    <style>
    body{color:#000;}
    </style>
    と書いて編集モードをHTMLにします。
    その後<style>の行にカーソルを移すとその行のstyleの色が変わります。
    そしてタブを切り替えて元に戻すと色が戻ります。(上記手順後に新しく作ったタブだと戻らない)

    styleタグがあると他の正規表現を使った要素名も色分けされない場合がありますが条件がよくわかりません。
    何かわかったらまた報告します。

     |  ucky  |  返信
  2. 正規表現なしで強調文字列がダブってるケースを色々試してみたんですが、関係ありそうな挙動がありました。

    HTMLモードしか試してないのですが強調文字列の個数や並び順で強調文字列(2)が優先される文字列と強調文字列(3)が優先される文字列が変わります。

    ダブってる文字列は
    abbr
    cite
    command
    dir
    font
    form
    itemtemplate
    label
    selecteditemtemplate
    separatortemplate
    span
    style
    title
    です。

    ●ダブってる13個のみの場合
    #Word Color=1, WholeWord=True, RightSide=False, MatchCase=False, InsideTag=True, RegEx=False

    #Word Color=2, WholeWord=True, RightSide=False, MatchCase=False, InsideTag=True, RegEx=False
    に上記13個の文字列だけをアルファベット順に記述した構文ファイルを上書きインポートした場合
    cite, span が強調文字列(2)で、他は強調文字列(3)で色分けされます。

    ●正規表現部分を削除して後ろにつなげた場合
    投稿させていただいた HTML5 の構文ファイルの
    #Word Color=1, WholeWord=True, RightSide=False, MatchCase=False, InsideTag=True, RegEx=True
    の部分を全部削除して13個の文字列を
    #Word Color=1, WholeWord=True, RightSide=False, MatchCase=False, InsideTag=True, RegEx=False
    の最後(xmpの後)に追加した構文ファイルを上書きインポートした場合
    cite, font, form, itemtemplate, selecteditemtemplate, separatortemplate, span が強調文字列(2)で、他は強調文字列(3)で色分けされます。

    ●正規表現部分を削除してアルファベット順に追加した場合
    HTML5 の構文ファイルの
    #Word Color=1, WholeWord=True, RightSide=False, MatchCase=False, InsideTag=True, RegEx=True
    の部分を全部削除して13個の文字列を
    #Word Color=1, WholeWord=True, RightSide=False, MatchCase=False, InsideTag=True, RegEx=False
    にアルファベット順になるように追加した構文ファイルを上書きインポートした場合
    cite, dir, form, itemtemplate, selecteditemtemplate, span, title が強調文字列(2)で、他は強調文字列(3)で色分けされます。

    試したタグは
    <abbr></abbr>
    <cite></cite>
    <command>
    <dir></dir>
    <font></font>
    <form></form>
    <itemtemplate></itemtemplate>
    <label></label>
    <selecteditemtemplate></selecteditemtemplate>
    <separatortemplate></separatortemplate>
    <span></span>
    <style></style>
    <title></title>
    です。

    なんか長文かつ説明下手ですみません。

     |  ucky  |  返信
  3. こんばんは、ご報告ありがとうございます。

    まず 1 つめのお話ですが、これは不具合でした、すみませんorz

    スタイルシートの強調文字列解析が終わった後に正規表現を使用した強調文字列解析が行われないケースが発生しておりました。これは修正しておきました。(Mery 2.0.14.4215)

    たぶん直ってると思うのですが・・・、ちょっと自信なさげです。。。

    2 つめのお話に関して。
    これは、強調文字列の解析順序ですね。内部ロジック的には処理速度の関係もあり、なるべく長い強調文字列から順に一致するかどうかを検索しております。なので、強調文字列 2 より 3 のほうが優先されるケースもあるかと思います。

    同じ長さの文字列に関しては特に制御しておりませんので、登録した順番で上にあるほうが優先されるんじゃないかな~って思いますが、そもそも同じ文字列を別の色で登録するケースを考慮していないため優先順の保証はありません。

    構文解析ロジックはなかなかやっかいで、私の頭がオーバーヒートしてしまいますw
    なのでお気づきの点などがありましたらご報告いただけると助かります!

     |  Kuro  |  返信
  4. > スタイルシートの強調文字列解析が終わった後に正規表現を使用した強調文字列解析が行われないケースが発生しておりました。これは修正しておきました。(Mery 2.0.14.4215)
    >
    > たぶん直ってると思うのですが・・・、ちょっと自信なさげです。。。

    うまく色分けされてなかったファイルや手順で一通りテストしてみたところ、ちゃんと色分けされました。
    修正ありがとうございます。

    2つ目に関してはそういう仕様だったんですね。納得しました。
    強調文字列がダブるケースはあまり無さそうですし、正規表現も使えるので問題ないですね。
    1つ目の件と関係あるかもと思い書き込んだんですが関係なくてすみません。

    これからも Mery を愛用させていただきます。
    バージョンアップお疲れ様でした。

     |  ucky  |  返信
  5. 早速のご確認ありがとうございます。

    直っているようで、一安心です。
    色々とお手間を取らせてしまい申し訳ございませんでした。

    > これからも Mery を愛用させていただきます。
    > バージョンアップお疲れ様でした。

    ありがとうございます、また何かお気づきの点などございましたらお気軽にご連絡くださいね。

     |  Kuro  |  返信
スポンサーリンク