Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
7行110bytesで構文を拡張
出来るReVIEWの話
2013/08/10 @muo_jp
113年8月10日土曜日
解
1 module ReVIEW
2 class LATEXBuilder
3 def inline_del(str)
4 macro('sout', escape(str))
5 end
6 end
7 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、で大変サクサ...
いざ構文拡張
事前調査(99%)
環境構築: 1.5時間
ReVIEWのドキュメント&masterのコード読み: 1.5時間
実装(40秒)
ということで、主に事前調査の話。何かの参考になれば幸い
1313年8月10日土曜日
まずは本体のドキュメント読む
doc/format.rdoc
review-ext.rbで拡張構文書けるよというのは聞いている
インライン命令の扱いだよね多分
…疑問に思ったこと: epub作るコマンドとreview-compile
でターゲッ...
review-(epub|pdf)makerって
何してるの
(epub|pdf)としてのヘッダ・フッタ生成と目次生成など
を行い、本文をごっそり生成している
1 def output_chaps(chapsfile, values)
2 Fi...
ということで
倒すべきはreview-compileコマンド
とりわけ、--target=htmlと--target=latexを倒せばLaTeX、
PDF、EPUB3(*1)を倒せる
お得!
*1: EPUB3はHTML5+CSS3ベース→z...
インライン命令の
実装方法を調べる
compiler.rbで構文が定義されてる
block, single, inlineの3種類があるけどsingleってなん
だっけ(後でしらぶる)
参考のため、他のインライン命令の実装を調べてみる
1713...
~/Documents/workspace/review $ grep -r 'ttb' .
(略)
/doc/format.rdoc:@<ttb>{BarClass}:: テキストをテレタイ
./lib/review/compiler.rb:...
その他
既にdefinline :delと定義がある。ということはこれ使う
のか
pLaTeX用の出力が書かれてないというだけなのかな
あ、これがkmutoさんが最初にコメント下さってた「一
応用意してます」というあたりなんだ。htmlbuil...
TeXのマクロってそもそも
どうすれば読めるんじゃろ
TeXのstyファイルはbook/以下へ丸ごとコピーされるか
ら使える
自動で利用可能になるわけではない。config.ymlで
texstyle: として指定したスタイルファイルが利用され...
ここまで分かれば
2113年8月10日土曜日
解(再掲)
1 module ReVIEW
2 class LATEXBuilder
3 def inline_del(str)
4 macro('sout', escape(str))
5 end
6 end
7 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分を追加ロード
ReVI...
縦書き
ReVIEWでは鬼門っぽい。あんまり調べてない
(今回は要らなかった)
2613年8月10日土曜日
ReVIEW丸ごとブラウザ内(JS)で走
らないの(バンッ
OpalでソースをJSへ変換?→超ざっくり見た感じ辛そ
う。Kernel.loadとか多用するのどうするんだろ
HotRubyは2008年よりこちらメンテされてない模様
(YARVのバ...
わざわざ拡張しなくても
@<m>{a + raw}とかでok?
latexbuilderでの実装
def inline_m(str)
" $#{str}$ "
end
割となんでも通してくれる感じ? と思ったら、これは数式を書くた
めのものっぽ...
InDesignサポート
InDesign用のXMLスキーマ調べたけれど公開されてなさ
げでつらたん…
InDesignで何か書いてXML出力してみればいいんだと思
う(正しい実状ドリブン・エンジニアリングの在り方)
まとめ: 誰かに手伝っても...
まとめ
ReVIEW楽しい✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
3013年8月10日土曜日
Upcoming SlideShare
Loading in …5
×

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

4,930 views

Published on

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

Published in: Spiritual
  • Be the first to comment

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

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

×