Snow Flower Text のシンタックス・ハイライト

Snow Flower Text の軽量マークアップでは、ソースコードの シンタックスハイライト表示をサポートしています。シンタックスハイライトはプログラミング言語やマークアップ言語のように構造化された言語において、色分けによって、その構造を視覚的に区別しやすくする表現方法でソースコードの把握が容易となります。プログラミング記事ではソースコードをハイライト表示することで読者にとって読みやすい文書となります。

ハイライト無しの Java 言語のソース
static int fibonacci(int n) {
switch (n) {
    case 0: return 0;
    case 1: return 1;
    default: return fibonacci(n - 2) + fibonacci(n - 1);
}
}
ハイライト有りの Java 言語のソース
static int fibonacci(int n) {
switch (n) {
case 0: return 0;
case 1: return 1;
default: return fibonacci(n - 2) + fibonacci(n - 1);
}
}

この記事では軽量マークアップのハイライト機能の使い方について解説します。

Snow Flower Text は ライティングと プログラミングをサポートするテキストエディタです。

1. 特徴

Snow Flower Text のシンタックス・ハイライト機能は次のような特徴を持っています。

多くのプログラミング言語をサポート

Snow Flower Text v1.7.x の時点で、170 言語以上 をサポートしており、 GoScalaTypeScriptCoffeeScript といった比較的新しい言語も含まれています。サポートしている言語について知りたい場合は「対応言語の一覧」を参照してください。

共通のハイライトエンジン

Snow Flower Text は軽量マークアップ の違いを出来る限り少なくするようにデザインしており、 AsciiDoc と MarkDown で共通のハイライトエンジンを使用しています。したがって、使用する軽量マークアップ毎の対応言語や言語の名称の違いを意識する必要はありません。

文書の閲覧環境の設定に依存しない

エクスポートしたHTMLファイルはハイライトの為にJavaScriptを実行する必要がありません。ハイライト済みのHTMLが出力されます。従って、特別に JavaScript ファイルをロードする必要はなく簡単に記事を投稿することが出来ます。また、ハイライトされたソースコードを含む文書は Web ブラウザの JavaScript の有効無効に関係なく動作します。

2. 使い方

AsciiDoc や Markdown では、ソースコードのブロックに対して言語を指定することでシンタックス・ハイライトされます。次の手順で簡単に行えます。

  1. ソースコードの範囲選択します。

  2. メニュー > 書式 > コード のメニューを選択すると選択範囲がソースコードとしてマークアップされます。

  3. マークアップ言語の記述形式に合わせて言語を指定することで、 ソースコードがシンタックスの分類でカラーリングされて表示されます。対応していない言語の場合は、単純に無視されます。具体的に使用できる言語名は「対応言語の一覧」を参照してください。

    AsciiDoc での記述方法

    ソースコードの記述を [source] ブロックで囲み、プログラミング言語あるいはマークアップ言語を指定します。

    [source, 言語]
    ----------------------------------------
    ここにコードを記述
    ----------------------------------------

    または

    [source, language="言語"]
    ----------------------------------------
    ここにコードを記述
    ----------------------------------------

    以下は AsciiDoc 文書内で C 言語のソースコードをハイライト表示する例です。

    Asciidoc でハイライトを使用する例
    [source, c]
    ----------------------------------------
    #include <stdio.h>
    #include <stdlib.h>

    int main(void)
    {
    puts("Hello World!");
    return EXIT_SUCCESS;
    }
    ----------------------------------------
    MarkDown での記述方法

    MarkDown では以下のようにバッククォート記号に続き言語を指定します。

    ``` 言語
    ここにコードを記述
    ```

    以下は MarkDown 文書内で C 言語のソースコードをハイライト表示する例です。

    MarkDown でハイライトを使用する例
    ``` C
    #include <stdio.h>
    #include <stdlib.h>

    int main(void)
    {
    puts("Hello World!");
    return EXIT_SUCCESS;
    }
    ```

3. シンタックスハイライト使用例

以下は実際に Snow Flower Text を使用してハイライト表示した例です。 サンプルコードは “Hello, world” とだけ出力する簡単なプログラムで、 比較的利用頻度が高いと考えられる言語を抜粋しています。

一定の色分けルールが適用されていることから、知らない言語であっても読みやすくなっていることが確認できるはずです。

ActionScript – [source, actionscript]
package {
import flash.display.Sprite;
import flash.text.TextField;

public class HelloWorld extends Sprite {
public function HelloWorld():void {
var message:TextField = new TextField;
message.text = "Hello, World";
this.addChild(message);
}
}
}
AppleScript – [source, applescript]
display dialog "Hello, world"
AWK – [source, awk]
BEGIN { print "Hello, world" }
C – [source, c]
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
puts("Hello World!");
return EXIT_SUCCESS;
}
Bash – [source, bash]
echo 'Hello, world'
C++ – [source, cpp]
main()
{
cout << "Hello World!" << endl;
return 0;
}
Common Lisp – [source, commonlisp]
(print "Hello World")
Clojure – [source, clojure]
(javax.swing.JOptionPane/showMessageDialog nil "Hello World")
C# – [source, cs]
class HelloWorldApp {
public static void Main() {
System.Windows.Forms.MessageBox.Show("Hello, world");
}
}
Delphi – [source, delphi]
program HelloWorld;
uses
Dialogs;
begin
ShowMessage('Hello, World');
end.
Erlang – [source, erlang]
-module(hello).
-export([hello/0]).
hello() ->
io:format("Hello World~n", []).
f# – [source, fsharp]
printf "Hello World\n"
Go – [source, go]
package main
import "fmt"
func main() {
fmt.Printf("Hello World\n")
}
Groovy – [source, groovy]
println "Hello World"
Haskell – [source, haskell]
main = putStrLn "Hello World"
HTML – [source, html]
<HTML>
<!-- Hello World in HTML -->
<HEAD>
<TITLE>Hello World</TITLE>
</HEAD>
<BODY>
Hello World
</BODY>
</HTML>
Java – [source, java]
import java.awt.*;
import java.awt.event.*;

public class HelloFrame extends Frame {
HelloFrame(String title) {
super(title);
}
public void paint(Graphics g) {
super.paint(g);
Insets ins = this.getInsets();
g.drawString("Hello, World", ins.left + 25, ins.top + 25);
}
public static void main(String[] args) {
HelloFrame fr = new HelloFrame("Hello");

fr.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
fr.setResizable(true);
fr.setSize(500, 100);
fr.setVisible(true);
}
}
Javascript – [source, js]
document.body.appendChild(document.createTextNode("Hello World"));
JSP – [source, jsp]
<%= "Hello, world" %>
Kotlin – [source, kotlin]
package hello

fun getHelloString() : String {
return "Hello, world!"
}

fun main(args : Array<String>) {
println(getHelloString())
}
Matlab – [source, matlab]
disp('Hello World');
Objective-C – [source, objc]
#include <stdio.h>
#include <objpak.h>
int main(int argc,char **argv)
{
id set = [Set new];
argv++;while (--argc) [set add:[String str:*argv++]];
[set do:{ :each | printf("hello, %s\n",[each str]); }];
return 0;
}
OCaml – [source, ocaml]
print_string "Hello World\n";;
Pascal – [source, pascal]
program HelloWorld(output);
begin
WriteLn('Hello World');
end.
Perl – [source, perl]
print "Hello World\n";
PHP – [source, php]
<?php
echo 'Hello, world';
exit;
?>
PL/SQL –
set serveroutput on
begin
dbms_output.enable(10000);
dbms_output.put_line('Hello World');
end;
/
Powershell – [source, powershell]
'Hello World'
Python – [source, python]
print "Hello World"
R – [source, r]
cat("Hello world\n")
Ruby – [source, ruby]
puts "Hello, world"
Rust – [source, rust]
fn main() {
io::println("hello, world");
}
Scala – [source, scala]
object HelloWorld extends Application {
println("Hello, world")
}
Scheme – [source, scheme]
(display "Hello, world")
(newline)
Smalltalk – [source, smalltalk]
'Hello, world' printOn: Transcript.
SQL – [source, sql]
select 'hello world' from dual;
select 'hello world';
Swift – [source, swift]
println("Hello World")
Tcl – [source, tcl]
puts "Hello, world"
TeX / LaTex – [source, tex]
\documentclass{article}
\begin{document}
Hello World
\end{document}
SVG – [source, svg]
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg width="6.4cm" height="4.8cm" viewBox="0 0 639 479"
xmlns="http://www.w3.org/2000/svg" version="1.1">

<desc>Hello, World</desc>
<text x="320" y="250" font-family="Verdana" font-size="1cm" text-anchor="middle">
Hello, world
</text>
</svg>
VB.NET – [source, vbnet]
Public Class HelloWorldApp
Shared Sub Main()
System.Windows.Forms.MessageBox.Show("Hello, World")
End Sub
End Class
Verilog – [source, verilog]
module main;
initial
begin
$display("Hello, World");
$finish ;
end
endmodule
VHDL – [source, vhdl]
ENTITY helloworld IS
END helloworld;

ARCHITECTURE hw OF helloworld IS

BEGIN

ASSERT FALSE
REPORT "HELLO, WORLD"
SEVERITY NOTE;

END hw;
XHTML – [source, xhtml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
<title>Hello, World</title>
</head>
<body>
<p>Hello, World</p>
</body>
</html>
XML – [source, xml]
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="HelloWorld.xsl" ?>
<!-- Hello World in XML -->
<text><string>Hello, World</string></text>

4. 対応言語の一覧

次の一覧は Snow Flower Text でシンタックスハイライト可能な言語です。 ソースコードのハイライト言語として指定します。言語名の指定では大文字、小文字の違いは無視されます。

  • 0-9

    • 1c

  • A

    • abnf

    • accesslog

    • actionscript

    • ada

    • apache

    • applescript

    • arduino

    • armasm

    • asciidoc

    • aspectj

    • autohotkey

    • autoit

    • avrasm

    • awk

    • axapta

  • B

    • bash

    • basic

    • bnf

    • brainfuck

  • C

    • cal

    • capnproto

    • ceylon

    • clean

    • clojure

    • clojure-repl

    • cmake

    • coffeescript

    • coq

    • cos

    • cpp

    • crmsh

    • crystal

    • cs

    • csp

    • css

  • D

    • d

    • dart

    • delphi

    • diff

    • django

    • dns

    • dockerfile

    • dos

    • dsconfig

    • dts

    • dust

  • E

    • ebnf

    • elixir

    • elm

    • erb

    • erlang

    • erlang-repl

    • excel

  • F

    • fix

    • flix

    • fortran

    • fsharp

  • G

    • gams

    • gauss

    • gcode

    • gherkin

    • glsl

    • go

    • golo

    • gradle

    • groovy

  • H

    • haml

    • handlebars

    • haskell

    • haxe

    • hsp

    • htmlbars

    • http

    • hy

  • I

    • inform7

    • ini

    • irpf90

  • J

    • java

    • javascript

    • jboss-cli

    • json

    • julia

    • julia-repl

  • K

    • kotlin

  • L

    • lasso

    • ldif

    • leaf

    • less

    • lisp

    • livecodeserver

    • livescript

    • llvm

    • lsl

    • lua

  • M

    • makefile

    • markdown

    • mathematica

    • matlab

    • maxima

    • mel

    • mercury

    • mipsasm

    • mizar

    • mojolicious

    • monkey

    • moonscript

  • N

    • n1ql

    • nginx

    • nimrod

    • nix

    • nsis

  • O

    • objectivec

    • ocaml

    • openscad

    • oxygene

  • P

    • parser3

    • perl

    • pf

    • php

    • pony

    • powershell

    • processing

    • profile

    • prolog

    • protobuf

    • puppet

    • purebasic

    • python

  • Q

    • q

    • qml

  • R

    • r

    • rib

    • roboconf

    • routeros

    • rsl

    • ruby

    • ruleslanguage

    • rust

  • S

    • scala

    • scheme

    • scilab

    • scss

    • shell

    • smali

    • smalltalk

    • sml

    • sqf

    • sql

    • stan

    • stata

    • step21

    • stylus

    • subunit

    • swift

  • T

    • taggerscript

    • tap

    • tcl

    • tex

    • thrift

    • tp

    • twig

    • typescript

  • V

    • vala

    • vbnet

    • vbscript

    • vbscript-html

    • verilog

    • vhdl

    • vim

  • X

    • x86asm

    • xl

    • xml

    • xquery

  • Y

    • yaml

  • Z

    • zephir