30
7行110bytesで構文を拡張 出来るReVIEWの話 2013/08/10 @muo_jp 1 13810日土曜日

13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

Embed Size (px)

DESCRIPTION

2013/08/10の http://zusaar.com/event/977003 「ReVIEWによる書籍制作フローを勉強する会」で話した内容です。 出落ちすぎるので資料公開は後にしました(・ω

Citation preview

Page 1: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

7行110bytesで構文を拡張出来るReVIEWの話

2013/08/10 @muo_jp

113年8月10日土曜日

Page 2: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

1 module ReVIEW2 class LATEXBuilder3 def inline_del(str)4 macro('sout', escape(str))5 end6 end7 end

213年8月10日土曜日

Page 3: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

ご清聴ありがとうございました

313年8月10日土曜日

Page 4: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

@muo_jp

プログラミング19年目 28歳(BASIC→C→PHP→Ruby→Python→C#2.0→C#3.0→C#4.0)

KLab株式会社 Kラボラトリー所属

413年8月10日土曜日

Page 5: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

今回のお話https://github.com/kmuto/review/issues/178

513年8月10日土曜日

Page 6: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

標準サポート無い…?

613年8月10日土曜日

Page 7: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

LaTeX界隈での下線/打ち消し線の扱い

「TeXで書かれるような書籍のほとんどで、下線や打ち消し線が必要になることはないでしょう」なノリ

713年8月10日土曜日

Page 8: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

HTMLでやれとか煽られそう

813年8月10日土曜日

Page 9: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

でもやっちゃう(・ω<)てへぺろ

913年8月10日土曜日

Page 10: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

Ruby読み書きするの5年ぶりぐらい(しかも以前はRails向けに雑に書いてたぐらい)な人がやってみる

ということで

1013年8月10日土曜日

Page 11: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

その前に

1113年8月10日土曜日

Page 12: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

ReVIEWと私(接触時間=5h)C84本で、他の人の原稿を参考にREADME読みつつHTML出力を中心に使ったぐらい→よく分かってない

早くプレビュー出来ないと辛い→Vimのルール書いた

:wで保存→ChromeのタブをF5、で大変サクサク

au BufWritePost *.re silent execute '!review-compile --target html --draft ' . expand('<afile>:.') . ' > ' . expand('<afile>:p:h').'/html_m/'.expand('<afile>:t:r').'.html'

1213年8月10日土曜日

Page 13: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

いざ構文拡張

事前調査(99%)

環境構築: 1.5時間

ReVIEWのドキュメント&masterのコード読み: 1.5時間

実装(40秒)

ということで、主に事前調査の話。何かの参考になれば幸い

1313年8月10日土曜日

Page 14: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

まずは本体のドキュメント読む

doc/format.rdocreview-ext.rbで拡張構文書けるよというのは聞いている

インライン命令の扱いだよね多分

…疑問に思ったこと: epub作るコマンドとreview-compileでターゲット指定する系はどう違うんじゃろ

1413年8月10日土曜日

Page 15: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

review-(epub|pdf)makerって何してるの

(epub|pdf)としてのヘッダ・フッタ生成と目次生成などを行い、本文をごっそり生成している

1 def output_chaps(chapsfile, values) 2 File.open(chapsfile) {|chaps| 3 chaps.each_line {|l| 4 next if l =~ /^#/ 5 file_id = File.basename(l.chomp.strip,".*") 6 filename = "#{file_id}.html" 7 fork { 8 STDOUT.reopen("#{@bookdir}/OEBPS/#{filename}") 9 exec("review-compile --target=html --level=#{values["secnolevel"]} #{values["params"]} #{l}")10 }11 Process.waitall12 getanchors("#{@bookdir}/OEBPS/#{filename}")13 @manifeststr << %Q(<item id="#{file_id}" href="#{filename}" media-type="application/xhtml+xml" />\n)14 @ncxstr << %Q(<itemref idref="#{file_id}" />\n)15 }16 }17 end

1513年8月10日土曜日

Page 16: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

ということで

倒すべきはreview-compileコマンド

とりわけ、--target=htmlと--target=latexを倒せばLaTeX、PDF、EPUB3(*1)を倒せる

お得!

*1: EPUB3はHTML5+CSS3ベース→zip固めだからねっ。一応出力レベルに注意

1613年8月10日土曜日

Page 17: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

インライン命令の実装方法を調べる

compiler.rbで構文が定義されてる

block, single, inlineの3種類があるけどsingleってなんだっけ(後でしらぶる)

参考のため、他のインライン命令の実装を調べてみる

1713年8月10日土曜日

Page 18: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

~/Documents/workspace/review $ grep -r 'ttb' .

(略)

/doc/format.rdoc:@<ttb>{BarClass}:: テキストをテレタイプ文字(等幅フォント)の太字で出力する。

./lib/review/compiler.rb: definline :ttb

./lib/review/htmlbuilder.rb: def inline_ttb(str)

./lib/review/idgxmlbuilder.rb: [:ttbold, :hint, :maru, :keytop, :labelref, :ref, :pageref, :balloon].each {|e| Compiler.definline(e) }

./lib/review/idgxmlbuilder.rb: def inline_ttb(str)

./lib/review/idgxmlbuilder.rb: alias :inline_ttbold inline_ttb

./lib/review/latexbuilder.rb: def inline_ttb(str)

./lib/review/topbuilder.rb: [:ttbold, :hint, :maru, :keytop, :labelref, :ref, :pageref, :balloon].each {|e|

./lib/review/topbuilder.rb: def inline_ttb(str)

./lib/review/topbuilder.rb: alias :inline_ttbold inline_ttb

ドキュメント→構文定義→

HTML用ビルダ→InDesign用ビルダ→

LaTeX用ビルダ→なんじゃろ→

1813年8月10日土曜日

Page 19: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

その他既にdefinline :delと定義がある。ということはこれ使うのか

pLaTeX用の出力が書かれてないというだけなのかな

あ、これがkmutoさんが最初にコメント下さってた「一応用意してます」というあたりなんだ。htmlbuilder固有でなくinlineコマンドとして用意されてる

不正なインライン命令はどうなるんだろ

割とチャプター途中で生成諦める(まあそうだよね…)

1913年8月10日土曜日

Page 20: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

TeXのマクロってそもそもどうすれば読めるんじゃろ

TeXのstyファイルはbook/以下へ丸ごとコピーされるから使える

自動で利用可能になるわけではない。config.ymlでtexstyle: として指定したスタイルファイルが利用されるので、ここをエントリポイントとしてusepackageしてやる必要がある

2013年8月10日土曜日

Page 21: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

ここまで分かれば

2113年8月10日土曜日

Page 22: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

解(再掲)

1 module ReVIEW2 class LATEXBuilder3 def inline_del(str)4 macro('sout', escape(str))5 end6 end7 end

2213年8月10日土曜日

Page 23: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

エピローグ今回は運もよかった。

既にdefinlineで定義されてた

HTML版はもうあった

LaTeX版のスタブも既にあった

sty/追加してロードすればokだった

内部構造分かったしこの先役立つ多分

2313年8月10日土曜日

Page 24: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

積み残し

2413年8月10日土曜日

Page 25: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

ReVIEWにgemで書式プラグイン追加

$ gem install review-plugin-soutとかして、他の人が定義した書式を使えると嬉しそう

必要な対応

呼び出し側: review-ext.rbでgem分を追加ロード

ReVIEW本体

sty/*をgemのディレクトリから拾ってこられるようにする

config.ymlのusepackageに複数キーを指定し、各gemのマクロを拾えるようにする

まとめ: もうちょい整理して頑張る

2513年8月10日土曜日

Page 26: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

縦書き

ReVIEWでは鬼門っぽい。あんまり調べてない(今回は要らなかった)

2613年8月10日土曜日

Page 27: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

ReVIEW丸ごとブラウザ内(JS)で走らないの(バンッ

OpalでソースをJSへ変換?→超ざっくり見た感じ辛そう。Kernel.loadとか多用するのどうするんだろ

HotRubyは2008年よりこちらメンテされてない模様(YARVのバイトコードをJS上で実行出来るようなんだけど)。Ruby1.9.2のバイトコード対応してない、標準ライブラリほとんど実装してないなど多分いろいろ辛い。むりくり出来なくもないかもしれないけれど

まとめ: つらい

2713年8月10日土曜日

Page 28: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

わざわざ拡張しなくても@<m>{a + \raw}とかでok?

latexbuilderでの実装def inline_m(str) " $#{str}$ "end割となんでも通してくれる感じ? と思ったら、これは数式を書くためのものっぽい(LaTeX知らな過ぎ辛LaTeXの構文分かってなさすぎて少々混乱してる。ちゃんと調べるhtmlbuilderでは、mathmlのパーサを併用していい感じに出力できるようにしてる。

まとめ: えらい

2813年8月10日土曜日

Page 29: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

InDesignサポート

InDesign用のXMLスキーマ調べたけれど公開されてなさげでつらたん…

InDesignで何か書いてXML出力してみればいいんだと思う(正しい実状ドリブン・エンジニアリングの在り方)

まとめ: 誰かに手伝ってもらおう

2913年8月10日土曜日

Page 30: 13.08.10 7行110bytesで構文を拡張 出来るReVIEWの話

まとめ

ReVIEW楽しい✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

3013年8月10日土曜日