View
3.800
Download
4
Category
Preview:
DESCRIPTION
2013/08/10の http://zusaar.com/event/977003 「ReVIEWによる書籍制作フローを勉強する会」で話した内容です。 出落ちすぎるので資料公開は後にしました(・ω
Citation preview
7行110bytesで構文を拡張出来るReVIEWの話
2013/08/10 @muo_jp
113年8月10日土曜日
解
1 module ReVIEW2 class LATEXBuilder3 def inline_del(str)4 macro('sout', escape(str))5 end6 end7 end
213年8月10日土曜日
ご清聴ありがとうございました
313年8月10日土曜日
@muo_jp
プログラミング19年目 28歳(BASIC→C→PHP→Ruby→Python→C#2.0→C#3.0→C#4.0)
KLab株式会社 Kラボラトリー所属
413年8月10日土曜日
今回のお話https://github.com/kmuto/review/issues/178
513年8月10日土曜日
標準サポート無い…?
613年8月10日土曜日
LaTeX界隈での下線/打ち消し線の扱い
「TeXで書かれるような書籍のほとんどで、下線や打ち消し線が必要になることはないでしょう」なノリ
713年8月10日土曜日
HTMLでやれとか煽られそう
813年8月10日土曜日
でもやっちゃう(・ω<)てへぺろ
913年8月10日土曜日
Ruby読み書きするの5年ぶりぐらい(しかも以前はRails向けに雑に書いてたぐらい)な人がやってみる
ということで
1013年8月10日土曜日
その前に
1113年8月10日土曜日
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日土曜日
いざ構文拡張
事前調査(99%)
環境構築: 1.5時間
ReVIEWのドキュメント&masterのコード読み: 1.5時間
実装(40秒)
ということで、主に事前調査の話。何かの参考になれば幸い
1313年8月10日土曜日
まずは本体のドキュメント読む
doc/format.rdocreview-ext.rbで拡張構文書けるよというのは聞いている
インライン命令の扱いだよね多分
…疑問に思ったこと: epub作るコマンドとreview-compileでターゲット指定する系はどう違うんじゃろ
1413年8月10日土曜日
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日土曜日
ということで
倒すべきはreview-compileコマンド
とりわけ、--target=htmlと--target=latexを倒せばLaTeX、PDF、EPUB3(*1)を倒せる
お得!
*1: EPUB3はHTML5+CSS3ベース→zip固めだからねっ。一応出力レベルに注意
1613年8月10日土曜日
インライン命令の実装方法を調べる
compiler.rbで構文が定義されてる
block, single, inlineの3種類があるけどsingleってなんだっけ(後でしらぶる)
参考のため、他のインライン命令の実装を調べてみる
1713年8月10日土曜日
~/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日土曜日
その他既にdefinline :delと定義がある。ということはこれ使うのか
pLaTeX用の出力が書かれてないというだけなのかな
あ、これがkmutoさんが最初にコメント下さってた「一応用意してます」というあたりなんだ。htmlbuilder固有でなくinlineコマンドとして用意されてる
不正なインライン命令はどうなるんだろ
割とチャプター途中で生成諦める(まあそうだよね…)
1913年8月10日土曜日
TeXのマクロってそもそもどうすれば読めるんじゃろ
TeXのstyファイルはbook/以下へ丸ごとコピーされるから使える
自動で利用可能になるわけではない。config.ymlでtexstyle: として指定したスタイルファイルが利用されるので、ここをエントリポイントとしてusepackageしてやる必要がある
2013年8月10日土曜日
ここまで分かれば
2113年8月10日土曜日
解(再掲)
1 module ReVIEW2 class LATEXBuilder3 def inline_del(str)4 macro('sout', escape(str))5 end6 end7 end
2213年8月10日土曜日
エピローグ今回は運もよかった。
既にdefinlineで定義されてた
HTML版はもうあった
LaTeX版のスタブも既にあった
sty/追加してロードすればokだった
内部構造分かったしこの先役立つ多分
2313年8月10日土曜日
積み残し
2413年8月10日土曜日
ReVIEWにgemで書式プラグイン追加
$ gem install review-plugin-soutとかして、他の人が定義した書式を使えると嬉しそう
必要な対応
呼び出し側: review-ext.rbでgem分を追加ロード
ReVIEW本体
sty/*をgemのディレクトリから拾ってこられるようにする
config.ymlのusepackageに複数キーを指定し、各gemのマクロを拾えるようにする
まとめ: もうちょい整理して頑張る
2513年8月10日土曜日
縦書き
ReVIEWでは鬼門っぽい。あんまり調べてない(今回は要らなかった)
2613年8月10日土曜日
ReVIEW丸ごとブラウザ内(JS)で走らないの(バンッ
OpalでソースをJSへ変換?→超ざっくり見た感じ辛そう。Kernel.loadとか多用するのどうするんだろ
HotRubyは2008年よりこちらメンテされてない模様(YARVのバイトコードをJS上で実行出来るようなんだけど)。Ruby1.9.2のバイトコード対応してない、標準ライブラリほとんど実装してないなど多分いろいろ辛い。むりくり出来なくもないかもしれないけれど
まとめ: つらい
2713年8月10日土曜日
わざわざ拡張しなくても@<m>{a + \raw}とかでok?
latexbuilderでの実装def inline_m(str) " $#{str}$ "end割となんでも通してくれる感じ? と思ったら、これは数式を書くためのものっぽい(LaTeX知らな過ぎ辛LaTeXの構文分かってなさすぎて少々混乱してる。ちゃんと調べるhtmlbuilderでは、mathmlのパーサを併用していい感じに出力できるようにしてる。
まとめ: えらい
2813年8月10日土曜日
InDesignサポート
InDesign用のXMLスキーマ調べたけれど公開されてなさげでつらたん…
InDesignで何か書いてXML出力してみればいいんだと思う(正しい実状ドリブン・エンジニアリングの在り方)
まとめ: 誰かに手伝ってもらおう
2913年8月10日土曜日
まとめ
ReVIEW楽しい✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
3013年8月10日土曜日
Recommended