Created
July 20, 2009 15:20
-
-
Save jamesez/150393 to your computer and use it in GitHub Desktop.
Convert TWiki markup format to Confluence markup, for some kind of import thing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# I copied this from somewhere, I wish I knew where. | |
def convert_from_twiki_to_confluence(old_page_text) | |
new_page_text = "" | |
# shifting the tables over | |
while (true) | |
if (old_page_text.index(/\n\|/).nil?) | |
new_page_text += old_page_text | |
break | |
end | |
# table extraction | |
table_index = old_page_text.index("\n|") | |
first_chunk = old_page_text.slice!(0..table_index) | |
table_chunk = "" | |
old_page_text.each_line do |line| | |
if line[0..0] == '|' | |
table_chunk += line | |
else | |
break | |
end | |
end | |
old_page_text.slice!(table_chunk) | |
# table conversion | |
# table_chunk.gsub!(/\|/, "||") | |
# table_chunk.gsub!(/\|\|\s*$/, "\n|-") | |
# table_chunk.gsub!(/^\|\|/, "|") | |
# table_chunk.gsub!(/\|-\s*\Z/, "|}") | |
# table_chunk.gsub!(/\A\|/, "{|class=\"wikitable sortable\"\n|") | |
# process new table looking for headings | |
new_table_chunk = "" | |
table_chunk.each_line do |line| | |
if line.match(/\*\s.*\s\*/) | |
line.gsub!(/\|/, "||") | |
# line.gsub!(/^\|/, "||") | |
line.gsub!("*", '') | |
end | |
new_table_chunk += line | |
end | |
new_page_text += first_chunk + new_table_chunk | |
end | |
# bold | |
# new_page_text.gsub!(/(^|[\s\(])\*([^ ].*?[^ ])\*([\s\)\.\,\:\;\!\?]|$)/, "\\1'''\\2'''\\3") | |
# italic bold | |
# new_page_text.gsub!(/(^|[\s\(])\_\_([^ ].*?[^ ])\_\_([\s\)\.\,\:\;\!\?]|$)/, "\\1''<b>\\2<\/b>''\\3") | |
# italic | |
# new_page_text.gsub!(/(^|[\s\(])\_([^ ].*?[^ ])\_([\s\)\.\,\:\;\!\?]|$)/, "\\1''\\2''\\3") | |
new_page_text.gsub!(/<\/?[Pp][Rr][Ee]>/, "{code}") | |
new_page_text.gsub!(/<\/[Cc][Oo][Dd][Ee]>/, "}}") | |
new_page_text.gsub!(/<[Cc][Oo][Dd][Ee]>/, "{{") | |
new_page_text.gsub!(/<[Hh][Rr]\/?>/, "----") | |
new_page_text.gsub!(/<[Bb][Rr]\/?>/, "") | |
# monospaced bold | |
new_page_text.gsub!(/(^|[\s\(])==([^ ].*?[^ ])==([\s\)\.\,\:\;\!\?]|$)/, "\\1*{{\\2}}*\\3") | |
# monospaced | |
new_page_text.gsub!(/(^|[\s\(])=([^ ].*?[^ ])=([\s\)\.\,\:\;\!\?]|$)/, "\\1{{\\2}}\\3") | |
# H6 | |
new_page_text.gsub!(/(^|[\n\r])---\+\+\+\+\+\+([^\n\r]*)/, "\\1h6. \\2") | |
# H5 | |
new_page_text.gsub!(/(^|[\n\r])---\+\+\+\+\+([^\n\r]*)/, "\\1h5. \\2") | |
# H4 | |
new_page_text.gsub!(/(^|[\n\r])---\+\+\+\+([^\n\r]*)/, "\\1h4. \\2") | |
# H3 | |
new_page_text.gsub!(/(^|[\n\r])---\+\+\+([^\n\r]*)/, "\\1h3. \\2") | |
# H2 | |
new_page_text.gsub!(/(^|[\n\r])---\+\+([^\n\r]*)/, "\\1h2. \\2") | |
# H1 | |
new_page_text.gsub!(/(^|[\n\r])---\+([^\n\r]*)/, "\\1h1. \\2") | |
# external link | |
new_page_text.gsub!(/\[\[(https?\:.*?)\]\[(.*?)\]\]/, "\[\\2|\\1\]") | |
# internal link [[WikiWord][WikiWord]] | |
new_page_text.gsub!(/\[\[([^\]]*)\]\]/, "\[\[\\1\|\\1\]\]") | |
# internal lnk [[WikiWord][label]] | |
new_page_text.gsub!(/\[\[([^\]]*)\]\[(.*?)\]\]/, "\[\[\\1\|\\2\]\]") | |
# level 1 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{3}\* /, "\\1* ") | |
# level 2 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{6}\* /, "\\1** ") | |
# level 3 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{9}\* /, "\\1*** ") | |
# level 4 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{12}\* /, "\\1**** ") | |
# level 5 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{15}\* /, "\\1***** ") | |
# level 6 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{18}\* /, "\\1****** ") | |
# level 7 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{21}\* /, "\\1******* ") | |
# level 8 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{24}\* /, "\\1******** ") | |
# level 9 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{27}\* /, "\\1********* ") | |
# level 10 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{30}\* /, "\\1********** ") | |
# level 1 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{3}[0-9]\.? /, "\\1# ") | |
# level 2 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{6}[0-9]\.? /, "\\1## ") | |
# level 3 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{9}[0-9]\.? /, "\\1### ") | |
# level 4 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{12}[0-9]\.? /, "\\1#### ") | |
# level 5 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{15}[0-9]\.? /, "\\1##### ") | |
# level 6 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{18}[0-9]\.? /, "\\1###### ") | |
# level 7 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{21}[0-9]\.? /, "\\1####### ") | |
# level 8 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{24}[0-9]\.? /, "\\1######## ") | |
# level 9 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{27}[0-9]\.? /, "\\1######### ") | |
# level 10 bullet | |
new_page_text.gsub!(/(^|[\n\r])[ ]{30}[0-9]\.? /, "\\1########## ") | |
new_page_text | |
end | |
puts convert_from_twiki_to_confluence(STDIN.read) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment