git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v10 04/13] utf8: add function to align a string into given strbuf

From
Karthik Nayak <karthik.188@gmail.com>
Date
Aug 12, 2015, 13:41 UTC
Message-ID
<CAOLa=ZRL-WV=9Q+_fo7wcbqT7jZVA02oYo8SfDcLrev=qsUvLg@mail.gmail.com>
In-Reply-To
<xmqq8u9hsn0j.fsf@gitster.dls.corp.google.com>
On Tue, Aug 11, 2015 at 11:52 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 11 quoted lines
> Karthik Nayak <karthik.188@gmail.com> writes:
>
>> +void strbuf_utf8_align(struct strbuf *buf, align_type position, unsigned int width,
>> +                    const char *s)
>> +{
>> +     int display_len = utf8_strnwidth(s, strlen(s), 0);
>> +     int utf8_compenstation = strlen(s) - display_len;
>
> compensation, perhaps?  But notice you are running two strlen and
> then also a call to utf8-strnwidth here already, and then
>

compensation it is. probably have a single strlen() call and set the value to another variable.

Show 16 quoted lines
>> +     if (!strlen(s))
>> +             return;
>
> you return here without doing anything.
>
> Worse yet, this logic looks very strange.  If you give it a width of
> 8 because you want to align like-item on each record at that column,
> a record with 1-display-column item will be shown in 8-display-column
> with 7 SP padding (either at the beginning, or at the end, or on
> both ends to center).  If it happens to be an empty string, the entire
> 8-display-column disappears.
>
> Is that really what you meant to do?  The logic does not make much
> sense to me, even though the code may implement that logic correctly
> and clearly.
>

Not sure what you meant. But this does not act on empty strings and that was intentional. It does not make sense to have an alignment on an empty string, where the caller could themselves just do a `strbuf_addchars(&buf, " ", width)`.

Show 9 quoted lines
>> +     if (display_len >= width) {
>> +             strbuf_addstr(buf, s);
>> +             return;
>> +     }
>
> Mental note: this function values the information more than
> presentation; it refuses to truncate (to lose information) and
> instead accepts jaggy output.  OK.
>
With regards to its usage in ref-filter, this is needed, don't you think?
Show 8 quoted lines
>> +     if (position == ALIGN_LEFT)
>> +             strbuf_addf(buf, "%-*s", width + utf8_compenstation, s);
>> +     else if (position == ALIGN_MIDDLE) {
>> +             int left = (width - display_len)/2;
>> +             strbuf_addf(buf, "%*s%-*s", left, "", width - left + utf8_compenstation, s);
>> +     } else if (position == ALIGN_RIGHT)
>> +             strbuf_addf(buf, "%*s", width + utf8_compenstation, s);
>> +}
Thanks!
-- 
Regards,
Karthik Nayak
Previous: Junio C HamanoNext: Junio C Hamano
Message 15 of 40 in “port tag.c to use ref-filter APIs”
  1. 00/13 port tag.c to use ref-filter APIsKarthik Nayak, Aug 9, 2015
  2. 01/13 ref-filter: move `struct atom_value` to ref-filter.cKarthik Nayak, Aug 9, 2015
  3. 02/13 ref-filter: print output to strbuf for formattingKarthik Nayak, Aug 9, 2015
  4. Junio C HamanoAug 11, 2015
  5. Karthik NayakAug 12, 2015
  6. Junio C HamanoAug 12, 2015
  7. Karthik NayakAug 12, 2015
  8. Junio C HamanoAug 11, 2015
  9. Karthik NayakAug 12, 2015
  10. 03/13 ref-filter: introduce ref_formatting_stateKarthik Nayak, Aug 9, 2015
  11. Junio C HamanoAug 11, 2015
  12. Karthik NayakAug 12, 2015
  13. 04/13 utf8: add function to align a string into given strbufKarthik Nayak, Aug 9, 2015
  14. Junio C HamanoAug 11, 2015
  15. Karthik NayakAug 12, 2015
  16. Junio C HamanoAug 12, 2015
  17. Karthik NayakAug 12, 2015
  18. Eric SunshineAug 13, 2015
  19. Karthik NayakAug 13, 2015
  20. Junio C HamanoAug 14, 2015
  21. Duy NguyenAug 15, 2015
  22. 05/13 ref-filter: implement an `align` atomKarthik Nayak, Aug 9, 2015
  23. Junio C HamanoAug 11, 2015
  24. Karthik NayakAug 12, 2015
  25. Junio C HamanoAug 12, 2015
  26. Karthik NayakAug 12, 2015
  27. Junio C HamanoAug 12, 2015
  28. Karthik NayakAug 14, 2015
  29. Junio C HamanoAug 14, 2015
  30. Eric SunshineAug 13, 2015
  31. Karthik NayakAug 13, 2015
  32. 06/13 ref-filter: add option to filter only tagsKarthik Nayak, Aug 9, 2015
  33. 07/13 ref-filter: support printing N lines from tag annotationKarthik Nayak, Aug 9, 2015
  34. 08/13 ref-filter: add support to sort by versionKarthik Nayak, Aug 9, 2015
  35. 09/13 ref-filter: add option to match literal patternKarthik Nayak, Aug 9, 2015
  36. 10/13 tag.c: use 'ref-filter' data structuresKarthik Nayak, Aug 9, 2015
  37. 10/13 tag.c: use 'ref-filter' data structuresKarthik Nayak, Aug 9, 2015
  38. 11/13 tag.c: use 'ref-filter' APIsKarthik Nayak, Aug 9, 2015
  39. 12/13 tag.c: implement '--format' optionKarthik Nayak, Aug 9, 2015
  40. 13/13 tag.c: implement '--merged' and '--no-merged' optionsKarthik Nayak, Aug 9, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.