# frozen_string_literal: true
module Plurimath
module Math
module Function
class BinaryFunction < Core
attr_accessor :parameter_one, :parameter_two
def initialize(parameter_one = nil, parameter_two = nil)
@parameter_one = parameter_one
@parameter_two = parameter_two
Utility.validate_left_right([parameter_one, parameter_two])
end
def to_asciimath
"#{class_name}#{wrapped(parameter_one)}#{wrapped(parameter_two)}"
end
def ==(object)
object.class == self.class &&
object.parameter_one == parameter_one &&
object.parameter_two == parameter_two
end
def to_mathml_without_math_tag
mrow_tag = Utility.ox_element("mrow")
mo_tag = Utility.ox_element("mo") << invert_unicode_symbols.to_s
first_value = parameter_one&.to_mathml_without_math_tag if parameter_one
second_value = parameter_two&.to_mathml_without_math_tag if parameter_two
Utility.update_nodes(
mrow_tag,
[
first_value,
mo_tag,
second_value,
],
)
end
def to_latex
first_value = latex_wrapped(parameter_one) if parameter_one
second_value = latex_wrapped(parameter_two) if parameter_two
"\\#{class_name}#{first_value}#{second_value}"
end
def to_html
first_value = "#{parameter_one.to_html}" if parameter_one
second_value = "#{parameter_two.to_html}" if parameter_two
"#{first_value}#{second_value}"
end
def to_omml_without_math_tag
r_tag = Utility.ox_element("r", namespace: "m")
Utility.update_nodes(r_tag, [parameter_one.insert_t_tag]) if parameter_one
Utility.update_nodes(r_tag, [parameter_two.insert_t_tag]) if parameter_two
[r_tag]
end
def class_name
self.class.name.split("::").last.downcase
end
protected
def latex_wrapped(field)
if field.validate_function_formula
"{ \\left ( #{field.to_latex} \\right ) }"
else
"{#{field.to_latex}}"
end
end
def wrapped(field)
return "" unless field
"(#{field.to_asciimath})"
end
def invert_unicode_symbols
Mathml::Constants::UNICODE_SYMBOLS.invert[class_name] || class_name
end
def empty_tag(wrapper_tag)
r_tag = Utility.ox_element("r", namespace: "m")
r_tag << (Utility.ox_element("t", namespace: "m") << "")
wrapper_tag << r_tag
end
end
end
end
end