世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

2006年07月04日

ソースコードを使う高橋メソッド用Rabbitテーマ

公開しようと思ってて忘れて大分タイミングを外した。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

トラックバック

http://yugui.jp/articles/478/ping

現在のところトラックバックはありません

コメント

blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system