Class: Plurimath::Math::Function::Prod

Inherits:
TernaryFunction show all
Defined in:
lib/plurimath/math/function/prod.rb

Constant Summary collapse

FUNCTION =
{
  name: "prod",
  first_value: "subscript",
  second_value: "supscript",
}.freeze

Constants inherited from Core

Core::REPLACABLES

Instance Attribute Summary

Attributes inherited from TernaryFunction

#hide_function_name, #parameter_one, #parameter_three, #parameter_two

Instance Method Summary collapse

Methods inherited from TernaryFunction

#==, #all_values_exist?, #any_value_exist?, #initialize, #to_asciimath_math_zone, #to_latex_math_zone, #to_mathml_math_zone, #to_omml_math_zone

Methods inherited from Core

#ascii_fields_to_print, #class_name, #cloned_objects, #common_math_zone_conversion, #dump_mathml, #dump_nodes, #dump_omml, #dump_ox_nodes, #empty_tag, #extract_class_name_from_text, #extractable?, #filtered_values, #font_style_t_tag, #get, #gsub_spacing, #insert_t_tag, #invert_unicode_symbols, #is_unary?, #latex_fields_to_print, #linebreak, #mathml_fields_to_print, #omml_fields_to_print, #omml_nodes, #omml_parameter, #omml_tag_name, #ox_element, #r_element, #replacable_values, #result, #separate_table, #set, #tag_name, #updated_object_values, #validate_function_formula, #validate_mathml_fields, #variable_value, #variables

Constructor Details

This class inherits a constructor from Plurimath::Math::Function::TernaryFunction

Instance Method Details

#line_breaking(obj) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/plurimath/math/function/prod.rb', line 87

def line_breaking(obj)
  parameter_one&.line_breaking(obj)
  if obj.value_exist?
    prod = self.class.new(Utility.filter_values(obj.value), parameter_two, parameter_three)
    prod.hide_function_name = true
    obj.update(prod)
    return
  end

  parameter_three&.line_breaking(obj)
  if obj.value_exist?
    obj.update(Utility.filter_values(obj.value))
  end
end

#nary_attr_valueObject



83
84
85
# File 'lib/plurimath/math/function/prod.rb', line 83

def nary_attr_value
  ""
end

#nary_values(display_style) ⇒ Object



74
75
76
77
78
79
80
81
# File 'lib/plurimath/math/function/prod.rb', line 74

def nary_values(display_style)
  [
    narypr(hide_function_name ? "" : nary_attr_value),
    omml_parameter(parameter_one, display_style, tag_name: "sub"),
    omml_parameter(parameter_two, display_style, tag_name: "sup"),
    omml_parameter(parameter_three, display_style, tag_name: "e"),
  ]
end

#to_asciimathObject



15
16
17
18
19
# File 'lib/plurimath/math/function/prod.rb', line 15

def to_asciimath
  first_value = "_#{wrapped(parameter_one)}" if parameter_one
  second_value = "^#{wrapped(parameter_two)}" if parameter_two
  "prod#{first_value}#{second_value} #{parameter_three&.to_asciimath}".strip
end

#to_htmlObject



60
61
62
63
64
# File 'lib/plurimath/math/function/prod.rb', line 60

def to_html
  first_value = "<sub>#{parameter_one.to_html}</sub>" if parameter_one
  second_value = "<sup>#{parameter_two.to_html}</sup>" if parameter_two
  "<i>&prod;</i>#{first_value}#{second_value}"
end

#to_latexObject



21
22
23
24
25
# File 'lib/plurimath/math/function/prod.rb', line 21

def to_latex
  first_value = "_{#{parameter_one.to_latex}}" if parameter_one
  second_value = "^{#{parameter_two.to_latex}}" if parameter_two
  "\\prod#{first_value}#{second_value} #{parameter_three&.to_latex}".strip
end

#to_mathml_without_math_tagObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/plurimath/math/function/prod.rb', line 27

def to_mathml_without_math_tag
  first_value = ox_element("mo")
  first_value << invert_unicode_symbols.to_s unless hide_function_name
  if parameter_one || parameter_two
    tag_name = if parameter_two && parameter_one
                 "underover"
               else
                 parameter_one ? "under" : "over"
               end
    value_array = [
      first_value,
      parameter_one&.to_mathml_without_math_tag,
      parameter_two&.to_mathml_without_math_tag,
    ]
    munderover_tag = ox_element("m#{tag_name}")
    Utility.update_nodes(
      munderover_tag,
      value_array,
    )
    return munderover_tag if parameter_three.nil?

    Utility.update_nodes(
      Utility.ox_element("mrow"),
      [
        munderover_tag,
        parameter_three&.to_mathml_without_math_tag,
      ].flatten.compact,
    )
  else
    first_value
  end
end

#to_omml_without_math_tag(display_style) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/plurimath/math/function/prod.rb', line 66

def to_omml_without_math_tag(display_style)
  return r_element("&#x220f;", rpr_tag: false) unless all_values_exist?

  nary = Utility.ox_element("nary", namespace: "m")
  Utility.update_nodes(nary, nary_values(display_style))
  [nary]
end