公開しようと思ってて忘れて大分タイミングを外した。 RubyKaigi2006のライトニングトークで使った ときのRabbitのテーマ。基本的には高橋メソッドで、でもところどころ混じるソースコードの解説は割と文字数が多かった。なので、lightning-rabbitテーマをベースにいじってみた。
説明
Preformattedな部分をソースコードとみなして、rabbit添付の高橋メソッドの実装と同じ発想で「全体画面内に収まる範囲でできるだけ大きく」表示している。取り合えずレンダリングさせてみて溢れたら小さくするとと言う強引さも高橋メソッドの実装と同じ。
言い訳
- 書いた本人にも謎のマジックナンバーが散らばっている。こうしないとフォントが大きすぎたのだ。
- 初ライトニングトーク、初Rabbit、初テーマ作成だったのでよくわからなかったけど、見様見まねで書いた。須藤さんに「ドキュメントないの?」って聞いたら「ソース嫁」って言われた。
代物
## ## lightning-code-review.rb ## ## Copyright (c) 2006 Yugui ## License: Ruby's ## include_theme('lightning-rabbit') PreformattedText.class_eval do def adjust_code block = parent body = block.parent slide = body.parent add_pre_draw_proc(nil) do |canvas, x, y, w, h, simulation| if simulation max_width = canvas.width - slide.margin_left - slide.margin_right - body.margin_left - body.margin_right max_height = canvas.height - slide.margin_top - slide.margin_bottom - body.margin_top - body.margin_bottom max_width *= Pango::SCALE max_height *= Pango::SCALE size = 1800 loop do new_size = (size * 1.05).ceil current_height = current_width = 0 self.text.each do |line| current_height += new_size current_width = [ current_width, line.length * new_size ].max end if max_width < current_width or max_height < current_height break else size = new_size end end font :size => size end [x, y, w, h] end end end match(Slide, Body, PreformattedBlock, PreformattedText) do |texts| texts.each do |pre| pre.adjust_code end end