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
Junio C Hamano <gitster@pobox.com>
Date
Aug 11, 2015, 18:22 UTC
Message-ID
<xmqq8u9hsn0j.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1439129506-9989-5-git-send-email-Karthik.188@gmail.com>
Karthik Nayak <karthik.188@gmail.com> writes:
Show 5 quoted lines
> +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

> +	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.

> +	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.

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);
> +}
Previous: Karthik NayakNext: Karthik Nayak
Message 14 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.