All, I just posted -06 that addresses some comments from Rob, Martin,
and Jonathan.  I realize that there are still open issues, but a rapid
iteration for some of these things seems like it might be good:
https://tools.ietf.org/html/draft-kwatsen-netmod-artwork-folding-06.


Hi Robert,

> A couple of comments:
> 
> 1) Section 4.2 suggests using groupings to presumably avoid folding.  I 
> don't really support this as a strategy, since I think that groupings 
> are overused and I think that they obfuscate the true structure of a 
> YANG module, that can only be recovered by recompiling the module with 
> the groupings expanded, or looking at the tree output.  Really, I think 
> that an ideal solution would be to somehow have RFCs support longer 
> lines for files like YANG - e.g. if I could choose any value without 
> regard for backwards compatibility I would probably choose 120 
> characters instead.

I removed the word "grouping" from the text.  Now it says "...call outs,
such as functions".



> 2) The proposed solution always left indents the wrapped line. Often for 
> artwork (e.g. a YANG tree diagram), where whitespace is not significant, 
> and the wrapping is relatively minor, then right indenting the wrapped 
> line can make the results look more visually readable.
>
> E.g.  I think that this is slightly easier to read:
>
> module: ietf-flexible-encapsulation
>   augment /if:interfaces/if:interface/if-cmn:encapsulation\
>                                         /if-cmn:encaps-type:
>     +--:(flexible)
>        +--rw flexible
>           +--rw match
>           |  +--rw (match-type)
>           |     +--:(default)
>           |     |  +--rw default?                 empty
>           |     +--:(untagged)
>           |     |  +--rw untagged?                empty
>           |     +--:(dot1q-priority-tagged)
>           |     |  +--rw dot1q-priority-tagged
>           |     |     +--rw tag-type?   dot1q-types:dot1q-\
>                                                    tag-type
>           |     +--:(dot1q-vlan-tagged)
>           |        +--rw dot1q-vlan-tagged
>
> rather than:
>
> module: ietf-flexible-encapsulation
>   augment /if:interfaces/if:interface/if-cmn:encapsulation\
>/if-cmn:encaps-type:
>     +--:(flexible)
>        +--rw flexible
>           +--rw match
>           |  +--rw (match-type)
>           |     +--:(default)
>           |     |  +--rw default?                 empty
>           |     +--:(untagged)
>           |     |  +--rw untagged?                empty
>           |     +--:(dot1q-priority-tagged)
>           |     |  +--rw dot1q-priority-tagged
>           |     |     +--rw tag-type?   dot1q-types:dot1q-\
>tag-type
>           |     +--:(dot1q-vlan-tagged)
>           |        +--rw dot1q-vlan-tagged



The placement of the indents in the example above would be impossible
to automate - they're too artsy ;)   However, it should be possible 
to automate a variable indent that lines up with the first printable
character on the previous line.  Something like this:

 module: ietf-flexible-encapsulation
   augment /if:interfaces/if:interface/if-cmn:encapsulation\
   /if-cmn:encaps-type:
     +--:(flexible)
        +--rw flexible
           +--rw match
           |  +--rw (match-type)
           |     +--:(default)
           |     |  +--rw default?                 empty
           |     +--:(untagged)
           |     |  +--rw untagged?                empty
           |     +--:(dot1q-priority-tagged)
           |     |  +--rw dot1q-priority-tagged
           |     |     +--rw tag-type?   dot1q-types:dot1q-\
           tag-type
           |     +--:(dot1q-vlan-tagged)
           |        +--rw dot1q-vlan-tagged

[note: previous line indent matching is beyond what can be accomplished
via a simple `sed` or `awk` one-liner]. 

Regardless if automated or manual, I think the indent rule needs to be
rather strict.  In particular, arbitrary per-line indent can lead to
lossy round-tripping (unfolding errors), unless we introduce a rule
saying that the source artwork MUST NOT have a space (' ') character
that occurring on a fold column.  Otherwise the following might happen.

  ORIG:

     example:
        This very long line happens to have a space character immediately after 
the fold column.";


  FOLDED:  *** doesn't matter the indentation strategy ***

     ===== NOTE: '\' line wrapping per BCP XX (RFC XXXX) =====
     example:
        This very long line happens to have a space character\
        immediately after the fold column.";


  UNFOLDED (using alg that chomps all leading whitespace):

     example:
        This very long line happens to have a space characterimmediately after 
the fold column.";


Note the error in the unfolded version.  I think disallowing
whitespace characters on the fold column in the source artwork is
overly limiting, spaces being so commonly used.   The only way I 
can think to preserve the space character is to have a fixed 
indent rule (e.g., some hardcoded column number, or always use 
the same indent as previous line, or the same as the previous 
line plus some fixed offset).  Given a clear rule, the unfolding
alg can chomp just the right amount of whitespace out, leaving
the any remaining whitespace, so the round-trip result is loss-less.


> Rob

Kent // contributor



_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to