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