class Kramdown::AsciiDoc::Writer

Constants

LF

Attributes

body[R]
doctitle[RW]

Public Class Methods

new() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 11
def initialize
  @prologue = []
  @doctitle = nil
  @attributes = {}
  @body = []
  @nesting_stack = []
  @block_delimiter = nil
  @block_separator = ['']
  @list_level = { list: 0, dlist: 0 }
  @follows_list = false
end

Public Instance Methods

add_attributes(new_attributes) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 23
def add_attributes new_attributes
  @attributes.update new_attributes
end
add_blank_line() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 84
def add_blank_line
  @body << ''
  nil
end
add_line(line) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 89
def add_line line
  @body << line
  nil
end
add_lines(lines) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 94
def add_lines lines
  @body += lines
  nil
end
add_prologue_line(line) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 27
def add_prologue_line line
  @prologue << line
end
add_prologue_lines(lines) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 31
def add_prologue_lines lines
  @prologue.push(*lines)
end
append(str) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 99
def append str
  if empty?
    @body << str
  else
    @body[-1] += str
  end
  nil
end
clear_line() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 108
def clear_line
  replace_line ''
end
current_line() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 118
def current_line
  @body[-1]
end
empty?() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 122
def empty?
  @body.empty?
end
end_delimited_block() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 50
def end_delimited_block
  parent_body, @block_delimiter, @block_separator, @list_level = @nesting_stack.pop
  @body = (parent_body + @body) << @block_delimiter
  @block_delimiter = nil
end
end_list(kin) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 65
def end_list kin
  @follows_list = true
  @block_separator.pop
  @list_level[kin] -= 1
  nil
end
follows_list?() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 80
def follows_list?
  @follows_list
end
in_list?() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 76
def in_list?
  @block_separator[-1] == '+'
end
list_level(kin = :list) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 72
def list_level kin = :list
  @list_level[kin]
end
replace_line(line) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 112
def replace_line line
  @body.pop
  @body << line
  nil
end
start_block() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 35
def start_block
  @follows_list = false
  @body << @block_separator[-1] unless empty?
  nil
end
start_delimited_block(delimiter) click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 41
def start_delimited_block delimiter
  @follows_list = false
  @body << (@block_delimiter = delimiter.length == 1 ? delimiter * 4 : delimiter)
  @nesting_stack << [(@body.pop @body.length), @block_delimiter, @block_separator, @list_level]
  @block_separator = ['']
  @list_level = { list: 0, dlist: 0 }
  nil
end
start_list(compound, kin) click to toggle source

Q: perhaps do_in_list that takes a block?

# File lib/kramdown-asciidoc/writer.rb, line 57
def start_list compound, kin
  # Q: can this be further optimized?
  @body << '' if in_list? ? compound : !empty?
  @block_separator << '+'
  @list_level[kin] += 1
  nil
end
to_s() click to toggle source
# File lib/kramdown-asciidoc/writer.rb, line 126
def to_s
  header = @prologue.dup
  header << %(= #{@doctitle}) if @doctitle
  @attributes.sort.each do |name, val|
    header << (val.empty? ? %(:#{name}:) : %(:#{name}: #{val}))
  end unless @attributes.empty?
  (header.empty? ? @body : (header + (@body.empty? ? [] : [''] + @body))).join LF
end