# frozen_string_literal: true require_relative "binary_function" module Plurimath module Math module Function class Log < BinaryFunction FUNCTION = { name: "function apply", first_value: "subscript", second_value: "supscript", } def to_asciimath first_value = "_#{wrapped(parameter_one)}" if parameter_one second_value = "^#{wrapped(parameter_two)}" if parameter_two "log#{first_value}#{second_value}" end def to_latex first_value = "_#{latex_wrapped(parameter_one)}" if parameter_one second_value = "^#{latex_wrapped(parameter_two)}" if parameter_two "\\log#{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 "log#{first_value}#{second_value}" end def to_omml_without_math_tag(display_style) return r_element("log", rpr_tag: false) unless all_values_exist? ssubsup = Utility.ox_element("sSubSup", namespace: "m") ssubsuppr = Utility.ox_element("sSubSupPr", namespace: "m") ssubsuppr << Utility.pr_element("ctrl", true, namespace: "m") Utility.update_nodes( ssubsup, [ ssubsuppr, e_parameter, omml_parameter(parameter_one, display_style, tag_name: "sub"), omml_parameter(parameter_two, display_style, tag_name: "sup"), ], ) [ssubsup] end def to_mathml_without_math_tag(intent) first_value = ox_element("mi") first_value << "log" unless hide_function_name return first_value unless parameter_one || parameter_two tag_name = if parameter_two && parameter_one "subsup" else parameter_one ? "sub" : "sup" end new_arr = [ first_value, validate_mathml_fields(parameter_one, intent), validate_mathml_fields(parameter_two, intent), ] Utility.update_nodes(ox_element("m#{tag_name}"), new_arr) end def to_unicodemath first_value = sub_value if parameter_one second_value = sup_value if parameter_two "log#{first_value}#{second_value}" end def line_breaking(obj) parameter_one&.line_breaking(obj) if obj.value_exist? log = self.class.new(Utility.filter_values(obj.value), parameter_two) self.parameter_two = nil log.hide_function_name = true obj.update(log) end end protected def e_parameter e_tag = Utility.ox_element("e", namespace: "m") return e_tag if hide_function_name e_tag << rpr_tag end def rpr_tag sty_atrs = { "m:val": "p" } sty_tag = Utility.ox_element("sty", attributes: sty_atrs, namespace: "m") rpr_tag = (Utility.ox_element("rPr", namespace: "m") << sty_tag) r_tag = Utility.ox_element("r", namespace: "m") t_tag = (Utility.ox_element("t", namespace: "m") << "log") Utility.update_nodes(r_tag, [rpr_tag, t_tag]) end def sup_value if parameter_two&.mini_sized? || prime_unicode?(parameter_two) parameter_two.to_unicodemath elsif parameter_two.is_a?(Math::Function::Power) "^#{parameter_two.to_unicodemath}" else "^#{unicodemath_parens(parameter_two)}" end end def sub_value if parameter_one&.mini_sized? parameter_one.to_unicodemath elsif parameter_one.is_a?(Math::Function::Base) "_#{parameter_one.to_unicodemath}" else "_#{unicodemath_parens(parameter_one)}" end end end end end end