From 4b15b54d680bbb6e97673e67085ed4f70b612ccb Mon Sep 17 00:00:00 2001 From: duerst Date: Mon, 14 Mar 2016 09:39:54 +0000 Subject: [PATCH] * include/ruby/oniguruma.h, enc/unicode.c: Adjusting flag assignments and macros to work with unified CaseMappingSpecials array. (with Kimihito Matsui) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54101 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ enc/unicode.c | 7 +++++++ include/ruby/oniguruma.h | 36 +++++++++++++++++------------------- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3e33e3db5d..5928f66580 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Mar 14 18:39:53 2016 Martin Duerst + + * include/ruby/oniguruma.h, enc/unicode.c: Adjusting flag assignments + and macros to work with unified CaseMappingSpecials array. + (with Kimihito Matsui) + Mon Mar 14 16:53:37 2016 Nobuyoshi Nakada * compile.c (compile_named_capture_assign): optimize named capture diff --git a/enc/unicode.c b/enc/unicode.c index d4b2c2c427..f4487e40d5 100644 --- a/enc/unicode.c +++ b/enc/unicode.c @@ -137,6 +137,7 @@ code3_equal(const OnigCodePoint *x, const OnigCodePoint *y) return 1; } +/* macros to shorten "enc/unicode/casefold.h", undefined immediately after including the file */ #define U ONIGENC_CASE_UPCASE #define D ONIGENC_CASE_DOWNCASE #define F ONIGENC_CASE_FOLD @@ -157,6 +158,12 @@ code3_equal(const OnigCodePoint *x, const OnigCodePoint *y) #undef I #undef L +/* macros related to ONIGENC_CASE flags */ +/* defined here because not used in other files */ +#define OnigSpecialIndexMask (((1<>OnigSpecialIndexShift) + #include "enc/unicode/name2ctype.h" #define CODE_RANGES_NUM numberof(CodeRanges) diff --git a/include/ruby/oniguruma.h b/include/ruby/oniguruma.h index 2411e0f507..b087ef829f 100644 --- a/include/ruby/oniguruma.h +++ b/include/ruby/oniguruma.h @@ -121,39 +121,37 @@ typedef ptrdiff_t OnigPosition; * * Subfields (starting with 0 at LSB): * 0-2: Code point count in casefold.h - * 3-9: Index into TitleCase array in casefold.h - * 10-15, 18-20: Case mapping flags + * 3-12: Index into SpecialCaseMapping array in casefold.h + * 13-22: Case folding/mapping flags */ typedef unsigned int OnigCaseFoldType; /* case fold flag */ ONIG_EXTERN OnigCaseFoldType OnigDefaultCaseFoldFlag; /* bits for actual code point count; 3 bits is more than enough, currently only 2 used */ -#define OnigCodePointMask (0x7) +#define OnigCodePointMaskWidth 3 +#define OnigCodePointMask ((1<>OnigTitlecaseShift) +/* 10 bits provide 1024 values */ +#define OnigSpecialIndexShift 3 +#define OnigSpecialIndexWidth 10 -#define OnigTitlecaseIndex - -#define ONIGENC_CASE_TITLECASE (1<<10) /* has/needs titlecase mapping */ -#define ONIGENC_CASE_UPCASE (1<<11) /* has/needs uppercase mapping */ -#define ONIGENC_CASE_DOWNCASE (1<<12) /* has/needs lowercase mapping */ -#define ONIGENC_CASE_FOLD (1<<13) /* has/needs case folding */ -#define ONIGENC_CASE_SPECIAL (1<<14) /* has/needs special mapping from separate table */ -#define ONIGENC_CASE_MODIFIED (1<<15) /* data has been modified */ -#define ONIGENC_CASE_ASCII_ONLY (1<<18) /* only modify ASCII range */ -#define ONIGENC_CASE_FOLD_LITHUANIAN (1<<19) /* needs Lithuanian-specific mapping */ +#define ONIGENC_CASE_UPCASE (1<<13) /* has/needs uppercase mapping */ +#define ONIGENC_CASE_DOWNCASE (1<<14) /* has/needs lowercase mapping */ +#define ONIGENC_CASE_TITLECASE (1<<15) /* has/needs (special) titlecase mapping */ +#define ONIGENC_CASE_SPECIAL_OFFSET 3 /* offset in bytes from ONIGENC_CASE to ONIGENC_CASE_SPECIAL */ +#define ONIGENC_CASE_UP_SPECIAL (1<<16) /* has special upcase mapping */ +#define ONIGENC_CASE_DOWN_SPECIAL (1<<17) /* has special downcase mapping */ +#define ONIGENC_CASE_MODIFIED (1<<18) /* data has been modified */ +#define ONIGENC_CASE_FOLD (1<<19) /* has/needs case folding */ #define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20) /* needs mapping specific to Turkic languages; better not change original value! */ +#define ONIGENC_CASE_FOLD_LITHUANIAN (1<<21) /* needs Lithuanian-specific mapping */ +#define ONIGENC_CASE_ASCII_ONLY (1<<22) /* only modify ASCII range */ #define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30) /* better not change original value! */ #define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR