Sha256: ea2b1726a647082ff5c3ac86e60e230c860aff80b1e2b219005d18791ed5a9fe

Contents?: true

Size: 1.61 KB

Versions: 2

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

module Stepmod
  module Utils
    module Converters
      class Text < ReverseAdoc::Converters::Base
        def convert(node, state = {})
          if node.text.strip.empty?
            treat_empty(node, state)
          else
            treat_text(node)
          end
        end

        private

        def treat_empty(node, state)
          parent = node.parent.name.to_sym
          if [:ol, :ul].include?(parent)  # Otherwise the identation is broken
            ''
          elsif state[:tdsinglepara]
            ''
          elsif node.text == ' '          # Regular whitespace text node
            ' '
          else
            ''
          end
        end

        def treat_text(node)
          text = node.text
          text = preserve_nbsp(text)
          text = remove_inner_newlines(text)
          text = remove_border_newlines(text)

          text = preserve_keychars_within_backticks(text)
          text = preserve_tags(text)

          text
        end

        def preserve_nbsp(text)
          text.gsub(/\u00A0/, "&nbsp;")
        end

        def preserve_tags(text)
          text.gsub(/[<>]/, '>' => '\>', '<' => '\<')
        end

        def remove_border_newlines(text)
          text.gsub(/\A\n+/, '').gsub(/\n+\z/, '')
        end

        def remove_inner_newlines(text)
          text.tr("\n\t", ' ').squeeze(' ')
        end

        def preserve_keychars_within_backticks(text)
          text.gsub(/`.*?`/) do |match|
            match.gsub('\_', '_').gsub('\*', '*')
          end
        end
      end

      ReverseAdoc::Converters.register :text, Text.new
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
stepmod-utils-0.3.5 lib/stepmod/utils/converters/text.rb
stepmod-utils-0.3.4 lib/stepmod/utils/converters/text.rb