Fixed inter-document cross-references
This commit is contained in:
@@ -109,21 +109,46 @@ public abstract class AbstractMarkupDocBuilder implements MarkupDocBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder anchor(String anchor) {
|
||||
return anchor(anchor, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder crossReference(String document, String anchor, String text) {
|
||||
documentBuilder.append(crossReferenceAsString(document, anchor, text));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder crossReference(String anchor, String text) {
|
||||
documentBuilder.append(crossReferenceAsString(anchor, text));
|
||||
return crossReference(null, anchor, text);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder crossReference(String anchor) {
|
||||
return crossReference(null, anchor, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder crossReferenceTitle(String document, String anchor, String text) {
|
||||
documentBuilder.append(crossReferenceTitleAsString(document, anchor, text));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder crossReferenceTitle(String anchor, String text) {
|
||||
documentBuilder.append(crossReferenceTitleAsString(anchor, text));
|
||||
return this;
|
||||
return crossReferenceTitle(null, anchor, text);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String crossReferenceTitleAsString(String anchor, String text) {
|
||||
return crossReferenceAsString(anchor, text);
|
||||
public MarkupDocBuilder crossReferenceTitle(String anchor) {
|
||||
return crossReferenceTitle(null, anchor, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String crossReferenceTitleAsString(String document, String anchor, String text) {
|
||||
return crossReferenceAsString(document, anchor, text);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -62,15 +62,25 @@ public interface MarkupDocBuilder {
|
||||
|
||||
MarkupDocBuilder anchor(String anchor, String text);
|
||||
|
||||
MarkupDocBuilder anchor(String anchor);
|
||||
|
||||
String anchorAsString(String anchor, String text);
|
||||
|
||||
MarkupDocBuilder crossReference(String document, String anchor, String text);
|
||||
|
||||
MarkupDocBuilder crossReference(String anchor, String text);
|
||||
|
||||
String crossReferenceAsString(String anchor, String text);
|
||||
MarkupDocBuilder crossReference(String anchor);
|
||||
|
||||
String crossReferenceAsString(String document, String anchor, String text);
|
||||
|
||||
MarkupDocBuilder crossReferenceTitle(String document, String anchor, String text);
|
||||
|
||||
MarkupDocBuilder crossReferenceTitle(String anchor, String text);
|
||||
|
||||
String crossReferenceTitleAsString(String anchor, String text);
|
||||
MarkupDocBuilder crossReferenceTitle(String anchor);
|
||||
|
||||
String crossReferenceTitleAsString(String document, String anchor, String text);
|
||||
|
||||
MarkupDocBuilder newLine();
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ public class AsciiDocBuilder extends AbstractMarkupDocBuilder {
|
||||
|
||||
private static final String ASCIIDOC_FILE_EXTENSION = "adoc";
|
||||
private static final Pattern ANCHOR_FORBIDDEN_PATTERN = Pattern.compile("[^0-9a-zA-Z-_:.\\s]+");
|
||||
private static final Pattern XREF_FORBIDDEN_PATTERN = Pattern.compile("[^0-9a-zA-Z-_:./#\\s]+");
|
||||
private static final Pattern SPACE_PATTERN = Pattern.compile("[\\s]+");
|
||||
|
||||
|
||||
@@ -130,46 +129,54 @@ public class AsciiDocBuilder extends AbstractMarkupDocBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Manual anchor normalization
|
||||
*/
|
||||
private static String normalizeAnchor(String anchor) {
|
||||
return "_" + SPACE_PATTERN.matcher(ANCHOR_FORBIDDEN_PATTERN.matcher(anchor.trim()).replaceAll("")).replaceAll("_");
|
||||
}
|
||||
|
||||
/*
|
||||
* Section title anchors normalization
|
||||
*/
|
||||
private static String normalizeTitleAnchor(String anchor) {
|
||||
return anchor.trim();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String anchorAsString(String anchor, String text) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
if (text == null)
|
||||
stringBuilder.append(AsciiDoc.ANCHOR_START).append(normalizeAnchor(anchor)).append(AsciiDoc.ANCHOR_END);
|
||||
else
|
||||
stringBuilder.append(AsciiDoc.ANCHOR_START).append(normalizeAnchor(anchor)).append(",").append(text).append(AsciiDoc.ANCHOR_END);
|
||||
stringBuilder.append(AsciiDoc.ANCHOR_START).append(normalizeAnchor(anchor));
|
||||
if (text != null)
|
||||
stringBuilder.append(",").append(text);
|
||||
stringBuilder.append(AsciiDoc.ANCHOR_END);
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
|
||||
protected String normalizedCrossReferenceAsString(String anchor, String text) {
|
||||
/*
|
||||
* Final crossref builder, using a pre-normalized anchor.
|
||||
*/
|
||||
protected String normalizedCrossReferenceAsString(String document, String anchor, String text) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
if (text == null)
|
||||
stringBuilder.append(AsciiDoc.CROSS_REFERENCE_START).append(anchor).append(AsciiDoc.CROSS_REFERENCE_END);
|
||||
else
|
||||
stringBuilder.append(AsciiDoc.CROSS_REFERENCE_START).append(anchor).append(",").append(text).append(AsciiDoc.CROSS_REFERENCE_END);
|
||||
stringBuilder.append(AsciiDoc.CROSS_REFERENCE_START);
|
||||
if (document != null)
|
||||
stringBuilder.append(document).append("#");
|
||||
stringBuilder.append(anchor);
|
||||
if (text != null)
|
||||
stringBuilder.append(",").append(text);
|
||||
stringBuilder.append(AsciiDoc.CROSS_REFERENCE_END);
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
private static String normalizeXRef(String anchor) {
|
||||
return "_" + SPACE_PATTERN.matcher(XREF_FORBIDDEN_PATTERN.matcher(anchor.trim()).replaceAll("")).replaceAll("_");
|
||||
@Override
|
||||
public String crossReferenceAsString(String document, String anchor, String text) {
|
||||
return normalizedCrossReferenceAsString(document, normalizeAnchor(anchor), text);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String crossReferenceAsString(String anchor, String text) {
|
||||
return normalizedCrossReferenceAsString(normalizeXRef(anchor), text);
|
||||
}
|
||||
|
||||
private static String normalizeTitleXRef(String anchor) {
|
||||
return anchor.trim();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String crossReferenceTitleAsString(String anchor, String text) {
|
||||
return normalizedCrossReferenceAsString(normalizeTitleXRef(anchor), text);
|
||||
public String crossReferenceTitleAsString(String document, String anchor, String text) {
|
||||
return normalizedCrossReferenceAsString(document, normalizeTitleAnchor(anchor), text);
|
||||
}
|
||||
|
||||
private String escapeTableCell(String cell) {
|
||||
@@ -193,7 +200,7 @@ public class AsciiDocBuilder extends AbstractMarkupDocBuilder {
|
||||
}
|
||||
|
||||
newLine();
|
||||
documentBuilder.append("[options=\"" + join(options, ",") + "\", cols=\"" + join(cols, ",") + "\"]").append(newLine);
|
||||
documentBuilder.append("[options=\"").append(join(options, ",")).append("\", cols=\"").append(join(cols, ",")).append("\"]").append(newLine);
|
||||
documentBuilder.append(AsciiDoc.TABLE).append(newLine);
|
||||
if (hasHeader) {
|
||||
Collection<String> headerList = Collections2.transform(columnSpecs, new Function<MarkupTableColumn, String>() {
|
||||
|
||||
@@ -164,7 +164,7 @@ public class MarkdownBuilder extends AbstractMarkupDocBuilder
|
||||
}
|
||||
|
||||
@Override
|
||||
public String crossReferenceAsString(String anchor, String text) {
|
||||
public String crossReferenceAsString(String document, String anchor, String text) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
if (text == null)
|
||||
text = anchor.trim();
|
||||
|
||||
Reference in New Issue
Block a user