Contenu connexe

Plus de Kei Nakazawa(20)

Dernier(20)

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

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