def convert_from_twiki_to_mediawiki(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") # monospaced bold new_page_text.gsub!(/(^|[\s\(])==([^ ].*?[^ ])==([\s\)\.\,\:\;\!\?]|$)/, "\\1'''<tt>\\2<\/tt>'''\\3") # monospaced new_page_text.gsub!(/(^|[\s\(])=([^ ].*?[^ ])=([\s\)\.\,\:\;\!\?]|$)/, "\\1<tt>\\2<\/tt>\\3") # H6 new_page_text.gsub!(/(^|[\n\r])---\+\+\+\+\+\+([^\n\r]*)/, "\\1======\\2 ======") # H5 new_page_text.gsub!(/(^|[\n\r])---\+\+\+\+\+([^\n\r]*)/, "\\1=====\\2 =====") # H4 new_page_text.gsub!(/(^|[\n\r])---\+\+\+\+([^\n\r]*)/, "\\1====\\2 ====") # H3 new_page_text.gsub!(/(^|[\n\r])---\+\+\+([^\n\r]*)/, "\\1===\\2 ===") # H2 new_page_text.gsub!(/(^|[\n\r])---\+\+([^\n\r]*)/, "\\1==\\2 ==") # H1 new_page_text.gsub!(/(^|[\n\r])---\+([^\n\r]*)/, "\\1=\\2 =") # external link new_page_text.gsub!(/\[\[(https?\:.*?)\]\[(.*?)\]\]/, "\[\\1 \\2\]") # 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
You need to create an account or log in to post comments to this site.