Snow Flower Text の軽量マークアップでは、ソースコードの シンタックスハイライト表示をサポートしています。シンタックスハイライトはプログラミング言語やマークアップ言語のように構造化された言語において、色分けによって、その構造を視覚的に区別しやすくする表現方法でソースコードの把握が容易となります。プログラミング記事ではソースコードをハイライト表示することで読者にとって読みやすい文書となります。
static int fibonacci(int n) {
switch (n) {
case 0: return 0;
case 1: return 1;
default: return fibonacci(n - 2) + fibonacci(n - 1);
}
}
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.9.x の時点で、180 言語以上 をサポートしており、 Go や Scala、TypeScript 、 CoffeeScript といった比較的新しい言語も含まれています。サポートしている言語について知りたい場合は「対応言語の一覧」を参照してください。
- 共通のハイライトエンジン
Snow Flower Text は軽量マークアップ の違いを出来る限り少なくするようにデザインしており、 AsciiDoc と MarkDown で共通のハイライトエンジンを使用しています。したがって、使用する軽量マークアップ毎の対応言語や言語の名称の違いを意識する必要はありません。
- 文書の閲覧環境の設定に依存しない
エクスポートしたHTMLファイルはハイライトの為にJavaScriptを実行する必要がありません。ハイライト済みのHTMLが出力されます。従って、特別に JavaScript ファイルをロードする必要はなく簡単に記事を投稿することが出来ます。また、ハイライトされたソースコードを含む文書は Web ブラウザの JavaScript の有効無効に関係なく動作します。
2. 使い方
AsciiDoc や Markdown では、ソースコードのブロックに対して言語を指定することでシンタックス・ハイライトされます。次の手順で簡単に行えます。
ソースコードの範囲選択します。
メニュー
>書式
>コード
のメニューを選択すると選択範囲がソースコードとしてマークアップされます。マークアップ言語の記述形式に合わせて言語を指定することで、 シンタックスが分かりやすいように色分けがされます。対応していない言語の場合は、単純に無視されます。具体的に使用できる言語名は「対応言語の一覧」を参照してください。
- 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” とだけ出力する簡単なプログラムで、 比較的利用頻度が高いと考えられる言語を抜粋しています。
一定の色分けルールが適用されていることから、知らない言語であっても読みやすくなっていることが確認できるはずです。
[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);
}
}
}
[source, applescript]
display dialog "Hello, world"
[source, awk]
BEGIN { print "Hello, world" }
[source, c]
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("Hello World!");
return EXIT_SUCCESS;
}
[source, bash]
echo 'Hello, world'
[source, cpp]
main()
{
cout << "Hello World!" << endl;
return 0;
}
[source, commonlisp]
(print "Hello World")
[source, clojure]
(javax.swing.JOptionPane/showMessageDialog nil "Hello World")
[source, cs]
class HelloWorldApp {
public static void Main() {
System.Windows.Forms.MessageBox.Show("Hello, world");
}
}
[source, delphi]
program HelloWorld;
uses
Dialogs;
begin
ShowMessage('Hello, World');
end.
[source, erlang]
-module(hello).
-export([hello/0]).
hello() ->
io:format("Hello World~n", []).
[source, fsharp]
printf "Hello World\n"
[source, go]
package main
import "fmt"
func main() {
fmt.Printf("Hello World\n")
}
[source, groovy]
println "Hello World"
[source, haskell]
main = putStrLn "Hello World"
[source, html]
<HTML>
<!-- Hello World in HTML -->
<HEAD>
<TITLE>Hello World</TITLE>
</HEAD>
<BODY>
Hello World
</BODY>
</HTML>
[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);
}
}
[source, js]
document.body.appendChild(document.createTextNode("Hello World"));
[source, jsp]
<%= "Hello, world" %>
[source, kotlin]
package hello
fun getHelloString() : String {
return "Hello, world!"
}
fun main(args : Array<String>) {
println(getHelloString())
}
[source, matlab]
disp('Hello World');
[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;
}
[source, ocaml]
print_string "Hello World\n";;
[source, pascal]
program HelloWorld(output);
begin
WriteLn('Hello World');
end.
[source, perl]
print "Hello World\n";
[source, php]
<?php
echo 'Hello, world';
exit;
?>
set serveroutput on
begin
dbms_output.enable(10000);
dbms_output.put_line('Hello World');
end;
/
[source, powershell]
'Hello World'
[source, python]
print "Hello World"
[source, r]
cat("Hello world\n")
[source, ruby]
puts "Hello, world"
[source, rust]
fn main() {
io::println("hello, world");
}
[source, scala]
object HelloWorld extends Application {
println("Hello, world")
}
[source, scheme]
(display "Hello, world")
(newline)
[source, smalltalk]
'Hello, world' printOn: Transcript.
[source, sql]
select 'hello world' from dual;
select 'hello world';
[source, swift]
println("Hello World")
[source, tcl]
puts "Hello, world"
[source, tex]
\documentclass{article}
\begin{document}
Hello World
\end{document}
[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>
[source, vbnet]
Public Class HelloWorldApp
Shared Sub Main()
System.Windows.Forms.MessageBox.Show("Hello, World")
End Sub
End Class
[source, verilog]
module main;
initial
begin
$display("Hello, World");
$finish ;
end
endmodule
[source, vhdl]
ENTITY helloworld IS
END helloworld;
ARCHITECTURE hw OF helloworld IS
BEGIN
ASSERT FALSE
REPORT "HELLO, WORLD"
SEVERITY NOTE;
END hw;
[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>
[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
angelscript
apache
applescript
arcade
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
gml
go
golo
gradle
groovy
H
haml
handlebars
haskell
haxe
hsp
htmlbars
http
hy
I
inform7
ini
irpf90
isbl
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
pgsql
php
plaintext
pony
powershell
processing
profile
prolog
properties
protobuf
puppet
purebasic
python
Q
q
qml
R
r
reasonml
rib
roboconf
routeros
rsl
ruby
ruleslanguage
rust
S
sas
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