Class: Caramelize::WikkaToMarkdown

Inherits:
Object
  • Object
show all
Defined in:
lib/caramelize/filters/wikka_to_markdown.rb

Overview

WikkaWiki formatting rules: docs.wikkawiki.org/FormattingRules

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source_body) ⇒ WikkaToMarkdown

Returns a new instance of WikkaToMarkdown.



8
9
10
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 8

def initialize(source_body)
  @source_body = source_body
end

Instance Attribute Details

#source_bodyObject (readonly)

Returns the value of attribute source_body.



6
7
8
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 6

def source_body
  @source_body
end

Instance Method Details

#replace_code_blockObject



62
63
64
65
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 62

def replace_code_block
  target_body.gsub!(/^%%\(?(\w+)\)?\s(.*?)%%\s?/m) { "```#{::Regexp.last_match(1)}\n#{::Regexp.last_match(2)}```\n" }
  target_body.gsub!(/^%%\s(.*?)%%\s?/m) { "```\n#{::Regexp.last_match(1)}```\n" }
end

#replace_formattingObject



33
34
35
36
37
38
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 33

def replace_formatting
  target_body.gsub!(/(\*\*)(.*?)(\*\*)/) { |_s| "**#{::Regexp.last_match(2)}**" } # bold
  target_body.gsub!(%r{(//)(.*?)(//)}, '*\2*') # italic
  target_body.gsub!(/(__)(.*?)(__)/) { |_s| "<u>#{::Regexp.last_match(2)}</u>" } # underline
  target_body.gsub!(/(---)/, "  ") # forced linebreak
end

#replace_headlinesObject



25
26
27
28
29
30
31
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 25

def replace_headlines
  target_body.gsub!(/(======)(.*?)(======)/) { |_s| "# #{::Regexp.last_match(2)}" } # h1
  target_body.gsub!(/(=====)(.*?)(=====)/) { |_s| "## #{::Regexp.last_match(2)}" } # h2
  target_body.gsub!(/(====)(.*?)(====)/) { |_s| "### #{::Regexp.last_match(2)}" } # h3
  target_body.gsub!(/(===)(.*?)(===)/) { |_s| "#### #{::Regexp.last_match(2)}" } # h4
  target_body.gsub!(/(==)(.*?)(==)/) { |_s| "##### #{::Regexp.last_match(2)}" } # h5
end

#replace_imagesObject



67
68
69
70
71
72
73
74
75
76
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 67

def replace_images
  # {{image class="center" alt="DVD logo" title="An image link" url="images/dvdvideo.gif" link="RecentChanges"}}
  target_body.gsub!(/{{image\s(.*)}}/) do |image_match|
    url = image_match.match(/url="([^"]*)"/)[1]
    link = image_match.match(/link="([^"]*)"/) && image_match.match(/link="([^"]*)"/)[1]
    alt = image_match.match(/alt="([^"]*)"/) && image_match.match(/alt="([^"]*)"/)[1]

    link.nil? ? "![#{alt}](#{url})" : "[[<img src=\"#{url}\" alt=\"#{alt}\">|#{link}]]"
  end
end

#replace_inline_codeObject



58
59
60
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 58

def replace_inline_code
  target_body.gsub!(/(%%)(.*?)(%%)/) { |_s| "`#{::Regexp.last_match(2)}`" } # h1
end


52
53
54
55
56
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 52

def replace_links
  target_body.gsub!(/\[{2}((\w+):\S[^| ]*)[| ](.*)\]{2}/,
    '[\3](\1)')
  target_body.gsub!(/\[{2}((\w+):.*)\]{2}/, '<\1>')
end

#replace_listsObject



40
41
42
43
44
45
46
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 40

def replace_lists
  target_body.gsub!(/(\t-\s?)(.*)/, '- \2')    # unordered list
  target_body.gsub!(/(~-\s?)(.*)/, '- \2')     # unordered list
  target_body.gsub!(/(    -\s?)(.*)/, '- \2')     # unordered list

  target_body.gsub!(/(~1\)\s?)(.*)/, '1. \2')     # ordered list
end


48
49
50
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 48

def replace_wiki_links
  target_body.gsub!(/\[{2}(\w+)[\s|](.+?)\]{2}/, '[[\2|\1]]')
end

#runObject



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 12

def run
  replace_headlines
  replace_formatting
  replace_lists
  replace_wiki_links
  replace_links
  replace_inline_code
  replace_code_block
  replace_images

  target_body
end

#target_bodyObject



78
79
80
# File 'lib/caramelize/filters/wikka_to_markdown.rb', line 78

def target_body
  @target_body ||= source_body.dup
end