Sha256: 12503f5eb5ea99af9bc333c5ddd8f94b39a82941c2f2d4333ac93d0e0d2c5bb4

Contents?: true

Size: 1.08 KB

Versions: 2

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

require_relative "parse"
require_relative "constants"
require_relative "transform"
module Plurimath
  class Latex
    class Parser
      attr_accessor :text

      TEXT_REGEX = %r(\\(?:mbox|text){[^}]+})

      def initialize(text)
        @text = pre_processing(text)
      end

      def parse
        tree_t = Parse.new.parse(text)
        formula = Transform.new.apply(tree_t)
        formula = [formula] unless formula.is_a?(Array)

        Math::Formula.new(formula)
      end

      private

      def pre_processing(text)
        text_functions = text.scan(TEXT_REGEX)
        enti = HTMLEntities.new
        text = enti.encode(enti.decode(text), :hexadecimal)
        text = gsub_space_and_unicodes(text)
        text.gsub(TEXT_REGEX) { |str| text_functions.shift }
      end

      def gsub_space_and_unicodes(text)
        text
          .gsub(/((?<!\\) )|\n+/, "")
          .gsub(/\\\\ /, "\\\\\\\\")
          .gsub(/&#x26;/, "&")
          .gsub(/&#x22;/, "\"")
          .gsub(/(?<!\\\\)\\&#xa;/, "\\ ")
          .gsub(/&#xa;/, "")
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
plurimath-0.8.13 lib/plurimath/latex/parser.rb
plurimath-0.8.12 lib/plurimath/latex/parser.rb