Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamesez/150393 to your computer and use it in GitHub Desktop.
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.
# 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