diff options
| author | Mattias Andrée <maandree@kth.se> | 2021-09-08 23:24:34 +0200 | 
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2021-09-08 23:24:39 +0200 | 
| commit | 84b8038689a1b289aeaf0efb2c0545dec79c1888 (patch) | |
| tree | c81de8773a3b09e137b82ca1686dc23e31118fda | |
| parent | Fix typo (diff) | |
| download | libnumtext-84b8038689a1b289aeaf0efb2c0545dec79c1888.tar.gz libnumtext-84b8038689a1b289aeaf0efb2c0545dec79c1888.tar.bz2 libnumtext-84b8038689a1b289aeaf0efb2c0545dec79c1888.tar.xz | |
misc
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | common.h | 8 | ||||
| -rw-r--r-- | libnumtext_num2text.c | 10 | ||||
| -rw-r--r-- | libnumtext_remove_separators.c | 5 | ||||
| -rw-r--r-- | swedish.test.c | 10 | 
5 files changed, 22 insertions, 13 deletions
| @@ -38,7 +38,7 @@ TEST_OBJ =\  all: libnumtext.a libnumtext.$(LIBEXT)  $(OBJ): $(HDR)  $(LOBJ): $(HDR) -$(TEST_OBJ): libnumtext.h +$(TEST_OBJ): $(HDR)  $(TEST): libnumtext.a  .c.o: @@ -28,7 +28,13 @@  #endif -#define UNICODE_MINUS "−" +#define UNICODE_MINUS "−" /* \xe2\x88\x92 */ +#define UNICODE_NBSP  " " /* \xc2\xa0 */ + +#define IS_CHAR__(S, LEN, C) ((LEN) >= sizeof(C) - 1 && !memcmp((S), (C), sizeof(C) - 1)) + +#define IS_UNICODE_MINUS(S, LEN) IS_CHAR__(S, LEN, UNICODE_MINUS) +#define IS_UNICODE_NBSP(S, LEN)  IS_CHAR__(S, LEN, UNICODE_NBSP)  #define IS_UTF8_CHAR_CONTINUATION(B) (((B) & 0xC0) == 0x80) diff --git a/libnumtext_num2text.c b/libnumtext_num2text.c index 50dc6ca..25c5429 100644 --- a/libnumtext_num2text.c +++ b/libnumtext_num2text.c @@ -14,13 +14,11 @@ libnumtext_num2text(char *outbuf, size_t outbuf_size, const char *num, size_t nu  	params.trailing_zeroes = 0;  	i = 0; -	if (i < num_len) { -		if (num[i] == '+' || num[i] == '-') { +	if (num_len) { +		if (num[0] == '+' || num[0] == '-')  			i += 1; -		} else if (num_len >= sizeof(UNICODE_MINUS)) { -			if (!strncmp(&num[0], UNICODE_MINUS, sizeof(UNICODE_MINUS) - 1)) -				i += sizeof(UNICODE_MINUS) - 1; -		} +		else if (IS_UNICODE_MINUS(num, num_len)) +			i += sizeof(UNICODE_MINUS) - 1;  	}  	params.sign_length = i;  	if (i == num_len) diff --git a/libnumtext_remove_separators.c b/libnumtext_remove_separators.c index e92c800..cbeb80a 100644 --- a/libnumtext_remove_separators.c +++ b/libnumtext_remove_separators.c @@ -13,6 +13,11 @@ libnumtext_remove_separators(char *outbuf, size_t outbuf_size, const char *num,  	case LIBNUMTEXT_SWEDISH:  		for (; num_len--; num++) {  			if (*num != ' ' && *num != '\'' && *num != '.') { +				if (IS_UNICODE_NBSP(num, num_len)) { +					num = &num[sizeof(UNICODE_NBSP) - 2]; +					num_len -= sizeof(UNICODE_NBSP) - 2; +					continue; +				}  				if (outbuf_size) {  					*p++ = *num;  					outbuf_size--; diff --git a/swedish.test.c b/swedish.test.c index d59013d..4e2d00b 100644 --- a/swedish.test.c +++ b/swedish.test.c @@ -590,7 +590,7 @@ static struct test {  	{"100000", 0, "hundratusende", F(IMPLICIT_ONE) | ORD, 0},  	{"101000", 0, "hundraettusen", F(IMPLICIT_ONE), 0},  	{"101000", 0, "hundraettusende", F(IMPLICIT_ONE) | ORD, 0}, -	{"300000", 0, "trehundratusen", F(IMPLICIT_ONE), 0}, +	{"300"UNICODE_NBSP"000", 0, "trehundratusen", F(IMPLICIT_ONE), 0},  	{"1""000000", 0, "enmiljon", F(IMPLICIT_ONE), 0},  	{"1'000 000", 0, "enmiljonte", F(IMPLICIT_ONE) | ORD, 0},  	{"1.200.000", 0, "enmiljontvåhundratusen", F(IMPLICIT_ONE), 0}, @@ -602,17 +602,17 @@ static struct test {  	CARD_DENOMS("1""000000""000000", 0, "enbiljon", F(IMPLICIT_ONE), 0),  	{"1", 4 * 6, "enkvadriljon", F(IMPLICIT_ONE), 0},  	{"1", 100 * 6, "encentiljon", F(IMPLICIT_ONE), 0}, -	{"+0", 0, "Plus Noll", F(PASCAL_CASE), 0}, +	{"+0", 0, "Plus Noll", F(MONEY_CASE), 0},  	{"+0", 0, "PLUS NOLL", F(UPPER_CASE), 0},  	{"+0", 0, "Plus noll", F(SENTENCE_CASE), 0}, -	{"-0", 0, "Minus Noll", F(PASCAL_CASE), 0}, +	{"-0", 0, "Minus Noll", F(MONEY_CASE), 0},  	{"-0", 0, "MINUS NOLL", F(UPPER_CASE), 0},  	{"-0", 0, "Minus noll", F(SENTENCE_CASE), 0}, -	{"54 248", 0, "FemtioFyratusenTvåhundraFyrtioÅtta", F(PASCAL_CASE), 0}, +	{"54 248", 0, "FemtioFyratusenTvåhundraFyrtioÅtta", F(MONEY_CASE), 0},  	{"54 248", 0, "FEMTIOFYRATUSENTVÅHUNDRAFYRTIOÅTTA", F(UPPER_CASE), 0},  	{"54'248", 0, "Femtiofyratusentvåhundrafyrtioåtta", F(SENTENCE_CASE), 0},  	{"54'248", 0, "femtio-fyratusen-tvåhundra-fyrtio-åtta", F(HYPHENATED), 0}, -	{"54.248", 0, "Femtio-Fyratusen-Tvåhundra-Fyrtio-Åtta", F(HYPHENATED) | F(PASCAL_CASE), 0}, +	{"54.248", 0, "Femtio-Fyratusen-Tvåhundra-Fyrtio-Åtta", F(HYPHENATED) | F(MONEY_CASE), 0},  	{"54.248", 0, "FEMTIO-FYRATUSEN-TVÅHUNDRA-FYRTIO-ÅTTA", F(HYPHENATED) | F(UPPER_CASE), 0},  	{"54248", 0, "Femtio-fyratusen-tvåhundra-fyrtio-åtta", F(HYPHENATED) | F(SENTENCE_CASE), 0},  	{"100", 0, "etthundra", F(EXPLICIT_TRIPLETS), 0}, | 
