Sha256: e2f3047358b4c0d65119b653bc0b830f8637b0833f7f9cd9c26ede9fb3cd95e8

Contents?: true

Size: 1.72 KB

Versions: 3

Compression:

Stored size: 1.72 KB

Contents

require_relative "../inline/anchor"

module Coradoc
  module Element
    module Block
      class Core < Base
        attr_accessor :title, :lines, :attributes, :lang, :id

        declare_children :title, :lines, :attributes, :lang, :id

        def initialize(title, options = {})
          @title = title
          @id = options.fetch(:id, nil)
          @anchor = @id.nil? ? nil : Inline::Anchor.new(@id)
          @type_str = options.fetch(:type, nil)
          @attributes = options.fetch(:attributes, AttributeList.new)
          @delimiter = options.fetch(:delimiter, "")
          @lang = options.fetch(:lang, nil)
          @lines = options.fetch(:lines, [])
        end

        def type
          @type ||= defined_type || type_from_delimiter
        end

        def gen_anchor
          @anchor.nil? ? "" : "#{@anchor.to_adoc}\n"
        end

        def gen_title
          t = Coradoc::Generator.gen_adoc(@title)
          return "" if t.empty?

          ".#{t}\n"
        end

        def gen_attributes
          attrs = @attributes.to_adoc(false)
          return "#{attrs}\n" if !attrs.empty?

          ""
        end

        def gen_delimiter
          @delimiter_char * @delimiter_len
        end

        def gen_lines
          Coradoc::Generator.gen_adoc(@lines)
        end

        private

        def defined_type
          @type_str&.to_s&.to_sym
        end

        def type_from_delimiter
          type_hash.fetch(@delimiter, nil)
        end

        def type_hash
          @type_hash ||= {
            "____" => :quote,
            "****" => :side,
            "----" => :source,
            "====" => :example,
            "...." => :literal,
            "++++" => :pass,
          }
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
coradoc-1.1.3 lib/coradoc/element/block/core.rb
coradoc-1.1.2 lib/coradoc/element/block/core.rb
coradoc-1.1.1 lib/coradoc/element/block/core.rb