RejectedSoftware Forums

Sign up

diet-ng conditionallly included tag problem

Would like a clean way to include different table tags depending upon a condition. But there's a snag. I can work around it, but wondering if there's a clean solution.

    - if( condition)
        table(...)
    - else
        table(....)
            tr
                th .....

The indentation of tr is necessary for it to be inside the table, but that indentation stops the else branch from ending. So the table body is not included when the condition is true. How do I end the if keeping the indentation of tr in an elegant way?

Re: diet-ng conditionallly included tag problem

Am 14.03.2017 um 17:28 schrieb Carl Sturtivant:

Would like a clean way to include different table tags depending upon a condition. But there's a snag. I can work around it, but wondering if there's a clean solution.

    - if( condition)
        table(...)
    - else
        table(....)
            tr
                th .....

The indentation of tr is necessary for it to be inside the table, but that indentation stops the else branch from ending. So the table body is not included when the condition is true. How do I end the if keeping the indentation of tr in an elegant way?

The best you can probably do is to use a function or an include:

- void tableContent()
   tr
     th ...

- if (condition)
   table(...)
     - tableContent();
- else
   table(...)
     - tableContent();

Or using include table-content with a table-content.dt template.

Re: diet-ng conditionallly included tag problem

On Fri, 17 Mar 2017 20:59:28 +0100, Sönke Ludwig wrote:

The best you can probably do is to use a function or an include:

- void tableContent()
   tr
     th ...

- if (condition)
   table(...)
     - tableContent();
- else
   table(...)
     - tableContent();

Or using include table-content with a table-content.dt template.

Thank you. Apologies: in the end I didn't use such a table for other reasons.

However, it occurs to me that in a way, what is needed is endif in abstract, something that is at the same level of indentation as the if so it closes it, and yet renders to nothing. So maybe a comment will do!

    - if( condition)
        table(...)
    - else
        table(....)
    //- endif
        tr
            th .....

Haven't tried this, but if it works it might be a useful technique now and again with embedded control structures.

Re: diet-ng conditionallly included tag problem

Am 19.03.2017 um 00:08 schrieb Carl Sturtivant:

On Fri, 17 Mar 2017 20:59:28 +0100, Sönke Ludwig wrote:

The best you can probably do is to use a function or an include:

- void tableContent()
   tr
     th ...

- if (condition)
   table(...)
     - tableContent();
- else
   table(...)
     - tableContent();

Or using include table-content with a table-content.dt template.

Thank you. Apologies: in the end I didn't use such a table for other reasons.

However, it occurs to me that in a way, what is needed is endif in abstract, something that is at the same level of indentation as the if so it closes it, and yet renders to nothing. So maybe a comment will do!

    - if( condition)
        table(...)
    - else
        table(....)
    //- endif
        tr
            th .....

Haven't tried this, but if it works it might be a useful technique now and again with embedded control structures.

Unfortunately due to the way the Diet->D translation is done, this can't
be reasonably made to work within the parser (it would be possible to
write an AST transformation pass, but that would really be a rather
dirty solution).

Another possibility could be to introduce a way to conditionally exclude
certain attributes, for example by recognizing Nullable!T values.
However, if that gets in, the parser should also be extended to handle
attribute lists that span multiple lines, as otherwise this would get
too messy too easily.