Qtな正規表現

TeXworksのシンタックスハイライトを自作してるけど,一向に思うように行かない.
tex_search


正規表現とシンタックスハイライト

TeXworks以外のアプリケーションのシンタックスハイライトがどのように実装されてるのか全然知らないけど,TeXworksではシンタックスハイライトを正規表現で実装してる.正規表現でマッチした箇所に対して付けたい色を指定する.とても簡単な実装だね.しかも誰でも気軽に編集できそうな感じでお気軽.俺はこれをきっかけに正規表現を少し勉強したよ.
勉強して知ったのは,正規表現を解析するエンジンの実装が無数にあって,世界で統一的な唯一の「正規表現」というものがあるわけではない,ということ.俺は正規表現を勉強するまでは正規表現が何であるかさえも知らなかったけど,少し勉強したら「おぉ,こんな便利なものが!」って思った.そして,実は世界共通のものがあるわけではないということを知って「おぉ,何と半端な!」と思ったね.
正規表現を統一化しようなんて動きはないのかしら.計算機科学が始まってまもなく,形式言語の出身である正規表現が役に立つことに気がついた人は偉いね.おそらく計算機科学の黎明期には正規表現は同じ実装で,複数のバリエーションを含むものではなかったんだろうなあと予測します.でも時代が下るに連れて,色々な場所で同時多発的に「こんな機能があったらもっと便利!」とか「この書き方冗長だからこういう省略を許そうぜ」みたいな改編があったんだろうね.

Qtな正規表現

一旦別れたものたちが再び邂逅するのはとてもドラマチック.正規表現も大統一が起きたらいいのに.そう思う理由は一つ.「TeXworksが解析できる正規表現が少ない!」ということ.TeXworksの正規表現解析エンジン(という日本語が正しいのか自信ないですが)は,Qtの実装のそれらしい.公式のドキュメントにそれが書いてある(俺の読解が正しいなら,という注が付きますけど笑).で,Qtの正規表現の実装も,公式サイトに記述があるみたい.あんまり読んでないけど.

【引用】 TeXworks

あんまり読んでないけど,と言い訳してから言うのもなんですが.Qtの正規表現では後読み(戻り読み)が実装されてないっぽい.そのせいでこんな文字列にシンタックスハイライトを付けたいんだけど,マッチする正規表現が見当たらない!

\begin{eqnarry}

これに困らされてます,というのがこの記事の趣旨でございます.やっと結論ですかい笑.とか言って,この記事ではこれ以上詳細な使途(TeXworksで実現したいシンタックスハイライトの仕様)について言及しません笑.今回は雑多な思いをつらつら書くだけですので,流し読みいただければと思います...
今俺が作ってるTeXworksのシンタックスハイライトは,Sublime textのMonokaiというカラースキームを参考に作ろうとしてます.Monokaiって多分有名だよね?というか少しでも「テキストエディタを探す」なんという行動を取るような人なら知ってるでしょう笑.俺はプログラマでもないのに「テキストエディタを探す」ということをしてます.おかしいね笑.ブログ記事もSublime textで書いたりしてますよ.

(余談)新しいテキストエディタを試そうかなぁ

今どきっぽいテキストエディタとして,Atom,Sublime text,Light Table,Bracketsという,4つを知ってる.これらの4つとも試したわけじゃなくて,俺はまだSublime textしか使ったことがありません.でも十分にその機能に満足してる.日本語の変換にかなり癖があるけど,Mozcが賢いからそんなに困らされてないね.

【引用】 Atom
【引用】 Light Table

Sublime textはプロプライエタリなソフトウェアだから,Linux使いの私としては可能なら避けたい選択肢.その点AtomもLight TableもBracketsもオープンソースで(必ずしもコピーレフトでは無いらしいけど)先進的なライセンス形体を採用してるね.なぜオープンソースが先進的と考えるのかについては,俺自身で考えがまとまってないけれど.「俺が金払わないで使える!」という点以外に,全体に対しての利益がどうなるのかについて考えてみようかな.
話が逸れた.Texworksのシンタックスハイライトを自作するために正規表現を少しだけ勉強して,正規表現の世界が統一されたらいいなぁと思ったことと,テキストエディタをいろいろ試したいという話でした(そうだっけ?笑).

コメントを残す

Powered by WordPress.com. テーマ: Baskerville 2 by Anders Noren

ページ先頭へ ↑

%d人のブロガーが「いいね」をつけました。