// It's not necessarily the cleanest, but it got the job done on an internal transfer we were doing. Your mileage may vary by quite a bit.
def convert_from_twiki_to_mediawiki(old_page_text)
new_page_text = ""
while (true)
if (old_page_text.index(/\n\|/).nil?)
new_page_text += old_page_text
break
end
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_chunk.gsub!(/\|/, "||")
table_chunk.gsub!(/\|\|\s*$/, "\n|-")
table_chunk.gsub!(/^\|\|/, "|")
table_chunk.gsub!(/\|-\s*\Z/, "|}")
table_chunk.gsub!(/\A\|/, "{|class=\"wikitable sortable\"\n|")
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
new_page_text.gsub!(/(^|[\s\(])\*([^ ].*?[^ ])\*([\s\)\.\,\:\;\!\?]|$)/, "\\1'''\\2'''\\3")
new_page_text.gsub!(/(^|[\s\(])\_\_([^ ].*?[^ ])\_\_([\s\)\.\,\:\;\!\?]|$)/, "\\1''<b>\\2<\/b>''\\3")
new_page_text.gsub!(/(^|[\s\(])\_([^ ].*?[^ ])\_([\s\)\.\,\:\;\!\?]|$)/, "\\1''\\2''\\3")
new_page_text.gsub!(/(^|[\s\(])==([^ ].*?[^ ])==([\s\)\.\,\:\;\!\?]|$)/, "\\1'''<tt>\\2<\/tt>'''\\3")
new_page_text.gsub!(/(^|[\s\(])=([^ ].*?[^ ])=([\s\)\.\,\:\;\!\?]|$)/, "\\1<tt>\\2<\/tt>\\3")
new_page_text.gsub!(/(^|[\n\r])---\+\+\+\+\+\+([^\n\r]*)/, "\\1======\\2 ======")
new_page_text.gsub!(/(^|[\n\r])---\+\+\+\+\+([^\n\r]*)/, "\\1=====\\2 =====")
new_page_text.gsub!(/(^|[\n\r])---\+\+\+\+([^\n\r]*)/, "\\1====\\2 ====")
new_page_text.gsub!(/(^|[\n\r])---\+\+\+([^\n\r]*)/, "\\1===\\2 ===")
new_page_text.gsub!(/(^|[\n\r])---\+\+([^\n\r]*)/, "\\1==\\2 ==")
new_page_text.gsub!(/(^|[\n\r])---\+([^\n\r]*)/, "\\1=\\2 =")
new_page_text.gsub!(/\[\[(https?\:.*?)\]\[(.*?)\]\]/, "\[\\1 \\2\]")
new_page_text.gsub!(/\[\[([^\]]*)\]\]/, "\[\[\\1\|\\1\]\]")
new_page_text.gsub!(/\[\[([^\]]*)\]\[(.*?)\]\]/, "\[\[\\1\|\\2\]\]")
new_page_text.gsub!(/(^|[\n\r])[ ]{3}\* /, "\\1*")
new_page_text.gsub!(/(^|[\n\r])[ ]{6}\* /, "\\1**")
new_page_text.gsub!(/(^|[\n\r])[ ]{9}\* /, "\\1***")
new_page_text.gsub!(/(^|[\n\r])[ ]{12}\* /, "\\1****")
new_page_text.gsub!(/(^|[\n\r])[ ]{15}\* /, "\\1*****")
new_page_text.gsub!(/(^|[\n\r])[ ]{18}\* /, "\\1******")
new_page_text.gsub!(/(^|[\n\r])[ ]{21}\* /, "\\1*******")
new_page_text.gsub!(/(^|[\n\r])[ ]{24}\* /, "\\1********")
new_page_text.gsub!(/(^|[\n\r])[ ]{27}\* /, "\\1*********")
new_page_text.gsub!(/(^|[\n\r])[ ]{30}\* /, "\\1**********")
new_page_text.gsub!(/(^|[\n\r])[ ]{3}[0-9]\.? /, "\\1#")
new_page_text.gsub!(/(^|[\n\r])[ ]{6}[0-9]\.? /, "\\1##")
new_page_text.gsub!(/(^|[\n\r])[ ]{9}[0-9]\.? /, "\\1###")
new_page_text.gsub!(/(^|[\n\r])[ ]{12}[0-9]\.? /, "\\1####")
new_page_text.gsub!(/(^|[\n\r])[ ]{15}[0-9]\.? /, "\\1#####")
new_page_text.gsub!(/(^|[\n\r])[ ]{18}[0-9]\.? /, "\\1######")
new_page_text.gsub!(/(^|[\n\r])[ ]{21}[0-9]\.? /, "\\1#######")
new_page_text.gsub!(/(^|[\n\r])[ ]{24}[0-9]\.? /, "\\1########")
new_page_text.gsub!(/(^|[\n\r])[ ]{27}[0-9]\.? /, "\\1#########")
new_page_text.gsub!(/(^|[\n\r])[ ]{30}[0-9]\.? /, "\\1##########")
new_page_text
end