lib/plurimath/latex/transform.rb in plurimath-0.4.1 vs lib/plurimath/latex/transform.rb in plurimath-0.4.2

- old
+ new

@@ -43,17 +43,13 @@ rule(binary: simple(:binary)) do binary.is_a?(Parslet::Slice) ? Utility.get_class(binary).new : binary end rule(symbols: simple(:sym)) do - if sym.is_a?(Parslet::Slice) - Math::Symbol.new( - Constants::UNICODE_SYMBOLS[sym.to_sym] || sym, - ) - else - sym - end + Math::Symbol.new( + Constants::UNICODE_SYMBOLS[sym.to_sym] || sym, + ) end rule(lparen: simple(:lparen), rparen: simple(:rparen)) do [] @@ -402,10 +398,20 @@ Math::Number.new(number), supscript, ) end + rule(number: simple(:number), + subscript: simple(:subscript), + supscript: simple(:supscript)) do + Math::Function::PowerBase.new( + Math::Number.new(number), + subscript, + supscript, + ) + end + rule(symbols: simple(:sym), subscript: simple(:subscript)) do Math::Function::Base.new( Math::Symbol.new( Constants::UNICODE_SYMBOLS[sym.to_sym] || sym, @@ -467,10 +473,51 @@ rule(text: simple(:text), first_value: simple(:first_value)) do Math::Function::Text.new(first_value) end + rule(text: simple(:text), + first_value: sequence(:first_value)) do + Math::Function::Text.new(first_value.join) + end + + rule(text: simple(:text), + first_value: simple(:first_value), + supscript: simple(:supscript),) do + Math::Function::Power.new( + Math::Function::Text.new(first_value), + supscript, + ) + end + + rule(text: simple(:text), + first_value: sequence(:first_value), + supscript: simple(:supscript),) do + Math::Function::Power.new( + Math::Function::Text.new(first_value.join), + supscript, + ) + end + + rule(text: simple(:text), + first_value: sequence(:first_value), + subscript: simple(:subscript),) do + Math::Function::Base.new( + Math::Function::Text.new(first_value.join), + subscript, + ) + end + + rule(text: simple(:text), + first_value: simple(:first_value), + subscript: simple(:subscript),) do + Math::Function::Base.new( + Math::Function::Text.new(first_value), + subscript, + ) + end + rule(unary: simple(:unary), first_value: simple(:first_value)) do Utility.get_class( unary == "overline" ? "bar" : unary, ).new(first_value) @@ -519,10 +566,32 @@ font_style, subscript, ) end + rule(fonts: simple(:fonts), + intermediate_exp: simple(:int_exp), + subscript: simple(:subscript), + supscript: simple(:supscript)) do + font_style = if Utility::FONT_STYLES[fonts.to_sym].nil? + Math::Function::FontStyle.new( + int_exp, + fonts.to_s, + ) + else + Utility::FONT_STYLES[fonts.to_sym].new( + int_exp, + fonts.to_s, + ) + end + Math::Function::PowerBase.new( + font_style, + subscript, + supscript, + ) + end + rule(root: simple(:root), first_value: simple(:first_value), second_value: simple(:second_value)) do second = second_value.nil? ? Math::Formula.new : second_value Math::Function::Root.new( @@ -622,9 +691,26 @@ supscript: simple(:supscript)) do Utility.get_class(binary).new( subscript, supscript, ) + end + + rule(binary: simple(:binary), + subscript: simple(:subscript), + supscript: simple(:supscript)) do + if binary.is_a?(Parslet::Slice) + Utility.get_class(binary).new( + subscript, + supscript, + ) + else + Math::Function::PowerBase.new( + binary, + subscript, + subscript, + ) + end end rule(binary: simple(:binary), subscript: simple(:subscript)) do if binary.is_a?(Parslet::Slice)