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