diff --git a/src/main/java/de/neemann/digital/cli/cli/ArgumentBase.java b/src/main/java/de/neemann/digital/cli/cli/ArgumentBase.java index 79ac1fe86..6ebbe4b75 100644 --- a/src/main/java/de/neemann/digital/cli/cli/ArgumentBase.java +++ b/src/main/java/de/neemann/digital/cli/cli/ArgumentBase.java @@ -68,14 +68,14 @@ public abstract class ArgumentBase { String s; if (isBool()) s = "-" + getName() - + "(" + + "(def: " + get() + ")"; else s = "-" + getName() + " [" + get().getClass().getSimpleName() - + "(" + + "(def: " + get() + ")]"; diff --git a/src/main/java/de/neemann/digital/cli/cli/BasicCommand.java b/src/main/java/de/neemann/digital/cli/cli/BasicCommand.java index 1ea20f5c7..b4eb1eb8a 100644 --- a/src/main/java/de/neemann/digital/cli/cli/BasicCommand.java +++ b/src/main/java/de/neemann/digital/cli/cli/BasicCommand.java @@ -7,7 +7,9 @@ package de.neemann.digital.cli.cli; import de.neemann.digital.lang.Lang; +import java.io.IOException; import java.io.PrintStream; +import java.io.Writer; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -65,7 +67,32 @@ public abstract class BasicCommand extends NamedCommand { out.print(prefix + " "); printString(out, prefix + " ", a.getDescription(getName())); } + } + @Override + public void printXMLDescription(Writer w) throws IOException { + w.write("\n"); + w.append(getName()); + for (ArgumentBase a : arguments) { + w.append(" "); + w.append(a.toString()); + } + w.append(":"); + w.write("\n"); + w.write(Lang.get("cli_help_" + getName())); + w.write("\n"); + w.write("\n"); + w.write(Lang.get("cli_options")); + for (ArgumentBase a : arguments) { + w.write("\n"); + w.write(a.toStringDef()); + w.write("\n"); + w.write(a.getDescription(getName())); + w.write("\n"); + w.write("\n"); + } + w.write("\n"); + w.write("\n"); } void printString(PrintStream out, String prefix, String message) { diff --git a/src/main/java/de/neemann/digital/cli/cli/CLICommand.java b/src/main/java/de/neemann/digital/cli/cli/CLICommand.java index 862ccec34..e6532e31c 100644 --- a/src/main/java/de/neemann/digital/cli/cli/CLICommand.java +++ b/src/main/java/de/neemann/digital/cli/cli/CLICommand.java @@ -5,27 +5,38 @@ */ package de.neemann.digital.cli.cli; +import java.io.IOException; import java.io.PrintStream; +import java.io.Writer; /** * A cli command */ public interface CLICommand { + /** + * Executes the command + * + * @param args the arguments + * @throws CLIException CLIException + */ + void execute(String[] args) throws CLIException; + /** * Prints the description * - * @param out the pront stream + * @param out the print stream * @param prefix the prefex string which should * printed at the beginning of each line */ void printDescription(PrintStream out, String prefix); /** - * Esecuted the command + * Prints the description in xml format * - * @param args the arguments - * @throws CLIException CLIException + * @param w the writer to write to + * @throws IOException IOException */ - void execute(String[] args) throws CLIException; + void printXMLDescription(Writer w) throws IOException; + } diff --git a/src/main/java/de/neemann/digital/cli/cli/Muxer.java b/src/main/java/de/neemann/digital/cli/cli/Muxer.java index 2c7677883..0739739d1 100644 --- a/src/main/java/de/neemann/digital/cli/cli/Muxer.java +++ b/src/main/java/de/neemann/digital/cli/cli/Muxer.java @@ -7,7 +7,9 @@ package de.neemann.digital.cli.cli; import de.neemann.digital.lang.Lang; +import java.io.IOException; import java.io.PrintStream; +import java.io.Writer; import java.util.Arrays; import java.util.HashMap; @@ -58,6 +60,15 @@ public class Muxer extends NamedCommand { c.printDescription(out, prefix + " "); } + @Override + public void printXMLDescription(Writer w) throws IOException { + w.write("\n"); + w.write(getName()); + for (CLICommand c : commands.values()) + c.printXMLDescription(w); + w.write("\n"); + } + @Override public void execute(String[] args) throws CLIException { if (args.length == 0) diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 7521a66c8..7ff8efc6d 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -1541,6 +1541,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig? RAM EEPROM + Steuerung per Kommandozeile Es fehlt das nicht optionale Argument {0}. Der Wert {0} ist kein bool. Der Wert {0} ist keine Zahl. @@ -1572,7 +1573,9 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Aufgeführt sind alle verwendeten Komponenten. Name der Schaltung. - Name der Ausgabedatei. + Name der Ausgabedatei. + Wenn diese Option fehlt, erfolgt eine Ausgabe auf die Konsole. + Fehler bei der Erzeugung der CSV Datei! Fenster diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 379866b65..8bc3e08ea 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -1505,6 +1505,7 @@ RAM EEPROM + Command Line Interface The non-optional argument {0} is missing. The value {0} is no bool. The value {0} is not a number. @@ -1534,7 +1535,9 @@ All components used are listed in the CSV file. File name of the circuit. - Name of the csv file to be created. + Name of the csv file to be created. + If this option is missing, the table is written to stdout. + Error while creating the stats file! Windows diff --git a/src/test/java/de/neemann/digital/docu/DocuTest.java b/src/test/java/de/neemann/digital/docu/DocuTest.java index 92b1b2b9a..d44450c0b 100644 --- a/src/test/java/de/neemann/digital/docu/DocuTest.java +++ b/src/test/java/de/neemann/digital/docu/DocuTest.java @@ -5,6 +5,7 @@ */ package de.neemann.digital.docu; +import de.neemann.digital.cli.Main; import de.neemann.digital.core.NodeException; import de.neemann.digital.core.element.*; import de.neemann.digital.draw.elements.PinException; @@ -89,6 +90,8 @@ public class DocuTest extends TestCase { w.append(" \n"); w.append(" \n"); + writeCLIDescription(w); + ElementLibrary library = new ElementLibrary(); ShapeFactory shapeFactory = new ShapeFactory(library, !language.equals("de")); String actPath = null; @@ -139,6 +142,12 @@ public class DocuTest extends TestCase { w.append(""); } + private void writeCLIDescription(Writer w) throws IOException { + w.append(" \n"); + new Main().printXMLDescription(w); + w.append(" \n"); + } + private void writeAttributes(Writer w, List keyList) throws IOException { w.append(" \n"); for (Key k : keyList) { diff --git a/src/test/resources/docu/elem2fo.xslt b/src/test/resources/docu/elem2fo.xslt index e6b1a76dd..988de1bbc 100644 --- a/src/test/resources/docu/elem2fo.xslt +++ b/src/test/resources/docu/elem2fo.xslt @@ -78,43 +78,86 @@ - + - A + A + + + - B + B + + + - C + + C + + + + + + + D + + + - D + E + + + - A + A + + + - - B + + B + + + + + C + + + + + + - C + D + + + - - D + + E + + + @@ -294,14 +337,25 @@ + + + + + + + + + + - . + . + - +