On Mon, Sep 7, 2015 at 12:03 PM, Junio C Hamano <[email protected]> wrote:
> Karthik Nayak <[email protected]> writes:
>
>> diff --git a/Documentation/git-for-each-ref.txt
>> b/Documentation/git-for-each-ref.txt
>> index d039f40..c5154bb 100644
>> --- a/Documentation/git-for-each-ref.txt
>> +++ b/Documentation/git-for-each-ref.txt
>> @@ -128,13 +128,14 @@ color::
>> are described in `color.branch.*`.
>>
>> align::
>> - Left-, middle-, or right-align the content between %(align:..)
>> + Left-, middle-, or right-align the content between %(align:...)
>> and %(end). Followed by `:<width>,<position>`, where the
>> `<position>` is either left, right or middle and `<width>` is
>> the total length of the content with alignment. If the
>> contents length is more than the width then no alignment is
>> performed. If used with '--quote' everything in between
>> - %(align:..) and %(end) is quoted.
>> + %(align:...) and %(end) is quoted, but if nested then only the
>> + topmost level performs quoting.
>
> I am not sure if the description of quote belongs to "align". Isn't
> the general rule at the endgame when there are more opening things
> that would buffer its effect up to the corresponding %(end):
>
> - Some atoms like %(align) and %(if) always require a matching
> %(end). We call them "opening atoms" and sometimes denote them
> as %($open).
>
> - When a scripting language specific quoting is in effect, except
> for opening atoms, replacement from every %(atom) is quoted when
> and only when it appears at the top-level (that is, when it
> appears outside %($open)...%(end)).
>
> - When a scripting language specific quoting is in effect,
> everything between a top-level opening atom and its matching
> %(end) is evaluated according to the semantics of the opening
> atom and its result is quoted.
>
> To put the third item above in a different way, a matching
> %($open)... %(end) pair behaves as if it is a single normal atom,
> from the point of view of the quoting rule. All top-level atoms are
> invidivually quoted, whether they are normal atoms or open/end pairs.
> And that rule is not limited to %(align).
>
> I am flexible with the terminology, but the point is that I think
> the quoting rules are better be specified _outside_ the description
> of a particular atom, but as a general rule.
>
I definitely agree, but like Matthieu said, corrently we have only
one such atom and it makes sense to note this behaviour under that.
When we get %(if) to work we could move this over to a more general
section?
>> diff --git a/builtin/tag.c b/builtin/tag.c
>> index 9fa1400..f55dfda 100644
>> --- a/builtin/tag.c
>> +++ b/builtin/tag.c
>> @@ -43,8 +43,8 @@ static int list_tags(struct ref_filter *filter, struct
>> ref_sorting *sorting, con
>>
>> if (!format) {
>> if (filter->lines)
>> - format = to_free =
>> xstrfmt("%%(align:15,left)%%(refname:short)%%(end) %%(contents:lines=%d)",
>> - filter->lines);
>> + format = to_free =
>> xstrfmt("%%(align:15,left)%%(refname:short)%%(end) "
>> + "%%(contents:lines=%d)",
>> filter->lines);
>
> This line still looks overlong. Would it help to stop spelling this
> as a double "a = b = overlong expression" assignment?
>
I'm not sure, I get what you mean.
>> /*
>> * Perform quote formatting when the stack element is that of
>> - * a modifier atom and right above the first stack element.
>> + * a supporting atom. If nested then perform quote formatting
>> + * only on the topmost supporting atom.
>> */
>> if (!state->stack->prev->prev) {
>> quote_formatting(&s, current->output.buf, state->quote_style);
>> @@ -261,6 +262,22 @@ static void end_atom_handler(struct atom_value *atomv,
>> struct ref_formatting_sta
>> pop_stack_element(&state->stack);
>> }
>>
>> +static int match_atom_name(const char *name, const char *atom_name, const
>> char **val)
>> +{
>> + const char *body;
>> +
>> + if (!skip_prefix(name, atom_name, &body))
>> + return 0; /* doesn't even begin with "atom_name" */
>> + if (!body[0] || !body[1]) {
>> + *val = NULL; /* %(atom_name) and no customization */
>> + return 1;
>> + }
>
> This if condition is puzzling. !body[0] would mean the name was
> exactly atom_name, which is what you want to catch.
>
> But the other part does not make any sense to me. what does
> (body[0] != '\0' && !body[1]) mean? atom_name asked for was "align"
> and name was "aligna"? That is not "%(align) and no customization".
>
The idea was to ensure that the atom doesn't end at the ':'.
>> + if (body[0] != ':')
>> + return 0; /* "atom_namefoo" is not "atom_name" or
>> "atom_name:..." */
>
> This one makes sense to me.
>
>> + *val = body + 1; /* "atomname:val" */
>
> Spell that "atom_name:val" perhaps?
Yeah will do.
--
Regards,
Karthik Nayak
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html