# frozen_string_literal: true
require "htmlentities"
require_relative "unary_function"
module Plurimath
module Math
module Function
class Text < UnaryFunction
PARSER_REGEX = %r{unicode\[:(?\w{1,})\]}.freeze
def to_asciimath
"\"#{parse_text('asciimath') || parameter_one}\""
end
def to_mathml_without_math_tag
text = Utility.ox_element("mtext")
text << (parse_text("mathml") || parameter_one) if parameter_one
end
def to_latex
text_value = parse_text("latex") || parameter_one
"\\text{#{text_value}}"
end
def to_html
parse_text("html") || parameter_one
end
def to_omml_without_math_tag
text = Utility.ox_element("t", namespace: "m")
text << (parse_text("omml") || parameter_one)
end
protected
def symbol_value(unicode)
Mathml::Constants::UNICODE_SYMBOLS.invert[unicode] ||
Mathml::Constants::SYMBOLS.invert[unicode]
end
def parse_text(lang)
html_value = first_value(lang).dup
html_value&.gsub!(PARSER_REGEX) do |_text|
last_match = Regexp.last_match
if ["mathml", "html"].include?(lang)
symbol_value(last_match[:unicode])
else
last_match[:unicode]
end
end
html_value
end
def first_value(lang)
if lang == "omml"
entities = HTMLEntities.new
entities.encode(
entities.decode(parameter_one),
:named,
)
else
parameter_one
end
end
end
end
end
end