mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
Merge pull request #904 from RaiKoHoff/New_Development
Updates: Scintilla (NimLexer) and Onigmo (v6.2.0)
This commit is contained in:
commit
f3c93dedcc
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.sh text eol=lf
|
||||
*.bat text eol=crlf
|
||||
@ -1 +1 @@
|
||||
1608
|
||||
1611
|
||||
|
||||
@ -1346,7 +1346,7 @@ BOOL DriveBox_SelectDrive(HWND hwnd,LPCWSTR lpszPath)
|
||||
}
|
||||
|
||||
// Don't select anything
|
||||
SendMessage(hwnd,CB_SETCURSEL,(WPARAM)-1,0);
|
||||
SendMessage(hwnd,CB_SETCURSEL,(WPARAM)1,0);
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
14
onigmo/.gitignore
vendored
14
onigmo/.gitignore
vendored
@ -38,16 +38,30 @@
|
||||
/build*/
|
||||
|
||||
# autotools generated files
|
||||
/aclocal.m4
|
||||
/autom4te.cache
|
||||
/compile
|
||||
/config.guess
|
||||
/config.h
|
||||
/config.h.in
|
||||
/config.log
|
||||
/config.status
|
||||
/config.sub
|
||||
/configure
|
||||
/depcomp
|
||||
/install-sh
|
||||
/libtool
|
||||
/ltmain.sh
|
||||
/m4/*.m4
|
||||
/missing
|
||||
/onigmo-config
|
||||
/onigmo.pc
|
||||
/Makefile
|
||||
/Makefile.in
|
||||
/sample/Makefile
|
||||
/sample/Makefile.in
|
||||
/stamp-h1
|
||||
/test-driver
|
||||
|
||||
# generated executable files
|
||||
/enc/mktable
|
||||
|
||||
@ -1,5 +1,43 @@
|
||||
History of Onigmo (Oniguruma-mod)
|
||||
|
||||
2019/01/30: Version 6.2.0
|
||||
|
||||
2019/01/30: [dist] Update LTVERSION to "6:5:0".
|
||||
2019/01/30: [dist] Delete all autotools generated files from the repository.
|
||||
(PR #115)
|
||||
2019/01/30: [test] Update tests. (PR #127)
|
||||
2019/01/30: [impl] Add USE_CASE_MAP_API configuration. (PR #125)
|
||||
2019/01/29: [test] Add some tests. (PR #124)
|
||||
2019/01/29: [impl] Revise the code for searching. (PR #123)
|
||||
2019/01/28: [bug] Fix initialization of the table for quick search.
|
||||
This was caused by PR #113.
|
||||
(Issue #120) (PR #121)
|
||||
2019/01/26: [spec] (thanks omochimetaru)
|
||||
Make it possible to extend UTF-8 to 31 bits. (PR #111)
|
||||
2019/01/25: [dist] Remove minor version from the py command. (PR #119)
|
||||
2019/01/25: [impl] Avoid negative character. (PR #118)
|
||||
2019/01/25: [impl] Fix lgtm.com warnings. (PR #117)
|
||||
2019/01/25: [bug] Fix that "ss" in look-behind causes syntax error.
|
||||
(Issue #92) (PR #116)
|
||||
2019/01/24: [bug] Fix performance regression if quantifier lower bound is 1.
|
||||
(Issue #100) (PR #114)
|
||||
2019/01/24: [bug] Fix performance problem with /k/i and /s/i.
|
||||
(Issue #97) (PR #113)
|
||||
2019/01/24: [new] Update Unicode data: Unicode 11.0.0, Emoji 11.0 (PR #112)
|
||||
2019/01/24: [bug] Import the latest code from Ruby (PR #112)
|
||||
2019/01/24: [impl] (thanks aycabta)
|
||||
Support gperf 3.1 with backward compatibility. (PR #101)
|
||||
2018/12/10: [dist] (thanks Xavier RENE-CORAIL)
|
||||
Add LGTM.com code quality badges. (PR #108)
|
||||
2018/11/10: [impl] (thanks Urabe, Shyouhei)
|
||||
Avoid negative character. (PR #107)
|
||||
2018/01/19: [impl] (thanks Tom Lord)
|
||||
Remove unused variable. (PR #99)
|
||||
2017/09/27: [spec] Import Ruby r58965
|
||||
Change max byte length of UTF-8 to 4 bytes.
|
||||
2017/09/26: [new] Update Unicode data: Unicode 10.0.0, Emoji 5.0 (PR #93)
|
||||
|
||||
|
||||
2017/09/26: Version 6.1.3
|
||||
|
||||
2017/09/26: [dist] Update LTVERSION to "6:4:0".
|
||||
|
||||
@ -92,9 +92,10 @@ Install
|
||||
|
||||
Case 1: Unix and Cygwin platform
|
||||
|
||||
1. ./configure
|
||||
2. make
|
||||
3. make install
|
||||
1. ./autogen.sh (If `configure` doesn't exist.)
|
||||
2. ./configure
|
||||
3. make
|
||||
4. make install
|
||||
|
||||
* uninstall
|
||||
|
||||
|
||||
@ -32,9 +32,10 @@ Install
|
||||
|
||||
### Case 1: Unix and Cygwin platform
|
||||
|
||||
1. `./configure`
|
||||
2. `make`
|
||||
3. `make install`
|
||||
1. `./autogen.sh` (If `configure` doesn't exist.)
|
||||
2. `./configure`
|
||||
3. `make`
|
||||
4. `make install`
|
||||
|
||||
* test
|
||||
|
||||
|
||||
@ -54,7 +54,11 @@ OnigEncodingDefine(ascii, ASCII) = {
|
||||
onigenc_not_support_get_ctype_code_range,
|
||||
onigenc_single_byte_left_adjust_char_head,
|
||||
onigenc_always_true_is_allowed_reverse_match,
|
||||
#ifdef USE_CASE_MAP_API
|
||||
onigenc_single_byte_ascii_only_case_map,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
ENCINDEX_ASCII,
|
||||
ONIGENC_FLAG_NONE,
|
||||
};
|
||||
|
||||
@ -651,6 +651,7 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
|
||||
return n;
|
||||
}
|
||||
|
||||
#ifdef USE_CASE_MAP_API
|
||||
/* length in bytes for three characters in UTF-32; e.g. needed for ffi (U+FB03) */
|
||||
#define CASE_MAPPING_SLACK 12
|
||||
#define MODIFIED (flags |= ONIGENC_CASE_MODIFIED)
|
||||
@ -678,15 +679,13 @@ onigenc_unicode_case_map(OnigCaseFoldType* flagP,
|
||||
*pp += codepoint_length;
|
||||
|
||||
if (code <= 'z') { /* ASCII comes first */
|
||||
if (code >= 'a' && code <= 'z') {
|
||||
if (code >= 'a' /*&& code <= 'z'*/) {
|
||||
if (flags & ONIGENC_CASE_UPCASE) {
|
||||
MODIFIED;
|
||||
if (flags & ONIGENC_CASE_FOLD_TURKISH_AZERI && code == 'i')
|
||||
code = I_WITH_DOT_ABOVE;
|
||||
else {
|
||||
code -= 'a';
|
||||
code += 'A';
|
||||
}
|
||||
else
|
||||
code -= 'a' - 'A';
|
||||
}
|
||||
}
|
||||
else if (code >= 'A' && code <= 'Z') {
|
||||
@ -796,6 +795,7 @@ SpecialsCopy:
|
||||
*flagP = flags;
|
||||
return (int )(to - to_start);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
const char onigenc_unicode_version_string[] =
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/* ANSI-C code produced by gperf version 3.1 */
|
||||
/* ANSI-C code produced by gperf version 3.1 */
|
||||
/* Command-line: gperf -7 -c -j1 -i1 -t -C -P -T -H uniname2ctype_hash -Q uniname2ctype_pool -N uniname2ctype_p */
|
||||
#ifndef USE_UNICODE_PROPERTIES
|
||||
/* Computed positions: -k'1,3' */
|
||||
@ -36382,7 +36382,7 @@ uniname2ctype_hash (register const char *str, register size_t len)
|
||||
#ifndef USE_UNICODE_PROPERTIES
|
||||
return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]];
|
||||
#else /* USE_UNICODE_PROPERTIES */
|
||||
register unsigned int hval = len;
|
||||
register unsigned int hval = (unsigned int)len;
|
||||
|
||||
switch (hval)
|
||||
{
|
||||
|
||||
@ -32,7 +32,11 @@ OnigEncodingDefine(us_ascii, US_ASCII) = {
|
||||
onigenc_not_support_get_ctype_code_range,
|
||||
onigenc_single_byte_left_adjust_char_head,
|
||||
onigenc_always_true_is_allowed_reverse_match,
|
||||
#ifdef USE_CASE_MAP_API
|
||||
onigenc_single_byte_ascii_only_case_map,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
ENCINDEX_US_ASCII,
|
||||
ONIGENC_FLAG_NONE,
|
||||
};
|
||||
|
||||
@ -37,13 +37,19 @@
|
||||
#endif
|
||||
|
||||
#define USE_INVALID_CODE_SCHEME
|
||||
/* #define USE_UTF8_31BITS */
|
||||
|
||||
#ifdef USE_INVALID_CODE_SCHEME
|
||||
/* virtual codepoint values for invalid encoding byte 0xfe and 0xff */
|
||||
# define INVALID_CODE_FE 0xfffffffe
|
||||
# define INVALID_CODE_FF 0xffffffff
|
||||
#endif
|
||||
|
||||
#ifndef USE_UTF8_31BITS
|
||||
#define VALID_CODE_LIMIT 0x0010ffff
|
||||
#else
|
||||
#define VALID_CODE_LIMIT 0x7fffffff
|
||||
#endif
|
||||
|
||||
#define utf8_islead(c) ((UChar )((c) & 0xc0) != 0x80)
|
||||
|
||||
@ -63,14 +69,19 @@ static const int EncLen_UTF8[] = {
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
#ifndef USE_UTF8_31BITS
|
||||
4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
|
||||
#else
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
FAILURE = -2,
|
||||
ACCEPT,
|
||||
S0, S1, S2, S3,
|
||||
S4, S5, S6, S7
|
||||
S4, S5, S6, S7,
|
||||
S8, S9,S10,S11,
|
||||
} state_t;
|
||||
#define A ACCEPT
|
||||
#define F FAILURE
|
||||
@ -91,7 +102,11 @@ static const signed char trans[][0x100] = {
|
||||
/* c */ F, F, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
/* d */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
/* e */ 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3,
|
||||
#ifndef USE_UTF8_31BITS
|
||||
/* f */ 5, 6, 6, 6, 7, F, F, F, F, F, F, F, F, F, F, F
|
||||
#else
|
||||
/* f */ 5, 6, 6, 6, 6, 6, 6, 6, 8, 9, 9, 9,10,11, F, F
|
||||
#endif
|
||||
},
|
||||
{ /* S1 0 1 2 3 4 5 6 7 8 9 a b c d e f */
|
||||
/* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
@ -219,6 +234,80 @@ static const signed char trans[][0x100] = {
|
||||
/* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
|
||||
},
|
||||
#ifdef USE_UTF8_31BITS
|
||||
{ /* S8 0 1 2 3 4 5 6 7 8 9 a b c d e f */
|
||||
/* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 8 */ F, F, F, F, F, F, F, F, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* 9 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* a */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* b */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
|
||||
},
|
||||
{ /* S9 0 1 2 3 4 5 6 7 8 9 a b c d e f */
|
||||
/* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 8 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* 9 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* a */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* b */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
|
||||
},
|
||||
{ /* S10 0 1 2 3 4 5 6 7 8 9 a b c d e f */
|
||||
/* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 8 */ F, F, F, F, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
/* 9 */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
/* a */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
/* b */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
/* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
|
||||
},
|
||||
{ /* S11 0 1 2 3 4 5 6 7 8 9 a b c d e f */
|
||||
/* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* 8 */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
/* 9 */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
/* a */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
/* b */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
/* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
|
||||
/* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
|
||||
},
|
||||
#endif // USE_UTF8_31BITS
|
||||
};
|
||||
#undef A
|
||||
#undef F
|
||||
@ -244,8 +333,24 @@ mbc_enc_len(const UChar* p, const UChar* e, OnigEncoding enc ARG_UNUSED)
|
||||
|
||||
if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-3);
|
||||
s = trans[s][*p++];
|
||||
|
||||
#ifndef USE_UTF8_31BITS
|
||||
return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(4) :
|
||||
ONIGENC_CONSTRUCT_MBCLEN_INVALID();
|
||||
#else
|
||||
if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(4) :
|
||||
ONIGENC_CONSTRUCT_MBCLEN_INVALID();
|
||||
|
||||
if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-4);
|
||||
s = trans[s][*p++];
|
||||
if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(5) :
|
||||
ONIGENC_CONSTRUCT_MBCLEN_INVALID();
|
||||
|
||||
if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-5);
|
||||
s = trans[s][*p++];
|
||||
return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(6) :
|
||||
ONIGENC_CONSTRUCT_MBCLEN_INVALID();
|
||||
#endif
|
||||
}
|
||||
|
||||
static int
|
||||
@ -308,7 +413,13 @@ code_to_mbclen(OnigCodePoint code, OnigEncoding enc ARG_UNUSED)
|
||||
if ((code & 0xffffff80) == 0) return 1;
|
||||
else if ((code & 0xfffff800) == 0) return 2;
|
||||
else if ((code & 0xffff0000) == 0) return 3;
|
||||
#ifndef USE_UTF8_31BITS
|
||||
else if (code <= VALID_CODE_LIMIT) return 4;
|
||||
#else
|
||||
else if ((code & 0xffe00000) == 0) return 4;
|
||||
else if ((code & 0xfc000000) == 0) return 5;
|
||||
else if (code <= VALID_CODE_LIMIT) return 6;
|
||||
#endif
|
||||
#ifdef USE_INVALID_CODE_SCHEME
|
||||
else if (code == INVALID_CODE_FE) return 1;
|
||||
else if (code == INVALID_CODE_FF) return 1;
|
||||
@ -337,11 +448,33 @@ code_to_mbc(OnigCodePoint code, UChar *buf, OnigEncoding enc ARG_UNUSED)
|
||||
*p++ = (UChar )(((code>>12) & 0x0f) | 0xe0);
|
||||
*p++ = UTF8_TRAILS(code, 6);
|
||||
}
|
||||
#ifndef USE_UTF8_31BITS
|
||||
else if (code <= VALID_CODE_LIMIT) {
|
||||
*p++ = (UChar )(((code>>18) & 0x07) | 0xf0);
|
||||
*p++ = UTF8_TRAILS(code, 12);
|
||||
*p++ = UTF8_TRAILS(code, 6);
|
||||
}
|
||||
#else
|
||||
else if ((code & 0xffe00000) == 0) {
|
||||
*p++ = (UChar )(((code>>18) & 0x07) | 0xf0);
|
||||
*p++ = UTF8_TRAILS(code, 12);
|
||||
*p++ = UTF8_TRAILS(code, 6);
|
||||
}
|
||||
else if ((code & 0xfc000000) == 0) {
|
||||
*p++ = (UChar )(((code>>24) & 0x03) | 0xf8);
|
||||
*p++ = UTF8_TRAILS(code, 18);
|
||||
*p++ = UTF8_TRAILS(code, 12);
|
||||
*p++ = UTF8_TRAILS(code, 6);
|
||||
}
|
||||
else if (code <= VALID_CODE_LIMIT) {
|
||||
*p++ = (UChar )(((code>>30) & 0x01) | 0xfc);
|
||||
*p++ = UTF8_TRAILS(code, 24);
|
||||
*p++ = UTF8_TRAILS(code, 18);
|
||||
*p++ = UTF8_TRAILS(code, 12);
|
||||
*p++ = UTF8_TRAILS(code, 6);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_INVALID_CODE_SCHEME
|
||||
else if (code == INVALID_CODE_FE) {
|
||||
*p = 0xfe;
|
||||
@ -421,7 +554,11 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
|
||||
OnigEncodingDefine(utf_8, UTF_8) = {
|
||||
mbc_enc_len,
|
||||
"UTF-8", /* name */
|
||||
#ifndef USE_UTF8_31BITS
|
||||
4, /* max byte length */
|
||||
#else
|
||||
6, /* max byte length */
|
||||
#endif
|
||||
1, /* min byte length */
|
||||
is_mbc_newline,
|
||||
mbc_to_code,
|
||||
@ -435,7 +572,11 @@ OnigEncodingDefine(utf_8, UTF_8) = {
|
||||
get_ctype_code_range,
|
||||
left_adjust_char_head,
|
||||
onigenc_always_true_is_allowed_reverse_match,
|
||||
#ifdef USE_CASE_MAP_API
|
||||
onigenc_unicode_case_map,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
ENCINDEX_UTF_8,
|
||||
ONIGENC_FLAG_UNICODE,
|
||||
};
|
||||
|
||||
@ -4,8 +4,8 @@
|
||||
onigmo.h - Onigmo (Oniguruma-mod) (regular expression library)
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2017 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2002-2016 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -38,8 +38,8 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#define ONIGMO_VERSION_MAJOR 6
|
||||
#define ONIGMO_VERSION_MINOR 1
|
||||
#define ONIGMO_VERSION_TEENY 3
|
||||
#define ONIGMO_VERSION_MINOR 2
|
||||
#define ONIGMO_VERSION_TEENY 0
|
||||
|
||||
#ifndef ONIG_EXTERN
|
||||
# ifdef RUBY_EXTERN
|
||||
@ -784,8 +784,8 @@ typedef struct re_pattern_buffer {
|
||||
unsigned char *exact;
|
||||
unsigned char *exact_end;
|
||||
unsigned char map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */
|
||||
int *int_map; /* BM skip for exact_len > 255 */
|
||||
int *int_map_backward; /* BM skip for backward search */
|
||||
int *reserved1;
|
||||
int *reserved2;
|
||||
OnigDistance dmin; /* min-distance of exact or map */
|
||||
OnigDistance dmax; /* max-distance of exact or map */
|
||||
|
||||
|
||||
261
onigmo/regcomp.c
261
onigmo/regcomp.c
@ -1,9 +1,9 @@
|
||||
/**********************************************************************
|
||||
/**********************************************************************
|
||||
regcomp.c - Onigmo (Oniguruma-mod) (regular expression library)
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2013 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -2770,10 +2770,8 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
|
||||
if (sn->end <= sn->s)
|
||||
break;
|
||||
|
||||
if (exact != 0 &&
|
||||
!NSTRING_IS_RAW(node) && IS_IGNORECASE(reg->options)) {
|
||||
}
|
||||
else {
|
||||
if (exact == 0 ||
|
||||
NSTRING_IS_RAW(node) || !IS_IGNORECASE(reg->options)) {
|
||||
n = node;
|
||||
}
|
||||
}
|
||||
@ -3264,6 +3262,14 @@ setup_subexp_call(Node* node, ScanEnv* env)
|
||||
}
|
||||
#endif
|
||||
|
||||
#define IN_ALT (1<<0)
|
||||
#define IN_NOT (1<<1)
|
||||
#define IN_REPEAT (1<<2)
|
||||
#define IN_VAR_REPEAT (1<<3)
|
||||
#define IN_CALL (1<<4)
|
||||
#define IN_RECCALL (1<<5)
|
||||
#define IN_LOOK_BEHIND (1<<6)
|
||||
|
||||
/* divide different length alternatives in look-behind.
|
||||
(?<=A|B) ==> (?<=A)|(?<=B)
|
||||
(?<!A|B) ==> (?<!A)(?<!B)
|
||||
@ -3560,24 +3566,29 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
|
||||
return ONIGERR_MEMORY;
|
||||
}
|
||||
|
||||
static int
|
||||
expand_case_fold_string(Node* node, regex_t* reg)
|
||||
{
|
||||
#define THRESHOLD_CASE_FOLD_ALT_FOR_EXPANSION 8
|
||||
|
||||
static int
|
||||
expand_case_fold_string(Node* node, regex_t* reg, int state)
|
||||
{
|
||||
int r, n, len, alt_num;
|
||||
int varlen = 0;
|
||||
int is_in_look_behind;
|
||||
UChar *start, *end, *p;
|
||||
Node *top_root, *root, *snode, *prev_node;
|
||||
OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];
|
||||
StrNode* sn = NSTR(node);
|
||||
StrNode* sn;
|
||||
|
||||
if (NSTRING_IS_AMBIG(node)) return 0;
|
||||
|
||||
sn = NSTR(node);
|
||||
|
||||
start = sn->s;
|
||||
end = sn->end;
|
||||
if (start >= end) return 0;
|
||||
|
||||
is_in_look_behind = (state & IN_LOOK_BEHIND) != 0;
|
||||
|
||||
r = 0;
|
||||
top_root = root = prev_node = snode = NULL_NODE;
|
||||
alt_num = 1;
|
||||
@ -3593,7 +3604,7 @@ expand_case_fold_string(Node* node, regex_t* reg)
|
||||
len = enclen(reg->enc, p, end);
|
||||
|
||||
varlen = is_case_fold_variable_len(n, items, len);
|
||||
if (n == 0 || varlen == 0) {
|
||||
if (n == 0 || varlen == 0 || is_in_look_behind) {
|
||||
if (IS_NULL(snode)) {
|
||||
if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {
|
||||
onig_node_free(top_root);
|
||||
@ -3854,13 +3865,6 @@ setup_comb_exp_check(Node* node, int state, ScanEnv* env)
|
||||
}
|
||||
#endif
|
||||
|
||||
#define IN_ALT (1<<0)
|
||||
#define IN_NOT (1<<1)
|
||||
#define IN_REPEAT (1<<2)
|
||||
#define IN_VAR_REPEAT (1<<3)
|
||||
#define IN_CALL (1<<4)
|
||||
#define IN_RECCALL (1<<5)
|
||||
|
||||
/* setup_tree does the following work.
|
||||
1. check empty loop. (set qn->target_empty_info)
|
||||
2. expand ignore-case in char class.
|
||||
@ -3902,7 +3906,7 @@ restart:
|
||||
|
||||
case NT_STR:
|
||||
if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) {
|
||||
r = expand_case_fold_string(node, reg);
|
||||
r = expand_case_fold_string(node, reg, state);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -4145,7 +4149,7 @@ restart:
|
||||
if (r < 0) return r;
|
||||
if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
|
||||
if (NTYPE(node) != NT_ANCHOR) goto restart;
|
||||
r = setup_tree(an->target, reg, state, env);
|
||||
r = setup_tree(an->target, reg, (state | IN_LOOK_BEHIND), env);
|
||||
if (r != 0) return r;
|
||||
r = setup_look_behind(node, reg, env);
|
||||
}
|
||||
@ -4158,7 +4162,8 @@ restart:
|
||||
if (r < 0) return r;
|
||||
if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
|
||||
if (NTYPE(node) != NT_ANCHOR) goto restart;
|
||||
r = setup_tree(an->target, reg, (state | IN_NOT), env);
|
||||
r = setup_tree(an->target, reg, (state | IN_NOT | IN_LOOK_BEHIND),
|
||||
env);
|
||||
if (r != 0) return r;
|
||||
r = setup_look_behind(node, reg, env);
|
||||
}
|
||||
@ -4174,93 +4179,10 @@ restart:
|
||||
return r;
|
||||
}
|
||||
|
||||
#ifndef USE_SUNDAY_QUICK_SEARCH
|
||||
/* set skip map for Boyer-Moore search */
|
||||
static int
|
||||
set_bm_skip(UChar* s, UChar* end, regex_t* reg,
|
||||
UChar skip[], int** int_skip, int ignore_case)
|
||||
{
|
||||
OnigDistance i, len;
|
||||
int clen, flen, n, j, k;
|
||||
UChar *p, buf[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM][ONIGENC_MBC_CASE_FOLD_MAXLEN];
|
||||
OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];
|
||||
OnigEncoding enc = reg->enc;
|
||||
|
||||
len = end - s;
|
||||
if (len < ONIG_CHAR_TABLE_SIZE) {
|
||||
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) skip[i] = (UChar )len;
|
||||
|
||||
n = 0;
|
||||
for (i = 0; i < len - 1; i += clen) {
|
||||
p = s + i;
|
||||
if (ignore_case)
|
||||
n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
|
||||
p, end, items);
|
||||
clen = enclen(enc, p, end);
|
||||
if (p + clen > end)
|
||||
clen = (int )(end - p);
|
||||
|
||||
for (j = 0; j < n; j++) {
|
||||
if ((items[j].code_len != 1) || (items[j].byte_len != clen))
|
||||
return 1; /* different length isn't supported. */
|
||||
flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf[j]);
|
||||
if (flen != clen)
|
||||
return 1; /* different length isn't supported. */
|
||||
}
|
||||
for (j = 0; j < clen; j++) {
|
||||
skip[s[i + j]] = (UChar )(len - 1 - i - j);
|
||||
for (k = 0; k < n; k++) {
|
||||
skip[buf[k][j]] = (UChar )(len - 1 - i - j);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
# if OPT_EXACT_MAXLEN < ONIG_CHAR_TABLE_SIZE
|
||||
/* This should not happen. */
|
||||
return ONIGERR_TYPE_BUG;
|
||||
# else
|
||||
if (IS_NULL(*int_skip)) {
|
||||
*int_skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);
|
||||
if (IS_NULL(*int_skip)) return ONIGERR_MEMORY;
|
||||
}
|
||||
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) (*int_skip)[i] = (int )len;
|
||||
|
||||
n = 0;
|
||||
for (i = 0; i < len - 1; i += clen) {
|
||||
p = s + i;
|
||||
if (ignore_case)
|
||||
n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
|
||||
p, end, items);
|
||||
clen = enclen(enc, p, end);
|
||||
if (p + clen > end)
|
||||
clen = (int )(end - p);
|
||||
|
||||
for (j = 0; j < n; j++) {
|
||||
if ((items[j].code_len != 1) || (items[j].byte_len != clen))
|
||||
return 1; /* different length isn't supported. */
|
||||
flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf[j]);
|
||||
if (flen != clen)
|
||||
return 1; /* different length isn't supported. */
|
||||
}
|
||||
for (j = 0; j < clen; j++) {
|
||||
(*int_skip)[s[i + j]] = (int )(len - 1 - i - j);
|
||||
for (k = 0; k < n; k++) {
|
||||
(*int_skip)[buf[k][j]] = (int )(len - 1 - i - j);
|
||||
}
|
||||
}
|
||||
}
|
||||
# endif
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* USE_SUNDAY_QUICK_SEARCH */
|
||||
|
||||
/* set skip map for Sunday's quick search */
|
||||
static int
|
||||
set_bm_skip(UChar* s, UChar* end, regex_t* reg,
|
||||
UChar skip[], int** int_skip, int ignore_case)
|
||||
UChar skip[], int ignore_case)
|
||||
{
|
||||
OnigDistance i, len;
|
||||
int clen, flen, n, j, k;
|
||||
@ -4269,96 +4191,61 @@ set_bm_skip(UChar* s, UChar* end, regex_t* reg,
|
||||
OnigEncoding enc = reg->enc;
|
||||
|
||||
len = end - s;
|
||||
if (len < ONIG_CHAR_TABLE_SIZE) {
|
||||
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) skip[i] = (UChar )(len + 1);
|
||||
|
||||
if (ignore_case) {
|
||||
for (i = 0; i < len; i += clen) {
|
||||
p = s + i;
|
||||
n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
|
||||
p, end, items);
|
||||
clen = enclen(enc, p, end);
|
||||
if (p + clen > end)
|
||||
clen = (int )(end - p);
|
||||
|
||||
for (j = 0; j < n; j++) {
|
||||
if ((items[j].code_len != 1) || (items[j].byte_len != clen)) {
|
||||
/* Different length isn't supported. Stop optimization at here. */
|
||||
end = p;
|
||||
goto endcheck;
|
||||
}
|
||||
flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf);
|
||||
if (flen != clen) {
|
||||
/* Different length isn't supported. Stop optimization at here. */
|
||||
end = p;
|
||||
goto endcheck;
|
||||
}
|
||||
}
|
||||
}
|
||||
endcheck:
|
||||
;
|
||||
}
|
||||
|
||||
len = end - s;
|
||||
n = 0;
|
||||
for (i = 0; i < len; i += clen) {
|
||||
p = s + i;
|
||||
if (ignore_case)
|
||||
n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
|
||||
p, end, items);
|
||||
clen = enclen(enc, p, end);
|
||||
if (p + clen > end)
|
||||
clen = (int )(end - p);
|
||||
|
||||
for (j = 0; j < clen; j++) {
|
||||
skip[s[i + j]] = (UChar )(len - i - j);
|
||||
for (k = 0; k < n; k++) {
|
||||
ONIGENC_CODE_TO_MBC(enc, items[k].code[0], buf);
|
||||
skip[buf[j]] = (UChar )(len - i - j);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
# if OPT_EXACT_MAXLEN < ONIG_CHAR_TABLE_SIZE
|
||||
if (len >= ONIG_CHAR_TABLE_SIZE) {
|
||||
/* This should not happen. */
|
||||
return ONIGERR_TYPE_BUG;
|
||||
# else
|
||||
if (IS_NULL(*int_skip)) {
|
||||
*int_skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);
|
||||
if (IS_NULL(*int_skip)) return ONIGERR_MEMORY;
|
||||
}
|
||||
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) (*int_skip)[i] = (int )(len + 1);
|
||||
}
|
||||
|
||||
n = 0;
|
||||
if (ignore_case) {
|
||||
for (i = 0; i < len; i += clen) {
|
||||
p = s + i;
|
||||
if (ignore_case)
|
||||
n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
|
||||
p, end, items);
|
||||
n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
|
||||
p, end, items);
|
||||
clen = enclen(enc, p, end);
|
||||
if (p + clen > end)
|
||||
clen = (int )(end - p);
|
||||
|
||||
for (j = 0; j < n; j++) {
|
||||
if ((items[j].code_len != 1) || (items[j].byte_len != clen))
|
||||
return 1; /* different length isn't supported. */
|
||||
flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf[j]);
|
||||
if (flen != clen)
|
||||
return 1; /* different length isn't supported. */
|
||||
}
|
||||
for (j = 0; j < clen; j++) {
|
||||
(*int_skip)[s[i + j]] = (int )(len - i - j);
|
||||
for (k = 0; k < n; k++) {
|
||||
(*int_skip)[buf[k][j]] = (int )(len - i - j);
|
||||
if ((items[j].code_len != 1) || (items[j].byte_len != clen)) {
|
||||
/* Different length isn't supported. Stop optimization at here. */
|
||||
end = p;
|
||||
goto endcheck;
|
||||
}
|
||||
flen = ONIGENC_CODE_TO_MBC(enc, items[j].code[0], buf);
|
||||
if (flen != clen) {
|
||||
/* Different length isn't supported. Stop optimization at here. */
|
||||
end = p;
|
||||
goto endcheck;
|
||||
}
|
||||
}
|
||||
}
|
||||
# endif
|
||||
endcheck:
|
||||
len = end - s;
|
||||
}
|
||||
return len;
|
||||
|
||||
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
|
||||
skip[i] = (UChar )(len + 1);
|
||||
n = 0;
|
||||
for (i = 0; i < len; i += clen) {
|
||||
p = s + i;
|
||||
if (ignore_case)
|
||||
n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
|
||||
p, end, items);
|
||||
clen = enclen(enc, p, end);
|
||||
if (p + clen > end)
|
||||
clen = (int )(end - p);
|
||||
|
||||
for (j = 0; j < clen; j++) {
|
||||
skip[s[i + j]] = (UChar )(len - i - j);
|
||||
for (k = 0; k < n; k++) {
|
||||
ONIGENC_CODE_TO_MBC(enc, items[k].code[0], buf);
|
||||
skip[buf[j]] = (UChar )(len - i - j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (int)len;
|
||||
}
|
||||
#endif /* USE_SUNDAY_QUICK_SEARCH */
|
||||
|
||||
typedef struct {
|
||||
OnigDistance min; /* min byte length */
|
||||
@ -5036,7 +4923,7 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
|
||||
|
||||
if (NSTRING_IS_DONT_GET_OPT_INFO(node)) {
|
||||
int n = onigenc_strlen(env->enc, sn->s, sn->end);
|
||||
max = ONIGENC_MBC_MAXLEN_DIST(env->enc) * n;
|
||||
max = (OnigDistance )ONIGENC_MBC_MAXLEN_DIST(env->enc) * n;
|
||||
}
|
||||
else {
|
||||
concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,
|
||||
@ -5344,7 +5231,7 @@ set_optimize_exact_info(regex_t* reg, OptExactInfo* e)
|
||||
if (e->ignore_case > 0) {
|
||||
if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {
|
||||
e->len = set_bm_skip(reg->exact, reg->exact_end, reg,
|
||||
reg->map, &(reg->int_map), 1);
|
||||
reg->map, 1);
|
||||
reg->exact_end = reg->exact + e->len;
|
||||
if (e->len >= 3) {
|
||||
reg->optimize = (allow_reverse != 0
|
||||
@ -5363,7 +5250,7 @@ set_optimize_exact_info(regex_t* reg, OptExactInfo* e)
|
||||
else {
|
||||
if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {
|
||||
set_bm_skip(reg->exact, reg->exact_end, reg,
|
||||
reg->map, &(reg->int_map), 0);
|
||||
reg->map, 0);
|
||||
reg->optimize = (allow_reverse != 0
|
||||
? ONIG_OPTIMIZE_EXACT_BM : ONIG_OPTIMIZE_EXACT_BM_NOT_REV);
|
||||
}
|
||||
@ -5648,8 +5535,6 @@ onig_free_body(regex_t* reg)
|
||||
if (IS_NOT_NULL(reg)) {
|
||||
if (IS_NOT_NULL(reg->p)) xfree(reg->p);
|
||||
if (IS_NOT_NULL(reg->exact)) xfree(reg->exact);
|
||||
if (IS_NOT_NULL(reg->int_map)) xfree(reg->int_map);
|
||||
if (IS_NOT_NULL(reg->int_map_backward)) xfree(reg->int_map_backward);
|
||||
if (IS_NOT_NULL(reg->repeat_range)) xfree(reg->repeat_range);
|
||||
if (IS_NOT_NULL(reg->chain)) onig_free(reg->chain);
|
||||
|
||||
@ -5676,8 +5561,6 @@ onig_memsize(const regex_t *reg)
|
||||
if (IS_NULL(reg)) return 0;
|
||||
if (IS_NOT_NULL(reg->p)) size += reg->alloc;
|
||||
if (IS_NOT_NULL(reg->exact)) size += reg->exact_end - reg->exact;
|
||||
if (IS_NOT_NULL(reg->int_map)) size += sizeof(int) * ONIG_CHAR_TABLE_SIZE;
|
||||
if (IS_NOT_NULL(reg->int_map_backward)) size += sizeof(int) * ONIG_CHAR_TABLE_SIZE;
|
||||
if (IS_NOT_NULL(reg->repeat_range)) size += reg->repeat_range_alloc * sizeof(OnigRepeatRange);
|
||||
if (IS_NOT_NULL(reg->chain)) size += onig_memsize(reg->chain);
|
||||
|
||||
@ -5961,8 +5844,6 @@ onig_reg_init(regex_t* reg, OnigOptionType option,
|
||||
(reg)->syntax = syntax;
|
||||
(reg)->optimize = 0;
|
||||
(reg)->exact = (UChar* )NULL;
|
||||
(reg)->int_map = (int* )NULL;
|
||||
(reg)->int_map_backward = (int* )NULL;
|
||||
(reg)->chain = (regex_t* )NULL;
|
||||
|
||||
(reg)->p = (UChar* )NULL;
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -951,6 +951,7 @@ onigenc_property_list_add_property(UChar* name, const OnigCodePoint* prop,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_CASE_MAP_API
|
||||
extern int
|
||||
onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end,
|
||||
OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc)
|
||||
@ -969,7 +970,7 @@ onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const
|
||||
|
||||
if (code >= 'a' && code <= 'z' && (flags & ONIGENC_CASE_UPCASE)) {
|
||||
flags |= ONIGENC_CASE_MODIFIED;
|
||||
code += 'A' - 'a';
|
||||
code -= 'a' - 'A';
|
||||
} else if (code >= 'A' && code <= 'Z' &&
|
||||
(flags & (ONIGENC_CASE_DOWNCASE | ONIGENC_CASE_FOLD))) {
|
||||
flags |= ONIGENC_CASE_MODIFIED;
|
||||
@ -997,8 +998,7 @@ onigenc_single_byte_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar
|
||||
|
||||
if (code >= 'a' && code <= 'z' && (flags & ONIGENC_CASE_UPCASE)) {
|
||||
flags |= ONIGENC_CASE_MODIFIED;
|
||||
code -= 'a';
|
||||
code += 'A';
|
||||
code -= 'a' - 'A';
|
||||
} else if (code >= 'A' && code <= 'Z' &&
|
||||
(flags & (ONIGENC_CASE_DOWNCASE | ONIGENC_CASE_FOLD))) {
|
||||
flags |= ONIGENC_CASE_MODIFIED;
|
||||
@ -1011,3 +1011,4 @@ onigenc_single_byte_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar
|
||||
*flagP = flags;
|
||||
return (int )(to - to_start);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -129,12 +129,14 @@ typedef struct {
|
||||
#endif
|
||||
|
||||
|
||||
/* config */
|
||||
#define USE_CRNL_AS_LINE_TERMINATOR
|
||||
#define USE_UNICODE_PROPERTIES
|
||||
#define USE_UNICODE_AGE_PROPERTIES
|
||||
/* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */
|
||||
#define USE_ASCII_ALL_LINE_BREAKS // LF, VT, FF, CR
|
||||
/* #define USE_UNICODE_ALL_LINE_TERMINATORS */ /* see Unicode.org UTS #18 */
|
||||
/* #define USE_CASE_MAP_API */
|
||||
|
||||
|
||||
#define ONIG_ENCODING_INIT_DEFAULT ONIG_ENCODING_ASCII
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -63,14 +63,18 @@ onig_error_code_to_format(OnigPosition code)
|
||||
p = "parse depth limit over"; break;
|
||||
case ONIGERR_DEFAULT_ENCODING_IS_NOT_SET:
|
||||
p = "default multibyte-encoding is not set"; break;
|
||||
#if 0
|
||||
case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR:
|
||||
p = "can't convert to wide-char on specified multibyte-encoding"; break;
|
||||
#endif
|
||||
case ONIGERR_INVALID_ARGUMENT:
|
||||
p = "invalid argument"; break;
|
||||
case ONIGERR_END_PATTERN_AT_LEFT_BRACE:
|
||||
p = "end pattern at left brace"; break;
|
||||
#if 0
|
||||
case ONIGERR_END_PATTERN_AT_LEFT_BRACKET:
|
||||
p = "end pattern at left bracket"; break;
|
||||
#endif
|
||||
case ONIGERR_EMPTY_CHAR_CLASS:
|
||||
p = "empty char-class"; break;
|
||||
case ONIGERR_PREMATURE_END_OF_CHAR_CLASS:
|
||||
@ -87,16 +91,20 @@ onig_error_code_to_format(OnigPosition code)
|
||||
p = "invalid control-code syntax"; break;
|
||||
case ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE:
|
||||
p = "char-class value at end of range"; break;
|
||||
#if 0
|
||||
case ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE:
|
||||
p = "char-class value at start of range"; break;
|
||||
#endif
|
||||
case ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS:
|
||||
p = "unmatched range specifier in char-class"; break;
|
||||
case ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED:
|
||||
p = "target of repeat operator is not specified"; break;
|
||||
case ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID:
|
||||
p = "target of repeat operator is invalid"; break;
|
||||
#if 0
|
||||
case ONIGERR_NESTED_REPEAT_OPERATOR:
|
||||
p = "nested repeat operator"; break;
|
||||
#endif
|
||||
case ONIGERR_UNMATCHED_CLOSE_PARENTHESIS:
|
||||
p = "unmatched close parenthesis"; break;
|
||||
case ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS:
|
||||
@ -121,14 +129,18 @@ onig_error_code_to_format(OnigPosition code)
|
||||
p = "upper is smaller than lower in repeat range"; break;
|
||||
case ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS:
|
||||
p = "empty range in char class"; break;
|
||||
#if 0
|
||||
case ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE:
|
||||
p = "mismatch multibyte code length in char-class range"; break;
|
||||
#endif
|
||||
case ONIGERR_TOO_MANY_MULTI_BYTE_RANGES:
|
||||
p = "too many multibyte code ranges are specified"; break;
|
||||
case ONIGERR_TOO_SHORT_MULTI_BYTE_STRING:
|
||||
p = "too short multibyte code string"; break;
|
||||
#if 0
|
||||
case ONIGERR_TOO_BIG_BACKREF_NUMBER:
|
||||
p = "too big backref number"; break;
|
||||
#endif
|
||||
case ONIGERR_INVALID_BACKREF:
|
||||
#ifdef USE_NAMED_GROUP
|
||||
p = "invalid backref number/name"; break;
|
||||
|
||||
444
onigmo/regexec.c
444
onigmo/regexec.c
@ -2,8 +2,8 @@
|
||||
regexec.c - Onigmo (Oniguruma-mod) (regular expression library)
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -1808,7 +1808,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
|
||||
/* default behavior: return first-matching result. */
|
||||
goto finish;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_EXACT1) MOP_IN(OP_EXACT1);
|
||||
DATA_ENSURE(1);
|
||||
@ -2369,7 +2368,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
}
|
||||
}
|
||||
goto fail;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_ASCII_WORD_BEGIN) MOP_IN(OP_ASCII_WORD_BEGIN);
|
||||
if (DATA_ENSURE_CHECK1 && ONIGENC_IS_MBC_ASCII_WORD(encode, s, end)) {
|
||||
@ -2379,7 +2377,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
}
|
||||
}
|
||||
goto fail;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_WORD_END) MOP_IN(OP_WORD_END);
|
||||
if (!ON_STR_BEGIN(s) && ONIGENC_IS_MBC_WORD(encode, sprev, end)) {
|
||||
@ -2389,7 +2386,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
}
|
||||
}
|
||||
goto fail;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_ASCII_WORD_END) MOP_IN(OP_ASCII_WORD_END);
|
||||
if (!ON_STR_BEGIN(s) && ONIGENC_IS_MBC_ASCII_WORD(encode, sprev, end)) {
|
||||
@ -2399,7 +2395,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
}
|
||||
}
|
||||
goto fail;
|
||||
NEXT;
|
||||
#endif
|
||||
|
||||
CASE(OP_BEGIN_BUF) MOP_IN(OP_BEGIN_BUF);
|
||||
@ -2432,7 +2427,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
JUMP;
|
||||
}
|
||||
goto fail;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_END_LINE) MOP_IN(OP_END_LINE);
|
||||
if (ON_STR_END(s)) {
|
||||
@ -2451,7 +2445,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
JUMP;
|
||||
}
|
||||
goto fail;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_SEMI_END_BUF) MOP_IN(OP_SEMI_END_BUF);
|
||||
if (ON_STR_END(s)) {
|
||||
@ -2483,7 +2476,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
#endif
|
||||
}
|
||||
goto fail;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_BEGIN_POSITION) MOP_IN(OP_BEGIN_POSITION);
|
||||
if (s != msa->gpos)
|
||||
@ -2549,12 +2541,10 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
CASE(OP_BACKREF1) MOP_IN(OP_BACKREF1);
|
||||
mem = 1;
|
||||
goto backref;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_BACKREF2) MOP_IN(OP_BACKREF2);
|
||||
mem = 2;
|
||||
goto backref;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_BACKREFN) MOP_IN(OP_BACKREFN);
|
||||
GET_MEMNUM_INC(mem, p);
|
||||
@ -2964,7 +2954,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
STACK_GET_REPEAT(mem, stkp);
|
||||
si = GET_STACK_INDEX(stkp);
|
||||
goto repeat_inc;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_REPEAT_INC_NG) MOP_IN(OP_REPEAT_INC_NG);
|
||||
GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
|
||||
@ -2997,7 +2986,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
STACK_GET_REPEAT(mem, stkp);
|
||||
si = GET_STACK_INDEX(stkp);
|
||||
goto repeat_inc_ng;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_PUSH_POS) MOP_IN(OP_PUSH_POS);
|
||||
STACK_PUSH_POS(s, sprev, pkeep);
|
||||
@ -3022,7 +3010,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
CASE(OP_FAIL_POS) MOP_IN(OP_FAIL_POS);
|
||||
STACK_POP_TIL_POS_NOT;
|
||||
goto fail;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_PUSH_STOP_BT) MOP_IN(OP_PUSH_STOP_BT);
|
||||
STACK_PUSH_STOP_BT;
|
||||
@ -3063,7 +3050,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
CASE(OP_FAIL_LOOK_BEHIND_NOT) MOP_IN(OP_FAIL_LOOK_BEHIND_NOT);
|
||||
STACK_POP_TIL_LOOK_BEHIND_NOT;
|
||||
goto fail;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_PUSH_ABSENT_POS) MOP_IN(OP_PUSH_ABSENT_POS);
|
||||
/* Save the absent-start-pos and the original end-pos. */
|
||||
@ -3120,7 +3106,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
#endif
|
||||
STACK_POP_TIL_ABSENT;
|
||||
goto fail;
|
||||
NEXT;
|
||||
|
||||
#ifdef USE_SUBEXP_CALL
|
||||
CASE(OP_CALL) MOP_IN(OP_CALL);
|
||||
@ -3150,7 +3135,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
|
||||
|
||||
CASE(OP_FINISH)
|
||||
goto finish;
|
||||
NEXT;
|
||||
|
||||
CASE(OP_FAIL)
|
||||
if (0) {
|
||||
@ -3346,219 +3330,6 @@ slow_search_backward_ic(OnigEncoding enc, int case_fold_flag,
|
||||
return (UChar* )NULL;
|
||||
}
|
||||
|
||||
#ifndef USE_SUNDAY_QUICK_SEARCH
|
||||
/* Boyer-Moore-Horspool search applied to a multibyte string */
|
||||
static UChar*
|
||||
bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
const UChar* text, const UChar* text_end,
|
||||
const UChar* text_range)
|
||||
{
|
||||
const UChar *s, *se, *t, *p, *end;
|
||||
const UChar *tail;
|
||||
ptrdiff_t skip, tlen1;
|
||||
|
||||
# ifdef ONIG_DEBUG_SEARCH
|
||||
fprintf(stderr, "bm_search_notrev: text: %"PRIuPTR" (%p), text_end: %"PRIuPTR" (%p), text_range: %"PRIuPTR" (%p)\n",
|
||||
(uintptr_t )text, text, (uintptr_t )text_end, text_end, (uintptr_t )text_range, text_range);
|
||||
# endif
|
||||
|
||||
tail = target_end - 1;
|
||||
tlen1 = tail - target;
|
||||
end = text_range;
|
||||
if (end + tlen1 > text_end)
|
||||
end = text_end - tlen1;
|
||||
|
||||
s = text;
|
||||
|
||||
if (IS_NULL(reg->int_map)) {
|
||||
while (s < end) {
|
||||
p = se = s + tlen1;
|
||||
t = tail;
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )s;
|
||||
p--; t--;
|
||||
}
|
||||
skip = reg->map[*se];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(reg->enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
}
|
||||
}
|
||||
else {
|
||||
# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
|
||||
while (s < end) {
|
||||
p = se = s + tlen1;
|
||||
t = tail;
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )s;
|
||||
p--; t--;
|
||||
}
|
||||
skip = reg->int_map[*se];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(reg->enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
return (UChar* )NULL;
|
||||
}
|
||||
|
||||
/* Boyer-Moore-Horspool search */
|
||||
static UChar*
|
||||
bm_search(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
const UChar* text, const UChar* text_end, const UChar* text_range)
|
||||
{
|
||||
const UChar *s, *t, *p, *end;
|
||||
const UChar *tail;
|
||||
|
||||
# ifdef ONIG_DEBUG_SEARCH
|
||||
fprintf(stderr, "bm_search: text: %"PRIuPTR" (%p), text_end: %"PRIuPTR" (%p), text_range: %"PRIuPTR" (%p)\n",
|
||||
(uintptr_t )text, text, (uintptr_t )text_end, text_end, (uintptr_t )text_range, text_range);
|
||||
# endif
|
||||
|
||||
end = text_range + (target_end - target) - 1;
|
||||
if (end > text_end)
|
||||
end = text_end;
|
||||
|
||||
tail = target_end - 1;
|
||||
s = text + (target_end - target) - 1;
|
||||
if (IS_NULL(reg->int_map)) {
|
||||
while (s < end) {
|
||||
p = s;
|
||||
t = tail;
|
||||
# ifdef ONIG_DEBUG_SEARCH
|
||||
fprintf(stderr, "bm_search_loop: pos: %"PRIdPTR" %s\n",
|
||||
(intptr_t )(s - text), s);
|
||||
# endif
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )p;
|
||||
p--; t--;
|
||||
}
|
||||
s += reg->map[*s];
|
||||
}
|
||||
}
|
||||
else { /* see int_map[] */
|
||||
# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
|
||||
while (s < end) {
|
||||
p = s;
|
||||
t = tail;
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )p;
|
||||
p--; t--;
|
||||
}
|
||||
s += reg->int_map[*s];
|
||||
}
|
||||
# endif
|
||||
}
|
||||
return (UChar* )NULL;
|
||||
}
|
||||
|
||||
/* Boyer-Moore-Horspool search applied to a multibyte string (ignore case) */
|
||||
static UChar*
|
||||
bm_search_notrev_ic(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
const UChar* text, const UChar* text_end,
|
||||
const UChar* text_range)
|
||||
{
|
||||
const UChar *s, *se, *t, *end;
|
||||
const UChar *tail;
|
||||
ptrdiff_t skip, tlen1;
|
||||
OnigEncoding enc = reg->enc;
|
||||
int case_fold_flag = reg->case_fold_flag;
|
||||
|
||||
# ifdef ONIG_DEBUG_SEARCH
|
||||
fprintf(stderr, "bm_search_notrev_ic: text: %d (%p), text_end: %d (%p), text_range: %d (%p)\n",
|
||||
(int )text, text, (int )text_end, text_end, (int )text_range, text_range);
|
||||
# endif
|
||||
|
||||
tail = target_end - 1;
|
||||
tlen1 = tail - target;
|
||||
end = text_range;
|
||||
if (end + tlen1 > text_end)
|
||||
end = text_end - tlen1;
|
||||
|
||||
s = text;
|
||||
|
||||
if (IS_NULL(reg->int_map)) {
|
||||
while (s < end) {
|
||||
se = s + tlen1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
s, se + 1))
|
||||
return (UChar* )s;
|
||||
skip = reg->map[*se];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(reg->enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
}
|
||||
}
|
||||
else {
|
||||
# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
|
||||
while (s < end) {
|
||||
se = s + tlen1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
s, se + 1))
|
||||
return (UChar* )s;
|
||||
skip = reg->int_map[*se];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(reg->enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
return (UChar* )NULL;
|
||||
}
|
||||
|
||||
/* Boyer-Moore-Horspool search (ignore case) */
|
||||
static UChar*
|
||||
bm_search_ic(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
const UChar* text, const UChar* text_end, const UChar* text_range)
|
||||
{
|
||||
const UChar *s, *p, *end;
|
||||
const UChar *tail;
|
||||
OnigEncoding enc = reg->enc;
|
||||
int case_fold_flag = reg->case_fold_flag;
|
||||
|
||||
# ifdef ONIG_DEBUG_SEARCH
|
||||
fprintf(stderr, "bm_search_ic: text: %d (%p), text_end: %d (%p), text_range: %d (%p)\n",
|
||||
(int )text, text, (int )text_end, text_end, (int )text_range, text_range);
|
||||
# endif
|
||||
|
||||
end = text_range + (target_end - target) - 1;
|
||||
if (end > text_end)
|
||||
end = text_end;
|
||||
|
||||
tail = target_end - 1;
|
||||
s = text + (target_end - target) - 1;
|
||||
if (IS_NULL(reg->int_map)) {
|
||||
while (s < end) {
|
||||
p = s - (target_end - target) + 1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
p, s + 1))
|
||||
return (UChar* )p;
|
||||
s += reg->map[*s];
|
||||
}
|
||||
}
|
||||
else { /* see int_map[] */
|
||||
# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
|
||||
while (s < end) {
|
||||
p = s - (target_end - target) + 1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
p, s + 1))
|
||||
return (UChar* )p;
|
||||
s += reg->int_map[*s];
|
||||
}
|
||||
# endif
|
||||
}
|
||||
return (UChar* )NULL;
|
||||
}
|
||||
|
||||
#else /* USE_SUNDAY_QUICK_SEARCH */
|
||||
|
||||
/* Sunday's quick search applied to a multibyte string */
|
||||
static UChar*
|
||||
bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
@ -3583,39 +3354,19 @@ bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
|
||||
s = text;
|
||||
|
||||
if (IS_NULL(reg->int_map)) {
|
||||
while (s < end) {
|
||||
p = se = s + tlen1;
|
||||
t = tail;
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )s;
|
||||
p--; t--;
|
||||
}
|
||||
if (s + 1 >= end) break;
|
||||
skip = reg->map[se[1]];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
while (s < end) {
|
||||
p = se = s + tlen1;
|
||||
t = tail;
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )s;
|
||||
p--; t--;
|
||||
}
|
||||
}
|
||||
else {
|
||||
# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
|
||||
while (s < end) {
|
||||
p = se = s + tlen1;
|
||||
t = tail;
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )s;
|
||||
p--; t--;
|
||||
}
|
||||
if (s + 1 >= end) break;
|
||||
skip = reg->int_map[se[1]];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
}
|
||||
# endif
|
||||
if (s + 1 >= end) break;
|
||||
skip = reg->map[se[1]];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
}
|
||||
|
||||
return (UChar* )NULL;
|
||||
@ -3642,32 +3393,17 @@ bm_search(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
end = text_end;
|
||||
|
||||
s = text + tlen1;
|
||||
if (IS_NULL(reg->int_map)) {
|
||||
while (s < end) {
|
||||
p = s;
|
||||
t = tail;
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )p;
|
||||
p--; t--;
|
||||
}
|
||||
if (s + 1 >= end) break;
|
||||
s += reg->map[s[1]];
|
||||
while (s < end) {
|
||||
p = s;
|
||||
t = tail;
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )p;
|
||||
p--; t--;
|
||||
}
|
||||
if (s + 1 >= end) break;
|
||||
s += reg->map[s[1]];
|
||||
}
|
||||
else { /* see int_map[] */
|
||||
# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
|
||||
while (s < end) {
|
||||
p = s;
|
||||
t = tail;
|
||||
while (*p == *t) {
|
||||
if (t == target) return (UChar* )p;
|
||||
p--; t--;
|
||||
}
|
||||
if (s + 1 >= end) break;
|
||||
s += reg->int_map[s[1]];
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
return (UChar* )NULL;
|
||||
}
|
||||
|
||||
@ -3696,35 +3432,17 @@ bm_search_notrev_ic(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
|
||||
s = text;
|
||||
|
||||
if (IS_NULL(reg->int_map)) {
|
||||
while (s < end) {
|
||||
se = s + tlen1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
s, se + 1))
|
||||
return (UChar* )s;
|
||||
if (s + 1 >= end) break;
|
||||
skip = reg->map[se[1]];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
}
|
||||
}
|
||||
else {
|
||||
# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
|
||||
while (s < end) {
|
||||
se = s + tlen1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
s, se + 1))
|
||||
return (UChar* )s;
|
||||
if (s + 1 >= end) break;
|
||||
skip = reg->int_map[se[1]];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
}
|
||||
# endif
|
||||
while (s < end) {
|
||||
se = s + tlen1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
s, se + 1))
|
||||
return (UChar* )s;
|
||||
if (s + 1 >= end) break;
|
||||
skip = reg->map[se[1]];
|
||||
t = s;
|
||||
do {
|
||||
s += enclen(enc, s, end);
|
||||
} while ((s - t) < skip && s < end);
|
||||
}
|
||||
|
||||
return (UChar* )NULL;
|
||||
@ -3753,83 +3471,17 @@ bm_search_ic(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
end = text_end;
|
||||
|
||||
s = text + tlen1;
|
||||
if (IS_NULL(reg->int_map)) {
|
||||
while (s < end) {
|
||||
p = s - tlen1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
p, s + 1))
|
||||
return (UChar* )p;
|
||||
if (s + 1 >= end) break;
|
||||
s += reg->map[s[1]];
|
||||
}
|
||||
}
|
||||
else { /* see int_map[] */
|
||||
# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
|
||||
while (s < end) {
|
||||
p = s - tlen1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
p, s + 1))
|
||||
return (UChar* )p;
|
||||
if (s + 1 >= end) break;
|
||||
s += reg->int_map[s[1]];
|
||||
}
|
||||
# endif
|
||||
}
|
||||
return (UChar* )NULL;
|
||||
}
|
||||
#endif /* USE_SUNDAY_QUICK_SEARCH */
|
||||
|
||||
#ifdef USE_INT_MAP_BACKWARD
|
||||
static int
|
||||
set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,
|
||||
int** skip)
|
||||
{
|
||||
int i, len;
|
||||
|
||||
if (IS_NULL(*skip)) {
|
||||
*skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);
|
||||
if (IS_NULL(*skip)) return ONIGERR_MEMORY;
|
||||
}
|
||||
|
||||
len = (int )(end - s);
|
||||
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
|
||||
(*skip)[i] = len;
|
||||
|
||||
for (i = len - 1; i > 0; i--)
|
||||
(*skip)[s[i]] = i;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static UChar*
|
||||
bm_search_backward(regex_t* reg, const UChar* target, const UChar* target_end,
|
||||
const UChar* text, const UChar* adjust_text,
|
||||
const UChar* text_end, const UChar* text_start)
|
||||
{
|
||||
const UChar *s, *t, *p;
|
||||
|
||||
s = text_end - (target_end - target);
|
||||
if (text_start < s)
|
||||
s = text_start;
|
||||
else
|
||||
s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s, text_end);
|
||||
|
||||
while (s >= text) {
|
||||
p = s;
|
||||
t = target;
|
||||
while (t < target_end && *p == *t) {
|
||||
p++; t++;
|
||||
}
|
||||
if (t == target_end)
|
||||
return (UChar* )s;
|
||||
|
||||
s -= reg->int_map_backward[*s];
|
||||
s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s, text_end);
|
||||
while (s < end) {
|
||||
p = s - tlen1;
|
||||
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
|
||||
p, s + 1))
|
||||
return (UChar* )p;
|
||||
if (s + 1 >= end) break;
|
||||
s += reg->map[s[1]];
|
||||
}
|
||||
|
||||
return (UChar* )NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static UChar*
|
||||
map_search(OnigEncoding enc, UChar map[],
|
||||
@ -4064,21 +3716,7 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
|
||||
|
||||
case ONIG_OPTIMIZE_EXACT_BM:
|
||||
case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:
|
||||
#ifdef USE_INT_MAP_BACKWARD
|
||||
if (IS_NULL(reg->int_map_backward)) {
|
||||
int r;
|
||||
if (s - range < BM_BACKWARD_SEARCH_LENGTH_THRESHOLD)
|
||||
goto exact_method;
|
||||
|
||||
r = set_bm_backward_skip(reg->exact, reg->exact_end, reg->enc,
|
||||
&(reg->int_map_backward));
|
||||
if (r) return r;
|
||||
}
|
||||
p = bm_search_backward(reg, reg->exact, reg->exact_end, range, adjrange,
|
||||
end, p);
|
||||
#else
|
||||
goto exact_method;
|
||||
#endif
|
||||
break;
|
||||
|
||||
case ONIG_OPTIMIZE_MAP:
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2013 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -81,13 +81,12 @@
|
||||
/* #define USE_OP_PUSH_OR_JUMP_EXACT */
|
||||
#define USE_QTFR_PEEK_NEXT
|
||||
#define USE_ST_LIBRARY
|
||||
#define USE_SUNDAY_QUICK_SEARCH
|
||||
|
||||
#define INIT_MATCH_STACK_SIZE 160
|
||||
#define DEFAULT_MATCH_STACK_LIMIT_SIZE 0 /* unlimited */
|
||||
#define DEFAULT_PARSE_DEPTH_LIMIT 4096
|
||||
|
||||
#define OPT_EXACT_MAXLEN 24
|
||||
#define OPT_EXACT_MAXLEN 24 /* This must be smaller than ONIG_CHAR_TABLE_SIZE. */
|
||||
|
||||
/* check config */
|
||||
#if defined(USE_PERL_SUBEXP_CALL) || defined(USE_CAPITAL_P_NAMED_GROUP)
|
||||
@ -128,14 +127,14 @@
|
||||
# undef ONIG_ESCAPE_UCHAR_COLLISION
|
||||
#endif
|
||||
|
||||
#define USE_WORD_BEGIN_END /* "\<": word-begin, "\>": word-end */
|
||||
/* #define USE_WORD_BEGIN_END */ /* "\<": word-begin, "\>": word-end */
|
||||
#ifdef RUBY
|
||||
# undef USE_CAPTURE_HISTORY
|
||||
#else
|
||||
# define USE_CAPTURE_HISTORY
|
||||
/* # define USE_CAPTURE_HISTORY */
|
||||
#endif
|
||||
#define USE_VARIABLE_META_CHARS
|
||||
#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
|
||||
/* #define USE_VARIABLE_META_CHARS */
|
||||
/* #define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE */
|
||||
/* #define USE_COMBINATION_EXPLOSION_CHECK */ /* (X*)* */
|
||||
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@ -2,8 +2,8 @@
|
||||
regversion.c - Onigmo (Oniguruma-mod) (regular expression library)
|
||||
**********************************************************************/
|
||||
/*-
|
||||
* Copyright (c) 2002-2016 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2017 K.Takata <kentkt AT csc DOT jp>
|
||||
* Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
||||
* Copyright (c) 2011-2019 K.Takata <kentkt AT csc DOT jp>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -48,8 +48,8 @@ extern const char*
|
||||
onig_copyright(void)
|
||||
{
|
||||
const char *s =
|
||||
"Onigmo " ONIG_VERSION_STRING " : Copyright (C) 2002-2016 K.Kosako, "
|
||||
"2011-2017 K.Takata";
|
||||
"Onigmo " ONIG_VERSION_STRING " : Copyright (C) 2002-2018 K.Kosako, "
|
||||
"2011-2019 K.Takata";
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
@ -1 +1 @@
|
||||
6.1.3
|
||||
6.2.0
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<assemblyIdentity
|
||||
name="Notepad3"
|
||||
processorArchitecture="*"
|
||||
version="5.19.125.1608"
|
||||
version="5.19.130.1611"
|
||||
type="win32"
|
||||
/>
|
||||
<description>Notepad3 develop</description>
|
||||
|
||||
@ -5003,8 +5003,6 @@ struct Sci_TextToFind {
|
||||
There is some interaction between call tips and autocompletion lists in that showing a
|
||||
call tip cancels any active autocompletion list, and vice versa.</p>
|
||||
|
||||
<p>Call tips are not implemented on Qt.</p>
|
||||
|
||||
<p>Call tips can highlight part of the text within them. You could use this to highlight the
|
||||
current argument to a function by counting the number of commas (or whatever separator your
|
||||
language uses). See <code>SciTEBase::CharAdded()</code> in <code>SciTEBase.cxx</code> for an
|
||||
|
||||
@ -540,6 +540,7 @@
|
||||
<td>jj5</td>
|
||||
</tr><tr>
|
||||
<td>Jad Altahan</td>
|
||||
<td>Andrea Ricchi</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
@ -558,6 +559,10 @@
|
||||
<li>
|
||||
Released 10 January 2019.
|
||||
</li>
|
||||
<li>
|
||||
Calltips implemented on Qt.
|
||||
<a href="https://sourceforge.net/p/scintilla/bugs/1548/">Bug #1548</a>.
|
||||
</li>
|
||||
<li>
|
||||
The C++ lexer, with styling.within.preprocessor on, now interprets "(" in preprocessor "#if("
|
||||
as an operator instead of part of the directive. This improves folding as well which could become
|
||||
@ -568,9 +573,21 @@
|
||||
<a href="https://sourceforge.net/p/scintilla/feature-requests/1253/">Feature #1253</a>.
|
||||
</li>
|
||||
<li>
|
||||
Fix inconsistency with dot styling in Nim.
|
||||
<a href="https://sourceforge.net/p/scintilla/feature-requests/1260/">Feature #1260</a>.
|
||||
</li>
|
||||
<li>
|
||||
Enhance the styling of backticks in Nim.
|
||||
<a href="https://sourceforge.net/p/scintilla/feature-requests/1261/">Feature #1261</a>.
|
||||
</li>
|
||||
<li>
|
||||
Fix fold behaviour with comments in nim.
|
||||
<a href="https://sourceforge.net/p/scintilla/feature-requests/1254/">Feature #1254</a>.
|
||||
</li>
|
||||
<li>
|
||||
Fix TCL lexer recognizing '"' after "," inside a bracketed substitution.
|
||||
<a href="https://sourceforge.net/p/scintilla/bugs/1947/">Bug #1947</a>.
|
||||
</li>
|
||||
</ul>
|
||||
<h3>
|
||||
<a href="https://www.scintilla.org/scite413.zip">Release 4.1.3</a>
|
||||
|
||||
@ -424,13 +424,17 @@ void SCI_METHOD LexerNim::Lex(Sci_PositionU startPos, Sci_Position length,
|
||||
sc.SetState(SCE_NIM_DEFAULT);
|
||||
break;
|
||||
case SCE_NIM_IDENTIFIER:
|
||||
if (!IsAWordChar(sc.ch)) {
|
||||
if (sc.ch == '.' || !IsAWordChar(sc.ch)) {
|
||||
char s[100];
|
||||
sc.GetCurrent(s, sizeof(s));
|
||||
int style = SCE_NIM_IDENTIFIER;
|
||||
|
||||
if (keywords.InList(s) && !funcNameExists) {
|
||||
style = SCE_NIM_WORD;
|
||||
// Prevent styling keywords if they are sub-identifiers
|
||||
Sci_Position segStart = styler.GetStartSegment() - 1;
|
||||
if (segStart < 0 || styler.SafeGetCharAt(segStart, '\0') != '.') {
|
||||
style = SCE_NIM_WORD;
|
||||
}
|
||||
} else if (funcNameExists) {
|
||||
style = SCE_NIM_FUNCNAME;
|
||||
}
|
||||
@ -450,6 +454,18 @@ void SCI_METHOD LexerNim::Lex(Sci_PositionU startPos, Sci_Position length,
|
||||
sc.ForwardSetState(SCE_NIM_DEFAULT);
|
||||
}
|
||||
break;
|
||||
case SCE_NIM_FUNCNAME:
|
||||
if (sc.ch == '`') {
|
||||
funcNameExists = false;
|
||||
sc.ForwardSetState(SCE_NIM_DEFAULT);
|
||||
} else if (sc.atLineEnd) {
|
||||
// Prevent leaking the style to the next line if not closed
|
||||
funcNameExists = false;
|
||||
|
||||
sc.ChangeState(SCE_NIM_STRINGEOL);
|
||||
sc.ForwardSetState(SCE_NIM_DEFAULT);
|
||||
}
|
||||
break;
|
||||
case SCE_NIM_COMMENT:
|
||||
if (sc.Match(']', '#')) {
|
||||
if (commentNestLevel > 0) {
|
||||
@ -523,7 +539,10 @@ void SCI_METHOD LexerNim::Lex(Sci_PositionU startPos, Sci_Position length,
|
||||
}
|
||||
break;
|
||||
case SCE_NIM_BACKTICKS:
|
||||
if (sc.ch == '`' || sc.atLineEnd) {
|
||||
if (sc.ch == '`' ) {
|
||||
sc.ForwardSetState(SCE_NIM_DEFAULT);
|
||||
} else if (sc.atLineEnd) {
|
||||
sc.ChangeState(SCE_NIM_STRINGEOL);
|
||||
sc.ForwardSetState(SCE_NIM_DEFAULT);
|
||||
}
|
||||
break;
|
||||
@ -627,10 +646,10 @@ void SCI_METHOD LexerNim::Lex(Sci_PositionU startPos, Sci_Position length,
|
||||
}
|
||||
// Operator definition
|
||||
else if (sc.ch == '`') {
|
||||
sc.SetState(SCE_NIM_BACKTICKS);
|
||||
|
||||
if (funcNameExists) {
|
||||
funcNameExists = false;
|
||||
sc.SetState(SCE_NIM_FUNCNAME);
|
||||
} else {
|
||||
sc.SetState(SCE_NIM_BACKTICKS);
|
||||
}
|
||||
}
|
||||
// Keyword
|
||||
|
||||
@ -128,8 +128,10 @@ next:
|
||||
continue;
|
||||
case ',':
|
||||
sc.SetState(SCE_TCL_OPERATOR);
|
||||
if (subParen)
|
||||
if (subParen) {
|
||||
sc.ForwardSetState(SCE_TCL_SUBSTITUTION);
|
||||
goto next; // Already forwarded so avoid loop's Forward()
|
||||
}
|
||||
continue;
|
||||
default :
|
||||
// maybe spaces should be allowed ???
|
||||
|
||||
@ -251,7 +251,7 @@ Sci::Position OnigmoRegExEngine::FindText(Document* doc, Sci::Position minPos, S
|
||||
ONIG_OPTION_ON(onigmoOptions, (rangeEnd != docLen) ? ONIG_OPTION_NOTEOL : ONIG_OPTION_NONE);
|
||||
|
||||
std::string sPattern(pattern);
|
||||
std::string const sRegExprStrg = translateRegExpr(sPattern, word, wordStart, doc->eolMode, onigmoOptions);
|
||||
std::string const & sRegExprStrg = translateRegExpr(sPattern, word, wordStart, doc->eolMode, onigmoOptions);
|
||||
|
||||
bool const bReCompile = (m_RegExpr == nullptr) || (m_CmplOptions != onigmoOptions) || (m_RegExprStrg.compare(sRegExprStrg) != 0);
|
||||
|
||||
@ -360,7 +360,7 @@ const char* OnigmoRegExEngine::SubstituteByPosition(Document* doc, const char* t
|
||||
return nullptr;
|
||||
}
|
||||
std::string sText(text, *length);
|
||||
std::string const rawReplStrg = convertReplExpr(sText);
|
||||
std::string const & rawReplStrg = convertReplExpr(sText);
|
||||
|
||||
m_SubstBuffer.clear();
|
||||
|
||||
|
||||
@ -508,28 +508,26 @@ INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
{
|
||||
if (Globals.hDlgIcon) { SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)Globals.hDlgIcon); }
|
||||
if (Globals.hDlgIcon) { SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)Globals.hDlgIcon); }
|
||||
|
||||
SetDlgItemText(hwnd, IDC_VERSION, MKWCS(VERSION_FILEVERSION_LONG));
|
||||
SetDlgItemText(hwnd, IDC_VERSION, MKWCS(VERSION_FILEVERSION_LONG));
|
||||
|
||||
if (hFontTitle) { DeleteObject(hFontTitle); }
|
||||
if (hFontTitle) { DeleteObject(hFontTitle); }
|
||||
|
||||
if (NULL == (hFontTitle = (HFONT)SendDlgItemMessage(hwnd, IDC_VERSION, WM_GETFONT, 0, 0))) {
|
||||
hFontTitle = GetStockObject(DEFAULT_GUI_FONT);
|
||||
}
|
||||
|
||||
LOGFONT lf;
|
||||
GetObject(hFontTitle, sizeof(LOGFONT), &lf);
|
||||
lf.lfWeight = FW_BOLD;
|
||||
lf.lfWidth = ScaleIntFontSize(8);
|
||||
lf.lfHeight = ScaleIntFontSize(22);
|
||||
// lf.lfQuality = ANTIALIASED_QUALITY;
|
||||
hFontTitle = CreateFontIndirect(&lf);
|
||||
|
||||
SendDlgItemMessage(hwnd, IDC_VERSION, WM_SETFONT, (WPARAM)hFontTitle, true);
|
||||
if (NULL == (hFontTitle = (HFONT)SendDlgItemMessage(hwnd, IDC_VERSION, WM_GETFONT, 0, 0))) {
|
||||
hFontTitle = GetStockObject(DEFAULT_GUI_FONT);
|
||||
}
|
||||
|
||||
LOGFONT lf;
|
||||
GetObject(hFontTitle, sizeof(LOGFONT), &lf);
|
||||
lf.lfWeight = FW_BOLD;
|
||||
lf.lfWidth = ScaleIntFontSize(8);
|
||||
lf.lfHeight = ScaleIntFontSize(22);
|
||||
// lf.lfQuality = ANTIALIASED_QUALITY;
|
||||
hFontTitle = CreateFontIndirect(&lf);
|
||||
|
||||
SendDlgItemMessage(hwnd, IDC_VERSION, WM_SETFONT, (WPARAM)hFontTitle, true);
|
||||
|
||||
SetDlgItemText(hwnd, IDC_SCI_VERSION, VERSION_SCIVERSION);
|
||||
SetDlgItemText(hwnd, IDC_COPYRIGHT, VERSION_LEGALCOPYRIGHT);
|
||||
SetDlgItemText(hwnd, IDC_AUTHORNAME, VERSION_AUTHORNAME);
|
||||
|
||||
@ -1266,7 +1266,7 @@ bool DriveBox_SelectDrive(HWND hwnd,LPCWSTR lpszPath)
|
||||
}
|
||||
|
||||
// Don't select anything
|
||||
SendMessage(hwnd,CB_SETCURSEL,(WPARAM)-1,0);
|
||||
SendMessage(hwnd,CB_SETCURSEL,(WPARAM)1,0);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@ -3479,7 +3479,7 @@ void EditStripLastCharacter(HWND hwnd, bool bIgnoreSelection, bool bTrailingBlan
|
||||
if (bTrailingBlanksOnly)
|
||||
{
|
||||
DocPos i = iEndPos;
|
||||
char ch = '\0';
|
||||
char ch;
|
||||
do {
|
||||
ch = SciCall_GetCharAt(--i);
|
||||
} while ((i >= iStartPos) && IsBlankChar(ch));
|
||||
|
||||
@ -343,7 +343,7 @@ typedef struct _ee {
|
||||
} ENCODINGENTRY, *PENCODINGENTRY;
|
||||
|
||||
int CmpEncoding(const void *s1, const void *s2) {
|
||||
return StrCmp(((PENCODINGENTRY)s1)->wch, ((PENCODINGENTRY)s2)->wch);
|
||||
return StrCmp(((const PENCODINGENTRY)s1)->wch, ((const PENCODINGENTRY)s2)->wch);
|
||||
}
|
||||
// ============================================================================
|
||||
|
||||
|
||||
@ -2937,7 +2937,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
EnableCmd(hmenu,IDM_VIEW_CUSTOMIZETB, Settings.ShowToolbar);
|
||||
CheckCmd(hmenu,IDM_VIEW_STATUSBAR,Settings.ShowStatusbar);
|
||||
|
||||
i = SciCall_GetLexer();
|
||||
//i = SciCall_GetLexer();
|
||||
//EnableCmd(hmenu,IDM_VIEW_AUTOCLOSETAGS,(i == SCLEX_HTML || i == SCLEX_XML));
|
||||
CheckCmd(hmenu, IDM_VIEW_AUTOCLOSETAGS, Settings.AutoCloseTags /*&& (i == SCLEX_HTML || i == SCLEX_XML)*/);
|
||||
|
||||
|
||||
14
src/Notepad3.cppcheck
Normal file
14
src/Notepad3.cppcheck
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="1">
|
||||
<platform>win64</platform>
|
||||
<analyze-all-vs-configs>true</analyze-all-vs-configs>
|
||||
<libraries>
|
||||
<library>windows</library>
|
||||
</libraries>
|
||||
<addons>
|
||||
<addon>cert</addon>
|
||||
</addons>
|
||||
<tools>
|
||||
<tool>clang-tidy</tool>
|
||||
</tools>
|
||||
</project>
|
||||
26
src/Styles.c
26
src/Styles.c
@ -338,14 +338,13 @@ void Style_Load()
|
||||
//
|
||||
void Style_Save()
|
||||
{
|
||||
WCHAR tch[32] = { L'\0' };;
|
||||
WCHAR szTmpStyle[BUFSIZE_STYLE_VALUE] = { L'\0' };
|
||||
size_t const len = NUMLEXERS * AVG_NUM_OF_STYLES_PER_LEXER * 100;
|
||||
WCHAR *pIniSection = AllocMem(len * sizeof(WCHAR), HEAP_ZERO_MEMORY);
|
||||
if (pIniSection) {
|
||||
// Custom colors
|
||||
for (int i = 0; i < 16; i++) {
|
||||
if (s_colorCustom[i] != s_colorDefault[i]) {
|
||||
WCHAR tch[32] = { L'\0' };
|
||||
WCHAR wch[32] = { L'\0' };
|
||||
StringCchPrintf(tch, COUNTOF(tch), L"%02i", i + 1);
|
||||
StringCchPrintf(wch, COUNTOF(wch), L"#%02X%02X%02X",
|
||||
@ -393,6 +392,7 @@ void Style_Save()
|
||||
while (g_pLexArray[iLexer]->Styles[i].iStyle != -1) {
|
||||
if (((*pLexFunction)(FCT_SETTING_CHANGE, 0) & (((__int64)1) << (i+2))) != 0LL) {
|
||||
// normalize
|
||||
WCHAR szTmpStyle[BUFSIZE_STYLE_VALUE];
|
||||
szTmpStyle[0] = L'\0'; // clear
|
||||
Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle, COUNTOF(szTmpStyle), true, true);
|
||||
IniSectionSetString(pIniSection, g_pLexArray[iLexer]->Styles[i].pszName, szTmpStyle);
|
||||
@ -468,7 +468,6 @@ bool Style_Export(HWND hwnd)
|
||||
WCHAR szFile[MAX_PATH * 2] = { L'\0' };
|
||||
WCHAR szFilter[256] = { L'\0' };
|
||||
OPENFILENAME ofn;
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
|
||||
ZeroMemory(&ofn,sizeof(OPENFILENAME));
|
||||
GetLngString(IDS_MUI_FILTER_INI,szFilter,COUNTOF(szFilter));
|
||||
@ -485,6 +484,7 @@ bool Style_Export(HWND hwnd)
|
||||
|
||||
if (GetSaveFileName(&ofn))
|
||||
{
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
size_t const len = NUMLEXERS * AVG_NUM_OF_STYLES_PER_LEXER * 100;
|
||||
WCHAR *pIniSection = AllocMem(len * sizeof(WCHAR), HEAP_ZERO_MEMORY);
|
||||
if (pIniSection) {
|
||||
@ -843,10 +843,10 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew)
|
||||
else {
|
||||
SendMessage(hwnd, SCI_SETCARETSTYLE, CARETSTYLE_LINE, 0);
|
||||
|
||||
WCHAR wch[32] = { L'\0' };
|
||||
iValue = 1;
|
||||
fValue = 1.0f; // default caret width
|
||||
if (Style_StrGetSize(pCurrentStandard->Styles[STY_CARET].szValue, &fValue)) {
|
||||
WCHAR wch[32] = { L'\0' };
|
||||
iValue = clampi(float2int(fValue), 1, 3); // don't allow invisible 0
|
||||
StringCchPrintf(wch,COUNTOF(wch),L"size:%i",iValue);
|
||||
StringCchCat(wchSpecificStyle,COUNTOF(wchSpecificStyle),wch);
|
||||
@ -1822,10 +1822,10 @@ bool Style_StrGetFont(LPCWSTR lpszStyle, LPWSTR lpszFont, int cchFont)
|
||||
//
|
||||
bool Style_StrGetFontQuality(LPCWSTR lpszStyle,LPWSTR lpszQuality,int cchQuality)
|
||||
{
|
||||
WCHAR tch[BUFSIZE_STYLE_VALUE] = { L'\0' };
|
||||
WCHAR *p = StrStrI(lpszStyle, L"smoothing:");
|
||||
if (p)
|
||||
{
|
||||
WCHAR tch[BUFSIZE_STYLE_VALUE] = { L'\0' };
|
||||
StringCchCopy(tch,COUNTOF(tch),p + CSTRLEN(L"smoothing:"));
|
||||
p = StrChr(tch, L';');
|
||||
if (p)
|
||||
@ -1929,12 +1929,10 @@ bool Style_StrGetSize(LPCWSTR lpszStyle, float* f)
|
||||
//
|
||||
bool Style_StrGetSizeStr(LPCWSTR lpszStyle,LPWSTR lpszSize,int cchSize)
|
||||
{
|
||||
WCHAR tch[BUFSIZE_STYLE_VALUE] = { L'\0' };
|
||||
WCHAR wchFloatVal[64];
|
||||
|
||||
WCHAR *p = StrStrI(lpszStyle, L"size:");
|
||||
if (p)
|
||||
{
|
||||
WCHAR tch[BUFSIZE_STYLE_VALUE] = { L'\0' };
|
||||
StringCchCopy(tch, COUNTOF(tch), (p + CSTRLEN(L"size:")));
|
||||
p = StrChr(tch, L';');
|
||||
if (p) { *p = L'\0'; }
|
||||
@ -1942,6 +1940,7 @@ bool Style_StrGetSizeStr(LPCWSTR lpszStyle,LPWSTR lpszSize,int cchSize)
|
||||
|
||||
float fValue = 0.0f;
|
||||
if (Char2FloatW(tch, &fValue)) {
|
||||
WCHAR wchFloatVal[64];
|
||||
fValue = (float)fabs(fValue);
|
||||
Float2String(fValue, wchFloatVal, COUNTOF(wchFloatVal));
|
||||
|
||||
@ -2034,12 +2033,12 @@ void Style_AppendWeightStr(LPWSTR lpszWeight, int cchSize, int fontWeight)
|
||||
//
|
||||
bool Style_StrGetColor(bool bFore, LPCWSTR lpszStyle, COLORREF* rgb)
|
||||
{
|
||||
WCHAR tch[BUFSIZE_STYLE_VALUE] = { L'\0' };
|
||||
WCHAR *pItem = (bFore) ? L"fore:" : L"back:";
|
||||
|
||||
WCHAR *p = StrStrI(lpszStyle, pItem);
|
||||
if (p)
|
||||
{
|
||||
WCHAR tch[BUFSIZE_STYLE_VALUE] = { L'\0' };
|
||||
StringCchCopy(tch, COUNTOF(tch), p + StringCchLenW(pItem,0));
|
||||
if (tch[0] == L'#')
|
||||
tch[0] = L' ';
|
||||
@ -2586,11 +2585,11 @@ bool Style_SelectFont(HWND hwnd,LPWSTR lpszStyle,int cchStyle, LPCWSTR sLexerNam
|
||||
StringCchCat(szNewStyle, COUNTOF(szNewStyle), newSize);
|
||||
|
||||
|
||||
WCHAR chset[32] = { L'\0' };
|
||||
if (bGlobalDefaultStyle &&
|
||||
(lf.lfCharSet != DEFAULT_CHARSET) &&
|
||||
(lf.lfCharSet != ANSI_CHARSET) &&
|
||||
(lf.lfCharSet != Globals.iDefaultCharSet)) {
|
||||
WCHAR chset[32] = { L'\0' };
|
||||
if (lf.lfCharSet == iCharSet) {
|
||||
if (StrStrI(lpszStyle, L"charset:"))
|
||||
{
|
||||
@ -3129,7 +3128,6 @@ INT_PTR CALLBACK Style_CustomizeSchemesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam
|
||||
static PEDITLEXER pCurrentLexer = NULL;
|
||||
static PEDITSTYLE pCurrentStyle = NULL;
|
||||
static int iCurStyleIdx = -1;
|
||||
static HFONT hFontTitle;
|
||||
static HBRUSH hbrFore;
|
||||
static HBRUSH hbrBack;
|
||||
static bool bIsStyleSelected = false;
|
||||
@ -3137,13 +3135,11 @@ INT_PTR CALLBACK Style_CustomizeSchemesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam
|
||||
static WCHAR* Style_StylesBackup[NUMLEXERS * AVG_NUM_OF_STYLES_PER_LEXER];
|
||||
static __int64 Style_ChangedBackup[NUMLEXERS];
|
||||
|
||||
WCHAR tchBuf[128] = { L'\0' };
|
||||
WCHAR wchText[512] = { L'\0' };
|
||||
|
||||
switch(umsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
WCHAR wchText[512] = { L'\0' };
|
||||
if (Globals.hDlgIcon) { SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)Globals.hDlgIcon); }
|
||||
GetLngString(IDS_MUI_STYLEEDIT_HELP, wchText, COUNTOF(wchText));
|
||||
SetDlgItemText(hwnd, IDC_STYLEEDIT_HELP, wchText);
|
||||
@ -3207,6 +3203,7 @@ INT_PTR CALLBACK Style_CustomizeSchemesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam
|
||||
MakeBitmapButton(hwnd,IDC_NEXTSTYLE,Globals.hInstance,IDB_NEXT);
|
||||
|
||||
// Setup title font
|
||||
static HFONT hFontTitle = NULL;
|
||||
if (hFontTitle) {
|
||||
DeleteObject(hFontTitle);
|
||||
}
|
||||
@ -3225,6 +3222,7 @@ INT_PTR CALLBACK Style_CustomizeSchemesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam
|
||||
else
|
||||
SetDlgPos(hwnd, Settings.CustomSchemesDlgPosX, Settings.CustomSchemesDlgPosY);
|
||||
|
||||
WCHAR tchBuf[128] = { L'\0' };
|
||||
HMENU hmenu = GetSystemMenu(hwnd, false);
|
||||
GetLngString(IDS_MUI_PREVIEW, tchBuf, COUNTOF(tchBuf));
|
||||
InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING | MF_ENABLED, IDS_MUI_PREVIEW, tchBuf);
|
||||
|
||||
@ -71,7 +71,7 @@
|
||||
#endif
|
||||
#elif (_MSC_VER >= 1916)
|
||||
#if(_MSC_FULL_VER >= 191627026)
|
||||
#define VER_CPL MS Visual C++ 2017 v15.9.5
|
||||
#define VER_CPL MS Visual C++ 2017 v15.9.(5-6)
|
||||
#elif(_MSC_FULL_VER >= 191627025)
|
||||
#define VER_CPL MS Visual C++ 2017 v15.9.4
|
||||
#elif(_MSC_FULL_VER >= 191627024)
|
||||
|
||||
@ -6,8 +6,8 @@
|
||||
#define APPNAME "Notepad3"
|
||||
#define VERSION_MAJOR 5
|
||||
#define VERSION_MINOR 19
|
||||
#define VERSION_REV 125
|
||||
#define VERSION_BUILD 1608
|
||||
#define VERSION_REV 130
|
||||
#define VERSION_BUILD 1611
|
||||
#define SCINTILLA_VER 413
|
||||
#define ONIGMO_REGEX_VER 6.1.3
|
||||
#define ONIGMO_REGEX_VER 6.2.0
|
||||
#define VERSION_PATCH "develop"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user