+ upd: Oniguruma RegExp Engine v7.0.0

This commit is contained in:
Rainer Kottenhoff 2021-04-29 00:32:38 +02:00
parent b1c0a4a12d
commit 6972df63df
12 changed files with 234 additions and 204 deletions

View File

@ -173,7 +173,7 @@
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<Optimization>Disabled</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;USE_POSIX_API;USE_BINARY_COMPATIBLE_POSIX_API;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level4</WarningLevel>
<SmallerTypeCheck>false</SmallerTypeCheck>
@ -202,7 +202,7 @@
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<Optimization>Disabled</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;USE_POSIX_API;USE_BINARY_COMPATIBLE_POSIX_API;_WIN64;_DEBUG;_WINDOWS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;_WIN64;_DEBUG;_WINDOWS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level4</WarningLevel>
<SmallerTypeCheck>false</SmallerTypeCheck>
@ -231,7 +231,7 @@
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<Optimization>MaxSpeed</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;USE_POSIX_API;USE_BINARY_COMPATIBLE_POSIX_API;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level4</WarningLevel>
<WholeProgramOptimization>false</WholeProgramOptimization>
@ -265,7 +265,7 @@
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<Optimization>Disabled</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;USE_POSIX_API;USE_BINARY_COMPATIBLE_POSIX_API;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level4</WarningLevel>
<WholeProgramOptimization>false</WholeProgramOptimization>
@ -294,7 +294,7 @@
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<Optimization>MaxSpeed</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;USE_POSIX_API;USE_BINARY_COMPATIBLE_POSIX_API;SCI_LEXER;_WIN64;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;SCI_LEXER;_WIN64;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level4</WarningLevel>
<WholeProgramOptimization>false</WholeProgramOptimization>
@ -328,7 +328,7 @@
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<Optimization>Disabled</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;USE_POSIX_API;USE_BINARY_COMPATIBLE_POSIX_API;SCI_LEXER;_WIN64;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WINVER=0x601;NTDDI_VERSION=0x06010000;_SCL_SECURE_NO_WARNINGS;NP3;NO_CXX11_REGEX;SCI_OWNREGEX;SCI_EMPTYCATALOGUE;ONIG_STATIC;SCI_LEXER;_WIN64;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;STATIC_BUILD;USE_D2D;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level4</WarningLevel>
<WholeProgramOptimization>false</WholeProgramOptimization>
@ -361,8 +361,6 @@
<ClCompile Include="oniguruma\src\regext.c" />
<ClCompile Include="oniguruma\src\reggnu.c" />
<ClCompile Include="oniguruma\src\regparse.c" />
<ClCompile Include="oniguruma\src\regposerr.c" />
<ClCompile Include="oniguruma\src\regposix.c" />
<ClCompile Include="oniguruma\src\regsyntax.c" />
<ClCompile Include="oniguruma\src\regtrav.c" />
<ClCompile Include="oniguruma\src\regversion.c" />
@ -412,7 +410,6 @@
<ItemGroup>
<ClInclude Include="oniguruma\src\config.h" />
<ClInclude Include="oniguruma\src\oniggnu.h" />
<ClInclude Include="oniguruma\src\onigposix.h" />
<ClInclude Include="oniguruma\src\oniguruma.h" />
<ClInclude Include="oniguruma\src\regenc.h" />
<ClInclude Include="oniguruma\src\regint.h" />

View File

@ -183,12 +183,6 @@
<ClCompile Include="src\CharacterSet.cxx">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="oniguruma\src\regposerr.c">
<Filter>oniguruma\src</Filter>
</ClCompile>
<ClCompile Include="oniguruma\src\regposix.c">
<Filter>oniguruma\src</Filter>
</ClCompile>
<ClCompile Include="src\Geometry.cxx">
<Filter>src</Filter>
</ClCompile>
@ -344,9 +338,6 @@
<ClInclude Include="oniguruma\src\st.h">
<Filter>oniguruma\src</Filter>
</ClInclude>
<ClInclude Include="oniguruma\src\onigposix.h">
<Filter>oniguruma\src</Filter>
</ClInclude>
<ClInclude Include="src\CharacterCategory.h">
<Filter>src</Filter>
</ClInclude>

View File

@ -1,4 +1,4 @@
Oniguruma API Version 6.9.7 2021/03/03
Oniguruma API Version 7.0.0 2021/04/26
#include <oniguruma.h>
@ -20,7 +20,7 @@ Oniguruma API Version 6.9.7 2021/03/03
error: error code < 0
# int onig_error_code_to_str(UChar* err_buf, int err_code, ...)
# int onig_error_code_to_str(UChar* err_buf, OnigPos err_code, ...)
Get error message string.
If this function is used for onig_new(),
@ -322,8 +322,7 @@ Oniguruma API Version 6.9.7 2021/03/03
# int onig_search(regex_t* reg, const UChar* str, const UChar* end, const UChar* start,
const UChar* range, OnigRegion* region, OnigOptionType option)
# OnigPos onig_search(regex_t* reg, const UChar* str, const UChar* end, const UChar* start, const UChar* range, OnigRegion* region, OnigOptionType option)
Search string and return search result and matching region.
Do not pass invalid byte string in the regex character encoding.
@ -367,9 +366,7 @@ Oniguruma API Version 6.9.7 2021/03/03
will be shared with callout.
# int onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
const UChar* start, const UChar* range, OnigRegion* region,
OnigOptionType option, OnigMatchParam* mp)
# OnigPos onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end, const UChar* start, const UChar* range, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp)
Search string and return search result and matching region.
Do not pass invalid byte string in the regex character encoding.
@ -379,8 +376,7 @@ Oniguruma API Version 6.9.7 2021/03/03
8 mp: match parameter values (match_stack_limit, retry_limit_in_match, retry_limit_in_search)
# int onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at,
OnigRegion* region, OnigOptionType option)
# OnigPos onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, OnigRegion* region, OnigOptionType option)
Match string and return result and matching region.
Do not pass invalid byte string in the regex character encoding.
@ -409,9 +405,7 @@ Oniguruma API Version 6.9.7 2021/03/03
ONIG_OPTION_CALLBACK_EACH_MATCH Call back for all successful matches.
# int onig_match_with_param(regex_t* reg, const UChar* str, const UChar* end,
const UChar* at, OnigRegion* region,
OnigOptionType option, OnigMatchParam* mp)
# OnigPos onig_match_with_param(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp)
Match string and return result and matching region.
Do not pass invalid byte string in the regex character encoding.
@ -423,7 +417,7 @@ Oniguruma API Version 6.9.7 2021/03/03
# int onig_scan(regex_t* reg, const UChar* str, const UChar* end,
OnigRegion* region, OnigOptionType option,
int (*scan_callback)(int, int, OnigRegion*, void*),
int (*scan_callback)(int, OnigPos, OnigRegion*, void*),
void* callback_arg)
Scan string and callback with matching region.
@ -525,7 +519,7 @@ Oniguruma API Version 6.9.7 2021/03/03
2 at: index of regex array (zero origin)
# int onig_regset_search(OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, int* rmatch_pos)
# int onig_regset_search(OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, OnigPos* rmatch_pos)
Perform a search with regset.
@ -558,7 +552,7 @@ Oniguruma API Version 6.9.7 2021/03/03
In most cases, ONIG_REGSET_POSITION_LEAD seems to be faster.
# int onig_regset_search_with_param(OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, OnigMatchParam* mps[], int* rmatch_pos)
# int onig_regset_search_with_param(OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, OnigMatchParam* mps[], OnigPos* rmatch_pos)
Perform a search with regset and match-params.

View File

@ -42,7 +42,7 @@
#ifdef ONIG_ESCAPE_UCHAR_COLLISION
#undef ONIG_ESCAPE_UCHAR_COLLISION
#endif
#include "../oniguruma/src/oniguruma.h" // Oniguruma - Regular Expression Engine (v6.9.2)
#include "../oniguruma/src/oniguruma.h" // Oniguruma - Regular Expression Engine
// ---------------------------------------------------------------
#define UCharPtr(pchar) reinterpret_cast<OnigUChar*>(pchar)
@ -76,10 +76,11 @@ static void SetSimpleOptions(OnigOptionType& onigOptions, EOLmode /*eolMode*/,
onigOptions = ONIG_OPTION_DEFAULT;
// Notepad3 forced options
ONIG_OPTION_ON(onigOptions, ONIG_OPTION_NEGATE_SINGLELINE);
ONIG_OPTION_OFF(onigOptions, ONIG_OPTION_POSIX_REGION);
ONIG_OPTION_OFF(onigOptions, ONIG_OPTION_EXTEND);
ONIG_OPTION_OFF(onigOptions, ONIG_OPTION_SINGLELINE);
ONIG_OPTION_ON(onigOptions, ONIG_OPTION_NEGATE_SINGLELINE);
ONIG_OPTION_OFF(onigOptions, ONIG_OPTION_FIND_LONGEST);
//ONIG_OPTION_OFF(onigOptions, ONIG_OPTION_ASCII_RANGE);
@ -137,6 +138,7 @@ public:
{
m_OnigSyntax.op |= ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END; // xcluded from ONIG_SYNTAX_DEFAULT ?
onig_initialize(s_UsedEncodingsTypes, _ARRAYSIZE(s_UsedEncodingsTypes));
///onig_set_default_syntax(ONIG_SYNTAX_ONIGURUMA); // std is: ONIG_SYNTAX_ONIGURUMA
onig_region_init(&m_Region);
}
@ -322,7 +324,7 @@ Sci::Position OnigurumaRegExEngine::FindText(Document* doc, Sci::Position minPos
auto const rangeBegPtr = UCharCPtr(doc->RangePointer(rangeBeg, rangeLen));
auto const rangeEndPtr = UCharCPtr(doc->RangePointer(rangeEnd, 0));
OnigPosition result = ONIG_MISMATCH;
OnigPos result = ONIG_MISMATCH;
try {
onig_region_free(&m_Region, 0); /* 1:free self, 0:free contents only */
onig_region_init(&m_Region);
@ -693,11 +695,11 @@ public:
onig_end();
}
OnigPosition Find(const OnigUChar *pattern, const OnigUChar *document, const bool caseSensitive, int *matchLen_out = nullptr);
OnigPos Find(const OnigUChar *pattern, const OnigUChar *document, const bool caseSensitive, int *matchLen_out = nullptr);
const OnigPosition GetMatchPos() const { return m_MatchPos; };
const OnigPosition GetMatchLen() const { return m_MatchLen; };
const OnigRegion& GetRegion() const { return m_Region; };
constexpr OnigPos GetMatchPos() const { return m_MatchPos; };
constexpr OnigPos GetMatchLen() const { return m_MatchLen; };
const OnigRegion & GetRegion() const { return m_Region; };
private:
@ -713,23 +715,23 @@ private:
OnigUChar m_ErrorInfo[ONIG_MAX_ERROR_MESSAGE_LEN];
OnigPosition m_MatchPos;
OnigPosition m_MatchLen;
OnigPos m_MatchPos;
OnigPos m_MatchLen;
};
// ============================================================================
OnigPosition SimpleRegExEngine::Find(const OnigUChar* pattern, const OnigUChar* document, const bool caseSensitive, int* matchLen_out /*=nullptr*/)
OnigPos SimpleRegExEngine::Find(const OnigUChar* pattern, const OnigUChar* document, const bool caseSensitive, int* matchLen_out /*=nullptr*/)
{
auto const patternLen = (pattern) ? OnigPosition(_mbslen(pattern)) : 0;
auto const patternLen = (pattern) ? OnigPos(_mbslen(pattern)) : 0;
if (patternLen == 0) {
return OnigPosition(-1);
return OnigPos(-1);
}
auto const stringLen = (document) ? OnigPosition(_mbslen(document)) : 0;
auto const stringLen = (document) ? OnigPos(_mbslen(document)) : 0;
if (stringLen == 0) {
return OnigPosition(-1);
return OnigPos(-1);
}
// init search options
@ -748,7 +750,7 @@ OnigPosition SimpleRegExEngine::Find(const OnigUChar* pattern, const OnigUChar*
if (res != ONIG_NORMAL) {
//onig_error_code_to_str(m_ErrorInfo, res, &einfo);
return OnigPosition(-111);
return OnigPos(-111);
}
onig_region_free(&m_Region, 0);
@ -760,16 +762,16 @@ OnigPosition SimpleRegExEngine::Find(const OnigUChar* pattern, const OnigUChar*
const UChar* rangeEnd = strgEnd;
// start search
OnigPosition result = onig_search(m_RegExpr, strgBeg, strgEnd,
OnigPos result = onig_search(m_RegExpr, strgBeg, strgEnd,
rangeBeg, rangeEnd, &m_Region, m_Options);
if (result < ONIG_MISMATCH) {
//onig_error_code_to_str(m_ErrorInfo, result);
return OnigPosition(-3);
return OnigPos(-3);
}
m_MatchPos = OnigPosition(ONIG_MISMATCH); // not found
m_MatchLen = OnigPosition(0);
m_MatchPos = OnigPos(ONIG_MISMATCH); // not found
m_MatchLen = OnigPos(0);
if (result >= 0) // found
{
@ -787,12 +789,12 @@ OnigPosition SimpleRegExEngine::Find(const OnigUChar* pattern, const OnigUChar*
{
//onig_error_code_to_str(m_ErrorInfo, result);
m_MatchPos = result;
m_MatchLen = OnigPosition(0);
m_MatchLen = OnigPos(0);
}
}
catch (...) {
// -1 is normally used for not found, -666 is used here for exception
return OnigPosition(-666);
return OnigPos(-666);
}
if (matchLen_out) {

View File

@ -4,7 +4,7 @@
onigposix.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
* Copyright (c) 2002-2020 K.Kosako
* Copyright (c) 2002-2021 K.Kosako
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -74,7 +74,7 @@ extern "C" {
#define REG_POSIX_ENCODING_UTF16_LE 5
typedef int onig_posix_regoff_t;
typedef ptrdiff_t onig_posix_regoff_t;
typedef struct {
onig_posix_regoff_t rm_so;

View File

@ -34,11 +34,11 @@ extern "C" {
#endif
#define ONIGURUMA
#define ONIGURUMA_VERSION_MAJOR 6
#define ONIGURUMA_VERSION_MINOR 9
#define ONIGURUMA_VERSION_TEENY 7
#define ONIGURUMA_VERSION_MAJOR 7
#define ONIGURUMA_VERSION_MINOR 0
#define ONIGURUMA_VERSION_TEENY 0
#define ONIGURUMA_VERSION_INT 60907
#define ONIGURUMA_VERSION_INT 70000
#ifndef P_
#if defined(__STDC__) || defined(_WIN32)
@ -80,13 +80,17 @@ extern "C" {
#define UChar OnigUChar
#endif
typedef int OnigPosition; // extent
typedef unsigned int OnigCodePoint;
typedef unsigned char OnigUChar;
typedef unsigned int OnigCtype;
typedef unsigned int OnigLen;
#ifndef ONIG_NO_STANDARD_C_HEADERS
#include <stddef.h> /* for ptrdiff_t */
#endif
typedef ptrdiff_t OnigPos;
#define ONIG_INFINITE_DISTANCE ~((OnigLen )0)
typedef unsigned int OnigCaseFoldType; /* case fold flag */
@ -671,8 +675,8 @@ ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;
typedef struct OnigCaptureTreeNodeStruct {
int group; /* group number */
int beg;
int end;
OnigPos beg;
OnigPos end;
int allocated;
int num_childs;
struct OnigCaptureTreeNodeStruct** childs;
@ -682,8 +686,8 @@ typedef struct OnigCaptureTreeNodeStruct {
struct re_registers {
int allocated;
int num_regs;
int* beg;
int* end;
OnigPos* beg;
OnigPos* end;
/* extended */
OnigCaptureTreeNode* history_root; /* capture history tree root */
};
@ -816,9 +820,9 @@ int onig_initialize P_((OnigEncoding encodings[], int number_of_encodings));
ONIG_EXTERN
int onig_init P_((void));
ONIG_EXTERN
int ONIG_VARIADIC_FUNC_ATTR onig_error_code_to_str PV_((OnigUChar* s, int err_code, ...));
int ONIG_VARIADIC_FUNC_ATTR onig_error_code_to_str PV_((OnigUChar* s, OnigPos err_code, ...));
ONIG_EXTERN
int onig_is_error_code_needs_param PV_((int code));
int onig_is_error_code_needs_param PV_((OnigPos code));
ONIG_EXTERN
void onig_set_warn_func P_((OnigWarnFunc f));
ONIG_EXTERN
@ -835,15 +839,15 @@ void onig_free P_((OnigRegex));
ONIG_EXTERN
void onig_free_body P_((OnigRegex));
ONIG_EXTERN
int onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(int, int, OnigRegion*, void*), void* callback_arg);
int onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(int, OnigPos, OnigRegion*, void*), void* callback_arg);
ONIG_EXTERN
int onig_search P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option));
OnigPos onig_search P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option));
ONIG_EXTERN
int onig_search_with_param P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp));
OnigPos onig_search_with_param P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp));
ONIG_EXTERN
int onig_match P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option));
OnigPos onig_match P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option));
ONIG_EXTERN
int onig_match_with_param P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp));
OnigPos onig_match_with_param P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp));
ONIG_EXTERN
int onig_regset_new P_((OnigRegSet** rset, int n, regex_t* regs[]));
@ -860,9 +864,9 @@ regex_t* onig_regset_get_regex P_((OnigRegSet* set, int at));
ONIG_EXTERN
OnigRegion* onig_regset_get_region P_((OnigRegSet* set, int at));
ONIG_EXTERN
int onig_regset_search P_((OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, int* rmatch_pos));
int onig_regset_search P_((OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, OnigPos* rmatch_pos));
ONIG_EXTERN
int onig_regset_search_with_param P_((OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, OnigMatchParam* mps[], int* rmatch_pos));
int onig_regset_search_with_param P_((OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, OnigMatchParam* mps[], OnigPos* rmatch_pos));
ONIG_EXTERN
OnigRegion* onig_region_new P_((void));

View File

@ -6922,7 +6922,7 @@ set_optimize_exact(regex_t* reg, OptStr* e)
}
reg->dist_min = e->mm.min;
reg->dist_max = e->mm.max;
reg->dist_max = (OnigSize )e->mm.max;
if (reg->dist_min != INFINITE_LEN) {
int n = (int )(reg->exact_end - reg->exact);
@ -6942,7 +6942,7 @@ set_optimize_map(regex_t* reg, OptMap* m)
reg->optimize = OPTIMIZE_MAP;
reg->dist_min = m->mm.min;
reg->dist_max = m->mm.max;
reg->dist_max = (OnigSize )m->mm.max;
if (reg->dist_min != INFINITE_LEN) {
reg->threshold_len = reg->dist_min + ONIGENC_MBC_MINLEN(reg->enc);
@ -7011,6 +7011,9 @@ set_optimize_info_from_tree(Node* node, regex_t* reg, ParseEnv* scan_env)
reg->sub_anchor |= opt.anc.right & ANCR_END_LINE;
}
if (reg->dist_max == INFINITE_LEN)
reg->dist_max = INFINITE_SIZE;
#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)
print_optimize_info(DBGFP, reg);
#endif
@ -7191,10 +7194,10 @@ print_optimize_info(FILE* f, regex_t* reg)
}
fprintf(f, "]: length: %ld, dmin: %u, ",
(reg->exact_end - reg->exact), reg->dist_min);
if (reg->dist_max == INFINITE_LEN)
if (reg->dist_max == INFINITE_SIZE)
fprintf(f, "dmax: inf.\n");
else
fprintf(f, "dmax: %u\n", reg->dist_max);
fprintf(f, "dmax: %lu\n", reg->dist_max);
}
else if (reg->optimize & OPTIMIZE_MAP) {
int c, i, n = 0;
@ -7202,8 +7205,8 @@ print_optimize_info(FILE* f, regex_t* reg)
for (i = 0; i < CHAR_MAP_SIZE; i++)
if (reg->map[i]) n++;
fprintf(f, "map: n=%d, dmin: %u, dmax: %u\n",
n, reg->dist_min, reg->dist_max);
fprintf(f, "map: n=%d, dmin: %u, dmax: %lu\n",
n, reg->dist_min, reg->dist_max);
if (n > 0) {
c = 0;
fputc('[', f);
@ -7319,7 +7322,7 @@ onig_free(regex_t* reg)
static void print_tree P_((FILE* f, Node* node));
#endif
extern int onig_init_for_match_at(regex_t* reg);
extern OnigPos onig_init_for_match_at(regex_t* reg);
static int parse_and_tune(regex_t* reg, const UChar* pattern,
const UChar* pattern_end, ParseEnv *scan_env, Node** rroot,

View File

@ -35,7 +35,7 @@
#include "regint.h"
extern UChar*
onig_error_code_to_format(int code)
onig_error_code_to_format(OnigPos code)
{
char *p;
@ -268,7 +268,7 @@ static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
extern int
onig_is_error_code_needs_param(int code)
onig_is_error_code_needs_param(OnigPos code)
{
switch (code) {
case ONIGERR_UNDEFINED_NAME_REFERENCE:
@ -288,7 +288,7 @@ onig_is_error_code_needs_param(int code)
#define MAX_ERROR_PAR_LEN 30
extern int ONIG_VARIADIC_FUNC_ATTR
onig_error_code_to_str(UChar* s, int code, ...)
onig_error_code_to_str(UChar* s, OnigPos code, ...)
{
UChar *p, *q;
OnigErrorInfo* einfo;

View File

@ -70,7 +70,7 @@ const OnigUChar* const _CRLF = "\r\n\0";
static int forward_search(regex_t* reg, const UChar* str, const UChar* end, UChar* start, UChar* range, UChar** low, UChar** high);
static int
static OnigPos
search_in_range(regex_t* reg, const UChar* str, const UChar* end, const UChar* start, const UChar* range, /* match range */ const UChar* data_range, /* subject string range */ OnigRegion* region, OnigOptionType option, OnigMatchParam* mp);
@ -178,8 +178,8 @@ typedef struct {
#endif
OnigMatchParam* mp;
#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
int best_len; /* for ONIG_OPTION_FIND_LONGEST */
UChar* best_s;
OnigPos best_len; /* for ONIG_OPTION_FIND_LONGEST */
UChar* best_s;
#endif
#ifdef USE_CALL
unsigned long subexp_call_in_search_counter;
@ -923,8 +923,8 @@ onig_region_resize(OnigRegion* region, int n)
n = ONIG_NREGION;
if (region->allocated == 0) {
region->beg = (int* )xmalloc(n * sizeof(int));
region->end = (int* )xmalloc(n * sizeof(int));
region->beg = (OnigPos* )xmalloc(n * sizeof(*(region->beg)));
region->end = (OnigPos* )xmalloc(n * sizeof(*(region->end)));
if (region->beg == 0 || region->end == 0)
return ONIGERR_MEMORY;
@ -932,8 +932,8 @@ onig_region_resize(OnigRegion* region, int n)
region->allocated = n;
}
else if (region->allocated < n) {
region->beg = (int* )xrealloc(region->beg, n * sizeof(int));
region->end = (int* )xrealloc(region->end, n * sizeof(int));
region->beg = (OnigPos* )xrealloc(region->beg, n * sizeof(*(region->beg)));
region->end = (OnigPos* )xrealloc(region->end, n * sizeof(*(region->end)));
if (region->beg == 0 || region->end == 0)
return ONIGERR_MEMORY;
@ -975,8 +975,8 @@ onig_region_init(OnigRegion* region)
{
region->num_regs = 0;
region->allocated = 0;
region->beg = (int* )0;
region->end = (int* )0;
region->beg = (OnigPos* )0;
region->end = (OnigPos* )0;
region->history_root = (OnigCaptureTreeNode* )0;
}
@ -1010,24 +1010,24 @@ onig_region_free(OnigRegion* r, int free_self)
extern void
onig_region_copy(OnigRegion* to, OnigRegion* from)
{
#define RREGC_SIZE (sizeof(int) * from->num_regs)
#define RREGC_SIZE (sizeof(OnigPos) * from->num_regs)
int i;
if (to == from) return;
if (to->allocated == 0) {
if (from->num_regs > 0) {
to->beg = (int* )xmalloc(RREGC_SIZE);
to->beg = (OnigPos* )xmalloc(RREGC_SIZE);
if (IS_NULL(to->beg)) return;
to->end = (int* )xmalloc(RREGC_SIZE);
to->end = (OnigPos* )xmalloc(RREGC_SIZE);
if (IS_NULL(to->end)) return;
to->allocated = from->num_regs;
}
}
else if (to->allocated < from->num_regs) {
to->beg = (int* )xrealloc(to->beg, RREGC_SIZE);
to->beg = (OnigPos* )xrealloc(to->beg, RREGC_SIZE);
if (IS_NULL(to->beg)) return;
to->end = (int* )xrealloc(to->end, RREGC_SIZE);
to->end = (OnigPos* )xrealloc(to->end, RREGC_SIZE);
if (IS_NULL(to->end)) return;
to->allocated = from->num_regs;
}
@ -2433,7 +2433,7 @@ stack_double(int* is_alloca, char** arg_alloc_base,
} while(0)
static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,
UChar* s1, UChar** ps2, int mblen)
UChar* s1, UChar** ps2, int byte_len)
{
UChar buf1[ONIGENC_MBC_CASE_FOLD_MAXLEN];
UChar buf2[ONIGENC_MBC_CASE_FOLD_MAXLEN];
@ -2441,8 +2441,8 @@ static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,
int len1, len2;
s2 = *ps2;
end1 = s1 + mblen;
end2 = s2 + mblen;
end1 = s1 + byte_len;
end2 = s2 + byte_len;
while (s1 < end1) {
len1 = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &s1, end1, buf1);
len2 = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &s2, end2, buf2);
@ -2486,7 +2486,7 @@ static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,
#define ON_STR_END(s) ((s) == end)
#define DATA_ENSURE_CHECK1 (s < right_range)
#define DATA_ENSURE_CHECK(n) (s + (n) <= right_range)
#define DATA_ENSURE(n) if (right_range - s < (n)) goto fail
#define DATA_ENSURE(n) if (right_range - s < (OnigPos )(n)) goto fail
#define INIT_RIGHT_RANGE right_range = (UChar* )in_right_range
@ -2715,7 +2715,7 @@ onig_print_statistics(FILE* f)
/* matching region of POSIX API */
typedef int regoff_t;
typedef ptrdiff_t regoff_t;
typedef struct {
regoff_t rm_so;
@ -2766,10 +2766,11 @@ typedef struct {
#define MATCH_DEBUG_OUT(offset) do {\
Operation *xp;\
UChar *q, *bp, buf[50];\
int len, spos;\
spos = IS_NOT_NULL(s) ? (int )(s - str) : -1;\
int len;\
ptrdiff_t spos;\
spos = IS_NOT_NULL(s) ? s - str : -1;\
xp = p - (offset);\
fprintf(DBGFP, "%7u: %7ld: %4d> \"",\
fprintf(DBGFP, "%7u: %7ld: %ld> \"",\
counter, GET_STACK_INDEX(stk), spos);\
counter++;\
bp = buf;\
@ -2826,7 +2827,7 @@ typedef struct {
/* match data(str - end) from position (sstart). */
static int
static OnigPos
match_at(regex_t* reg, const UChar* str, const UChar* end,
const UChar* in_right_range, const UChar* sstart,
MatchArg* msa)
@ -2943,7 +2944,8 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
};
#endif
int i, n, num_mem, best_len, pop_level;
OnigPos best_len;
int i, num_mem, pop_level;
LengthType tlen, tlen2;
MemNumType mem;
RelAddrType addr;
@ -3030,8 +3032,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
#ifdef ONIG_DEBUG_MATCH
fprintf(DBGFP, "match_at: str: %p, end: %p, start: %p\n", str, end, sstart);
fprintf(DBGFP, "size: %d, start offset: %d\n",
(int )(end - str), (int )(sstart - str));
fprintf(DBGFP, "size: %ld, start offset: %ld\n", end - str, sstart - str);
#endif
best_len = ONIG_MISMATCH;
@ -3045,7 +3046,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
BYTECODE_INTERPRETER_START {
CASE_OP(END)
n = (int )(s - sstart);
{
OnigPos n;
n = s - sstart;
if (n == 0 && OPTON_FIND_NOT_EMPTY(options)) {
best_len = ONIG_MISMATCH;
goto fail; /* for retry */
@ -3099,12 +3102,12 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
else {
#endif /* USE_POSIX_API */
region->beg[0] = (int )(keep - str);
region->end[0] = (int )(s - str);
region->beg[0] = keep - str;
region->end[0] = s - str;
for (i = 1; i <= num_mem; i++) {
if (mem_end_stk[i].i != INVALID_STACK_INDEX) {
region->beg[i] = (int )(STACK_MEM_START(reg, i) - str);
region->end[i] = (int )(STACK_MEM_END(reg, i) - str);
region->beg[i] = STACK_MEM_START(reg, i) - str;
region->end[i] = STACK_MEM_END(reg, i) - str;
}
else {
region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;
@ -3125,8 +3128,8 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
node->group = 0;
node->beg = (int )(keep - str);
node->end = (int )(s - str);
node->beg = keep - str;
node->end = s - str;
stkp = stk_base;
i = make_capture_history_tree(region->history_root, &stkp,
@ -3157,7 +3160,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
/* default behavior: return first-matching result. */
goto match_at_end;
}
CASE_OP(STR_1)
DATA_ENSURE(1);
ps = p->exact.s;
@ -3404,6 +3407,8 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
JUMP_OUT_WITH_SPREV_SET;
CASE_OP(ANYCHAR)
{
int n;
DATA_ENSURE(1);
n = enclen(encode, s);
DATA_ENSURE(n);
@ -3411,16 +3416,22 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
s += n;
INC_OP;
JUMP_OUT_WITH_SPREV_SET;
}
CASE_OP(ANYCHAR_ML)
{
int n;
DATA_ENSURE(1);
n = enclen(encode, s);
DATA_ENSURE(n);
s += n;
INC_OP;
JUMP_OUT_WITH_SPREV_SET;
}
CASE_OP(ANYCHAR_STAR)
{
int n;
INC_OP;
while (DATA_ENSURE_CHECK1) {
STACK_PUSH_ALT(p, s);
@ -3430,8 +3441,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
s += n;
}
JUMP_OUT;
}
CASE_OP(ANYCHAR_ML_STAR)
{
int n;
INC_OP;
while (DATA_ENSURE_CHECK1) {
STACK_PUSH_ALT(p, s);
@ -3445,10 +3459,12 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
}
JUMP_OUT;
}
CASE_OP(ANYCHAR_STAR_PEEK_NEXT)
{
UChar c;
int n;
c = p->anychar_star_peek_next.c;
INC_OP;
@ -3467,6 +3483,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
CASE_OP(ANYCHAR_ML_STAR_PEEK_NEXT)
{
UChar c;
int n;
c = p->anychar_star_peek_next.c;
INC_OP;
@ -3819,13 +3836,14 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
backref:
{
UChar *pstart, *pend;
OnigPos n;
if (mem_end_stk[mem].i == INVALID_STACK_INDEX) goto fail;
if (mem_start_stk[mem].i == INVALID_STACK_INDEX) goto fail;
pstart = STACK_MEM_START(reg, mem);
pend = STACK_MEM_END(reg, mem);
n = (int )(pend - pstart);
n = pend - pstart;
if (n != 0) {
DATA_ENSURE(n);
STRING_CMP(s, pstart, n);
@ -3838,13 +3856,14 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
mem = p->backref_n.n1;
{
UChar *pstart, *pend;
OnigPos n;
if (mem_end_stk[mem].i == INVALID_STACK_INDEX) goto fail;
if (mem_start_stk[mem].i == INVALID_STACK_INDEX) goto fail;
pstart = STACK_MEM_START(reg, mem);
pend = STACK_MEM_END(reg, mem);
n = (int )(pend - pstart);
n = pend - pstart;
if (n != 0) {
DATA_ENSURE(n);
STRING_CMP_IC(case_fold_flag, pstart, &s, n);
@ -3857,6 +3876,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
{
int is_fail;
UChar *pstart, *pend, *swork;
OnigPos n;
tlen = p->backref_general.num;
for (i = 0; i < tlen; i++) {
@ -3867,7 +3887,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
pstart = STACK_MEM_START(reg, mem);
pend = STACK_MEM_END(reg, mem);
n = (int )(pend - pstart);
n = pend - pstart;
if (n != 0) {
DATA_ENSURE(n);
swork = s;
@ -3886,6 +3906,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
{
int is_fail;
UChar *pstart, *pend, *swork;
OnigPos n;
tlen = p->backref_general.num;
for (i = 0; i < tlen; i++) {
@ -3896,7 +3917,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
pstart = STACK_MEM_START(reg, mem);
pend = STACK_MEM_END(reg, mem);
n = (int )(pend - pstart);
n = pend - pstart;
if (n != 0) {
DATA_ENSURE(n);
swork = s;
@ -3913,20 +3934,20 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
#ifdef USE_BACKREF_WITH_LEVEL
CASE_OP(BACKREF_WITH_LEVEL_IC)
n = 1; /* ignore case */
i = 1; /* ignore case */
goto backref_with_level;
CASE_OP(BACKREF_WITH_LEVEL)
{
int level;
MemNumType* mems;
n = 0;
i = 0;
backref_with_level:
level = p->backref_general.nest_level;
tlen = p->backref_general.num;
mems = tlen == 1 ? &(p->backref_general.n1) : p->backref_general.ns;
if (! backref_match_at_nested_level(reg, stk, stk_base, n,
if (! backref_match_at_nested_level(reg, stk, stk_base, i,
case_fold_flag, level, (int )tlen, mems, &s, end)) {
goto fail;
}
@ -4137,6 +4158,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
JUMP_OUT;
CASE_OP(REPEAT_INC)
{
int n;
mem = p->repeat_inc.id; /* mem: OP_REPEAT ID */
STACK_GET_REPEAT_COUNT(mem, n);
n++;
@ -4154,8 +4178,12 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
STACK_PUSH_REPEAT_INC(mem, n);
CHECK_INTERRUPT_JUMP_OUT;
}
CASE_OP(REPEAT_INC_NG)
{
int n;
mem = p->repeat_inc.id; /* mem: OP_REPEAT ID */
STACK_GET_REPEAT_COUNT(mem, n);
n++;
@ -4173,6 +4201,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
}
CHECK_INTERRUPT_JUMP_OUT;
}
#ifdef USE_CALL
CASE_OP(CALL)
@ -4490,9 +4519,10 @@ regset_search_body_position_lead(OnigRegSet* set,
const UChar* str, const UChar* end,
const UChar* start, const UChar* range, /* match start range */
const UChar* orig_range, /* data range */
OnigOptionType option, MatchArg* msas, int* rmatch_pos)
OnigOptionType option, MatchArg* msas, OnigPos* rmatch_pos)
{
int r, n, i;
OnigPos r;
int n, i;
UChar *s;
UChar *low, *high;
UChar* sch_range;
@ -4512,7 +4542,7 @@ regset_search_body_position_lead(OnigRegSet* set,
sr[i].state = SRS_DEAD;
if (reg->optimize != OPTIMIZE_NONE) {
if (reg->dist_max != INFINITE_LEN) {
if (reg->dist_max != INFINITE_SIZE) {
if (DIST_CAST(end - range) > reg->dist_max)
sch_range = (UChar* )range + reg->dist_max;
else
@ -4625,23 +4655,24 @@ regset_search_body_position_lead(OnigRegSet* set,
xfree(sr);
return ONIG_MISMATCH;
/* error */
finish:
xfree(sr);
return r;
return (int )r;
match:
xfree(sr);
*rmatch_pos = (int )(s - str);
*rmatch_pos = s - str;
return i;
}
static inline int
regset_search_body_regex_lead(OnigRegSet* set,
const UChar* str, const UChar* end,
const UChar* start, const UChar* orig_range, OnigRegSetLead lead,
OnigOptionType option, OnigMatchParam* mps[], int* rmatch_pos)
const UChar* str, const UChar* end,
const UChar* start, const UChar* orig_range, OnigRegSetLead lead,
OnigOptionType option, OnigMatchParam* mps[], OnigPos* rmatch_pos)
{
int r;
OnigPos r;
int i;
int n;
int match_index;
@ -4682,7 +4713,7 @@ onig_regset_search_with_param(OnigRegSet* set,
const UChar* str, const UChar* end,
const UChar* start, const UChar* range,
OnigRegSetLead lead, OnigOptionType option, OnigMatchParam* mps[],
int* rmatch_pos)
OnigPos* rmatch_pos)
{
int r;
int i;
@ -4729,7 +4760,7 @@ onig_regset_search_with_param(OnigRegSet* set,
}
if (set->anchor != OPTIMIZE_NONE && str < end) {
UChar *min_semi_end, *max_semi_end;
UChar *min_semi_end;
if ((set->anchor & ANCR_BEGIN_POSITION) != 0) {
/* search start-position only */
@ -4742,26 +4773,25 @@ onig_regset_search_with_param(OnigRegSet* set,
range = str + 1;
}
else if ((set->anchor & ANCR_END_BUF) != 0) {
min_semi_end = max_semi_end = (UChar* )end;
min_semi_end = (UChar* )end;
end_buf:
if ((OnigLen )(max_semi_end - str) < set->anc_dmin)
if (DIST_CAST(end - str) < set->anc_dmin)
goto mismatch_no_msa;
if ((OnigLen )(min_semi_end - start) > set->anc_dmax) {
if (DIST_CAST(min_semi_end - start) > set->anc_dmax) {
start = min_semi_end - set->anc_dmax;
if (start < end)
start = onigenc_get_right_adjust_char_head(enc, str, start);
}
if ((OnigLen )(max_semi_end - (range - 1)) < set->anc_dmin) {
range = max_semi_end - set->anc_dmin + 1;
if (DIST_CAST(end - (range - 1)) < set->anc_dmin) {
range = end - set->anc_dmin + 1;
}
if (start > range) goto mismatch_no_msa;
}
else if ((set->anchor & ANCR_SEMI_END_BUF) != 0) {
UChar* pre_end = ONIGENC_STEP_BACK(enc, str, end, 1);
max_semi_end = (UChar* )end;
if (ONIGENC_IS_MBC_NEWLINE(enc, pre_end, end)) {
min_semi_end = pre_end;
@ -4786,7 +4816,7 @@ onig_regset_search_with_param(OnigRegSet* set,
}
}
else if (str == end) { /* empty string */
start = end = str;
start = str;
s = (UChar* )start;
msas = (MatchArg* )xmalloc(sizeof(*msas) * set->n);
@ -4802,13 +4832,17 @@ onig_regset_search_with_param(OnigRegSet* set,
/* Can't use REGSET_MATCH_AND_RETURN_CHECK()
because r must be set regex index (i)
*/
r = match_at(reg, str, end, end, s, msas + i);
if (r != ONIG_MISMATCH) {
if (r >= 0) {
OnigPos pos;
pos = match_at(reg, str, end, end, s, msas + i);
if (pos != ONIG_MISMATCH) {
if (pos >= 0) {
r = i;
goto match;
}
else goto finish; /* error */
else {
r = (int )pos;
goto finish; /* error */
}
}
}
}
@ -4871,8 +4905,8 @@ onig_regset_search_with_param(OnigRegSet* set,
extern int
onig_regset_search(OnigRegSet* set, const UChar* str, const UChar* end,
const UChar* start, const UChar* range,
OnigRegSetLead lead, OnigOptionType option, int* rmatch_pos)
const UChar* start, const UChar* range,
OnigRegSetLead lead, OnigOptionType option, OnigPos* rmatch_pos)
{
int r;
int i;
@ -5103,11 +5137,11 @@ map_search_backward(OnigEncoding enc, UChar map[],
}
return (UChar* )NULL;
}
extern int
extern OnigPos
onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at,
OnigRegion* region, OnigOptionType option)
{
int r;
OnigPos r;
OnigMatchParam mp;
onig_initialize_match_param(&mp);
@ -5116,12 +5150,12 @@ onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at,
return r;
}
extern int
extern OnigPos
onig_match_with_param(regex_t* reg, const UChar* str, const UChar* end,
const UChar* at, OnigRegion* region, OnigOptionType option,
OnigMatchParam* mp)
{
int r;
OnigPos r;
MatchArg msa;
#ifndef USE_POSIX_API
@ -5135,7 +5169,7 @@ onig_match_with_param(regex_t* reg, const UChar* str, const UChar* end,
&& !OPTON_POSIX_REGION(option)
#endif
) {
r = onig_region_resize_clear(region, reg->num_mem + 1);
r = (OnigPos )onig_region_resize_clear(region, reg->num_mem + 1);
}
else
r = 0;
@ -5260,7 +5294,7 @@ forward_search(regex_t* reg, const UChar* str, const UChar* end, UChar* start,
*high = p;
}
else {
if (reg->dist_max != INFINITE_LEN) {
if (reg->dist_max != INFINITE_SIZE) {
if (DIST_CAST(p - str) < reg->dist_max) {
*low = (UChar* )str;
}
@ -5280,9 +5314,8 @@ forward_search(regex_t* reg, const UChar* str, const UChar* end, UChar* start,
#ifdef ONIG_DEBUG_SEARCH
fprintf(DBGFP,
"forward_search success: low: %d, high: %d, dmin: %u, dmax: %u\n",
(int )(*low - str), (int )(*high - str),
reg->dist_min, reg->dist_max);
"forward_search success: low: %ld, high: %ld, dmin: %u, dmax: %lu\n",
*low - str, *high - str, reg->dist_min, reg->dist_max);
#endif
return 1; /* success */
}
@ -5364,7 +5397,7 @@ backward_search(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
}
}
if (reg->dist_max != INFINITE_LEN) {
if (reg->dist_max != INFINITE_SIZE) {
if (DIST_CAST(p - str) < reg->dist_max)
*low = (UChar* )str;
else
@ -5398,12 +5431,12 @@ backward_search(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
}
extern int
extern OnigPos
onig_search(regex_t* reg, const UChar* str, const UChar* end,
const UChar* start, const UChar* range, OnigRegion* region,
OnigOptionType option)
{
int r;
OnigPos r;
OnigMatchParam mp;
const UChar* data_range;
@ -5423,22 +5456,22 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
}
static int
static OnigPos
search_in_range(regex_t* reg, const UChar* str, const UChar* end,
const UChar* start, const UChar* range, /* match start range */
const UChar* data_range, /* subject string range */
OnigRegion* region,
OnigOptionType option, OnigMatchParam* mp)
{
int r;
OnigPos r;
UChar *s;
MatchArg msa;
const UChar *orig_start = start;
#ifdef ONIG_DEBUG_SEARCH
fprintf(DBGFP,
"onig_search (entry point): str: %p, end: %d, start: %d, range: %d\n",
str, (int )(end - str), (int )(start - str), (int )(range - str));
"onig_search (entry point): str: %p, end: %ld, start: %ld, range: %ld\n",
str, end - str, start - str, range - str);
#endif
ADJUST_MATCH_PARAM(reg, mp);
@ -5455,7 +5488,7 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
&& ! OPTON_POSIX_REGION(option)
#endif
) {
r = onig_region_resize_clear(region, reg->num_mem + 1);
r = (OnigPos )onig_region_resize_clear(region, reg->num_mem + 1);
if (r != 0) goto finish_no_msa;
}
@ -5481,7 +5514,7 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
/* anchor optimize: resume search range */
if (reg->anchor != 0 && str < end) {
UChar *min_semi_end, *max_semi_end;
UChar *min_semi_end;
if (reg->anchor & ANCR_BEGIN_POSITION) {
/* search start-position only */
@ -5507,10 +5540,10 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
}
}
else if (reg->anchor & ANCR_END_BUF) {
min_semi_end = max_semi_end = (UChar* )end;
min_semi_end = (UChar* )end;
end_buf:
if ((OnigLen )(max_semi_end - str) < reg->anc_dist_min)
if (DIST_CAST(end - str) < reg->anc_dist_min)
goto mismatch_no_msa;
if (range > start) {
@ -5520,11 +5553,11 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
if (start < end)
start = onigenc_get_right_adjust_char_head(reg->enc, str, start);
}
if (DIST_CAST(max_semi_end - (range - 1)) < reg->anc_dist_min) {
if (DIST_CAST(max_semi_end - str + 1) < reg->anc_dist_min)
if (DIST_CAST(end - (range - 1)) < reg->anc_dist_min) {
if (DIST_CAST(end - str + 1) < reg->anc_dist_min)
goto mismatch_no_msa;
else
range = max_semi_end - reg->anc_dist_min + 1;
range = end - reg->anc_dist_min + 1;
}
if (start > range) goto mismatch_no_msa;
@ -5536,11 +5569,11 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
DIST_CAST(min_semi_end - range) > reg->anc_dist_max) {
range = min_semi_end - reg->anc_dist_max;
}
if (DIST_CAST(max_semi_end - start) < reg->anc_dist_min) {
if (DIST_CAST(max_semi_end - str) < reg->anc_dist_min)
if (DIST_CAST(end - start) < reg->anc_dist_min) {
if (DIST_CAST(end - str) < reg->anc_dist_min)
goto mismatch_no_msa;
else {
start = max_semi_end - reg->anc_dist_min;
start = end - reg->anc_dist_min;
start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start);
}
}
@ -5550,7 +5583,6 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
else if (reg->anchor & ANCR_SEMI_END_BUF) {
UChar* pre_end = ONIGENC_STEP_BACK(reg->enc, str, end, 1);
max_semi_end = (UChar* )end;
if (ONIGENC_IS_MBC_NEWLINE(reg->enc, pre_end, end)) {
min_semi_end = pre_end;
@ -5593,8 +5625,8 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
}
#ifdef ONIG_DEBUG_SEARCH
fprintf(DBGFP, "onig_search(apply anchor): end: %d, start: %d, range: %d\n",
(int )(end - str), (int )(start - str), (int )(range - str));
fprintf(DBGFP, "onig_search(apply anchor): end: %ld, start: %ld, range: %ld\n",
end - str, start - str, range - str);
#endif
MATCH_ARG_INIT(msa, reg, option, region, orig_start, mp);
@ -5605,7 +5637,7 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
UChar *sch_range, *low, *high;
if (reg->dist_max != 0) {
if (reg->dist_max == INFINITE_LEN)
if (reg->dist_max == INFINITE_SIZE)
sch_range = (UChar* )end;
else {
if (DIST_CAST(end - range) < reg->dist_max)
@ -5621,7 +5653,7 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
if ((end - start) < reg->threshold_len)
goto mismatch;
if (reg->dist_max != INFINITE_LEN) {
if (reg->dist_max != INFINITE_SIZE) {
do {
if (! forward_search(reg, str, end, s, sch_range, &low, &high))
goto mismatch;
@ -5689,7 +5721,7 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
else
min_range = end;
if (reg->dist_max != INFINITE_LEN) {
if (reg->dist_max != INFINITE_SIZE) {
do {
if (DIST_CAST(end - s) > reg->dist_max)
sch_start = s + reg->dist_max;
@ -5751,7 +5783,7 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
#ifdef ONIG_DEBUG
if (r != ONIG_MISMATCH)
fprintf(DBGFP, "onig_search: error %d\n", r);
fprintf(DBGFP, "onig_search: error %ld\n", r);
#endif
return r;
@ -5760,19 +5792,19 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
finish_no_msa:
#ifdef ONIG_DEBUG
if (r != ONIG_MISMATCH)
fprintf(DBGFP, "onig_search: error %d\n", r);
fprintf(DBGFP, "onig_search: error %ld\n", r);
#endif
return r;
match:
MATCH_ARG_FREE(msa);
return (int )(s - str);
return s - str;
}
extern int
extern OnigPos
onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
const UChar* start, const UChar* range, OnigRegion* region,
OnigOptionType option, OnigMatchParam* mp)
const UChar* start, const UChar* range, OnigRegion* region,
OnigOptionType option, OnigMatchParam* mp)
{
const UChar* data_range;
@ -5788,10 +5820,10 @@ onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,
extern int
onig_scan(regex_t* reg, const UChar* str, const UChar* end,
OnigRegion* region, OnigOptionType option,
int (*scan_callback)(int, int, OnigRegion*, void*),
int (*scan_callback)(int, OnigPos, OnigRegion*, void*),
void* callback_arg)
{
int r;
OnigPos r;
int n;
int rs;
const UChar* start;
@ -5827,7 +5859,7 @@ onig_scan(regex_t* reg, const UChar* str, const UChar* end,
break;
}
else { /* error */
return r;
return (int )r;
}
}
@ -5958,7 +5990,7 @@ update_regset_by_reg(OnigRegSet* set, regex_t* reg)
set->anc_dmin = reg->anc_dist_min;
set->anc_dmax = reg->anc_dist_max;
set->all_low_high =
(reg->optimize == OPTIMIZE_NONE || reg->dist_max == INFINITE_LEN) ? 0 : 1;
(reg->optimize == OPTIMIZE_NONE || reg->dist_max == INFINITE_SIZE) ? 0 : 1;
set->anychar_inf = (reg->anchor & ANCR_ANYCHAR_INF) != 0 ? 1 : 0;
}
else {
@ -5979,7 +6011,7 @@ update_regset_by_reg(OnigRegSet* set, regex_t* reg)
set->anchor = anchor;
if (reg->optimize == OPTIMIZE_NONE || reg->dist_max == INFINITE_LEN)
if (reg->optimize == OPTIMIZE_NONE || reg->dist_max == INFINITE_SIZE)
set->all_low_high = 0;
if ((reg->anchor & ANCR_ANYCHAR_INF) != 0)
@ -6105,7 +6137,7 @@ onig_regset_get_region(OnigRegSet* set, int at)
#ifdef USE_DIRECT_THREADED_CODE
extern int
extern OnigPos
onig_init_for_match_at(regex_t* reg)
{
return match_at(reg, (const UChar* )NULL, (const UChar* )NULL,

View File

@ -287,6 +287,10 @@ typedef unsigned __int64 uint64_t;
#endif
#endif /* _WIN32 */
typedef size_t OnigSize;
#define INFINITE_SIZE ~((OnigSize )0)
#if SIZEOF_VOIDP == SIZEOF_LONG
typedef unsigned long hash_data_type;
#elif SIZEOF_VOIDP == SIZEOF_LONG_LONG
@ -925,7 +929,7 @@ struct re_pattern_buffer {
unsigned char map[CHAR_MAP_SIZE]; /* used as BMH skip or char-map */
int map_offset;
OnigLen dist_min; /* min-distance of exact or map */
OnigLen dist_max; /* max-distance of exact or map */
OnigSize dist_max; /* max-distance of exact or map */
RegexExt* extp;
};
@ -937,7 +941,7 @@ struct re_pattern_buffer {
extern void onig_add_end_call(void (*func)(void));
extern void onig_warning(const char* s);
extern UChar* onig_error_code_to_format P_((int code));
extern UChar* onig_error_code_to_format P_((OnigPos code));
extern void ONIG_VARIADIC_FUNC_ATTR onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));
extern int onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));
extern int onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, void* /* CClassNode* */ cc));

View File

@ -66,7 +66,7 @@ typedef struct {
} O2PERR;
static int
onig2posix_error_code(int code)
onig2posix_error_code(OnigPos code)
{
static const O2PERR o2p[] = {
{ ONIG_MISMATCH, REG_NOMATCH },
@ -147,11 +147,13 @@ onig2posix_error_code(int code)
};
int i;
int icode;
if (code >= 0) return 0;
icode = (int )code;
for (i = 0; i < (int )(sizeof(o2p) / sizeof(o2p[0])); i++) {
if (code == o2p[i].onig_err)
if (icode == o2p[i].onig_err)
return o2p[i].posix_err;
}
@ -197,6 +199,7 @@ onig_posix_regexec(onig_posix_regex_t* reg, const char* str, size_t nmatch,
onig_posix_regmatch_t pmatch[], int posix_options)
{
int r, i, len;
OnigPos pos;
UChar* end;
onig_posix_regmatch_t* pm;
OnigOptionType options;
@ -221,22 +224,22 @@ onig_posix_regexec(onig_posix_regex_t* reg, const char* str, size_t nmatch,
ENC_STRING_LEN(ONIG_C(reg)->enc, str, len);
end = (UChar* )(str + len);
r = onig_search(ONIG_C(reg), (UChar* )str, end, (UChar* )str, end,
(OnigRegion* )pm, options);
pos = onig_search(ONIG_C(reg), (UChar* )str, end, (UChar* )str, end,
(OnigRegion* )pm, options);
if (r >= 0) {
if (pos >= 0) {
r = 0; /* Match */
if (pm != pmatch && pm != NULL) {
xmemcpy(pmatch, pm, sizeof(onig_posix_regmatch_t) * nmatch);
}
}
else if (r == ONIG_MISMATCH) {
else if (pos == ONIG_MISMATCH) {
r = REG_NOMATCH;
for (i = 0; i < (int )nmatch; i++)
pmatch[i].rm_so = pmatch[i].rm_eo = ONIG_REGION_NOTPOS;
}
else {
r = onig2posix_error_code(r);
r = onig2posix_error_code(pos);
}
if (pm != pmatch && pm != NULL)

View File

@ -1 +1 @@
6.9.7
7.0.0