Module: Sourcerer::AsciiDoc::AttributesFilter

Defined in:
lib/sourcerer/asciidoc.rb

Overview

Utilities for filtering and partitioning Asciidoctor document attributes.

Separates user-defined ("custom") attributes from those injected by Asciidoctor at parse time ("built-in").

Examples:

custom  = Sourcerer::AsciiDoc::AttributesFilter.user_attributes(doc)
builtin = Sourcerer::AsciiDoc::AttributesFilter.builtin_attributes(doc)

Constant Summary collapse

BUILTIN_ATTR_KEYS =

Attribute keys injected by Asciidoctor at parse time.

(Asciidoctor::DEFAULT_ATTRIBUTES.keys + %w[
  asciidoctor asciidoctor-version
  attribute-missing attribute-undefined
  authorcount
  docdate docdatetime docdir docfile docfilesuffix docname doctime doctitle doctype docyear
  embedded
  htmlsyntax
  iconsdir
  localdate localdatetime localtime localyear
  max-include-depth
  notitle
  outfilesuffix
  stylesdir
  toc-position
  user-home
]).freeze
BUILTIN_ATTR_PATTERNS =
[
  /^backend(-|$)/,
  /^basebackend(-|$)/,
  /^doctype-/,
  /^filetype(-|$)/,
  /^safe-mode-/
].freeze

Class Method Summary collapse

Class Method Details

.builtin_attributes(doc) ⇒ Hash{String => String}

Returns built-in Asciidoctor attributes injected at parse time.

Parameters:

  • doc (Asciidoctor::Document)

Returns:

  • (Hash{String => String})


575
576
577
578
579
580
# File 'lib/sourcerer/asciidoc.rb', line 575

def builtin_attributes doc
  doc.attributes.select do |k, _|
    BUILTIN_ATTR_KEYS.include?(k) ||
      BUILTIN_ATTR_PATTERNS.any? { |pat| pat.match?(k) }
  end
end

.user_attributes(doc) ⇒ Hash{String => String}

Returns user-defined attributes, excluding Asciidoctor built-ins.

Parameters:

  • doc (Asciidoctor::Document)

Returns:

  • (Hash{String => String})


564
565
566
567
568
569
# File 'lib/sourcerer/asciidoc.rb', line 564

def user_attributes doc
  doc.attributes.reject do |k, _|
    BUILTIN_ATTR_KEYS.include?(k) ||
      BUILTIN_ATTR_PATTERNS.any? { |pat| pat.match?(k) }
  end
end