# frozen_string_literal: true require_relative "binary_function" module Plurimath module Math module Function class Sum < BinaryFunction def to_asciimath first_value = "_#{wrapped(parameter_one)}" if parameter_one second_value = "^#{wrapped(parameter_two)}" if parameter_two "sum#{first_value}#{second_value}" end def to_latex first_value = "_{#{parameter_one.to_latex}}" if parameter_one second_value = "^{#{parameter_two.to_latex}}" if parameter_two "\\sum#{first_value}#{second_value}" end def to_mathml_without_math_tag first_value = Utility.ox_element("mo") << invert_unicode_symbols.to_s if parameter_one || parameter_two value_array = [] value_array << parameter_one&.to_mathml_without_math_tag value_array << parameter_two&.to_mathml_without_math_tag tag_name = if parameter_two && parameter_one "underover" else parameter_one ? "under" : "over" end munderover_tag = Utility.ox_element("m#{tag_name}") Utility.update_nodes( munderover_tag, value_array.insert(0, first_value), ) else first_value end 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 limupp = Utility.ox_element("limLow", namespace: "m") limupppr = Utility.ox_element("limUppPr", namespace: "m") me = (Utility.ox_element("e", namespace: "m") << omml_first_value) if parameter_one lim = (Utility.ox_element("lim", namespace: "m") << omml_second_value) if parameter_two Utility.update_nodes(limupp, [limupppr, me, lim]) end protected def omml_first_value return parameter_one&.to_omml_without_math_tag unless parameter_one&.is_a?(Math::Symbol) mt = Utility.ox_element("t", namespace: "m") mt << parameter_one.to_omml_without_math_tag if parameter_one mt end def omml_second_value return parameter_two&.to_omml_without_math_tag unless parameter_two&.is_a?(Math::Symbol) mt = Utility.ox_element("t", namespace: "m") mt << parameter_two.to_omml_without_math_tag if parameter_two mt end end end end end