fixed anchor normalization (again). Asciidoc anchor normalization differs between title and custom anchors => introducted crossReferenceTitle
This commit is contained in:
@@ -104,14 +104,26 @@ public abstract class AbstractMarkupDocBuilder implements MarkupDocBuilder {
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder crossReference(String anchor) {
|
||||
crossReference(anchor, null);
|
||||
public MarkupDocBuilder anchor(String anchor, String text) {
|
||||
documentBuilder.append(anchorAsString(anchor, text));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String crossReferenceAsString(String anchor) {
|
||||
return crossReferenceAsString(anchor, null);
|
||||
public MarkupDocBuilder crossReference(String anchor, String text) {
|
||||
documentBuilder.append(crossReferenceAsString(anchor, text));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder crossReferenceTitle(String anchor, String text) {
|
||||
documentBuilder.append(crossReferenceTitleAsString(anchor, text));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String crossReferenceTitleAsString(String anchor, String text) {
|
||||
return crossReferenceAsString(anchor, text);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -60,21 +60,17 @@ public interface MarkupDocBuilder {
|
||||
|
||||
MarkupDocBuilder tableWithColumnSpecs(List<MarkupTableColumn> columnSpecs, List<List<String>> cells);
|
||||
|
||||
MarkupDocBuilder anchor(String anchor);
|
||||
MarkupDocBuilder anchor(String anchor, String text);
|
||||
|
||||
String anchorAsString(String anchor);
|
||||
String anchorAsString(String anchor, String text);
|
||||
|
||||
/**
|
||||
* @param anchor Target anchor
|
||||
* @param text If not null, display this text instead of anchor
|
||||
*/
|
||||
MarkupDocBuilder crossReference(String anchor, String text);
|
||||
|
||||
String crossReferenceAsString(String anchor, String text);
|
||||
|
||||
MarkupDocBuilder crossReference(String anchor);
|
||||
MarkupDocBuilder crossReferenceTitle(String anchor, String text);
|
||||
|
||||
String crossReferenceAsString(String anchor);
|
||||
String crossReferenceTitleAsString(String anchor, String text);
|
||||
|
||||
MarkupDocBuilder newLine();
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.*;
|
||||
|
||||
@@ -39,6 +40,10 @@ import static org.apache.commons.lang3.StringUtils.*;
|
||||
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]+");
|
||||
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder documentTitle(String title){
|
||||
@@ -125,37 +130,46 @@ public class AsciiDocBuilder extends AbstractMarkupDocBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
private static String normalizeReferenceAnchor(String anchor) {
|
||||
return anchor.trim();
|
||||
private static String normalizeAnchor(String anchor) {
|
||||
return "_" + SPACE_PATTERN.matcher(ANCHOR_FORBIDDEN_PATTERN.matcher(anchor.trim()).replaceAll("")).replaceAll("_");
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder anchor(String anchor) {
|
||||
documentBuilder.append(anchorAsString(anchor));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String anchorAsString(String anchor) {
|
||||
public String anchorAsString(String anchor, String text) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.append(AsciiDoc.ANCHOR_START).append(normalizeReferenceAnchor(anchor)).append(AsciiDoc.ANCHOR_END);
|
||||
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);
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder crossReference(String anchor, String text) {
|
||||
documentBuilder.append(crossReferenceAsString(anchor, text));
|
||||
return this;
|
||||
|
||||
protected String normalizedCrossReferenceAsString(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);
|
||||
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 anchor, String text) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
if (text == null)
|
||||
stringBuilder.append(AsciiDoc.CROSS_REFERENCE_START).append(normalizeReferenceAnchor(anchor)).append(AsciiDoc.CROSS_REFERENCE_END);
|
||||
else
|
||||
stringBuilder.append(AsciiDoc.CROSS_REFERENCE_START).append(normalizeReferenceAnchor(anchor)).append(",").append(text).append(AsciiDoc.CROSS_REFERENCE_END);
|
||||
return stringBuilder.toString();
|
||||
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);
|
||||
}
|
||||
|
||||
private String escapeTableCell(String cell) {
|
||||
|
||||
@@ -23,8 +23,8 @@ import com.google.common.collect.Collections2;
|
||||
import io.github.robwin.markup.builder.AbstractMarkupDocBuilder;
|
||||
import io.github.robwin.markup.builder.MarkupDocBuilder;
|
||||
import io.github.robwin.markup.builder.MarkupTableColumn;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
@@ -157,24 +157,12 @@ public class MarkdownBuilder extends AbstractMarkupDocBuilder
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder anchor(String anchor) {
|
||||
documentBuilder.append(anchorAsString(anchor));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String anchorAsString(String anchor) {
|
||||
public String anchorAsString(String anchor, String text) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.append("<a name=\"").append(normalizeReferenceAnchor(anchor)).append("\"></a>");
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder crossReference(String anchor, String text) {
|
||||
documentBuilder.append(crossReferenceAsString(anchor, text));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String crossReferenceAsString(String anchor, String text) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
@@ -190,8 +178,7 @@ public class MarkdownBuilder extends AbstractMarkupDocBuilder
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder tableWithColumnSpecs(List<MarkupTableColumn> columnSpecs, List<List<String>> cells) {
|
||||
if (CollectionUtils.isEmpty(columnSpecs))
|
||||
throw new RuntimeException("Header is mandatory in Markdown");
|
||||
Validate.notEmpty(columnSpecs);
|
||||
|
||||
newLine();
|
||||
Collection<String> headerList = Collections2.transform(columnSpecs, new Function<MarkupTableColumn, String>() {
|
||||
|
||||
Reference in New Issue
Block a user