狠狠撸

狠狠撸Share a Scribd company logo
笔颈濒濒补谤の绍介
Smalltalkで文書生成
2015/09/30 第80回Smalltalk勉強会
合同会社ソフトウメヤ 梅澤真史
Pillarとは??
● 文書生成ツール
○ https://github.com/pillar-markup
○ SphinxやRe:VIEWのSmalltalk版
● Wikiに似た記法のテキストから各種文書を生成できる
○ HTML
○ LaTeX
○ Markdown
○ Pillar
○ text
○ Beamer
○ deck.js
● Smalltalkがわかれば拡張も容易
Pillarの利用例
● PillarHub
○ http://pillarhub.pharocloud.com
■ Pillerで書かれた文書の置き場
○ オンラインエディタでプレビューしながら文書の作成が可能
● Book
○ Book Skeleton
■ https://github.com/pillar-markup/book-skeleton
○ 改訂版Pharo by ExampleやEnterprise Pharo などがPillarで
書かれている
● Ecstatic
○ 静的サイトジェネレータ
■ https://github.com/guillep/ecstatic
入手の仕方
● SmalltalkHubからロード
○ Pillar.imageとして保存
Gofer new smalltalkhubUser: 'Pier' project: 'Pillar';
configuration;
load.
(Smalltalk at: #ConfigurationOfPillar) load
● またはインストール済みイメージをCIサーバから
○ https://ci.inria.fr/pharo-
contribution/job/Pillar/PHARO=40,VERSION=stable,
VM=vm/lastSuccessfulBuild/artifact/Pillar.zip
● Pharo VMは別途取得
$ curl get.pharo.org/vm40 | bash
チュートリアル
● Enterprise PharoのPillarの章
○ HTML版
○ Pillar版
■ Pillarフォーマットの網羅的な例にもなっているので
オススメ
● Pillar Cheet Sheet
○ http://www.cheatography.
com/benjaminvanryseghem/cheat-
sheets/pillar/
○ Tableの箇所が一部間違っているので注意すること
Hello, world
● Pillarを実行
○ output.htmlが生成される
!Hello, world
!!こんにちは世界
$ ./pharo Pillar.image pillar export --
to=html first.pillar
● first.pillar というファイルを作成
笔颈濒濒补谤の绍介
メタ情報の記述
● 文章の先頭にJSON(STON)形式で記述
{
"title": "こんにちはPillar",
"author": "ume"
}
!Hello, world
!!こんにちは世界
● 共通の設定はpillar.confに記述
{
"level1":
{"numbering": true, "size": 1, "renderAs": "number"}
}
笔颈濒濒补谤の绍介
リスト
● -か#で指定
{
"title": "こんにちはPillar"
}
!Hello, world
!!こんにちは世界
-項目1
--項目2
--#項目3
-##項目4
笔颈濒濒补谤の绍介
テーブル
● 先頭|で指定
○ !が続くとヘッダ
○ { or } or !が続くと位置の指定 (右寄せ、左寄せ、中央寄せ)
{
"title": "こんにちはPillar"
}
!Hello, world
!!こんにちは世界
|!ヘッダ1 |!ヘッダ2 |!ヘッダ3
|{セル1 |}セル2 ||セル2
笔颈濒濒补谤の绍介
リンク
● *label>url* で通常リンク
● +caption>url+ で画像リンク
● @ でアンカー
{
"title": "こんにちはPillar"
}
@top
!Hello, world
!!こんにちは世界
*Pharo>http://pharo.org*
+Pharo image>http://pharo.org/web/files/pharo.png+
*top>@top*
笔颈濒濒补谤の绍介
コードブロック
● [[[と]]]で囲む
● language=xxx で言語を指定
● eval=true で実行結果を表示可能 (但しSmalltalkに限る)
{
"title": "こんにちはPillar"
}
[[[language=smalltalk|lineNumber=true
| sum |
sum := (1 to: 100) sum.
]]]
[[[eval=true
stream << ('sum = ', (1 to: 100) sum asString).
]]]
笔颈濒濒补谤の绍介
RAWブロック
● {{{と}}}で囲む
● 出力言語をそのまま埋め込むことができる
{
"title": "こんにちはPillar"
}
__以下HTML__
{{{
<hr>
<div>HTML文書そのまま</div>
}}}
笔颈濒濒补谤の绍介
その他、強調など
● "" (ダブルクォート2つ)で囲むとボールド
● '' (シングルクォート2つ)で囲むとイタリック
● __ で囲むとアンダーライン
● -- で囲むと打ち消し線
{
"title": "こんにちはPillar"
}
- ""ボールド""
- ''イタリック''
- __アンダーライン__
- --打ち消し--
笔颈濒濒补谤の绍介
エディタ用プラグイン
● Pillarのシンタックスハイライトなどをしてくれる
○ Emacs
○ Vim
○ TextMate
○ Atom
複数ファイルの扱い
● pillar.confに以下を指定
○ inputFileNames
○ outputDirectory
○ separateOutputFiles
{
"level1":
{"numbering": true, "size": 0, "renderAs": "number"},
"outputDirectory" : "result",
"inputFiles" : ["first.pillar","second.pillar"],
"separateOutputFiles" : true
}
$ ./pharo Pillar.image pillar export --to=html
笔颈濒濒补谤の绍介
テンプレートの使用
● pillar.confで出力フォーマットに応じたテンプレートを指定できる
● テンプレートはMustache形式
{
"level1": {"numbering": true, "size": 0, "renderAs":
"number"},
"configurations" : {
"html": {
"outputType" : #html,
"template" : "pillar-template.html"
}
}
}
HTMLテンプレート例
● Safariでも文字化けしないようにcharsetを指定
● addressタグ部分に値が入るように設定
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>{{}}</title>
</head>
<body>
<div>{{{content}}}<div>
<address>{{address}}</address>
</body>
</html>
first.pillar では...
● メタ情報部分にaddressを入れておく
{
"title": "こんにちはPillar",
"address": "ume@softumeya.com"
}
!第1章
!!これこれ
あれあれ
笔颈濒濒补谤の绍介
Pillar の拡張
● PRDocumentWriterを継承して各種のwriter
が作られている
○ visitXXX: を実装していけば良い
(XXX部分はPillarのパースされた要素)
○ PRTextWriterやPRMarkdownWriterを
見るとなんとなくわかる
GitHub Flavored Markdownの拡張例
● PillarにPRGitHubMarkdownWriter
があるが...
○ コードブロックのサポートが弱い
(``` が使えない)ので追加してみる
○ 参考: GitHub Flavored Markdown
PRGitHubMarkdownWriterにメソッド追加
● コードブロック用のvisitメソッドはvisitScript:なのでオーバーライド
○ 引数はPRScriptオブジェクト、languageなどの情報が取れる
○ canvasを使って書いていく
PRGitHubMarkdownWriter >> visitScript: aScript
canvas newLine.
canvas raw: '```'.
aScript language isSpecified
ifTrue:[canvas raw: aScript language class standardName].
canvas newLine.
canvas raw: aScript text trimBoth.
canvas newLine.
canvas raw: '```'
markdown-test.pillar でテスト
● コードブロックのプロパティにlanguage=smalltalkを入れておく
[[[language=smalltalk
Transcript cr; show: 'hi'.
]]]
$ ./pharo Pillar.image pillar export --
to=githubmarkdown markdown-test.pillar
$ ./pharo Pillar.image pillar export --
to=markdown markdown-test.pillar
● markdownとgithubmarkdownで出力
笔颈濒濒补谤の绍介
笔颈濒濒补谤の绍介
まとめ
● Pillarを使うと、Wikiに似たマークアップを元に
様々なフォーマットの出力を行うことができる
● 本を書いたり、サイトを作成したり、プレゼンを作成したりする
際に役立つ
● VMとイメージさえ用意すればすぐに動くのでインストールも
楽
● PDF、EPUB、reveal.jsなどの出力も欲しいところ
● ライブラリの見通しが良いので、作ってみると良いかも

More Related Content

笔颈濒濒补谤の绍介