日本ファルコム「音楽フリー宣言」を発表
投稿者 baban 2009/06/07 at 21:48
静止画M@Dを中心にMMDとか、ニコマスを楽しんで気になったことを書き綴っているサイトです、Web新技術投入したがりなのでブラウザは最新版推奨です
萌ディタはファイルの種類毎に、色分けを切り替える機能がある。
これの機能のおかげでHTML編集のときはHTMLの色分け、JavaScriptの場合はJavaScriptの機能の呼び出しができたりする。
HTMLならHTMLのための拡張子クラスを使えばよいので、ショートカットも自由自在に作れる。
しかし、PHPやJavaScriptの場合は、作成したショートカットが有効に働かない。
なぜかというと、PHPやJavaScriptの場合は、HTMLの内部に埋め込むのでHTMLの拡張子クラスのショートカットを呼び出そうとするためである。
これを回避するためには、萌ディタで定義しているinvoke関数を使用します。
invoke(arg, classname, methodname)
となっており、例えば、jscriptのコンプリートリストを呼び出したいときは
invoke(arg, 'jscript', 'onCompleteRequest');
とやってやるとJavaScriptで自動補完を実行することが出来る。
しかし、htmlの場合、関連するモノがphpやjavascript以外にもvbscriptやsmartyのテンプレート、ASPのvb.netのコード。これにrubyのerb等幅広く存在する
これらのすべてに対応するためにコードを埋め込むのは現実的ではない
そのため、一度文法の遷移状態を調べてから、そこに飛ばしてやるのが適切である
具体的には次の様なコードが望ましいと考える。
var ls = App.Caret.LexState;
if( this.name!=ls.Name ) return invoke(arg, ls.State, methodname );
この様に記述することで、LexStateから現在キーがある範囲がjscriptなのかvbscriptなのかを判別できるので
ls.Stateで拡張子クラスの名前に従って処理を呼び出せる。
実際には、これをすべてのメソッドに対して埋め込んでいけば、対応可能なのであろうが、拡張子クラスの数が多いと、それも面倒くさい。
そのため、拡張子クラスの継承関係を利用する。
萌ディタの拡張子クラスは親に当たるクラスを指定することで継承関係を実現できる。具体的なイメージは萌ディタの「むずかしい設定」ダイアログを出すと良く分かる
そして、子供のクラスにメソッドが存在しない場合、継承関係を遡って親のクラスを呼び出そうとする。
こうすることで、エディターとしての基礎的な機能は親のクラスだけに記述して、子に当たるクラスで派生機能のみを書けば良い様にしている。
そのため、できるだけ簡単に遷移状態に適したショートカットを呼び出したいときには親元の
のどちらかに、次の様に記述する。
f.onKeyQuestion = function(arg, classname, methodname){こうすることで、Ctrl+?のショートカットの機能をどの拡張子クラスでも便利に呼び出せる。
(本当は公式でこう記述しておくべきだと個人的に思います)
ただ、気を付けておかないといけないのは一度こう記述した以上は、そのメソッドでは親クラスをinvokeしないこと。
そうしないと、親クラスが子クラスを呼んで、その子クラスが親クラスを呼んで、という無限ループになって萌ディタが停止する。
使う側にも一定の責任を求めるエディタさんなのである。(だから弄りがいもあるのですが・・・
投稿者 baban 2009/06/07 at 21:41
日が近づいてきたのでぺたんこ
私も一応チャットくらいは参加しようかと…。
もうすっかり、オールドタイプというよりは、サイトを維持しているやつらの中では最古参だったり、活動らしい活動もしていないですけどね。
ただ、最近の新作不足、というよりは界隈自体の壊死と呼ぶに等しい状況はなんとかしないといけないのではと強く感じます。
投稿者 baban 2009/06/04 at 22:14
おそらく、システムのピラミッドの下の部分は、エキスパートシステムで上の部分で総合的に判断するところがオリジナルなのだと思います。
きちんと推論をさせようとするとこれだけのパワーが必要なのだという一例かな…
投稿者 baban 2009/05/30 at 22:23
というわけで観念して、この子に付いていってあげようと言うことで、
萌ディタ Perl 用拡張子クラスを下敷きにして、perlの拡張子クラスを書き足していました。
基本改造モノなので、期間限定で転がしておきます。
というわけで、よく弄っていると幾つか見えてくるモノが増えてくるわけで、まずヒアドキュメントの色分けが厳しい!
正直、これは致命傷といえるでしょう!
PHPの場合は、ヒアドキュメントの終了が
「終了文字列;」
としているため、最後のセミコロン(;)を拾えば問題ない、所が結構あるのですが、今回の場合はそうはいかない。
正直、速度と実装の可能性のバランスをきちんと取っているのですが、今後回避のための根本的な方法を考えないといけません。
(まぁ、他の色分け可能なエディタも結構いい加減な実装しているんですがね! PHPエディタと名乗りながらHTML部分が色分けされないとか! JavaScriptで'foo\'bar'とか書くとbar'が色分けされていないエディタとか! )
あとは、遷移状態の管理が主に数字なのがちょっと不満。実際に分かりにくいので!
まぁ、数字である以上範囲の管理が楽な部分はありますけどね!
投稿者 baban 2009/05/24 at 21:37
というわけで、久しぶりのテキストエディタの紹介。
実際には窓の杜でダウンロードできるようなものなので、一定の知名度はあるのでしょうが私の場合には、結構最近出会ったのでついでで紹介させていただきます。
正直、色々と言語を触ったりしているとどうしてもエディタとお話している時間が多くなるわけで、良いエディタははないかと探してしまうのですが
そういうエディタの中でもなかなかの出来だったので紹介させていただきます。
このエディタの特徴はやはり多くの言語での色分け機能です。サポートしている方向がいちいちマイナーだったりするおもしろ所がありますが…
ちなみに自分の環境に入っているエディターは現在次の4つに集約されています
それぞれ利点がありますが、現在でもメインで使っているのが萌ディタ。
α板のまま開発が止まって、はや3年か4年かになりますが、それを考えても現在これを越える完成のエディタはなかったなというのが自分の感想です。
しかし、エディタとして大事な安定性に関して問題点があるというのが最大の欠点で、それを理解しながらスクリプトを改良しながらなんとかしているというのが現在の状況です。
そのために、普通にテキストファイル(拡張子.txt)を開くときはmEditor、スクリプト言語は一部Apsary、とにかく十分程度に軽量なのを考えて残してあるTeraPadという感じです。
エディタを使ってきて大事な機能というのが、プログラミング言語の色分け機能と、マクロ機能なので、NoEditorとかは論外。サクラエディタはマクロの文法上の弱さがネックになっています。
投稿者 baban 2009/05/17 at 02:41