Universal Wiki Converter
-- improved attachment handling
git-svn-id: https://studio.plugins.atlassian.com/svn/UWC/devel@165794 2c54a935-e501-0410-bc05-97a93f6bca70
diff --git a/conf/converter.trac.properties b/conf/converter.trac.properties
index 90e928b..959cf60 100644
--- a/conf/converter.trac.properties
+++ b/conf/converter.trac.properties
@@ -58,8 +58,9 @@
Trac.0508-restore_single_quotes.java-regex=XXXSINGLEQUOTE4711XXX{replace-with}'
# Macros: Images, line breaks and generic
-Trac.0600-macro_image_on_other_page.java-regex=(?i)\[\[Image\(wiki:([^:]+):([^\)]+)\)\]\]{replace-with}[[Image($1^$2)]]
-Trac.0601-macro_image_attachment.java-regex=(?i)\[\[Image\(([^\)]+)\)\]\]{replace-with}!$1!
+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.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]
diff --git a/sampleData/trac/SampleTrac-ExpectedImage.txt b/sampleData/trac/SampleTrac-ExpectedImage.txt
new file mode 100644
index 0000000..8be97cb
--- /dev/null
+++ b/sampleData/trac/SampleTrac-ExpectedImage.txt
@@ -0,0 +1,11 @@
+
+Embed attached images
+!myImage.png!
+
+different wiki pages:
+!WikiFormatting^picture.gif!
+!WikiToc^toc.gif!
+
+external link (but still internal image)
+!PageTitle^file.png!
+!Subpage^file.png!
diff --git a/sampleData/trac/SampleTrac-InputImage.txt b/sampleData/trac/SampleTrac-InputImage.txt
new file mode 100644
index 0000000..25f672a
--- /dev/null
+++ b/sampleData/trac/SampleTrac-InputImage.txt
@@ -0,0 +1,11 @@
+
+Embed attached images
+[[Image(myImage.png)]]
+
+different wiki pages:
+[[Image(wiki:WikiFormatting:picture.gif)]]
+[[Image(wiki:WikiToc:toc.gif)]]
+
+external link (but still internal image)
+[[Image(https://mytrac.com/context/raw-attachment/wiki/PageTitle/file.png)]]
+[[Image(https://mytrac.com/context/raw-attachment/wiki/PageTitle/Subpage/file.png)]]
diff --git a/sampleData/trac/testall.sh b/sampleData/trac/testall.sh
index f051651..6e17226 100755
--- a/sampleData/trac/testall.sh
+++ b/sampleData/trac/testall.sh
@@ -12,3 +12,6 @@
echo "Macros"
./compare.sh Macros
+echo "Image"
+./compare.sh Image
+
diff --git a/src/com/atlassian/uwc/converters/trac/FilenameHierarchyLinkConverter.java b/src/com/atlassian/uwc/converters/trac/FilenameHierarchyLinkConverter.java
index 421ad93..9ce34d9 100644
--- a/src/com/atlassian/uwc/converters/trac/FilenameHierarchyLinkConverter.java
+++ b/src/com/atlassian/uwc/converters/trac/FilenameHierarchyLinkConverter.java
@@ -13,9 +13,34 @@
public void convert(Page page) {
String input = page.getOriginalText();
String converted = convertLink(input);
+ converted = handleImage(converted);
page.setConvertedText(converted);
}
+ Pattern image = Pattern.compile("!([^!\n]+)!");
+ protected String handleImage(String input) {
+ Matcher imageFinder = image.matcher(input);
+ StringBuffer sb = new StringBuffer();
+ boolean found = false;
+ while (imageFinder.find()) {
+ found = true;
+ String image = imageFinder.group(1);
+ if (!image.contains("/")) continue;
+ String[] parts = image.split("\\/");
+ if (parts.length < 2) continue;
+ String pagetitle = parts[parts.length-2];
+ String file = parts[parts.length-1];
+ String replacement = "!" + pagetitle + "^" + file + "!";
+ replacement = RegexUtil.handleEscapesInReplacement(replacement);
+ imageFinder.appendReplacement(sb, replacement);
+ }
+ if (found) {
+ imageFinder.appendTail(sb);
+ return sb.toString();
+ }
+ return input;
+ }
+
Pattern link = Pattern.compile("\\[([^\\]]+)\\]");
protected String convertLink(String input) {
Matcher linkFinder = link.matcher(input);
diff --git a/src/com/atlassian/uwc/converters/trac/FilenameHierarchyLinkConverterTest.java b/src/com/atlassian/uwc/converters/trac/FilenameHierarchyLinkConverterTest.java
index 0b3c67e..ae39e0f 100644
--- a/src/com/atlassian/uwc/converters/trac/FilenameHierarchyLinkConverterTest.java
+++ b/src/com/atlassian/uwc/converters/trac/FilenameHierarchyLinkConverterTest.java
@@ -73,5 +73,29 @@
assertEquals(expected, actual);
}
+ public void testConvertLinks_handleimage() {
+ String input, expected, actual;
+ input = "!PageTitle/file.png!\n" +
+ "!PageTitle/Subpage/file.png!\n" +
+ "";
+ expected = "!PageTitle^file.png!\n" +
+ "!Subpage^file.png!\n" +
+ "";
+ actual = tester.handleImage(input);
+ assertNotNull(actual);
+ assertEquals(expected, actual);
+ }
+
+ public void testConvertLinks_nothtmlcomment() {
+ String input, expected, actual;
+ input = "<!--PageTitle/file.png-->\n" +
+ "<!--lalala-->";
+ expected = input;
+ actual = tester.handleImage(input);
+ assertNotNull(actual);
+ assertEquals(expected, actual);
+
+ }
+
}