Merge branch 'stable-2.11' into stable-2.12 Change-Id: If287eb5c7d3f5b43ec513d7696f94cf430d832fe
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/AsciidoctorFormatter.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/AsciidoctorFormatter.java index caa31c4..2da5f69 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/AsciidoctorFormatter.java +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/AsciidoctorFormatter.java
@@ -16,27 +16,18 @@ import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_ALLOW_HTML; import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_INCLUDE_TOC; -import static java.nio.charset.StandardCharsets.UTF_8; -import com.google.common.io.ByteStreams; -import com.google.gerrit.common.TimeUtil; -import com.google.gerrit.extensions.annotations.PluginData; import com.google.inject.Inject; import com.google.inject.Singleton; import com.googlesource.gerrit.plugins.xdocs.ConfigSection; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.Attributes; import org.asciidoctor.AttributesBuilder; -import org.asciidoctor.Options; import org.asciidoctor.OptionsBuilder; import org.asciidoctor.SafeMode; import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; @@ -50,15 +41,14 @@ private static final String DOCTYPE = "article"; private static final String ERUBY = "erb"; - private final File baseDir; private final Properties attributes; private final FormatterUtil util; private final Formatters formatters; @Inject - public AsciidoctorFormatter(@PluginData File baseDir, - FormatterUtil formatterUtil, Formatters formatters) throws IOException { - this.baseDir = baseDir; + public AsciidoctorFormatter( + FormatterUtil formatterUtil, + Formatters formatters) throws IOException { this.attributes = readAttributes(); this.util = formatterUtil; this.formatters = formatters; @@ -73,25 +63,9 @@ ConfigSection projectCfg = formatters.getFormatterConfig(NAME, projectName); - // asciidoctor ignores all attributes if no output file is specified, - // this is why we must specify an output file and then read its content - File tmpDir = new File(baseDir, "tmp"); - tmpDir.mkdirs(); - File tmpFile = File.createTempFile("asciidoctor-", null, tmpDir); - try { - Asciidoctor.Factory.create(AsciidoctorFormatter.class.getClassLoader()) - .render(raw, createOptions(projectCfg, abbrRev, tmpFile)); - try (FileInputStream input = new FileInputStream(tmpFile)) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - ByteStreams.copy(input, out); - String html = out.toString(UTF_8.name()); - return util.applyCss(html, NAME, projectName); - } - } finally { - if (!tmpFile.delete()) { - tmpFile.deleteOnExit(); - } - } + String html = Asciidoctor.Factory.create(AsciidoctorFormatter.class.getClassLoader()) + .convert(raw, createOptions(projectCfg, abbrRev)); + return util.applyCss(html, NAME, projectName); } private String suppressHtml(String raw) throws IOException { @@ -112,19 +86,17 @@ } } - private Options createOptions(ConfigSection cfg, String revision, File out) { + private OptionsBuilder createOptions(ConfigSection cfg, String revision) { return OptionsBuilder.options() .backend(BACKEND) .docType(DOCTYPE) .eruby(ERUBY) .safe(SafeMode.SECURE) .attributes(getAttributes(cfg, revision)) - .mkDirs(true) - .toFile(out) - .get(); + .mkDirs(true); } - private Attributes getAttributes(ConfigSection cfg, String revision) { + private AttributesBuilder getAttributes(ConfigSection cfg, String revision) { AttributesBuilder ab = AttributesBuilder.attributes() .tableOfContents(cfg.getBoolean(KEY_INCLUDE_TOC, true)) .sourceHighlighter("prettify"); @@ -133,7 +105,7 @@ } ab.attribute("last-update-label!"); ab.attribute("revnumber", revision); - return ab.get(); + return ab; } private static Properties readAttributes() throws IOException {