Keep us posted! I would love to contribute a Markdown format. > On Sep 23, 2024, at 7:20 AM, Claude Warren <cla...@xenei.com> wrote: > > I have a system that mostly works. But implementing XML output requires > StringEscapeUtils from commons-text. I know we are reluctant to include > other packages. So my thought is that we provide the XML option as an > example so that we don't include the commons-text in the package. > > My strategy is to separate the formatting into 2 components. > > OptionFormat -- Defines the output format for options. What gets displayed > on the syntax options, and the option table contents. I have a default > implementation that provides the same data as the current HelpFormatter one. > > OutputFormat -- Defines the serialization format for the OptionFormat. I > have two implementations. Text which outputs the current format, XML for > xml output option format data, and APT format in an example. > > My next step is to verify that I can implement the Rat help system. > > > > Imp > > On Fri, Sep 20, 2024 at 12:47 PM Gary Gregory <garydgreg...@gmail.com> > wrote: > >> Looking forward to it 😀 >> >> Gary >> >> On Fri, Sep 20, 2024, 3:56 AM Claude Warren <cla...@xenei.com> wrote: >> >>> I have been working on Rat and have a set of classes that output >> markdown. >>> I think I can make CLI HelpFormtter system take a class to output the >> data >>> in any given format. >>> >>> What rat is doing now is writing help to a file and using APT format to >>> include that using Velocity. >>> >>> Gary's point that XML provides broad support, and Eric's point about >>> markdown and the general case for text seems to indicate that >> applications >>> need a way to specify how to format the data, as well as access to the >>> current tooling that makes generating/aggregating the text easier. I >> will >>> work on this and create a pull request where we can discuss how it works. >>> >>> On Thu, Sep 19, 2024 at 1:00 PM Eric Pugh < >> ep...@opensourceconnections.com >>>> >>> wrote: >>> >>>> I would love to see the ability to output the help docs in a format >> that >>>> could be dropped into documentation. In Solr we basically cut and >> paste >>>> the -h output into the Reference Guide, it works but it’s ugly and >>> manual. >>>> I’ve been experimenting with some tools that let you run a tool, >> capture >>>> the output, and incorporate that into the help docs. >>>> >>>> Imagine if I had a "-h —output markdown" that gave a nice table >>>> structure? That could then be incorporated directly into the docs and >>>> generated at build time. >>>> >>>> Honestly, if I had to write my own string handling code to actually do >>> the >>>> output, but the structure was all there, that would be super helpful. >>>> >>>>> On Sep 19, 2024, at 7:36 AM, Gary Gregory <garydgreg...@gmail.com> >>>> wrote: >>>>> >>>>> Hi Claude, >>>>> >>>>> I think it needs to be flexible/complex just enough to support doing >>>> what I >>>>> mentioned. I like XML because once you have that, you can get >> anywhere >>>> else >>>>> with XSL. How do you do transformations in JSON anyway? Has that >> wheel >>>> been >>>>> reinvented? JOLT seems not to have gone anywhere. >>>>> >>>>> Maybe we need a PR to get us started to get done what you need to do. >>> WRT >>>>> formats, at least one can be provided as a test to make sure the code >>> is >>>>> extensible enough. >>>>> >>>>> Gary >>>>> >>>>> >>>>> On Thu, Sep 19, 2024, 6:53 AM Claude Warren <cla...@xenei.com> >> wrote: >>>>> >>>>>> 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 >>>>>> >>>> >>>> _______________________ >>>> Eric Pugh | Founder | OpenSource Connections, LLC | 434.466.1467 | >>>> http://www.opensourceconnections.com < >>>> 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 >>> >> > > > -- > LinkedIn: http://www.linkedin.com/in/claudewarren
_______________________ Eric Pugh | Founder | OpenSource Connections, LLC | 434.466.1467 | http://www.opensourceconnections.com <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.