git-2.22.0/utf8.c
/* The following two functions define the column width of an ISO 10646
 * character as follows:
 *
 *    - The null character (U+0000) has a column width of 0.
 *
 *    - Other C0/C1 control characters and DEL will lead to a return
 *      value of -1.
 *
 *    - Non-spacing and enclosing combining characters (general
 *      category code Mn or Me in the Unicode database) have a
 *      column width of 0.
 *
 *    - SOFT HYPHEN (U+00AD) has a column width of 1.
 *
 *    - Other format characters (general category code Cf in the Unicode
 *      database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
 *
 *    - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
 *      have a column width of 0.
 *
 *    - Spacing characters in the East Asian Wide (W) or East Asian
 *      Full-width (F) category as defined in Unicode Technical
 *      Report #11 have a column width of 2.
 *
 *    - All remaining characters (including all printable
 *      ISO 8859-1 and WGL4 characters, Unicode control characters,
 *      etc.) have a column width of 1.
 *
 * This implementation assumes that ucs_char_t characters are encoded
 * in ISO 10646.
 */
The following two functions define the column width of an ISO 10646
character as follows.

- The null character (U+0000) has a column width of 0.

- Other C0/C1 control characters and DEL will lead to a return
value of -1.

- Non-spacing and enclosing combining characters (general
category code Mn or Me in the Unicode database) have a
column width of 0.

- SOFT HYPHEN (U+00AD) has a column width of 1.

- Other format characters (general category code Cf in the Unicode
database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.

- Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
have a column width of 0.

- Spacing characters in the East Asian Wide (W) or East Asian
Full-width (F) category as defined in Unicode Technical
Report #11 have a column width of 2.

- All remaining characters (including all printable
ISO 8859-1 and WGL4 characters, Unicode control characters,
etc.) have a column width of 1.

This implementation assumes that ucs_char_t characters are encoded
in ISO 10646.
The following two functions define the column width of an ISO 10646 character as follows . - The null character ( U + 0000 ) has a column width of 0 . - Other C0 / C1 control characters and DEL will lead to a return value of - 1 . - Non - spacing and enclosing combining characters ( general category code Mn or Me in the Unicode database ) have a column width of 0 . - SOFT HYPHEN ( U + 00AD ) has a column width of 1 . - Other format characters ( general category code Cf in the Unicode database ) and ZERO WIDTH SPACE ( U + 200B ) have a column width of 0 . - Hangul Jamo medial vowels and final consonants ( U + 1160 - U + 11FF ) have a column width of 0 . - Spacing characters in the East Asian Wide ( W ) or East Asian Full - width ( F ) category as defined in Unicode Technical Report #11 have a column width of 2 . - All remaining characters ( including all printable ISO 8859 - 1 and WGL4 characters Unicode control characters etc . ) have a column width of 1 . This implementation assumes that ucs_char_t characters are encoded in ISO 10646 .
static int git_wcwidth(ucs_char_t ch)
{
#include "unicode-width.h"
	if (ch == 0)
		return 0;
	if (ch < 32 || (ch >= 0x7f && ch < 0xa0))
		return -1;
	if (bisearch(ch, zero_width, sizeof(zero_width)
				/ sizeof(struct interval) - 1))
		return 0;
	if (bisearch(ch, double_width, sizeof(double_width)
				/ sizeof(struct interval) - 1))
		return 2;
	return 1;
}
static int git_wcwidth ( ucs_char_t ch ) { #include " " if ( ch == 0 ) return 0 ; if ( ch < 32 || ( ch >= 0x7f && ch < 0xa0 ) ) return -1 ; if ( bisearch ( ch , zero_width , sizeof ( zero_width ) / sizeof ( struct interval ) - 1 ) ) return 0 ; if ( bisearch ( ch , double_width , sizeof ( double_width ) / sizeof ( struct interval ) - 1 ) ) return 2 ; return 1 ; }
The following two functions define the column width of an ISO 10646
 character as follows:
The following two functions define the column width of an ISO 10646 character as follows :
/*
	 * Sorted list of non-overlapping intervals of non-spacing characters,
	 */ /* test for 8-bit control characters */ /* binary search in table of non-spacing characters */ /* binary search in table of double width characters */