Enhanced support for tables
This commit is contained in:
@@ -38,7 +38,7 @@ public abstract class AbstractMarkupDocBuilder implements MarkupDocBuilder {
|
||||
protected Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
protected void documentTitle(Markup markup, String title){
|
||||
documentBuilder.append(newLine).append(markup).append(title).append(newLine).append(newLine);
|
||||
documentBuilder.append(markup).append(title).append(newLine).append(newLine);
|
||||
}
|
||||
|
||||
protected void documentTitleWithAttributes(Markup markup, String title){
|
||||
@@ -115,6 +115,11 @@ public abstract class AbstractMarkupDocBuilder implements MarkupDocBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder table(List<List<String>> cells) {
|
||||
return tableWithColumnSpecs(null, cells);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return documentBuilder.toString();
|
||||
|
||||
@@ -56,6 +56,10 @@ public interface MarkupDocBuilder {
|
||||
@Deprecated
|
||||
MarkupDocBuilder tableWithHeaderRow(List<String> rowsInPSV);
|
||||
|
||||
MarkupDocBuilder table(List<List<String>> cells);
|
||||
|
||||
MarkupDocBuilder tableWithColumnSpecs(List<TableColumnSpec> headers, List<List<String>> cells);
|
||||
|
||||
MarkupDocBuilder anchor(String anchor);
|
||||
|
||||
/**
|
||||
@@ -84,4 +88,21 @@ public interface MarkupDocBuilder {
|
||||
*/
|
||||
void writeToFile(String directory, String fileName, Charset charset) throws IOException;
|
||||
|
||||
class TableColumnSpec {
|
||||
public String header;
|
||||
public Integer widthRatio = 0;
|
||||
public TableColumnSpec() {}
|
||||
public TableColumnSpec(String header, Integer widthRatio) {
|
||||
this.header = header;
|
||||
this.widthRatio = widthRatio;
|
||||
}
|
||||
public TableColumnSpec withHeader(String header) {
|
||||
this.header = header;
|
||||
return this;
|
||||
}
|
||||
public TableColumnSpec withWidthRatio(Integer widthRatio) {
|
||||
this.widthRatio = widthRatio;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ public enum AsciiDoc implements Markup {
|
||||
LABELED(":: "),
|
||||
TABLE("|==="),
|
||||
TABLE_COLUMN_DELIMITER("|"),
|
||||
TABLE_COLUMN_DELIMITER_ESCAPE("\\|"), // AsciiDoctor supports both \| and {vbar}
|
||||
LISTING("----"),
|
||||
HARDBREAKS(":hardbreaks:"),
|
||||
DOCUMENT_TITLE("= "),
|
||||
|
||||
@@ -18,14 +18,21 @@
|
||||
*/
|
||||
package io.github.robwin.markup.builder.asciidoc;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Collections2;
|
||||
import io.github.robwin.markup.builder.AbstractMarkupDocBuilder;
|
||||
import io.github.robwin.markup.builder.MarkupDocBuilder;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
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.*;
|
||||
|
||||
/**
|
||||
* @author Robert Winkler
|
||||
*/
|
||||
@@ -138,6 +145,51 @@ public class AsciiDocBuilder extends AbstractMarkupDocBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
private String escapeTableCell(String cell) {
|
||||
return cell.replace(AsciiDoc.TABLE_COLUMN_DELIMITER.toString(), AsciiDoc.TABLE_COLUMN_DELIMITER_ESCAPE.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder tableWithColumnSpecs(List<TableColumnSpec> columns, List<List<String>> cells) {
|
||||
|
||||
Boolean hasHeader = false;
|
||||
List<String> options = new ArrayList<>();
|
||||
List<String> cols = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(columns)) {
|
||||
for (TableColumnSpec col : columns) {
|
||||
if (!hasHeader && isNotBlank(col.header)) {
|
||||
options.add("header");
|
||||
hasHeader = true;
|
||||
}
|
||||
cols.add(String.valueOf(col.widthRatio));
|
||||
}
|
||||
}
|
||||
|
||||
newLine();
|
||||
documentBuilder.append("[options=\"" + join(options, ",") + "\", cols=\"" + join(cols, ",") + "\"]").append(newLine);
|
||||
documentBuilder.append(AsciiDoc.TABLE).append(newLine);
|
||||
if (hasHeader) {
|
||||
Collection<String> headerList = Collections2.transform(columns, new Function<TableColumnSpec, String>() {
|
||||
public String apply(final TableColumnSpec header) {
|
||||
return escapeTableCell(defaultString(header.header));
|
||||
}
|
||||
});
|
||||
documentBuilder.append(AsciiDoc.TABLE_COLUMN_DELIMITER).append(join(headerList, AsciiDoc.TABLE_COLUMN_DELIMITER.toString())).append(newLine);
|
||||
|
||||
}
|
||||
for (List<String> row : cells) {
|
||||
Collection<String> cellList = Collections2.transform(row, new Function<String, String>() {
|
||||
public String apply(final String cell) {
|
||||
return escapeTableCell(cell);
|
||||
}
|
||||
});
|
||||
documentBuilder.append(AsciiDoc.TABLE_COLUMN_DELIMITER).append(join(cellList, AsciiDoc.TABLE_COLUMN_DELIMITER.toString())).append(newLine);
|
||||
}
|
||||
documentBuilder.append(AsciiDoc.TABLE).append(newLine);
|
||||
newLine();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToFile(String directory, String fileName, Charset charset) throws IOException {
|
||||
writeToFileWithExtension(directory, fileName + "." + ASCIIDOC_FILE_EXTENSION, charset);
|
||||
|
||||
@@ -26,6 +26,7 @@ import io.github.robwin.markup.builder.Markup;
|
||||
public enum Markdown implements Markup {
|
||||
HARDBREAKS(""),
|
||||
TABLE_COLUMN_DELIMITER("|"),
|
||||
TABLE_COLUMN_DELIMITER_ESCAPE("\\|"),
|
||||
TABLE_ROW("-"),
|
||||
LISTING("```"),
|
||||
DOCUMENT_TITLE("# "),
|
||||
|
||||
@@ -18,14 +18,22 @@
|
||||
*/
|
||||
package io.github.robwin.markup.builder.markdown;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Collections2;
|
||||
import io.github.robwin.markup.builder.AbstractMarkupDocBuilder;
|
||||
import io.github.robwin.markup.builder.MarkupDocBuilder;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.defaultString;
|
||||
import static org.apache.commons.lang3.StringUtils.join;
|
||||
|
||||
/**
|
||||
* @author Robert Winkler
|
||||
*/
|
||||
@@ -156,6 +164,43 @@ public class MarkdownBuilder extends AbstractMarkupDocBuilder
|
||||
return this;
|
||||
}
|
||||
|
||||
private String escapeTableCell(String cell) {
|
||||
return cell.replace(Markdown.TABLE_COLUMN_DELIMITER.toString(), Markdown.TABLE_COLUMN_DELIMITER_ESCAPE.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public MarkupDocBuilder tableWithColumnSpecs(List<TableColumnSpec> columns, List<List<String>> cells) {
|
||||
if (CollectionUtils.isEmpty(columns))
|
||||
throw new RuntimeException("Header is mandatory in Markdown");
|
||||
|
||||
newLine();
|
||||
Collection<String> headerList = Collections2.transform(columns, new Function<TableColumnSpec, String>() {
|
||||
public String apply(final TableColumnSpec header) {
|
||||
return escapeTableCell(defaultString(header.header));
|
||||
}
|
||||
});
|
||||
documentBuilder.append(Markdown.TABLE_COLUMN_DELIMITER).append(join(headerList, Markdown.TABLE_COLUMN_DELIMITER.toString())).append(Markdown.TABLE_COLUMN_DELIMITER).append(newLine);
|
||||
|
||||
documentBuilder.append(Markdown.TABLE_COLUMN_DELIMITER);
|
||||
for (TableColumnSpec col : columns) {
|
||||
documentBuilder.append(StringUtils.repeat(Markdown.TABLE_ROW.toString(), 3));
|
||||
documentBuilder.append(Markdown.TABLE_COLUMN_DELIMITER);
|
||||
}
|
||||
documentBuilder.append(newLine);
|
||||
|
||||
for (List<String> row : cells) {
|
||||
Collection<String> cellList = Collections2.transform(row, new Function<String, String>() {
|
||||
public String apply(final String cell) {
|
||||
return escapeTableCell(cell);
|
||||
}
|
||||
});
|
||||
documentBuilder.append(Markdown.TABLE_COLUMN_DELIMITER).append(join(cellList, Markdown.TABLE_COLUMN_DELIMITER.toString())).append(Markdown.TABLE_COLUMN_DELIMITER).append(newLine);
|
||||
}
|
||||
newLine();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToFile(String directory, String fileName, Charset charset) throws IOException {
|
||||
writeToFileWithExtension(directory, fileName + "." + MARKDOWN_FILE_EXTENSION, charset);
|
||||
|
||||
Reference in New Issue
Block a user