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
