lib/plurimath/latex/parse.rb in plurimath-0.3.1.2 vs lib/plurimath/latex/parse.rb in plurimath-0.3.2
- old
+ new
@@ -40,10 +40,18 @@
rule(:rparen) do
arr_to_expression(Constants::PARENTHESIS.values, :rparen)
end
+ rule(:left_parens) do
+ arr_to_expression(Constants::LEFT_RIGHT_PARENTHESIS.keys, :left_paren)
+ end
+
+ rule(:right_parens) do
+ arr_to_expression(Constants::LEFT_RIGHT_PARENTHESIS.keys, :right_paren)
+ end
+
rule(:environment) do
arr_to_expression(Constants::MATRICES.keys, :environment)
end
rule(:subscript) do
@@ -81,17 +89,16 @@
symbol_class_commands |
(slash >> math_operators_classes) |
match["a-zA-Z"].as(:symbols) |
match(/\d+(\.[0-9]+)|\d/).repeat(1).as(:number) |
str("\\\\").as("\\\\") >> match(/\s/).repeat |
- (slash >> (lparen | rparen).as(:symbols)) |
- lparen |
str("\\ ").as(:space)
end
rule(:intermediate_exp) do
- (str("{") >> expression.maybe.as(:expression) >> str("}")) |
+ (lparen.as(:left_paren) >> expression.maybe.as(:expression) >> rparen.as(:right_paren)).as(:intermediate_exp) |
+ (str("{") >> expression.maybe.as(:expression) >> str("}")) |
symbol_text_or_integer
end
rule(:power_base) do
(subscript >> power >> intermediate_exp.as(:supscript)).as(:power_base) |
@@ -121,24 +128,23 @@
(slash >> str("substack").as(:substack) >> intermediate_exp) |
(begining >> array_args >> expression.as(:table_data) >> ending).as(:environment) |
(begining >> expression.as(:table_data) >> ending).as(:environment) |
(slash >> environment >> intermediate_exp).as(:table_data) |
power_base |
- (rparen >> (base >> sequence.as(:subscript)).maybe >> power >> sequence.as(:supscript)).as(:power_base) |
- (rparen >> (power >> sequence.as(:supscript)) >> base >> sequence.as(:subscript)).as(:power_base) |
- rparen |
intermediate_exp
end
rule(:left_right) do
(
- str("\\left").as(:left) >> lparen.maybe >>
+ str("\\left").as(:left) >> (left_parens | str(".").maybe) >>
+ (
+ (expression.repeat.as(:dividend) >> str("\\over") >> expression.repeat.as(:divisor)) |
+ expression.as(:expression).maybe
+ ) >>
(
- (expression.repeat.as(:dividend) >> str("\\over") >> expression.repeat.as(:divisor)) |
- expression.as(:expression).maybe
- ) >>
- str("\\right").as(:right).maybe >> (rparen | str(".").maybe)
+ str("\\right").as(:right).maybe >> (right_parens | str(".").maybe)
+ )
)
end
rule(:over_class) do
(
@@ -147,18 +153,18 @@
(left_right.as(:left_right).as(:base) >> base >> intermediate_exp)
).as(:over)
end
rule(:iteration) do
- (sequence.as(:sequence) >> expression.as(:expression)) |
- sequence
+ (sequence.as(:sequence) >> iteration.as(:expression)) |
+ sequence >> expression.maybe
end
rule(:expression) do
(iteration >> expression) |
iteration |
- ((iteration.as(:dividend) >> str("\\over") >> iteration.as(:divisor)) >> expression.repeat)
+ ((iteration.as(:dividend) >> str("\\over") >> iteration.as(:divisor)) >> expression.maybe)
end
root :expression
def arr_to_expression(array, name)
@@ -206,11 +212,12 @@
(slash >> first_value.as(name))
end
def unary_rules(first_value)
(slashed_value(first_value, :unary_functions) >> dynamic_power_base) |
- (slashed_value(first_value, :unary) >> (left_right | intermediate_exp).as(:first_value)).as(:unary_functions) |
- (slashed_value(first_value, :unary))
+ (slashed_value(first_value, :unary) >> left_right.as(:first_value)).as(:unary_functions) |
+ (slashed_value(first_value, :unary) >> intermediate_exp.as(:first_value)).as(:unary_functions) |
+ slashed_value(first_value, :unary)
end
def dynamic_power_base
(base >> intermediate_exp.as(:subscript) >> power >> intermediate_exp.as(:supscript)) |
(power >> intermediate_exp.as(:supscript) >> base >> intermediate_exp.as(:subscript)) |