# Enable this if every second line in your export is empty
#Trac.0000-duplicate_lines.java-regex=\r\n\r\n{replace-with}NEWLINE

# Page Hierarchy
## If your trac-admin dump creates a flat directory of pages 
## in which the hierarchy is maintained as url encoded filenames, then 
## use the FilenameHierarchy hierarchy-builder (default)
## If your trac-admin dump creates a system hierarchy of files that matches 
## your page hierarchy, use the FilepathHierarchy hierarchy-builder. Do also
## comment 1210 converter
Trac.0001.switch.hierarchy-builder=UseBuilder
Trac.0002.classname.hierarchy-builder=com.atlassian.uwc.hierarchies.FilenameHierarchy
#Trac.0002.classname.hierarchy-builder=com.atlassian.uwc.hierarchies.FilepathHierarchy
#Trac.0003.filepath-hierarchy-ignorable-ancestors.property=/SET/THIS/To/the/location/of/your/pages
#Trac.0004.filepath-hierarchy-ext.property=

# Preformatted text and wiki names
Trac.0015-escaped_wikiname.java-regex-tokenizer=(?<=^|\s)!([A-Z][a-z/]+[A-Z][a-z][\w/]+){replace-with}$1
Trac.0030-graphviz.java-regex-tokenizer=(?s)\{\{\{\s*#!graphviz\s*digraph[^\{]+\{(.*?)\}\s*\}\}\}{replace-with}{flowchart}$1{flowchart}
Trac.0050-preformatted.java-regex-tokenizer=(?ms)^\{{3}(.*?)^\}{3}{replace-multiline-with}{noformat}$1{noformat}

# hide horizontal rules so they dont get transformed
Trac.0055-hr.java-regex-tokenizer=(?<=^|\n)([-]{4})(?=\n){replace-with}$1

# Escape characters that have a special meaning in Confluence
Trac.0060-escape_exclamation_marks.java-regex=!{replace-with}\\!
Trac.0063-escape_curly_braces.java-regex=([^\{][^\{])\{([^\{][^\{]){replace-with}$1\\{$2

# Formatting
Trac.0100-underlined.java-regex=(?s)__(.+?)__{replace-with}+$1+
Trac.0101-subscript.java-regex=(?s),,(.+?),,{replace-with}~$1~
Trac.0103-monospace1.java-regex=\{{3}(.*?)\}{3}{replace-with}{{$1}}
## backtick track syntax can be transformed to code macros (default) or monospace syntax (commented)
## If you prefer the monospace syntax, comment the default tocode 104 converter and uncomment the tomono converter
Trac.0104-monospace2-tocode.java-regex-tokenizer=`([^`]+)`{replace-with}{code}NEWLINE$1NEWLINE{code}
#Trac.0104-monospace2-tomono.java-regex=`([^`]+)`{replace-with}{{$1}}

# Headlines (they also work in Trac with a leading space)
Trac.0300-re_h5.java-regex=(?m)^ *={5} (.+?) ?={5}{replace-with}h5. $1
Trac.0301-re_h4.java-regex=(?m)^ *={4} (.+?) ?={4}{replace-with}h4. $1
Trac.0302-re_h3.java-regex=(?m)^ *={3} (.+?) ?={3}{replace-with}h3. $1
Trac.0303-re_h2.java-regex=(?m)^ *={2} (.+?) ?={2}{replace-with}h2. $1
Trac.0304-re_h1.java-regex=(?m)^ *={1} (.+?) ?={1}{replace-with}h1. $1

# Leading spaces to blockquote. Should happen after headers
Trac.0405-blockquote.java-regex=(?m)^ {2}([^-\*\s1].+){replace-with}bq. $1

# Bold and italics (and single quotes) - copied from the MoinMoin converter
Trac.0500-hide_single_quotes.java-regex=([^'])'([^']){replace-with}$1XXXSINGLEQUOTE4711XXX$2
Trac.0501-re_bold_italics.java-regex=(?s)'{5}(.*?)'{5}{replace-with}*_$1_*
Trac.0506-re_bold.java-regex=(?s)'{3}(.*?)'{3}{replace-with}*$1*
Trac.0507-re_italics.java-regex=(?s)'{2}(.*?)'{2}{replace-with}_$1_
Trac.0508-restore_single_quotes.java-regex=XXXSINGLEQUOTE4711XXX{replace-with}'

# Macros: Images, line breaks and generic
Trac.0600-macro_image_attachment_external.java-regex=(?i)\[\[Image\(http(?:.*?)raw-attachment\/wiki\/([^\)]+)\)\]\]{replace-with}!$1!
Trac.0601-macro_image_on_other_page.java-regex=(?i)\[\[Image\(wiki:([^:]+):([^\)]+)\)\]\]{replace-with}[[Image($1^$2)]]
Trac.0602-macro_image_attachment.java-regex=(?i)\[\[Image\(([^\)]+)\)\]\]{replace-with}!$1!
Trac.0603-image_params1.java-regex=(?<!\\)!([^!,]+),\s*(\w[^!]+)(?<!\\)!{replace-with}!$1|$2!
Trac.0604-image_params2.class=com.atlassian.uwc.converters.trac.ImageParamConverter
Trac.0605-imagehiding.java-regex-tokenizer=(![^\n!]+!){replace-with}$1
Trac.0640-pageoutline-toc.java-regex=(?i)\[\[PageOutline(\([^\)]+\))?\]\]{replace-with}{toc}
Trac.0650-macro_br.java-regex=(?i)\[\[BR\]\] ?{replace-with}NEWLINE
Trac.0660-doublebracket-links.java-regex=\[{2}([^\]]+)\]{2}{replace-with}[$1]
## This macros converter won't get called with 0660 enabled, so I've commented it for now. 
#Trac.0699-macros.java-regex=\[{2}([^\]]+)\]{2}{replace-with}{$1}

#Links
Trac.0700-wikilink_prefix.java-regex=\[wiki:{replace-with}[
Trac.0701-attachment_link.class=com.atlassian.uwc.converters.trac.LinkAttachmentConverter
Trac.0702-wikilink_with_quotes.class=com.atlassian.uwc.converters.trac.LinkQuoteConverter
Trac.0703-link_with_title_pipe.java-regex-tokenizer=\[([^|\]]+)\|\s*([^\]]+)\]{replace-with}[$2|$1]
Trac.0704-link_with_title_space.java-regex=\[([^ \]]+) +([^\]]+)\]{replace-with}[$2|$1]
Trac.0750-hidelinks.java-regex-tokenizer=(\[[^\]]+\]){replace-with}$1

# Lists 
# Has to happen after images and link to avoid escaping dashes in image syntax
# Note: dashes (-) are escaped in the list converter
Trac.0800-lists.class=com.atlassian.uwc.converters.trac.ListConverter
## Strikethrough has to happen after List handling because dashes are special
Trac.0900-strikethrough.java-regex=(?s)~~(.+?)~~{replace-with}-$1-



# Tables - copied from the MoinMoin converter
# BUG: || gets replaced in mormal text
Trac.1099-tables.java-regex=\|{2}<([^>]*)>{replace-with}||
Trac.1100-tables.java-regex=\|{20}([^\|]+)\|{2}{replace-with}|| | | | |$1| | | | | ||
Trac.1101-tables.java-regex=\|{18}([^\|]+)\|{2}{replace-with}|| | | | |$1| | | | ||
Trac.1102-tables.java-regex=\|{16}([^\|]+)\|{2}{replace-with}|| | | |$1| | | | ||
Trac.1103-tables.java-regex=\|{14}([^\|]+)\|{2}{replace-with}|| | | |$1| | | ||
Trac.1104-tables.java-regex=\|{12}([^\|]+)\|{2}{replace-with}|| | |$1| | | ||
Trac.1105-tables.java-regex=\|{10}([^\|]+)\|{2}{replace-with}|| | |$1| | ||
Trac.1106-tables.java-regex=\|{8}([^\|]+)\|{2}{replace-with}|| |$1| | ||
Trac.1107-tables.java-regex=\|{6}([^\|]+)\|{2}{replace-with}|| |$1| ||
Trac.1108-tables.java-regex=\|{4}([^\|]+)\|{2}{replace-with}||$1| ||
Trac.1109-tables.java-regex=\|{2}{replace-with}|

## For any tokenizer regex above, strip out tokens
Trac.2000-detokenize.class=com.atlassian.uwc.converters.DetokenizerConverter

## Remove everything but leaf node part of link from link target. Works with
## FilenameHierarchy. If you are not using the FilenameHierarchy, comment this
## converter.
Trac.2100-hierarchylink.class=com.atlassian.uwc.converters.trac.FilenameHierarchyLinkConverter

## OPTIONAL: Provide a file of user and timestamp data that can be used with
## the UDMF plugin to set confluence author and timestamp metadata for the page
## Each line of the file should be pipe delimited data containing 
## pagename author and epoch timestamp in that order. 
## Example line from the file would look like
## Parentpage/Subpage|username|1253672153621
## You can uncomment the users-must-exist property if you want Confluence to
## set the data regardless of whether it can find a user with that name
## You can set the timezone by uncommenting user-timezone. Should match the 
## server your confluence runs on or the user.timezone setting for your 
## confluence's tomcat, if that's been altered.
## The archivecreator properties can be used in situations where
## you're only uploading the latest version but you want
## to archive the original creator as a comment. 
#Trac.2200.userdata.class=com.atlassian.uwc.converters.trac.UserDateConverter
#Trac.2200.userdata-filepath.property=/set/path/to/userdatafile
#Trac.2200.users-must-exist.property=false
#Trac.2200.user-timezone.property=Set This to your timezone. For example: PST
#Trac.2200.archivecreator-comment.property=Originally Created By: %username%
#Trac.2200.archivecreator-filepath.property=/set/path/to/userdatafile

# Attachments
Trac.3000-attachments.class=com.atlassian.uwc.converters.trac.AttachmentConverter
