require 'cgi'
module Numerals
class Format
class HtmlNotation < Notation
def assemble(output, text_parts)
# 1.23456 ×109
# Or alternative: use classes
# 1.23456 ×109
# .numerals-rep { text-decoration: overline; }
# .numerals-sup { vertical-align: super; }
if text_parts.special?
output << escape(text_parts.special)
else
output << escape(text_parts.sign)
output << escape(text_parts.integer) # or decide here if empty integer part is show as 0?
unless !text_parts.fractional? &&
!text_parts.repeat? &&
!format.symbols.show_point
output << escape(format.symbols.point)
end
output << escape(text_parts.fractional)
if text_parts.repeat
output << %(#{escape(text_parts.repeat)})
end
if text_parts.exponent_value != 0 || format.mode.mode == :scientific
output << "×"
output << escape(text_parts.exponent_base)
output << "#{escape(text_parts.exponent)}"
end
end
end
private
def escape(text)
CGI.escapeHTML(text)
end
def unescape(text)
CGI.unescapeHTML(text)
end
end
define_notation :html, HtmlNotation
end
end