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
>

Reply via email to