Thread (15 messages) flat view 15 messages, 4 authors, 2016-06-15

Re: [PATCH 0/3] Generalized "string function" syntax

From: René Scharfe <hidden>
Date: 2016-06-15 22:47:34

Junio C Hamano schrieb:
René Scharfe [off-list ref] writes:
quoted
Junio C Hamano schrieb:
quoted
I mentioned an idea to enhance the pretty=format language with a
string function syntax that people can extend by adding new functions
in one of the "What's cooking" messages earlier.  The general syntax
would be like

%[function(args...)any string here%]

where "any string here" part would have the usual pretty=format
strings. E.g.  git show -s --format='%{w(72,8,4)%s%+b%]' should give
you a line wrapped commit log message if w(width,in1,in2) is such a
function.
I pondered line wrapping with format strings briefly a long time ago, and
I always considered it to be more similar to a colour, i.e. a state that
one can change and that is applied to all following text until the next
state change.  (Except that it's always reset at the end of the format
string.)  The example above would then turn into '%w(72,8,4)%s%+b'.
As a syntax to express "wrapping" behaviour alone, I think this is much
simpler and more superiour.  I guess with this if you want to wrap
something to 72 columns and then wrap something else to 66 columns, you
would write '%w(72,8,4)something%w(66,8,4)something else', right?
That's right.
I used %] only for two reasons.

 - Without an explicit "here it ends", I couldn't come up with a good way
   to express '%[w(72,8,4)something%]something else'.  IOW, how I can say
   "wrap something to 72 columns and then place something else without any
   wrapping"?
My patch makes '%w()' reset the wrapping parameters to their defaults.
 - When we need to support more than one string function like this, it is
   unclear what '%f()one string%g()another one' in your syntax means.
   Does it mean '%[f()one string%]%[g()another one%]' (i.e. concatenate
   the result of applying string function f to 'one string' and the result
   of applying string function g to 'another one')?  Or does it mean
   '%[f()one string%[g()another one%]%]' (apply 'f' to concatenation of
   'one string' and the result of applying 'g' to 'another one')?
I was going to say that we already have something like that with %C, and
that the natural way (to me) is to apply them both, independently.  Case
modification functions (upper, lower, capitalized) could be treated the
same way -- as state changes (like pressing caps lock when typing text).

Which other text functions are we going to add which would break this
model?  The only thing I can think of right now is nesting such
functions themselves, e.g. when indenting a list in an indented
sub-paragraph in an indented paragraph.  Useful?

But then something else hit me: the line wrap function needs to consider
colour codes as having a length of zero.  Ugh.

René
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help