lib/asciimath2unitsml/render.rb in asciimath2unitsml-0.2.1 vs lib/asciimath2unitsml/render.rb in asciimath2unitsml-0.2.2

- old
+ new

@@ -13,10 +13,15 @@ def render(unit, style) @symbols[unit][style] || unit end + def htmlent(x) + HTMLEntities.new.decode(x).split(/([<>&])/) + .map { |c| /[<>'"]/.match(c) ? c : HTMLEntities.new.encode(c, :hexadecimal) }.join + end + def htmlsymbol(units, normalise) units.map do |u| if u[:multiplier] then u[:multiplier] == "*" ? @multiplier[:html] : u[:multiplier] elsif u[:unit].nil? && u[:prefix] @prefixes[u[:prefix]].html @@ -39,22 +44,23 @@ def mathmlsymbol(units, normalise) exp = units.map do |u| if u[:multiplier] then u[:multiplier] == "*" ? @multiplier[:mathml] : "<mo>#{u[:multiplier]}</mo>" elsif u[:unit].nil? && u[:prefix] - %(<mi mathvariant='normal'>#{@prefixes[u[:prefix]].html}</mi>) + %(<mi mathvariant='normal'>#{htmlent(@prefixes[u[:prefix]].html)}</mi>) else mathmlsymbol1(u, normalise) end end.join("") end def mathmlsymbol1(u, normalise) base = render(normalise ? @units[u[:unit]].symbolid : u[:unit], :mathml) if u[:prefix] + prefix = htmlent(@prefixes[u[:prefix]].html) base = base.match(/<mi mathvariant='normal'>/) ? - base.sub(/<mi mathvariant='normal'>/, "<mi mathvariant='normal'>#{u[:prefix]}") : - "<mrow><mi mathvariant='normal'>#{u[:prefix]}#{base}</mrow>" + base.sub(/<mi mathvariant='normal'>/, "<mi mathvariant='normal'>#{prefix}") : + "<mrow><mi mathvariant='normal'>#{prefix}#{base}</mrow>" end mathmlsymbol_exponent(u, base) end def mathmlsymbol_exponent(u, base)