Class: Jekyll::Converters::AsciiDocConverter

Inherits:
Converter
  • Object
show all
Defined in:
lib/jekyll-asciidoc.rb

Constant Summary collapse

IMPLICIT_ATTRIBUTES =
%W(
  env=site env-site site-gen=jekyll site-gen-jekyll builder=jekyll builder-jekyll jekyll-version=#{Jekyll::VERSION}
)

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ AsciiDocConverter

Returns a new instance of AsciiDocConverter.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/jekyll-asciidoc.rb', line 15

def initialize(config)
  @config = config
  config['asciidoc'] ||= 'asciidoctor'
  asciidoc_ext = (config['asciidoc_ext'] ||= 'asciidoc,adoc,ad')
  config['asciidoc_ext_re'] = Regexp.new("\.(#{asciidoc_ext.tr ',', '|'})$", Regexp::IGNORECASE)
  config['asciidoc_page_attribute_prefix'] ||= 'page'
  unless (asciidoctor_config = (config['asciidoctor'] ||= {})).frozen?
    # NOTE convert keys to symbols
    asciidoctor_config.keys.each do |key|
      asciidoctor_config[key.to_sym] = asciidoctor_config.delete(key)
    end
    asciidoctor_config[:safe] ||= 'safe'
    (asciidoctor_config[:attributes] ||= []).tap do |attributes|
      attributes.unshift('notitle', 'hardbreaks', 'idprefix', 'idseparator=-', 'linkattrs')
      attributes.concat(IMPLICIT_ATTRIBUTES)
    end
    asciidoctor_config.freeze
  end
end

Instance Method Details

#convert(content) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/jekyll-asciidoc.rb', line 62

def convert(content)
  setup
  case @config['asciidoc']
  when 'asciidoctor'
    Asciidoctor.convert(content, @config['asciidoctor'])
  else
    warn 'Unknown AsciiDoc converter. Passing through raw content.'
    content
  end
end

#load_header(content) ⇒ Object



73
74
75
76
77
78
79
80
81
82
# File 'lib/jekyll-asciidoc.rb', line 73

def load_header(content)
  setup
  case @config['asciidoc']
  when 'asciidoctor'
    Asciidoctor.load(content, parse_header_only: true)
  else
    warn 'Unknown AsciiDoc converter. Cannot load document header.'
    nil
  end
end

#matches(ext) ⇒ Object



54
55
56
# File 'lib/jekyll-asciidoc.rb', line 54

def matches(ext)
  ext =~ @config['asciidoc_ext_re']
end

#output_ext(ext) ⇒ Object



58
59
60
# File 'lib/jekyll-asciidoc.rb', line 58

def output_ext(ext)
  '.html'
end

#setupObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/jekyll-asciidoc.rb', line 35

def setup
  return if @setup
  @setup = true
  case @config['asciidoc']
  when 'asciidoctor'
    begin
      require 'asciidoctor' unless defined? ::Asciidoctor
    rescue LoadError
      STDERR.puts 'You are missing a library required to convert AsciiDoc files. Please run:'
      STDERR.puts '  $ [sudo] gem install asciidoctor'
      raise FatalException.new('Missing dependency: asciidoctor')
    end
  else
    STDERR.puts "Invalid AsciiDoc processor: #{@config['asciidoc']}"
    STDERR.puts '  Valid options are [ asciidoctor ]'
    raise FatalException.new("Invalid AsciiDoc processor: #{@config['asciidoc']}")
  end
end