lib/asciimath2unitsml/conv.rb in asciimath2unitsml-0.1.2 vs lib/asciimath2unitsml/conv.rb in asciimath2unitsml-0.1.3
- old
+ new
@@ -15,10 +15,14 @@
@prefixes_id = read_yaml("../unitsdb/prefixes.yaml")
@prefixes = flip_name_and_id(@prefixes_id)
@quantities = read_yaml("../unitsdb/quantities.yaml")
@units_id = read_yaml("../unitsdb/units.yaml")
@units = flip_name_and_id(@units_id)
+ #temporary
+ @units[:degC][:render] = "°C"
+ @units[:degF][:render] = "°F"
+ @units[:Ohm][:render] = "Ω"
@parser = parser
@multiplier = multiplier(options[:multiplier] || "\u00b7")
end
def multiplier(x)
@@ -35,10 +39,11 @@
def units_only(units)
units.reject { |u| u[:multiplier] }
end
def unit_id(text)
+ text = text.gsub(/[()]/, "")
"U_" +
(@units[text.to_sym] ? @units[text.to_sym][:id] : text.gsub(/\*/, ".").gsub(/\^/, ""))
end
def unit(units, origtext, normtext, dims)
@@ -80,24 +85,29 @@
<UnitSymbol type="HTML">#{htmlsymbol(units)}</UnitSymbol>
<UnitSymbol type="MathML">#{mathmlsymbolwrap(units)}</UnitSymbol>
END
end
+ def render(unit)
+ #require "byebug"; byebug if unit == "degC"
+ @units[unit.to_sym][:render] || unit
+ end
+
def htmlsymbol(units)
units.map do |u|
if u[:multiplier] then u[:multiplier] == "*" ? @multiplier[:html] : u[:multiplier]
else
u[:display_exponent] and exp = "<sup>#{u[:display_exponent].sub(/-/, "−")}</sup>"
- "#{u[:prefix]}#{u[:unit]}#{exp}"
+ "#{u[:prefix]}#{render(u[:unit])}#{exp}"
end
end.join("")
end
def mathmlsymbol(units)
exp = units.map do |u|
if u[:multiplier] then u[:multiplier] == "*" ? @multiplier[:mathml] : "<mo>#{u[:multiplier]}</mo>"
else
- base = "<mi mathvariant='normal'>#{u[:prefix]}#{u[:unit]}</mi>"
+ base = "<mi mathvariant='normal'>#{u[:prefix]}#{render(u[:unit])}</mi>"
if u[:display_exponent]
exp = "<mn>#{u[:display_exponent]}</mn>".sub(/<mn>-/, "<mo>−</mo><mn>")
"<msup><mrow>#{base}</mrow><mrow>#{exp}</mrow></msup>"
else
base