Sha256: 0714bacb0ed651ba624022298ed14e472cf45543d935220c0bf075d2b8da8426

Contents?: true

Size: 1.96 KB

Versions: 28

Compression:

Stored size: 1.96 KB

Contents

require "asciidoctor/extensions"
require "fileutils"
require "uuidtools"
require "yaml"
require "csv"
require_relative "./macros_inline"
require_relative "./macros_plantuml"
require_relative "./macros_terms"
require_relative "./macros_form"
require_relative "./macros_note"
require_relative "./macros_embed"
require_relative "./datamodel/attributes_table_preprocessor"
require_relative "./datamodel/diagram_preprocessor"
require "metanorma-plugin-datastruct"
require "metanorma-plugin-lutaml"

module Metanorma
  module Standoc
    class PseudocodeBlockMacro < Asciidoctor::Extensions::BlockProcessor
      use_dsl
      named :pseudocode
      on_context :example, :sourcecode

      def init_indent(line)
        /^(?<prefix>[ \t]*)(?<suffix>.*)$/ =~ line
        prefix = prefix.gsub(/\t/, "\u00a0\u00a0\u00a0\u00a0")
          .gsub(/ /, "\u00a0")
        prefix + suffix
      end

      def supply_br(lines)
        ignore = false
        lines.each_with_index do |l, i|
          /^(--+|====+|\|===|\.\.\.\.+|\*\*\*\*+|\+\+\+\++|````+|____\+)$/
            .match(l) && (ignore = !ignore)
          next if l.empty? || l.match(/ \+$/) || /^\[.*\]$/.match?(l) || ignore
          next if i == lines.size - 1 ||
            (i < lines.size - 1 && lines[i + 1].empty?)

          lines[i] += " +"
        end
        lines
      end

      def process(parent, reader, attrs)
        attrs["role"] = "pseudocode"
        lines = reader.lines.map { |m| init_indent(m) }
        create_block(parent, :example, supply_br(lines),
                     attrs, content_model: :compound)
      end
    end

    class NamedEscapePreprocessor < Asciidoctor::Extensions::Preprocessor
      def process(_document, reader)
        c = HTMLEntities.new
        lines = reader.readlines.map do |l|
          l.split(/(&[A-Za-z][^;]*;)/).map do |s|
            /^&[A-Za-z]/.match?(s) ? c.encode(c.decode(s), :hexadecimal) : s
          end.join
        end
        ::Asciidoctor::Reader.new lines
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
metanorma-standoc-2.4.3 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.4.2 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.4.1 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.4.0 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.9 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.8 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.7 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.6 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.5 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.4 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.3 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.2 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.1 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.3.0 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.2.8 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.2.7 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.2.6 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.2.5 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.2.4 lib/metanorma/standoc/macros.rb
metanorma-standoc-2.2.3.1 lib/metanorma/standoc/macros.rb