Sha256: 15c004bfbb2ef1d8dac122f24384d05ff006d5e96be06be85ee4f6a67114f50e

Contents?: true

Size: 1.97 KB

Versions: 4

Compression:

Stored size: 1.97 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)
          [text]
        end

        def insert_t_tag
          r_tag = Utility.ox_element("r", namespace: "m")
          Utility.update_nodes(r_tag, to_omml_without_math_tag)
          [r_tag]
        end

        def validate_function_formula
          false
        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

4 entries across 4 versions & 1 rubygems

Version Path
plurimath-0.3.9 lib/plurimath/math/function/text.rb
plurimath-0.3.8 lib/plurimath/math/function/text.rb
plurimath-0.3.7 lib/plurimath/math/function/text.rb
plurimath-0.3.6 lib/plurimath/math/function/text.rb