Sha256: eed584f618ee676c6d939f755c0ee3cc1401c2407fb1ab0e8227a279efd22752

Contents?: true

Size: 1.08 KB

Versions: 15

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

15 entries across 15 versions & 1 rubygems

Version Path
plurimath-0.9.0 lib/plurimath/latex/parser.rb
plurimath-0.8.27 lib/plurimath/latex/parser.rb
plurimath-0.8.26 lib/plurimath/latex/parser.rb
plurimath-0.8.25 lib/plurimath/latex/parser.rb
plurimath-0.8.24 lib/plurimath/latex/parser.rb
plurimath-0.8.23 lib/plurimath/latex/parser.rb
plurimath-0.8.22 lib/plurimath/latex/parser.rb
plurimath-0.8.21 lib/plurimath/latex/parser.rb
plurimath-0.8.20 lib/plurimath/latex/parser.rb
plurimath-0.8.19 lib/plurimath/latex/parser.rb
plurimath-0.8.18 lib/plurimath/latex/parser.rb
plurimath-0.8.17 lib/plurimath/latex/parser.rb
plurimath-0.8.16 lib/plurimath/latex/parser.rb
plurimath-0.8.15 lib/plurimath/latex/parser.rb
plurimath-0.8.14 lib/plurimath/latex/parser.rb