google-code-prettifyでブログのコードシンタックスハイライト
google-code-prettify はブログなどにコードを記述するときに、言語に合わせてコードのシンタックスハイライトをおこなってくれるJavaScriptライブラリ。
ここからダウンロードしたファイルを解凍し、prettify.js および prettify.css を読み込み、prettyPrint() を body のonloadなどから呼び出すことで、pre タグに prettyprint クラスを指定したコードがシンタックスハイライトされる。どんな言語かはスクリプトが判定してくれる。
<script type=”text/javascript” src=”/jslib/prettify.js”></script> : |
以下、適当なコードで実際にやってみる。SQLやさすがにCOBOLは対応してないか・・・
C
#include <stdio.h> /* Convert temperature Celsius to Fahrenheit F = 9/5 * C + 32 */ int main() { int celsius; int fahren; int lower; int upper; int step; lower = 0; /* lower limit of temperature */ upper = 300; /* upper limit of temperature */ step = 20; celsius = lower; while (celsius <= upper) { fahren = celsius * 9 / 5 + 32; printf("%d\t%d\n", celsius, fahren); celsius = celsius + step; } }
C++
#include <iostream> using namespace std; void sort(); // ポインタパラメータを宣言 void order(int*, int*); int main() { sort(); } void sort() { int nums[] = { 2, 34, 656, 767, 893, 123, 5, 7, 892, 4, 6, 81, 1134, 56, 3 }; int len = sizeof(nums) / sizeof(nums[0]); for (int i=0; i<len; i++) { for (int j=i; j<len; j++) { // 引数としてアドレスを渡す order(&nums[i], &nums[j]); } } for (int i=0; i<len; i++) { cout << nums[i] << endl; } } void order(int* n, int* m) { int tmp; // ポインタを間接参照する if (*n > *m) { tmp = *n; *n = *m; *m = tmp; } }
Java
package innerclass; public class InnerClassTest3 { private int memberInt = 123; private Object obj; public void testMethodLocalInnerClass() { int localInt = 456; final int finalInt = 789; class MethodInner { void printInt() { // (1) Outerクラスのメンバにアクセス可能 System.out.println("Member :" + memberInt); // (2) ローカル変数にはアクセスできない // インナークラスはヒープに置かれるため、メソッドから抜けるとスタックにアクセスできなくなる // System.out.println("Local :" + localInt); // (3) final なローカル変数にはアクセスできる System.out.println("Final :" + finalInt); } public String toString() { return "MethodInner"; } } MethodInner mi = new MethodInner(); mi.printInt(); obj = mi; } public static void main(String[] args) { InnerClassTest3 me = new InnerClassTest3(); me.testMethodLocalInnerClass(); // (4) メソッドを抜けても生存している System.out.println(me.obj.toString()); } }
Javascript
function printMapKey() { // 配列は、連想配列として利用できる var map = new Object(); // new Array() でもよい(注1) map["a"] = 1; map["b"] = 2; map["c"] = 3; // 配列のキーを取り出す for (var k in map) { alert(k); } // キーで値を取得 (1 を表示) alert(map["a"]); // プロパティとして値を取得 (4 を表示) alert(map.a + map.c); }
Perl
open IN, "<c:\\test.java"; open OUT, ">c:\\test.html"; print OUT "<style>"; print OUT ".kwd{ color:blue;font-weight:bold; }"; print OUT ".cmt{ color:green; }"; print OUT ".lin{ color:#808080; }"; print OUT ".lit{ color:#00ffff; }"; print OUT ".code{ background-color:#efefff;border:1px solid lightgrey;font-family:monospace; }"; print OUT "</style>"; print OUT "<div class='code'>"; $c = 1; $isCmt = 0; while ( $line = <IN> ) { $line =~ s/\s*$//; $line =~ s/(&)/&/g; $line =~ s/(<)/</g; $line =~ s/(>)/>/g; $line =~ s/([ ])/ /g; $line =~ s/(\t)/ /g; if ($line =~ /(\/\*)/) { $line =~ s/(\/\*)/<span class='cmt'>\1/; $isCmt = 1; } if ($isCmt) { if ($line =~ /(\*\/)/) { $line =~ s/(\*\/)/\1<\/span>/; $isCmt = 0; } } else { $line =~ s/(\bString\b|\babstract\b|\bcontinue\b|\bfor\b|\bnew\b|\bswitch\b|\bassert\b|\bdefault\b|\bif\b|\bpackage\b|\bsynchronized\b|\bboolean\b|\bdo\b|\bgoto\b|\bprivate\b|\bthis\b|\bbreak\b|\bdouble\b|\bimplements\b|\bprotected\b|\bthrow\b|\bbyte\b|\belse\b|\bimport\b|\bpublic\b|\bthrows\b|\bcase\b|\benum\b|\binstanceof\b|\breturn\b|\btransient\b|\bcatch\b|\bextends\b|\bint\b|\bshort\b|\btry\b|\bchar\b|\bfinal\b|\binterface\b|\bstatic\b|\bvoid\b|\bclass\b|\bfinally\b|\blong\b|\bstrictfp\b|\bvolatile\b|\bconst\b|\bfloat\b|\bnative\b|\bsuper\b|\bwhile\b)/<span class='kwd'>\1<\/span>/g; $line =~ s/(\/\/.*)/<span class='cmt'>\1<\/span>/g; } printf(OUT "<span class='lin'>%04d:</span> $line<br/>\n", $c); $c++; } print OUT "</div>"; close IN; close OUT;
Python
import os import pprint # ディレクトリを走査し、階層構造を持ったリストを生成 def trav(path, fn=''): l = [] l.append(fn) d = os.path.join(path,fn) if os.path.isdir(d): for f in os.listdir(d): l.append(trav(d,f)) return l l = trav('C:\\', 'Python25') # 階層構造を持ったリストを出力 pprint.pprint(l, indent=4, width=80)
Ruby
def greeting time msg = '' if time < 12 msg = 'good moring.' else if time == 12 msg = 'good afternoon.' else msg = 'good evening.' end end msg #メソッドからの返り値は単純にメソッドの最後の行の値 end puts greeting(21)
VBScript
Dim reg As Object Dim matches As Object Dim match As Object Dim value As String '解析する文字列 Set reg = CreateObject("VBScript.RegExp") reg.Pattern = "^[ ]+([0-9A-Z@]+).*[ ]FOUND[ ].*" 'reg.Global = True '/g オプションを指定する Set matches = reg.Execute(value) If matches.Count > 0 Then ' 一致情報のコレクション For Each match In matches Debug.Print match.FirstIndex Debug.Print match.Value Next Set match = matches(0) ' 一致グループ Debug.Print match.SubMatches(0) End If
SQL
SLECT * FROM test1 A WHERE EXSISTS ( SELECT name FROM test3 B WHERE B.id = A.id )
COBOL
EVALUATE TOKUTEN WHEN 80 THROUGH 100 MOVE "A" TO GRADE WHEN 60 THROUGH 79 MOVE "B" TO GRADE WHEN 50 THROUGH 59 MOVE "C" TO GRADE WHEN OTHER MOVE "D" TO GRADE END-EVALUATE