Movable Type 備忘録

 CSS でコードを行番号付きで表示する

  • Jul132007
  • Vote:
    http://bizcaz.com/archives/2007/07/13-010706.php
  • Categories: Tools
  • Tags: ,
  • Social Bookmark

こんばんわ^^

最近プログラムを書くことにハマってる bzbell です。
PHP や JavaScript でいろいろ勉強してるのですが、みなさんすごいなぁと関心の毎日です (; ̄∇ ̄A

でもね、どうしても好きになれない言語があります。
それは MovableType でも使用されている Perl です。

プラグインは主に Perl で書かれたものがほとんどですが、特に Perl に慣れてる人のコードが読みにくいです (つω-`。)
なぜかと言うと、Perl って言語は省略された記述が可能だからです。

慣れた人にとっては当然のことなのかもしれませんが、慣れてないわたしにとってはとっつきにくい言語の何ものでもありませんでしたっ!!
あと、Perl で書かれたコードは何だかゴチャゴチャして見難いと思うのはわたしだけかなぁ。

たぶんそういう理由から、自分で書くコードには空白(スペース or タブ)をふんだんに使ってるんだと思います。

慣れれば MovableType の Core なところも、スラスラ理解できちゃうんだろうなと思う今日この頃でございます。

さて、いつもお世話になっている、youmosさんのところで、ソースコードをCSSで見やすくデザインする (Code2Css)という記事が紹介されてました。

ソースコードを、CSS を使って行番号つけて見やすくしてくれるサービスです。
ソースコードも公開れてましたので、いろんな人のコードを参考にしたいので、そのコードを覚え書として(公開元がサイト閉じたら嫌なので)保存しちゃいます (; ̄∇ ̄A

ちなみに、同じようにソースコードを行番号つきで表示するプラグインを、わたしのところでは公開してます。
MTPrecodeプラグイン

一応 MovableType 4 でも表示確認済みです。

PHP でソースコードを行番号つきで表示する

以下のコードはこちらのFree Css Templatesさんのところで公開されているものです。
Code2Css tool: the code

ブランク(Space or Tab)をカウントするコード

  1. function count_blank($line,$c) {
  2.     $sp=0;
  3.     $char = substr($line, $sp, 1);
  4.     while($sp<=(strlen($line)-1) && (true && $c == $char)) $char = substr($line, $sp++, 1);
  5.     return $sp;
  6. }

行番号つきで表示するコード

  1. function printCode($code)
  2. {
  3.     $tab=array();
  4.     if (!is_array($code)) $code = explode("\n", $code);
  5.     $count_lines = count($code);
  6.     $i = 1;
  7.     $tab[0]= "<ol class=\"code\">";
  8.     foreach ($code as $line => $code_line) {
  9.         $sp = count_blank($code_line,"\t");
  10.         if($sp>=8) $sp=3;
  11.         if($sp==0) {
  12.             $sp = count_blank($code_line," ");
  13.             $r2 = "<li class=\"t".$sp."\">";
  14.         }
  15.         else $r2 = "<li class=\"t".$sp."\"><code>";
  16.         $sp!=0 ? $e="</code></li>" : $e="</li>";
  17.         $r2 .= stripslashes(htmlentities(trim(($code_line)))).$e;
  18.         $r .= $r2;
  19.         $tab[$i++] = $r2;
  20.     }
  21.     $tab[$i+1] = "</ol>";
  22.     echo "<ol class=\"code\">".$r.</ol>";
  23.     return $tab;
  24. }

スタイルシート

  1. ol { padding:0 0 0 2.5em }
  2. .code {
  3. padding:3px 5px 3px 35px;
  4. border:1px solid #808080;
  5. list-style-type: decimal-leading-zero;
  6. font-family: Courier
  7. }
  8. .code code {
  9. font-family:Monaco,"Courier New",Tahoma;
  10. font-size: 1.2em
  11. }
  12. .code li {
  13. margin:2px 0;
  14. padding:0 5px;
  15. background:#f7f7f5
  16. }
  17. .code li.t1 { padding-left:4ex }
  18. .code li.t2 { padding-left:8ex }
  19. .code li.t3 { padding-left:12ex }
  20. .code li.t4 { padding-left:16ex }
  21. .code li.t5 { padding-left:20ex }
  22. .code li.t6 { padding-left:24ex }
  23. .code li.t7 { padding-left:28ex }
  24. .code li.t8 { padding-left:32ex }

ありがとうございます (m;_ _)mペコ

 Trackback Pings(0)

No trackbacks found.

 Comments(3)

#1: Posted by youmos @ July 14, 2007 [REPLY]
user-pic

ソースコード表示用のCSSデザインはコードハイライトがスタンダードだと思っていましたが、意外と見やすいのはシンプルなデザインだったりしますね。
コードハイライトでも2色程度に抑えると、見やすいのかな?とも思います。

人によって感じ方が異なるので、難しいですが
横スクロールだけはしないようにしつつ、、、と思ってます。

また、良いのを見つけたら紹介します-。-


#2: Posted by bzbell @ July 15, 2007 [REPLY]
user-pic

>>1 youmos さん

こんにちわ^^

> コードハイライトでも2色程度に抑えると、見やすいのかな?とも思います。

そうですね、わたしもそう思います♪
プログラマさんの中には、エディタでキーワードを多色でハイライトする人もいるんだそうです ( ̄∇ ̄)

> 横スクロールだけはしないようにしつつ、、、と思ってます。

改行を生かしたまま折り返したかったので、code 要素に以下を追加してます。

ol li code {
white-space: -moz-pre-wrap; /* Mozilla   */
white-space: -pre-wrap;     /* Opera 4-6 */
white-space: -o-pre-wrap;   /* Opera 7   */
white-space: pre-wrap;      /* CSS3      */
word-wrap: break-word;      /* IE 5.5+   */
}

でも、これやると Valid でなくなります (´Д`;)

Code2Css では white-space: pre を使わずに、padding でスペースを表現してるところが、なるほどって思いました (; ̄∇ ̄A

#3: Posted by ureyubo @ July 30, 2009 [REPLY]
user-pic

本家のコードがなくなっていたので、助かりました。。。

 Post a Comment

 

コメント用フィード