lib/rabbit/formatter.rb in rabbit-2.2.1 vs lib/rabbit/formatter.rb in rabbit-3.0.0
- old
+ new
@@ -26,22 +26,10 @@
end
module SpanTextFormatter
include Formatter
- PANGO2CSS = {
- "font_family" => Proc.new do |name, value|
- ["font-family", "'#{value}'"]
- end,
- "foreground" => "color",
- "size" => Proc.new do |name, value|
- ["font-size", "#{(value / Pango::SCALE) * 2}px"]
- end,
- "style" => "font-style",
- "weight" => "font-weight",
- }
-
attr_reader :value
def initialize(value)
@value = value
end
@@ -53,30 +41,28 @@
def html_formatter?
true
end
def format(text)
- tagged_text(text, "span", normalize_attribute(name, @value))
+ tagged_text(text, "span", {name => pango_value})
end
def html_format(text)
- css_name, css_value = pango2css(name, @value)
tagged_text(text, "span", {'style' => "#{css_name}: #{css_value};"})
end
+ def pango_value
+ @value
+ end
+
private
- def normalize_attribute(name, value)
- {name => value}
+ def css_name
+ name
end
- def pango2css(name, value)
- css_name = PANGO2CSS[name]
- if css_name.respond_to?(:call)
- css_name.call(name, value)
- else
- [css_name || name, value]
- end
+ def css_value
+ value
end
end
%w(font_desc font_family face size style weight variant
stretch foreground background underline
@@ -91,20 +77,65 @@
end
end
EOC
end
- class Size
- def initialize(value)
- value = value.ceil if value.is_a?(Numeric)
- super(value)
+ class FontFamily
+ private
+ def css_name
+ "font-family"
end
+
+ def css_value
+ "'#{@value}'"
+ end
end
class Foreground
- def normalize_attribute(name, value)
- value = Renderer::Color.parse(value).to_gdk_format
- super(name, value)
+ def pango_value
+ Renderer::Color.parse(@value).to_gdk_format
+ end
+
+ private
+ def css_name
+ "color"
+ end
+ end
+
+ class Size
+ def pango_value
+ if @value > Pango::SCALE # For backward compatibility
+ @value.ceil
+ else
+ (@value * Pango::SCALE).ceil
+ end
+ end
+
+ private
+ def css_name
+ "font-size"
+ end
+
+ def css_value
+ if value > Pango::SCALE # For backward compatibility
+ "#{(value / Pango::SCALE) * 2}px"
+ else
+ "#{value * 2}px"
+ end
+ end
+ end
+
+ class Style
+ private
+ def css_name
+ "font-style"
+ end
+ end
+
+ class Weigth
+ private
+ def css_name
+ "font-weight"
end
end
module ConvenienceTextFormatter
include Formatter