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})


568
569
570
571
572
573
# File 'lib/sourcerer/asciidoc.rb', line 568

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})


557
558
559
560
561
562
# File 'lib/sourcerer/asciidoc.rb', line 557

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