Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Green2015-08-15 18:51:28 +0000
committerDavid Green2015-08-15 19:00:34 +0000
commit96513caf222e2a9e076eb5334be30cb03d905fc3 (patch)
treec7c9dfddfcbe53e87ddcacd3502a2a3da7bb86b2
parentc10d4f8bbc3be76a70d790ee295ecf6d49e2f0d4 (diff)
downloadorg.eclipse.mylyn.docs-96513caf222e2a9e076eb5334be30cb03d905fc3.tar.gz
org.eclipse.mylyn.docs-96513caf222e2a9e076eb5334be30cb03d905fc3.tar.xz
org.eclipse.mylyn.docs-96513caf222e2a9e076eb5334be30cb03d905fc3.zip
474041: improve link handling in CommonMark
Change-Id: Ibc07f14bba6a86232043f7a2bb97ddbb64f5d90c Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=474041
-rw-r--r--org.eclipse.mylyn.wikitext.commonmark.tests/src/org/eclipse/mylyn/internal/wikitext/commonmark/spec/CommonMarkSpecTest.java6
-rw-r--r--org.eclipse.mylyn.wikitext.commonmark/src/org/eclipse/mylyn/internal/wikitext/commonmark/inlines/PotentialBracketEndDelimiter.java44
2 files changed, 26 insertions, 24 deletions
diff --git a/org.eclipse.mylyn.wikitext.commonmark.tests/src/org/eclipse/mylyn/internal/wikitext/commonmark/spec/CommonMarkSpecTest.java b/org.eclipse.mylyn.wikitext.commonmark.tests/src/org/eclipse/mylyn/internal/wikitext/commonmark/spec/CommonMarkSpecTest.java
index 5f3716456..650167487 100644
--- a/org.eclipse.mylyn.wikitext.commonmark.tests/src/org/eclipse/mylyn/internal/wikitext/commonmark/spec/CommonMarkSpecTest.java
+++ b/org.eclipse.mylyn.wikitext.commonmark.tests/src/org/eclipse/mylyn/internal/wikitext/commonmark/spec/CommonMarkSpecTest.java
@@ -58,7 +58,6 @@ public class CommonMarkSpecTest {
private static final Set<Integer> LINE_EXCLUSIONS = ImmutableSet.of(//
281, // Tabs
- 2399, // Link reference definitions
2478, // Link reference definitions
2515, // Link reference definitions
3380, // List items
@@ -70,10 +69,7 @@ public class CommonMarkSpecTest {
4401, // Lists
4425, // Lists
4664, // Lists
- 4681, // Lists
- 6505, // Links
- 6965, // Links
- 6974 // Links
+ 4681 // Lists
);
public static class Expectation {
diff --git a/org.eclipse.mylyn.wikitext.commonmark/src/org/eclipse/mylyn/internal/wikitext/commonmark/inlines/PotentialBracketEndDelimiter.java b/org.eclipse.mylyn.wikitext.commonmark/src/org/eclipse/mylyn/internal/wikitext/commonmark/inlines/PotentialBracketEndDelimiter.java
index d57b973fe..bf6db6f11 100644
--- a/org.eclipse.mylyn.wikitext.commonmark/src/org/eclipse/mylyn/internal/wikitext/commonmark/inlines/PotentialBracketEndDelimiter.java
+++ b/org.eclipse.mylyn.wikitext.commonmark/src/org/eclipse/mylyn/internal/wikitext/commonmark/inlines/PotentialBracketEndDelimiter.java
@@ -52,7 +52,7 @@ public class PotentialBracketEndDelimiter extends InlineWithText {
private static final String IN_PARENS = "\\((?:[^\\\\()]|" + ESCAPED_CHARS + ")*\\)";
- static final String NOBRACKET_URI_PART = "((?:[^\\\\\\s()]|" + ESCAPED_CHARS + "|" + IN_PARENS + ")+)";
+ static final String NOBRACKET_URI_PART = "((?:[^\\\\\\s()]|" + ESCAPED_CHARS + "|" + IN_PARENS + "|\\\\)+)";
static final String URI_PART = "(?:" + BRACKET_URI_PART + "|" + NOBRACKET_URI_PART + ")";
@@ -134,24 +134,26 @@ public class PotentialBracketEndDelimiter extends InlineWithText {
if (referenceDefinition) {
referenceName = toReferenceName(referenceName(cursor, contents));
}
- int closingLength = matcher.start(6) - matcher.start() + 1;
- cursor.advance(closingLength);
- int length = getOffset() - openingDelimiter.getOffset() + closingLength;
-
- truncate(inlines, indexOfOpeningDelimiter);
-
- if (referenceDefinition) {
- truncatePrecedingWhitespace(inlines, 3);
- inlines.add(new ReferenceDefinition(openingDelimiter.getLine(),
- openingDelimiter.getOffset(), length, uri, title, referenceName));
- } else if (openingDelimiter.isImageDelimiter()) {
- inlines.add(new Image(openingDelimiter.getLine(), openingDelimiter.getOffset(), length, uri,
- title, contents));
- } else {
- inlines.add(new Link(openingDelimiter.getLine(), openingDelimiter.getOffset(), length, uri,
- title, contents));
+ if ((referenceDefinition && referenceName != null) || !referenceDefinition) {
+ int closingLength = matcher.start(6) - matcher.start() + 1;
+ cursor.advance(closingLength);
+ int length = getOffset() - openingDelimiter.getOffset() + closingLength;
+
+ truncate(inlines, indexOfOpeningDelimiter);
+
+ if (referenceDefinition) {
+ truncatePrecedingWhitespace(inlines, 3);
+ inlines.add(new ReferenceDefinition(openingDelimiter.getLine(),
+ openingDelimiter.getOffset(), length, uri, title, referenceName));
+ } else if (openingDelimiter.isImageDelimiter()) {
+ inlines.add(new Image(openingDelimiter.getLine(), openingDelimiter.getOffset(), length,
+ uri, title, contents));
+ } else {
+ inlines.add(new Link(openingDelimiter.getLine(), openingDelimiter.getOffset(), length,
+ uri, title, contents));
+ }
+ return;
}
- return;
}
}
}
@@ -354,7 +356,11 @@ public class PotentialBracketEndDelimiter extends InlineWithText {
}
String toReferenceName(String stringWithBackslashEscapes) {
- return stringWithBackslashEscapes.replaceAll("(?s)\\\\(\\[|\\])", "$1").replaceAll("\\s+", " ");
+ String referenceName = stringWithBackslashEscapes.replaceAll("(?s)\\\\(\\[|\\])", "$1").replaceAll("\\s+", " ");
+ if (CharMatcher.WHITESPACE.matchesAllOf(referenceName)) {
+ return null;
+ }
+ return referenceName;
}
String unescapeBackslashEscapes(String stringWithBackslashEscapes) {

Back to the top