Class: Plurimath::Math::Formula
- Defined in:
- lib/plurimath/math/formula.rb
Instance Attribute Summary collapse
-
#displaystyle ⇒ Object
Returns the value of attribute displaystyle.
-
#input_string ⇒ Object
Returns the value of attribute input_string.
-
#left_right_wrapper ⇒ Object
Returns the value of attribute left_right_wrapper.
-
#value ⇒ Object
Returns the value of attribute value.
Instance Method Summary collapse
- #==(object) ⇒ Object
- #extract_class_from_text ⇒ Object
-
#initialize(value = [], left_right_wrapper = true, display_style: true, input_string: nil) ⇒ Formula
constructor
A new instance of Formula.
- #mathml_content ⇒ Object
- #nary_attr_value ⇒ Object
- #nary_tag(display_style) ⇒ Object
- #nary_tag_able?(display_style) ⇒ Boolean
- #omml_content(display_style) ⇒ Object
- #omml_math_attrs ⇒ Object
- #to_asciimath ⇒ Object
- #to_html ⇒ Object
- #to_latex ⇒ Object
- #to_mathml(display_style: displaystyle) ⇒ Object
- #to_mathml_without_math_tag ⇒ Object
- #to_omml(display_style: displaystyle) ⇒ Object
- #to_omml_without_math_tag(display_style) ⇒ Object
- #validate_function_formula ⇒ Object
Methods inherited from Core
#class_name, #empty_tag, #extractable?, #font_style_t_tag, #insert_t_tag, #omml_parameter, #omml_tag_name, #r_element, #tag_name
Constructor Details
#initialize(value = [], left_right_wrapper = true, display_style: true, input_string: nil) ⇒ Formula
Returns a new instance of Formula.
8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/plurimath/math/formula.rb', line 8 def initialize( value = [], left_right_wrapper = true, display_style: true, input_string: nil ) @value = value.is_a?(Array) ? value : [value] left_right_wrapper = false if @value.first.is_a?(Function::Left) @left_right_wrapper = left_right_wrapper @displaystyle = boolean_display_style(display_style) end |
Instance Attribute Details
#displaystyle ⇒ Object
Returns the value of attribute displaystyle.
6 7 8 |
# File 'lib/plurimath/math/formula.rb', line 6 def displaystyle @displaystyle end |
#input_string ⇒ Object
Returns the value of attribute input_string.
6 7 8 |
# File 'lib/plurimath/math/formula.rb', line 6 def input_string @input_string end |
#left_right_wrapper ⇒ Object
Returns the value of attribute left_right_wrapper.
6 7 8 |
# File 'lib/plurimath/math/formula.rb', line 6 def left_right_wrapper @left_right_wrapper end |
#value ⇒ Object
Returns the value of attribute value.
6 7 8 |
# File 'lib/plurimath/math/formula.rb', line 6 def value @value end |
Instance Method Details
#==(object) ⇒ Object
20 21 22 23 |
# File 'lib/plurimath/math/formula.rb', line 20 def ==(object) object.value == value && object.left_right_wrapper == left_right_wrapper end |
#extract_class_from_text ⇒ Object
129 130 131 132 133 |
# File 'lib/plurimath/math/formula.rb', line 129 def extract_class_from_text return false unless (value.length < 2 && value&.first&.is_a?(Function::Text)) value.first.parameter_one end |
#mathml_content ⇒ Object
55 56 57 |
# File 'lib/plurimath/math/formula.rb', line 55 def mathml_content value.map(&:to_mathml_without_math_tag) end |
#nary_attr_value ⇒ Object
135 136 137 |
# File 'lib/plurimath/math/formula.rb', line 135 def nary_attr_value value.first.nary_attr_value end |
#nary_tag(display_style) ⇒ Object
118 119 120 121 122 123 124 125 126 127 |
# File 'lib/plurimath/math/formula.rb', line 118 def nary_tag(display_style) nary_element = Utility.ox_element("nary", namespace: "m") e_tag = Utility.ox_element("e", namespace: "m") Utility.update_nodes(e_tag, value.last.insert_t_tag(display_style)) Utility.update_nodes( nary_element, (value.first.omml_nary_tag(display_style) << e_tag), ) [nary_element] end |
#nary_tag_able?(display_style) ⇒ Boolean
139 140 141 142 143 144 145 146 |
# File 'lib/plurimath/math/formula.rb', line 139 def nary_tag_able?(display_style) value.length == 2 && ["underover", "powerbase"].include?(value&.first&.class_name) && ( value&.first&.parameter_one&.to_omml_without_math_tag(display_style)&.length == 1 || value&.first&.parameter_one.to_omml_without_math_tag(display_style).match?(/^&#x\w*\d*;$/) ) end |
#omml_content(display_style) ⇒ Object
108 109 110 |
# File 'lib/plurimath/math/formula.rb', line 108 def omml_content(display_style) value&.map { |val| val.insert_t_tag(display_style) } end |
#omml_math_attrs ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/plurimath/math/formula.rb', line 71 def omml_math_attrs { "xmlns:m": "http://schemas.openxmlformats.org/officeDocument/2006/math", "xmlns:mc": "http://schemas.openxmlformats.org/markup-compatibility/2006", "xmlns:mo": "http://schemas.microsoft.com/office/mac/office/2008/main", "xmlns:mv": "urn:schemas-microsoft-com:mac:vml", "xmlns:o": "urn:schemas-microsoft-com:office:office", "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships", "xmlns:v": "urn:schemas-microsoft-com:vml", "xmlns:w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main", "xmlns:w10": "urn:schemas-microsoft-com:office:word", "xmlns:w14": "http://schemas.microsoft.com/office/word/2010/wordml", "xmlns:w15": "http://schemas.microsoft.com/office/word/2012/wordml", "xmlns:wne": "http://schemas.microsoft.com/office/word/2006/wordml", "xmlns:wp": "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing", "xmlns:wp14": "http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing", "xmlns:wpc": "http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas", "xmlns:wpg": "http://schemas.microsoft.com/office/word/2010/wordprocessingGroup", "xmlns:wpi": "http://schemas.microsoft.com/office/word/2010/wordprocessingInk", "xmlns:wps": "http://schemas.microsoft.com/office/word/2010/wordprocessingShape", } end |
#to_asciimath ⇒ Object
25 26 27 28 29 |
# File 'lib/plurimath/math/formula.rb', line 25 def to_asciimath value.map(&:to_asciimath).join(" ") rescue parse_error!(:asciimath) end |
#to_html ⇒ Object
65 66 67 68 69 |
# File 'lib/plurimath/math/formula.rb', line 65 def to_html value&.map(&:to_html)&.join(" ") rescue parse_error!(:html) end |
#to_latex ⇒ Object
59 60 61 62 63 |
# File 'lib/plurimath/math/formula.rb', line 59 def to_latex value&.map(&:to_latex)&.join(" ") rescue parse_error!(:latex) end |
#to_mathml(display_style: displaystyle) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/plurimath/math/formula.rb', line 31 def to_mathml(display_style: displaystyle) math_attrs = { xmlns: "http://www.w3.org/1998/Math/MathML", display: "block", } style_attrs = { displaystyle: boolean_display_style(display_style) } math = Utility.ox_element("math", attributes: math_attrs) style = Utility.ox_element("mstyle", attributes: style_attrs) Utility.update_nodes(style, mathml_content) Utility.update_nodes(math, [style]) Ox.dump(math, indent: 2).gsub("&", "&") rescue parse_error!(:mathml) end |
#to_mathml_without_math_tag ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/plurimath/math/formula.rb', line 46 def to_mathml_without_math_tag return mathml_content unless left_right_wrapper Utility.update_nodes( Utility.ox_element("mrow"), mathml_content, ) end |
#to_omml(display_style: displaystyle) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/plurimath/math/formula.rb', line 94 def to_omml(display_style: displaystyle) para_element = Utility.ox_element( "oMathPara", attributes: omml_math_attrs, namespace: "m", ) math_element = Utility.ox_element("oMath", namespace: "m") content = omml_content(boolean_display_style(display_style)) para_element << Utility.update_nodes(math_element, content) Ox.dump(para_element, indent: 2).gsub("&", "&").lstrip rescue parse_error!(:omml) end |
#to_omml_without_math_tag(display_style) ⇒ Object
112 113 114 115 116 |
# File 'lib/plurimath/math/formula.rb', line 112 def to_omml_without_math_tag(display_style) return nary_tag(display_style) if nary_tag_able?(display_style) omml_content(display_style) end |