Class: Plurimath::Latex::Parse

Inherits:
Parslet::Parser
  • Object
show all
Defined in:
lib/plurimath/latex/parse.rb

Instance Method Summary collapse

Instance Method Details

#arr_to_expression(array, name) ⇒ Object



188
189
190
191
192
193
194
195
# File 'lib/plurimath/latex/parse.rb', line 188

def arr_to_expression(array, name)
  @@new_hash ||= {}
  type = array.first.class
  @@new_hash[name] ||= array.reduce do |expression, expr_string|
    expression = str(expression).as(name) if expression.is_a?(type)
    expression | str(expr_string).as(name)
  end
end

#color_rulesObject



250
251
252
253
# File 'lib/plurimath/latex/parse.rb', line 250

def color_rules
  (str("{") >> slash >> str("color").as(:binary) >> color.as(:first_value) >> (sequence >> iteration.maybe).as(:second_value).maybe >> str("}")) |
    (slash >> str("color").as(:binary) >> color.as(:first_value) >> expression.as(:second_value).maybe)
end

#dynamic_power_baseObject



243
244
245
246
247
248
# File 'lib/plurimath/latex/parse.rb', line 243

def dynamic_power_base
  (base >> intermediate_exp.as(:subscript) >> power >> intermediate_exp.as(:supscript)) |
    (power >> intermediate_exp.as(:supscript) >> base >> intermediate_exp.as(:subscript)) |
    (power >> intermediate_exp.as(:supscript)) |
    (base >> intermediate_exp.as(:subscript))
end

#dynamic_rules(expr, name) ⇒ Object



204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'lib/plurimath/latex/parse.rb', line 204

def dynamic_rules(expr, name)
  first_value = str(expr.to_s)
  case name
  when :operant
    (first_value.as(:operant) | (slashed_value(first_value, :symbols)))
  when :symbols
    slashed_value(first_value, :symbols)
  when :unary
    unary_rules(first_value)
  when :fonts
    (slashed_value(first_value, :fonts) >> (binary_functions | intermediate_exp).as(:intermediate_exp))
  when :power_base
    (slashed_value(first_value, :binary) >> dynamic_power_base).as(:power_base) |
      (slashed_value(first_value, :binary))
  when :underover
    (slashed_value(first_value, :underover) >> dynamic_power_base) |
      (slashed_value(first_value, :underover) >> intermediate_exp.maybe.as(:first_value) >> dynamic_power_base) |
      (slashed_value(first_value, :underover))
  when :binary
    (slashed_value(first_value, :binary) >> intermediate_exp.as(:first_value) >> intermediate_exp.as(:second_value)).as(:binary)
  when :text
    (slashed_value(first_value, :text) >> (str("{") >> parsing_text_values.as(:first_value) >> str("}")))
  when :ternary
    (slashed_value(first_value, :ternary_functions) >> dynamic_power_base >> sequence.as(:third_value).maybe).as(:ternary_class) |
      slashed_value(first_value, :ternary)
  end
end

#hash_to_expression(hash) ⇒ Object



197
198
199
200
201
202
# File 'lib/plurimath/latex/parse.rb', line 197

def hash_to_expression(hash)
  @@expression ||= hash.reduce do |expression, (key, value)|
    expression = dynamic_rules(expression.first, expression.last) if expression.is_a?(Array)
    expression | dynamic_rules(key, value)
  end
end

#slashed_value(first_value, name = nil) ⇒ Object



232
233
234
# File 'lib/plurimath/latex/parse.rb', line 232

def slashed_value(first_value, name = nil)
  (slash >> first_value.as(name))
end

#unary_rules(first_value) ⇒ Object



236
237
238
239
240
241
# File 'lib/plurimath/latex/parse.rb', line 236

def unary_rules(first_value)
  (slashed_value(first_value, :unary_functions) >> dynamic_power_base) |
    (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