diff options
author | David Green | 2015-08-15 18:51:28 +0000 |
---|---|---|
committer | David Green | 2015-08-15 19:00:34 +0000 |
commit | 96513caf222e2a9e076eb5334be30cb03d905fc3 (patch) | |
tree | c7c9dfddfcbe53e87ddcacd3502a2a3da7bb86b2 | |
parent | c10d4f8bbc3be76a70d790ee295ecf6d49e2f0d4 (diff) | |
download | org.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
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) { |