Sha256: 86f0ea196d6e80cd8a5bf5e5ea587bdfcebed60bdefb7848b3be0bf5f2358d31

Contents?: true

Size: 1.71 KB

Versions: 15

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

require "htmlentities"
require_relative "unary_function"

module Plurimath
  module Math
    module Function
      class Text < UnaryFunction
        PARSER_REGEX = %r{unicode\[:(?<unicode>\w{1,})\]}.freeze

        def to_asciimath
          "\"#{parse_text('asciimath') || parameter_one}\""
        end

        def to_mathml_without_math_tag
          text = Utility.ox_element("mtext")
          text << (parse_text("mathml") || parameter_one) if parameter_one
        end

        def to_latex
          text_value = parse_text("latex") || parameter_one
          "\\text{#{text_value}}"
        end

        def to_html
          parse_text("html") || parameter_one
        end

        def to_omml_without_math_tag
          text = Utility.ox_element("t", namespace: "m")
          text << (parse_text("omml") || parameter_one)
        end

        protected

        def symbol_value(unicode)
          Mathml::Constants::UNICODE_SYMBOLS.invert[unicode] ||
            Mathml::Constants::SYMBOLS.invert[unicode]
        end

        def parse_text(lang)
          html_value = first_value(lang).dup
          html_value&.gsub!(PARSER_REGEX) do |_text|
            last_match = Regexp.last_match
            if ["mathml", "html"].include?(lang)
              symbol_value(last_match[:unicode])
            else
              last_match[:unicode]
            end
          end
          html_value
        end

        def first_value(lang)
          if lang == "omml"
            entities = HTMLEntities.new
            entities.encode(
              entities.decode(parameter_one),
              :named,
            )
          else
            parameter_one
          end
        end
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
plurimath-0.3.5 lib/plurimath/math/function/text.rb
plurimath-0.3.4 lib/plurimath/math/function/text.rb
plurimath-0.3.3 lib/plurimath/math/function/text.rb
plurimath-0.3.2 lib/plurimath/math/function/text.rb
plurimath-0.3.1.2 lib/plurimath/math/function/text.rb
plurimath-0.3.1 lib/plurimath/math/function/text.rb
plurimath-0.3.0 lib/plurimath/math/function/text.rb
plurimath-0.2.9 lib/plurimath/math/function/text.rb
plurimath-0.2.8 lib/plurimath/math/function/text.rb
plurimath-0.2.7 lib/plurimath/math/function/text.rb
plurimath-0.2.6 lib/plurimath/math/function/text.rb
plurimath-0.2.5 lib/plurimath/math/function/text.rb
plurimath-0.2.4 lib/plurimath/math/function/text.rb
plurimath-0.2.3 lib/plurimath/math/function/text.rb
plurimath-0.2.2 lib/plurimath/math/function/text.rb