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> 
   <link href=”/jslib/prettify.css” rel=”stylesheet” type=”text/css”/>
</head>
<body onload=”prettyPrint()”>

               :
<pre class=”prettyprint linenums”>
#include <stdio.h>
/* Convert temperature Celsius to Fahrenheit
F = 9/5 * C + 32 */
int main()
{
             :

 

以下、適当なコードで実際にやってみる。SQLやさすがにCOBOLは対応してないか・・・

C

  1. #include <stdio.h>
  2. /* Convert temperature Celsius to Fahrenheit
  3. F = 9/5 * C + 32 */
  4. int main()
  5. {
  6. int celsius; int fahren; int lower; int upper; int step;
  7. lower = 0; /* lower limit of temperature */
  8. upper = 300; /* upper limit of temperature */
  9. step = 20;
  10.  
  11. celsius = lower;
  12. while (celsius <= upper) {
  13. fahren = celsius * 9 / 5 + 32;
  14. printf("%d\t%d\n", celsius, fahren);
  15. celsius = celsius + step;
  16. }
  17. }

C++

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void sort();
  6.  
  7. // ポインタパラメータを宣言
  8. void order(int*, int*);
  9.  
  10. int main()
  11. {
  12. sort();
  13. }
  14.  
  15. void sort()
  16. {
  17. int nums[] = { 2, 34, 656, 767, 893, 123, 5, 7, 892, 4, 6, 81, 1134, 56, 3 };
  18. int len = sizeof(nums) / sizeof(nums[0]);
  19.  
  20. for (int i=0; i<len; i++) {
  21. for (int j=i; j<len; j++) {
  22. // 引数としてアドレスを渡す
  23. order(&nums[i], &nums[j]);
  24. }
  25. }
  26. for (int i=0; i<len; i++) {
  27. cout << nums[i] << endl;
  28. }
  29. }
  30. void order(int* n, int* m)
  31. {
  32. int tmp;
  33. // ポインタを間接参照する
  34. if (*n > *m) {
  35. tmp = *n;
  36. *n = *m;
  37. *m = tmp;
  38. }
  39. }

Java

  1. package innerclass;
  2.  
  3. public class InnerClassTest3 {
  4. private int memberInt = 123;
  5. private Object obj;
  6. public void testMethodLocalInnerClass() {
  7. int localInt = 456;
  8. final int finalInt = 789;
  9. class MethodInner {
  10. void printInt() {
  11. // (1) Outerクラスのメンバにアクセス可能
  12. System.out.println("Member :" + memberInt);
  13. // (2) ローカル変数にはアクセスできない
  14. // インナークラスはヒープに置かれるため、メソッドから抜けるとスタックにアクセスできなくなる
  15. // System.out.println("Local :" + localInt);
  16. // (3) final なローカル変数にはアクセスできる
  17. System.out.println("Final :" + finalInt);
  18. }
  19. public String toString() {
  20. return "MethodInner";
  21. }
  22. }
  23. MethodInner mi = new MethodInner();
  24. mi.printInt();
  25. obj = mi;
  26. }
  27. public static void main(String[] args) {
  28. InnerClassTest3 me = new InnerClassTest3();
  29. me.testMethodLocalInnerClass();
  30. // (4) メソッドを抜けても生存している
  31. System.out.println(me.obj.toString());
  32. }
  33. }

Javascript

  1. function printMapKey() {
  2. // 配列は、連想配列として利用できる
  3. var map = new Object(); // new Array() でもよい(注1)
  4. map["a"] = 1;
  5. map["b"] = 2;
  6. map["c"] = 3;
  7. // 配列のキーを取り出す
  8. for (var k in map) {
  9. alert(k);
  10. }
  11. // キーで値を取得 (1 を表示)
  12. alert(map["a"]);
  13. // プロパティとして値を取得 (4 を表示)
  14. alert(map.a + map.c);
  15. }

Perl

  1. open IN, "<c:\\test.java";
  2. open OUT, ">c:\\test.html";
  3.  
  4. print OUT "<style>";
  5. print OUT ".kwd{ color:blue;font-weight:bold; }";
  6. print OUT ".cmt{ color:green; }";
  7. print OUT ".lin{ color:#808080; }";
  8. print OUT ".lit{ color:#00ffff; }";
  9. print OUT ".code{ background-color:#efefff;border:1px solid lightgrey;font-family:monospace; }";
  10. print OUT "</style>";
  11.  
  12. print OUT "<div class='code'>";
  13. $c = 1;
  14. $isCmt = 0;
  15. while ( $line = <IN> ) {
  16. $line =~ s/\s*$//;
  17. $line =~ s/(&)/&amp;/g;
  18. $line =~ s/(<)/&lt;/g;
  19. $line =~ s/(>)/&gt;/g;
  20. $line =~ s/([ ])/&nbsp;/g;
  21. $line =~ s/(\t)/&nbsp;&nbsp;&nbsp;&nbsp;/g;
  22.  
  23. if ($line =~ /(\/\*)/) {
  24. $line =~ s/(\/\*)/<span class='cmt'>\1/;
  25. $isCmt = 1;
  26. }
  27. if ($isCmt) {
  28. if ($line =~ /(\*\/)/) {
  29. $line =~ s/(\*\/)/\1<\/span>/;
  30. $isCmt = 0;
  31. }
  32. } else {
  33. $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;
  34. $line =~ s/(\/\/.*)/<span class='cmt'>\1<\/span>/g;
  35. }
  36. printf(OUT "<span class='lin'>%04d:</span> $line<br/>\n", $c);
  37.  
  38. $c++;
  39. }
  40. print OUT "</div>";
  41. close IN;
  42. close OUT;

Python

  1. import os
  2. import pprint
  3.  
  4. # ディレクトリを走査し、階層構造を持ったリストを生成
  5. def trav(path, fn=''):
  6. l = []
  7. l.append(fn)
  8. d = os.path.join(path,fn)
  9. if os.path.isdir(d):
  10. for f in os.listdir(d):
  11. l.append(trav(d,f))
  12. return l
  13.  
  14. l = trav('C:\\', 'Python25')
  15.  
  16. # 階層構造を持ったリストを出力
  17. pprint.pprint(l, indent=4, width=80)

Ruby

  1. def greeting time
  2. msg = ''
  3. if time < 12
  4. msg = 'good moring.'
  5. else
  6. if time == 12
  7. msg = 'good afternoon.'
  8. else
  9. msg = 'good evening.'
  10. end
  11. end
  12. msg #メソッドからの返り値は単純にメソッドの最後の行の値
  13. end
  14.  
  15. puts greeting(21)

VBScript

  1. Dim reg As Object
  2. Dim matches As Object
  3. Dim match As Object
  4. Dim value As String '解析する文字列
  5.  
  6. Set reg = CreateObject("VBScript.RegExp")
  7. reg.Pattern = "^[ ]+([0-9A-Z@]+).*[ ]FOUND[ ].*"
  8. 'reg.Global = True '/g オプションを指定する
  9. Set matches = reg.Execute(value)
  10.  
  11. If matches.Count > 0 Then
  12. ' 一致情報のコレクション
  13. For Each match In matches
  14. Debug.Print match.FirstIndex
  15. Debug.Print match.Value
  16. Next
  17. Set match = matches(0)
  18. ' 一致グループ
  19. Debug.Print match.SubMatches(0)
  20. End If

SQL

  1. SLECT *
  2. FROM test1 A
  3. WHERE EXSISTS (
  4. SELECT name
  5. FROM test3 B
  6. WHERE B.id = A.id
  7. )

COBOL

  1. EVALUATE TOKUTEN
  2. WHEN 80 THROUGH 100
  3. MOVE "A" TO GRADE
  4. WHEN 60 THROUGH 79
  5. MOVE "B" TO GRADE
  6. WHEN 50 THROUGH 59
  7. MOVE "C" TO GRADE
  8. WHEN OTHER
  9. MOVE "D" TO GRADE
  10. END-EVALUATE

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次の記事

Pythonの思想