*自作プラグイン codeHighlihgt.inc.php 開発 [#n6da5c14]
[[自作プラグイン/codehighlight.inc.php]]のページが開発者寄りになってしまい
マニュアルが分かりにくくなってしまったため分割する事にしました。

自作プラグイン codehighlight.inc.php (code.inc.php)
の開発の話はこのページでお願いします。

*更新履歴 [#s36379da]
|リビジョン|内容|追加言語|投稿者|
|0.1|公開開始|PHP, C/C++, D, Java, Ruby, Bash script|sky|
|0.2|ファイル取り込み機能追加, 非対応言語は整形済出力に変更, 内部小変更|追加 (Perl, Python) , 変更 (Ruby, Bash)|sky|
|0.2.2|高速化||sakurai|
|0.2.new|高速化(D言語の速そうなアルゴリズム移植後最適化)||sakurai|
|0.2.3|高速化(正規表現, strpos, テーブルジャンプ)||sakurai|
|0.2.4|高速化(0.2.3のtokenizeとbuildを統合)||sakurai|
|0.2.5|高速化(0.2.4の最適化)||sakurai|
|0.2.6|(0.2.5ベース)|html, SQL, Delphi, C#, Visual Basic, PL/I|sakurai|
|0.2.7|(0.2.6ベース)プラグイン名をcodeに統一, preを除外, tab幅可変, キーワードファイルを別ディレクトリへ||sky|
|0.2.8|(0.2.7ベース)|css, Lisp, TeX|sky|

*提案事項 [#s21e79ea]
実現されるかは分かりません。
提案に対する賛否の意見等もコメントにお願いいたします。
-対応言語を追加する。
PukiWiki, XML, Pascal, Ada, VHDL, Verilog HDL,
AWK, Fortran, Scheme, BASIC, TCL, PostScript, Octave, gnuplot
--diff, make は別関数を用いる方式で検討中
--phpもプラグイン化して全てcssで定義可能にする。
-コメントの指定方法の変更
--コメントを現在のハードコートからキーワード定義ファイルで定義出来るようにする。
--キーワード定義ファイルをユーザが作成可能にする(マニュアルの作成)。
-行番号表示/非表示切替
-Java Scriptを使って節毎に表示/非表示切替[[例:http://f38.aaa.livedoor.jp/~sakurai/pukiwiki/diki.html]]
--コード全体を表示/非表示切替
*開発談義 [#nd2e2eee]
-小さいものは、このような利用でしょうけど、添付ファイルからも、同様にできると良いと思います。 -- [[upk]] &new{2004-10-30 (土) 03:39:10};
-なかなか楽しいですね :) -- [[teanan]] &new{2004-10-30 (土) 10:58:32};
-ページを少し変更しました。添付ファイルの表示は面白いですね。考えてみます。 -- [[sky]] &new{2004-10-30 (土) 15:50:32};
-ファイル取り込みに対応しました。プラグイン名を別にしましたが、引数の内容によって分けた方が良かったでしょうか? -- [[sky]] &new{2004-10-31 (日) 11:08:49};
--個人的には、プラグインは同一で引数で制御が良いですね。当初、小さかったものが、肥大化したり、再利用などを考慮し添付に切り替えた場合、プラグイン名の記述まで変えるわけですから。まぁ、その程度ですけどね。あと、複数行パッチを適用しないでも、現在の別プラグイン形式であれば、利用できることをユーザに意識させているという考えとかなら、それはそれでよいとも思いますけどね。-- [[upk]] &new{2004-11-03 (水) 02:56:40};
-ライセンスの件については、原作者の方に確認中です。 -- [[henoheno]] &new{2004-10-31 (日) 11:24:55};
-お手数をかけてしまい申し訳ありません>[[henoheno]]さん。今回の場合GPLのコードを取り込んでいるのでGPLで配布しなくてはならない物になり、原作者の方に''GPLでも''配布可能な許可を頂きました。ライセンスはGPLで良いのですよね。ちなみに私はこの改変についていかなる部分も権利を主張する気は有りません。 -- [[sky]] &new{2004-10-31 (日) 17:47:16};
-こんにちは。いえ[[sky]]さんがお手をわずらわせるタイプのことでもないと思いましたので問題ありません。これで全ての物件がGPLということになりますから、将来の不安が無くなった(少なくなった)のが嬉しいですね。 -- [[henoheno]] &new{2004-10-31 (日) 19:45:59};
--こんにちは。今回の件は勉強になりました。皆の善意であったのが何かのきっかけで問題になったら大きくこじれてしまいそうです。将来の憂いを無くしておく事も重要ですね。 -- [[sky]] &new{2004-11-01 (月) 13:21:20};
-キーワードファイルでコメントの指定が出来るようになりました。これでキーワードファイルを作成するだけで新規言語を追加できるようになります(プラグインのプラグインのような物です)。Debugが完了次第 r1.0-pr1 としてUpする予定でいます。 -- [[sky]] &new{2004-11-03 (水) 01:48:38};
-「...今のままだと、 __asm とかに対応できないね...。if (is_alpha($code) || $code == "_")」 -- http://d.hatena.ne.jp/k_ahiru/20041103 --  &new{2004-11-03 (水) 09:50:12};
-はじめまして、sakurai と申します。ahiruさんのところから飛んできました。~
コードハイライト高速化していないみたいと出ていて、私はD言語上で高速化した経験があるので書き込みしました。~
これは私の作った、Diki(D言語Wiki)用に移植したCodeHighlightです。~
http://www.wikiroom.com/sakurai/?DikiCodeHighlight~
このプログラムは、(今はリンクが切れていますが)~
http://int19h.tamb.ru/files.html~
(今はD言語のコンパイラのパッケージに含まれてます)~
を元に高速化しました。30倍くらい速くなりました。~
これをPHPに移植すれば高速化できると思います。~
気になるのはライセンスで、以下のようにヘッダ部分にかかれていたので自由に変更してよいものだと判断して使っていますが、大丈夫かなということです。
 /*
  * Copyright (c) 2001
  * Pavel "EvilOne" Minayev
  *
  * Permission to use, copy, modify, distribute and sell this software
  * and its documentation for any purpose is hereby granted without fee,
  * provided that the above copyright notice appear in all copies and
  * that both that copyright notice and this permission notice appear
  * in supporting documentation.  Author makes no representations about
  * the suitability of this software for any purpose. It is provided
  * "as is" without express or implied warranty.
  */
-こんにちは。Delphiも対応言語に入れてあげてくれるとうれしいです。表示例→http://slavadev.sourceforge.jp/index?241149 -- [[u*j*2*6*:http://slavadev.sourceforge.jp]] &new{2004-11-03 (水) 19:09:34};
-情報ありがとうございます。そのプログラムとその著作権者さんの詳細を確認したくなりますね。 -- [[henoheno]] &new{2004-11-03 (水) 20:06:20};
-Dの速そうなアルゴリズム移植しちゃいました。しかし、1.5倍くらいしか速くなりませんでした。その後最適化して10倍ほど速くしました(code_highlight_0_2_new.zip)。元のアルゴリズムも3倍ほど高速化しました(code_highlight_0_2_2.zip)。ベンチマークはtest.phpでやってみました。参考にしてください。Dのアルゴリズムですが、移植版だし相当いじってるのでオリジナルと言えるほどのものになってるとは思います。 -- [[sakurai]] &new{2004-11-04 (木) 22:22:53};
-こんにちは。DelphiはD言語で対応できると言うことでしょうか。u*j*2*6*さん (D言語もDelphiも使った事が無いものでして)-- [[sky]] &new{2004-11-04 (木) 22:56:04};
-[[sakurai]]さん情報提供と高速化ありがとうございます。このコードはこれまでのように改編してもよろしいのでしょうか? -- [[sky]] &new{2004-11-04 (木) 22:56:04};
--私は力不足ですがこれまで通り対応言語の追加・追加の柔軟化を目標にしていきたいと思っています。-- [[sky]] &new{2004-11-04 (木) 22:56:04};
-どうぞどうぞ。自由に使ってください。私は作るのは良いけど、管理するの苦手なのでちゃんと人の使えるものにしていただければ、私はうれしいです。 -- [[sakurai]] &new{2004-11-05 (金) 17:38:18};
-#pre<<<END ENDの書き方は、#code #endも使えるようになりませんか?何気にD言語研究のサイトで大量のコードハイライトを使ってるので変換がめんどい、、、。 -- [[sakurai]] &new{2004-11-05 (金) 17:47:05};
-sky:いえ、delphiはdelphiでコードが要ります。もしよかったら[[このコード:http://slavadev.sourceforge.jp/index?plugin=attach&pcmd=open&file=codehighlight_for_delphi_0_2.diff&refer=SlavaDev]]を検討してもらえないでしょうか。 -- [[u*j*2*6*:http://slavadev.sourceforge.jp]] &new{2004-11-05 (金) 19:16:45};
-↑コードの内容は、codehighlight.delphi.kwd.phpの追加と、「(*~*)」、「{~}」で囲まれる部分をコメントとして扱うこと、mb_strtolowerのかわりにstrtolowerを使う(古いPHP用)ことの3点です -- [[u*j*2*6*:http://slavadev.sourceforge.jp]] &new{2004-11-05 (金) 19:23:58};
-実は私の管理するサイトでもsakuraiさんと同じく#code #endをつかったページが大量にあるのでなんとかしたいです。code.inc.phpを書いて中からcodehighlightをよぼうかな? -- [[u*j*2*6*:http://slavadev.sourceforge.jp]] &new{2004-11-05 (金) 19:29:11};
-上記のアシストとして、よかったらテスターになってくれる人いませんか? (^^) [[文字列置換プラグイン>http://pukiwiki.cafelounge.net/plus/?Plugin%2Freplace.inc.php]] -- [[みこ]] &new{2004-11-05 (金) 20:16:23};
-外出中でWebを見る環境しかないので曖昧な情報をお許しください。以前の方法に対応させるには、
変更後の convert_html.phpの900行目の正規表現を変更して #pre 言語名 に対応するようにし、
$stop_wordを ''#end'' に設定する方法で対処出来ませんか。
''#code''は次の内容をcode.inc.phpとすれば動くと思います。-- [[sky]] &new{2004-11-05 (金) 20:23:23};
 require_once(PLUGIN_DIR.'codehighlight.inc.php');
 function plugin_code_convert()
 {
     $args = func_get_args();
     $lang = array_shift($args);
     return plugin_codehighlight_body($lang, $args);
 }
-sakuraiさん u*j*2*6*さん このコードはGPLで配布してもよろしいのでしょうか。前回の質問が言葉足らずですみません。 -- [[sky]] &new{2004-11-05 (金) 20:26:51};
-私ののほうはGPLでオッケーです。 -- [[u*j*2*6*:http://slavadev.sourceforge.jp]] &new{2004-11-05 (金) 21:31:44};
-なんか大分機能が :D 。遅いのは、正規表現を使わないことを目標(移植性を良くするため)にしていたので、しょうがないのデス :P -- [[ahiru]] &new{2004-11-05 (金) 22:05:43};
-GPLでオッケーですよと。 -- [[sakurai]] &new{2004-11-05 (金) 22:23:18};
- ((いいぞ!複数の改善案件が同時並行して進んでいる!期待以上の爆発力だ!)) :) -- [[henoheno]] &new{2004-11-05 (金) 23:23:35};
-ahiruさんバージョンを正規表現や、strpos使って、コリコリ高速化してみました。その後、テーブルジャンプ使ったら凄いシンプルになってこれでちゃんと動くの???って思っちゃうような綺麗なソースになりました。9546msが777msくらいです。これもGPLオッケーです。正規表現で(a|b)*見たいなことをすると死んだりしたのでそのへん解決できればもうちょい早くなるかもしれないけど、これで私は満足な感じです。 -- [[sakurai]] &new{2004-11-06 (土) 23:58:20};
-構造をギリギリ前と同じにしたものが、&ref(codehighlight.inc.php_0_2_3);,tokenizeとbuildをあわせたものが&ref(codehighlight.inc.php_0_2_4);で、最適化バリバリしてソース綺麗にしたものが、&ref(codehighlight.inc.php_0_2_5);です。 :) 以下作業履歴です。-- [[sakurai]] &new{2004-11-07 (日) 00:05:17};
|100|500|c
|>|~codehighlight.inc.php_0_2_3|
|time: 3137|コメント行終了検索を変更|
|time: 2969|isalphaなどのハッシュ化|
|time: 2866|convertのインライン化|
|time: 2408|getcのインライン化|
|time: 2375|identifierの正規表現化|
|time: 2174|文字列リテラルのstrpos関数化|
|time: 2074|replace_speceのインライン化|
|time: 2121|バグ修正|
|time: 1916|isalphaのハッシュをtokenizerのローカル変数にする。|
|>||
|>|~codehighlight.inc.php_0_2_4|
|time: 1354|tokenizerとbuilderを統合して、tokenを使わないで直接文字列出力する。|
|>||
|>|~codehighlight.inc.php_0_2_5|
|time: 1112|関数のインライン化|
|time: 960 |評価する順番を統計取ってみて、呼び出し順を変えた。|
|||
|>|dソースの統計|
|space      |1346|
|id         |970|
|string     |186|
|comment    |66|
|sharpid    |0|
|||
|>|cソースの統計(これの#からはじまるのカウントし忘れた。まいいや。)|
|space      |1265|
|id         |971|
|string     |114|
|sharpid    |0|
|comment1   |0|
|comment    |1|
|commentall |1|
|||
|time: 882  |if文の順番かえる。とした。100ms違う。|
|time: 840  |hashの初期化ミスを直す。for($i="a";$i<"z";$i++)とやるとZYとかいうデータも入ってた。|
|time: 773  |switch文用ハッシュを作って、switch文で分岐。テーブルジャンプするので速くなった。統計取った意味がなくなった。可読性が一気に上がった。|
|time: 761  |switch用ハッシュを使うことで、メインループ内で言語による分岐がなくなった。言語が増えてもパフォーマンスに影響しにくくなった。とにかく読みやすくソースを掃除。見れるソースになった。|
-kinabaさんとこみてたら、http://rafb.net/paste/なサイトがあって、ここだといろいろな言語に色つけてくれてるみたい。負けられませんな。行番号がでるのが何気に良いなと思いました。 -- [[sakurai]] &new{2004-11-07 (日) 02:08:44};
-http://rafb.net/paste/highlight.phpsこれがソースだ。bsdライセンスみたい。 -- [[sakurai]] &new{2004-11-07 (日) 02:19:25};
-[[convert_html.php.01.diff:http://www.sys.tutkie.tut.ac.jp/~sasaki/files/pukiwikiplugins/convert_html.php.01.diff]]従来の"#code 言語名" … "#end"で呼び出すpatchです。[[dev:PukiWiki/1.4/ちょっと便利に/複数行のプラグイン引数を可能に]]で仕様変更があるようなので今後使い方がまた変わってしまう可能性が高そうです。 -- [[sky]] &new{2004-11-08 (月) 14:51:29};
-複数行のプラグイン引数を可能に、、、があったから、今の形式にしたんですね。なるほど。 -- [[sakurai]] &new{2004-11-08 (月) 18:41:45};
-Delphi,C#,VB,SQL,PL/I,HTMLに対応しました。codehighlight_0_2_5に適用しました。&ref(codehighlight_0_2_6.zip);です。 -- [[sakurai]] &new{2004-11-08 (月) 18:44:30};
-delphi,c#,vb,sql,pli,htmlで動くはずです。 --  &new{2004-11-08 (月) 18:47:44};
 #から始まるコメントのバグ対策
 defineを使う。php初心者なので今まで知らなかった。
 キーワードファイル名をcodehighlight.kwd.bash.phpのように変更する。このほうが見やすい。
-{}カッコのネストをみてピロピロ表示非表示できたらいいなと。urlぽかったら、リンクはるとか。 -- [[sakurai]] &new{2004-11-08 (月) 18:54:41};
-PEAR:Text_Highlighter 使ってみてはどうでしょうか --  &new{2004-11-08 (月) 22:52:39};
--[[PEAR:Text_Highlighter:http://pear.php.net/package/Text_Highlighter/]]と言う物があったのですね。[[PHP license:http://www.php.net/license/3_0.txt]]ですね。考えてみます。 -- [[sky]] &new{2004-11-09 (火) 01:57:39};
-codehighlight_0_2_6.zip を元にいくつかの変更を加えてref(code_0_2_7.tgz);にしてみました。 -- [[sky]] &new{2004-11-09 (火) 01:57:39};
--codehighlight と codeinclude の2つのプラグインを1つにまとめて''code''に変更(使い方は同じ)
--プラグイン pre を不要
--tabの幅を変更可能
--キーワードファイルをプラグインディレクトリ以下のcodeディレクトリに移し名称を keyword.bash.phpのように変更
-それぞれの言語に固有の部分、特にコメントの指定方法をキーワードファイルに移す方法と行番号を表示する方法を検討しています。高速化を維持したまま変更するのは難しそうです。最も単純なのはパターンマッチの始めにコメント開始文字列を判定する方法なのですが。 -- [[sky]] &new{2004-11-09 (火) 01:57:39};
-仕様変更が多いので開発版と安定版に分けた方が良いのでしょうか。このページは開発専用にして別ページにマニュアルを記述した方が分かりやすくなりそうです。 -- [[sky]] &new{2004-11-09 (火) 01:57:39};
-css,TeX,Lispに対応させました&ref(code_0_2_8.tgz);。bugが2つあったので修正しました(''/''に対応していない, コメントの''#''の直後に改行が来ると次の行もコメントになる) -- [[sky]] &new{2004-11-09 (火) 05:05:39};
--[[r0.2.8用マニュアル:http://www.sys.tutkie.tut.ac.jp/~sasaki/pukiwiki/pukiwiki.php?man%2Fcode]]試作案です。 -- [[sky]] &new{2004-11-09 (火) 05:05:39};
-ついでに、PukiWiki 自身のソースも対応しません? (^^; プラグインが色つきになるとアクションプラグイン(source)の意味がでてくるので・・・ -- [[みこ]] &new{2004-11-09 (火) 13:56:44};
--むろん、ハイライトするプラグインは1.4.4をベースとするということで・・・ -- [[みこ]] &new{2004-11-09 (火) 14:01:18};
-BugFixサンクスです。css,Tex,Lisp対応すばらしい。いい感じですね。コメントの指定方法をキーワードにですか、、、。始まりと終わりを指定すれば自動的にってことですね。私も考えてみます。ライン情報は、コピペしたいので、ソースとは切り離したほうがよいです。テーブル使うかcssがいいと思います。ライン情報表示非表示をpukiwikiのプラグインオプションで指定できると良いでしょうね。開発用ページはあったほうがうれしいですね。ページを汚くしてしまっている気がします。 -- [[sakurai]] &new{2004-11-09 (火) 14:16:44};
-PukiWikiのハイライトですか、、、。なるほど。アクションプラグインってなんでしょうか? -- [[sakurai]] &new{2004-11-09 (火) 14:24:33};
-こういうhttp://f38.aaa.livedoor.jp/~sakurai/pukiwiki/diki.html ツリー表示するの作ってるのでプラグインの仕様に入れてください。でも、JavaScript使ったプラグインはPukiwikiだと、反則なのかな? -- [[sakurai]] &new{2004-11-09 (火) 15:17:47};
-コメントの指定方法の変更は、先にコメントかどうかを判定するので良いと思います。ただ、マッチングしていては遅いので、そこでも、コメント開始文字のハッシュを作っておいて判定してみてはどうでしょう。1文字あたりに1回ハッシュを参照するだけですむのでそんなに遅くならないんじゃないかと思います。がんばってみてください。 -- [[sakurai]] &new{2004-11-09 (火) 16:01:12};
-アドバイスありがとうございます。>sakuraiさん。出来るだけソースを汚さないようにやってみます。 -- [[sky]] &new{2004-11-09 (火) 16:45:22};
-PukiWIkiのソースを差分表示等でハイライト出来ればよさそうですね。 -- [[sky]] &new{2004-11-09 (火) 16:48:02};
-すみません、正式にはコマンドです。<アクションプラグイン プラグインのソースで plugin_xxxx_action となっているので私的にそう呼んでいるだけした(..; -- [[みこ]] &new{2004-11-09 (火) 19:26:54};
-PEAR::Text_Highlighterは強力そうですね。XML書いておくと、コード生成してくれるみたい。これで速くて、インストールが楽なら使えるかも。でも、使い方がわからない。。。genelatorとか動かすとコマンドプロンプトが消える。php初心者だからわからんぞー!!ググっても日本語のページみあたらんし、、、。英語苦手なのでちまちまやってみます。 -- [[sakurai]] &new{2004-11-09 (火) 20:02:42};
-PEAR::Text_Highlighterを使わなくても大方の言語に対応できそうです。新たなる拡張の糸口も掴みました。しかし、PukiWiki, HTML, TeX, gnuplot あたりはプログラム言語ではないですね。 -- [[sky]] &new{2004-11-11 (木) 02:29:31};
-キーワードで''c''とC#の''cs'', ''css''が紛らわしいですね。C#は''csharp''の方が良いかも知れません。あと''vb''も略すべきかどうか。 -- [[sky]] &new{2004-11-11 (木) 02:32:30};

#comment

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.043 sec.

OSDN