class Qwik::WabisabiToWiki

Constants

SIMPLE_BLOCK

Public Class Methods

translate(wabisabi) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 10
def self.translate(wabisabi)
  str = parse(wabisabi)
  str.gsub!(/\n\n\z/, "\n")
  return str
end

Private Class Methods

parse(wabisabi) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 18
def self.parse(wabisabi)
  if wabisabi.is_a?(Array)
    first = wabisabi[0]

    if first.nil?
      return ''
    end

    if first.is_a?(String)
      if first == "\n"
        str = ''
      else
        str = first
      end
      str += parse(wabisabi[1..-1])
      return str
    end

    if first.is_a?(Array)
      return wabisabi.map {|a|
        parse(a)
      }.join
    end

    if first.is_a?(Symbol)
      # FIXME: Should take care for inline level element.
      return parse_block(wabisabi)
    end

    p 'What? ', wabisabi; raise
  end

  if wabisabi.is_a?(String)
    if wabisabi == "\n"
      return ''
    else
      return wabisabi
    end
  end

  p 'What? ', wabisabi; raise
end
parse_a(e) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 300
def self.parse_a(e)
  href = e.attr[:href]

  if /\A(.+)\.html\z/ =~ href
    href = $1
  end

  text = e.text
  str = ''
  str << "[[#{text}"
  if href != text
    str << "|#{href}"
  end
  str << ']]'
  return str
end
parse_block(e) click to toggle source
block level
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 71
def self.parse_block(e)
  if SIMPLE_BLOCK[e[0]]
    head, tail = SIMPLE_BLOCK[e[0]]
    str = head + parse_span(e.inside) + tail
    return str
  end

  case e[0]

  when :dl
    return parse_dl(e)

  when :ul
    return parse_ul(e)

  when :ol
    return parse_ol(e)

  when :blockquote
    return parse_blockquote(e)

  when :pre
    return parse_pre(e)

  when :table
    return parse_table(e)

  when :plugin
    return parse_plugin(e)

  when :html, :div
    return parse(e.inside)

  when :hr
    return "====\n"

  end

  # maybe, inline element.
  return parse_span(e)
  #p 'What? ', e; raise
end
parse_blockquote(elem) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 174
def self.parse_blockquote(elem)
  str = parse(elem.inside)
  nstr = ''
  str.each {|line|
    next if line == "\n"
    nstr << "> #{line}"
  }
  return nstr
end
parse_dl(elem) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 114
def self.parse_dl(elem)
  str = ''
  in_dt = false
  elem.each_child {|e|
    next if e == "\n"
    if e[0] == :dt
      span = parse_span(e.inside)
      span.sub!(/\n+\z/, '')
      str << ':'+span
      in_dt = true
    elsif e[0] == :dd
      str << ':' if ! in_dt
      span = parse_span(e.inside)
      span.sub!(/\n+\z/, '')
      str << ':'+span+"\n"
      in_dt = false
    else
      p 'What? ', e; raise
    end
  }
  return str
end
parse_list(prefix, elementname, elem) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 145
def self.parse_list(prefix, elementname, elem)
  str = ''
  elem.each_child {|e|
    next if e == "\n"

    if e[0] == :li
      inside = e.inside
      instr = parse(inside)
      nstr = ''
      instr.each_line {|line|
        next if line == "\n"
        line = line.normalize_eol
        str << prefix + line
      }

    elsif e[0] == elementname
      nstr = parse_ul(e)
      nstr.each_line {|line|
        next if line == "\n"
        line = line.normalize_eol
        str << prefix + line
      }
    else
      p 'What? ', e
    end
  }
  return str
end
parse_ol(elem) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 141
def self.parse_ol(elem)
  return parse_list('+', :ol, elem)
end
parse_plugin(e) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 231
def self.parse_plugin(e)
  param = e.attr[:param]
  method = e.attr[:method]
  data = e.text
  str = ''
  str << "{{#{method}"
  str << "(#{param})" if param && ! param.empty?
  if data && ! data.empty?
    str << "\n"
    data = data.normalize_eol
    str << data
  end
  str << "}}\n"
  return str
end
parse_pre(elem) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 184
def self.parse_pre(elem)
  str = ''
  elem.inside.each {|e|
    if e.is_a?(String)
      str << e
    else
      p 'What? ', e; raise
    end
  }

  nstr = ''
  str.each {|line|
    next if line == "\n"
    line = line.normalize_eol
    nstr << " #{line}"
  }
  return nstr
end
parse_span(elem) click to toggle source
inline level
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 248
def self.parse_span(elem)
  str = ''

  if elem.is_a?(Array) && elem[0].is_a?(Symbol)
    return parse_span_elem(elem)
  end

  elem.each_child {|e|
    if e.is_a?(String)
      str << e
    elsif e.is_a?(Array)
      str << parse_span_elem(e)
    else
      p 'What? ', e
    end
  }
  str
end
parse_span_elem(e) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 267
def self.parse_span_elem(e)
  n = e[0]

  case n

  when :a
    return parse_a(e)

  when :img
    attr = e.attr
    return '' if attr.nil?
    src = attr[:src]
    return '' if src.nil?
    return "[[#{src}]]"

  when :em
    return "''#{parse_span(e.inside)}''"

  when :strong
    return "'''#{parse_span(e.inside)}'''"

  when :del
    return "==#{parse_span(e.inside)}=="

  when :br
    return "{{br}}\n"

  else
    return ''
    #p 'What? ', e; raise
  end
end
parse_table(elem) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 203
def self.parse_table(elem)
  str = ''
  elem.each_child {|e|
    next if e == "\n"
    if e[0] == :tr
      str << "#{parse_tr(e)}\n"
    elsif e[0] == :tbody
      str << parse_table(e.inside)
    else
      p 'What? ', e; raise
    end
  }
  return str
end
parse_tr(elem) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 218
def self.parse_tr(elem)
  str = ''
  elem.each_child {|e|
    next if e == "\n"
    if e[0] == :td
      str << "|#{parse_span(e.inside)}"
    else
      p 'What? ', e; raise
    end
  }
  return str
end
parse_ul(elem) click to toggle source
# File vendor/qwik/lib/qwik/wabisabi-to-wiki.rb, line 137
def self.parse_ul(elem)
  return parse_list('-', :ul, elem)
end