This could get complex fairly quickly. So a couple of questions: Q: Do we want to create a new commons project or perhaps expand commons-text to contain a simple library for formatting output. If we do that we would have to include it in commons-cli which I know is undesirable, but if text is small enough it should not be a problem.
Q: Do we want to create/support multiple output formatters (e.g. XML, XHMTL, Text, markdown)? On Wed, Sep 18, 2024 at 5:40 PM Gary Gregory <garydgreg...@gmail.com> wrote: > If we create something new, it would be nice to have example in tests that > show rendering to XHTML and XML. This means the abstract superclass should > not assume console output. A site can use its own CSS for styling. If we > are flexible enough we should not need to create yet another thing in > the future. > > Gary > > On Wed, Sep 18, 2024, 11:23 AM Claude Warren <cla...@xenei.com> wrote: > >> I think that help formatting really comes down to building a textual >> matrix from a list of Options. To do this we need to have several things: >> >> 1. A list of headers (text for the columns in the table) >> 2. The minimum and maximum width for each column. (perhaps as a % of >> the width) >> 3. A method that converts the Option into the columns. >> >> >> Interface TableDef { >> String header(); >> String footer(); >> List<String> columnHeaders(); >> int[] minimumColumnSize(); >> int[] maximumColumnSize(); >> Iterator<List<String>> rows(); >> } >> >> abstract class AbstractHelpFormatter { >> int width; >> List<TableDef> tables; >> >> printUsage(PrintWriter writer, String commandLineSyntax) { >> // print the command line syntax. >> for(TableDef table : tables) { >> writer.println(table.header()) >> for(String line : >> formatColumns(table.minimumColumnSize(), table.maximumColumnSize(), >> columnHeaders())) { >> writer.println(line); >> } >> Iterator<List<String>> rows = table.rows(); >> while(rows.hasNext()) { >> formatColumns(table.minimumColumnSize(), >> table.maximumColumnSize(), row.next()).forEach(writer::println); >> } >> writer.println(table.footer()) >> } >> } >> } >> >> where formatColumns is a static method in HelpFormatter that will produce >> a list of Strings necessary to properly display the wrapped columns. Any >> helper functions for formatColumns() would also be public static so that >> they can be reused for other implementations. >> >> The concrete implementation would be the implementation we currently have >> adapted to fit this pattern. >> >> I have code like this in the new RAT code. >> >> Does this make sense to you? >> >> Claude >> >> >> >> >> On Wed, Sep 18, 2024 at 2:57 PM Eric Pugh < >> ep...@opensourceconnections.com> wrote: >> >>> In Solr we added some additional formatting methods to our Tool.java >>> interface to help with formatting the various tools that use commons-cli: >>> >>> [image: solr.png] >>> >>> solr/solr/core/src/java/org/apache/solr/cli/Tool.java at main · >>> apache/solr >>> <https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/cli/Tool.java#L34> >>> github.com >>> <https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/cli/Tool.java#L34> >>> >>> <https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/cli/Tool.java#L34> >>> >>> PackageTool had a very very custom help output that we didn’t want to >>> lose when we redid things, so it has a custom getHeader: >>> >>> >>> >>> [image: solr.png] >>> >>> solr/solr/core/src/java/org/apache/solr/cli/PackageTool.java at main · >>> apache/solr >>> <https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/cli/PackageTool.java#L251> >>> github.com >>> <https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/cli/PackageTool.java#L251> >>> >>> <https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/cli/PackageTool.java#L251> >>> >>> Whereas CreateTool had a short bit of additional text, and then the >>> options: >>> https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/cli/CreateTool.java#L70 >>> >>> And our PostLogsTool doesn’t use any of those extra formatting helpers: >>> https://github.com/apache/solr/blob/main/solr/core/src/java/org/apache/solr/cli/PostLogsTool.java >>> >>> >>> I do wish this had been part of commons-cli! >>> >>> Eric >>> >>> >>> >>> On Sep 18, 2024, at 9:52 AM, Gary Gregory <garydgreg...@gmail.com> >>> wrote: >>> >>> Or a new better formatting class? >>> >>> Gary >>> >>> On Wed, Sep 18, 2024, 9:45 AM Claude Warren <cla...@xenei.com> wrote: >>> >>> After more exploration it seems that HelpFormatter is really not designed >>> to be extended. I will have to rethink this. It may make sense to make >>> some of the HelpFormatter methods static so that they can be used in >>> other >>> implementations. >>> >>> On Wed, Sep 18, 2024 at 9:29 AM Claude Warren <cla...@xenei.com> wrote: >>> >>> Greetings, >>> >>> I have a case in RAT where we want to append a line to the help text when >>> the option has multiple arguments or when we have defined a default >>> >>> value. >>> >>> >>> I have implemented this in a renderOptions() implementation in CLI 1.8.0. >>> In both cases we use the Option to check for some state and then append >>> >>> to >>> >>> the optBuf. >>> >>> I am now migrating to 1.9.0 and have to do the same thing, but 1.9.0 adds >>> more functionality to the default renderOptions() method so I have to >>> rework my implementation. However, had I not known this was the case, I >>> would have missed the changes and we would have had some rather >>> >>> interesting >>> >>> bugs later. >>> >>> What I am proposing is a new parameter to renderOptions(). A >>> "Optional<String> Function<Option>". If the function returns a String >>> >>> then >>> >>> it is appended to the optBuf. >>> >>> This method would be called near the end of renderOptions. >>> >>> Thoughts? >>> Claude >>> >>> -- >>> LinkedIn: http://www.linkedin.com/in/claudewarren >>> >>> >>> >>> -- >>> LinkedIn: http://www.linkedin.com/in/claudewarren >>> >>> >>> _______________________ >>> *Eric Pugh **| *Founder | OpenSource Connections, LLC | 434.466.1467 | >>> http://www.opensourceconnections.com | My Free/Busy >>> <http://tinyurl.com/eric-cal> >>> Co-Author: Apache Solr Enterprise Search Server, 3rd Ed >>> <https://www.packtpub.com/big-data-and-business-intelligence/apache-solr-enterprise-search-server-third-edition-raw> >>> This e-mail and all contents, including attachments, is considered to be >>> Company Confidential unless explicitly stated otherwise, regardless >>> of whether attachments are marked as such. >>> >>> >> >> -- >> LinkedIn: http://www.linkedin.com/in/claudewarren >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org > > -- LinkedIn: http://www.linkedin.com/in/claudewarren