From 156929172bf139c8b2208a2babc14a58fde099ed Mon Sep 17 00:00:00 2001 From: Andreas Reichel Date: Sun, 14 May 2023 19:48:13 +0700 Subject: [PATCH] feat: Enum support --- README.md | 14 +-- build.gradle | 1 - .../markusbernhardt/xmldoclet/XmlDoclet.java | 47 +++++++++- .../com/manticore/xsl/restructured.xsl | 89 ++++++++++++++++--- 4 files changed, 128 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index d6f6f02..b556810 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ A doclet to output javadoc as XML ================================= -This library provides a doclet to output the javadoc comments from Java source code to a XML, Restructured Text (*.rst) document. +This library provides a doclet to output the javadoc comments from Java source code to a XML or a Restructured Text (*.rst) document. + All modern JDKs 11, 17 and 21 are supported (via `languageVersion.set(JavaLanguageVersion.of(11)` enforcing JavaDoc 11). Planned support for Markdown (*.md), Docbook XML and ASCII Doctor (*.adoc). Sponsors or Contributors are most welcome. @@ -35,17 +36,14 @@ dependencies { tasks.register('xmldoc', Javadoc) { source = sourceSets.main.allJava - // beware, that this folder will be overwittten by Gradle + // beware, that this folder will be overwritten hard by Gradle destinationDir = reporting.file("xmlDoclet") options.docletpath = configurations.xmlDoclet.files.asType(List) options.doclet = "com.github.markusbernhardt.xmldoclet.XmlDoclet" - // @see https://github.com/gradle/gradle/issues/11898#issue-549900869 - title = null - options.noTimestamp(false) - // transform to Restructured Text and copy to Sphinx Source folder options.addBooleanOption("rst", true) + options.addStringOption("basePackage", "net.sf.jsqlparser") doLast { copy { @@ -88,7 +86,7 @@ If you are using maven you can use this library by adding the following report t com.manticore-projects.tools xml-doclet - 1.1.3 + 1.2.1 @@ -122,3 +120,5 @@ Options -adoc Not implemented yet: Write Ascii Doctor (*.adoc) Default: false + + -basePackage Shortens the Qualified Names by the Base Package name diff --git a/build.gradle b/build.gradle index 0f964de..90ae91f 100644 --- a/build.gradle +++ b/build.gradle @@ -296,7 +296,6 @@ configurations.configureEach { force 'org.dom4j:dom4j:+' // avoid vulnerable optional artifacts - //exclude(group: 'org.dom4j') exclude(group: 'org.jdom') } } diff --git a/src/main/java/com/github/markusbernhardt/xmldoclet/XmlDoclet.java b/src/main/java/com/github/markusbernhardt/xmldoclet/XmlDoclet.java index fa0e618..8da7f4e 100644 --- a/src/main/java/com/github/markusbernhardt/xmldoclet/XmlDoclet.java +++ b/src/main/java/com/github/markusbernhardt/xmldoclet/XmlDoclet.java @@ -10,6 +10,7 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.ListIterator; @@ -37,6 +38,7 @@ import net.sf.saxon.s9api.*; import java.io.OutputStream; +import java.util.Map; import java.util.logging.Level; /** @@ -116,9 +118,33 @@ public class XmlDoclet { OptionBuilder.withArgName("filename"); OptionBuilder.isRequired(false); - OptionBuilder.hasArg(); + OptionBuilder.hasArgs(1); OptionBuilder.withDescription("Name of the output file.\nDefault: javadoc.xml"); OPTIONS.addOption(OptionBuilder.create("filename")); + + OptionBuilder.withArgName("basePackage"); + OptionBuilder.isRequired(false); + OptionBuilder.hasArgs(1); + OptionBuilder.withDescription("Name of the base package.\n"); + OPTIONS.addOption(OptionBuilder.create("basePackage")); + + OptionBuilder.withArgName("doctitle"); + OptionBuilder.isRequired(false); + OptionBuilder.hasArgs(1); + OptionBuilder.withDescription("Document Title\n"); + OPTIONS.addOption(OptionBuilder.create("doctitle")); + + OptionBuilder.withArgName("windowtitle"); + OptionBuilder.isRequired(false); + OptionBuilder.hasArgs(1); + OptionBuilder.withDescription("Window Title\n"); + OPTIONS.addOption(OptionBuilder.create("windowtitle")); + + OptionBuilder.withArgName("noTimestamp"); + OptionBuilder.isRequired(false); + OptionBuilder.hasArgs(0); + OptionBuilder.withDescription("No Timestamp.\n"); + OPTIONS.addOption(OptionBuilder.create("notimestamp")); } /** @@ -181,7 +207,8 @@ public static boolean start(RootDoc rootDoc) { return true; } - public static void transform(InputStream xsltInputStream, File xmlFile, File outFile) + public static void transform(InputStream xsltInputStream, File xmlFile, File outFile, + Map parameters) throws IOException, SaxonApiException { try (InputStream xmlInputStream = new FileInputStream(xmlFile); @@ -212,6 +239,11 @@ public static void transform(InputStream xsltInputStream, File xmlFile, File out Serializer serializer = processor.newSerializer(output); transformer.setDestination(serializer); + for (Map.Entry parameter : parameters.entrySet()) { + transformer.setParameter(new QName(parameter.getKey()), + new XdmAtomicValue(parameter.getValue())); + } + // Transform the XML transformer.transform(); } @@ -271,11 +303,18 @@ public static void save(CommandLine commandLine, Root root) { LOGGER.info("Wrote XML to: " + xmlFile.getAbsolutePath()); + HashMap parameters = new HashMap<>(); + for (Option o : commandLine.getOptions()) { + if (o.getValue() != null) { + parameters.put(o.getArgName(), o.getValue()); + } + } + if (commandLine.hasOption("rst")) { File outFile = new File(xmlFile.getParent(), basename + ".rst"); try (InputStream inputStream = XmlDoclet.class.getResourceAsStream(RESTRUCTURED_XSL);) { - transform(inputStream, xmlFile, outFile); + transform(inputStream, xmlFile, outFile, parameters); } catch (Exception ex) { LOGGER.log(Level.SEVERE, "Failed to write Restructured Text", ex); } @@ -286,7 +325,7 @@ public static void save(CommandLine commandLine, Root root) { File outFile = new File(xmlFile.getParent(), basename + ".md"); try (InputStream inputStream = XmlDoclet.class.getResourceAsStream(MARKDOWN_XSL);) { - transform(inputStream, xmlFile, outFile); + transform(inputStream, xmlFile, outFile, parameters); } catch (Exception ex) { LOGGER.log(Level.SEVERE, "Failed to write Markdown", ex); } diff --git a/src/main/resources/com/manticore/xsl/restructured.xsl b/src/main/resources/com/manticore/xsl/restructured.xsl index 6f0c7e3..7919d09 100644 --- a/src/main/resources/com/manticore/xsl/restructured.xsl +++ b/src/main/resources/com/manticore/xsl/restructured.xsl @@ -9,14 +9,30 @@ omit-xml-declaration="yes" indent="no" /> + + + + + + + ```` + + - - - - + + + + + + + + + + + + - @@ -32,16 +48,21 @@ - ####################################################################### -JAVA API + ####################################################################### + +Base Package: + + + + @@ -55,12 +76,19 @@ JAVA API .. _: *********************************************************************** - Base - + + Base + *********************************************************************** + + + + + + @@ -196,6 +224,46 @@ JAVA API + + + + + + + +.. _: + +======================================================================= + + + ( + + + + :' + ' + + + , + + + ) + +======================================================================= + + + + + + + + + + + + + + @@ -225,14 +293,13 @@ JAVA API - ----------------------------------------------------------------------- - + (