pcre: only include PCRE_UCP on versions >= 8.10 of PCRE

Very old versions of the library doesn't seem to have that option.
char-rename
Björn Lindqvist 2016-08-19 21:09:00 +02:00
parent 3ea34c667d
commit eb8ce16277
3 changed files with 19 additions and 8 deletions

View File

@ -49,6 +49,7 @@ CONSTANT: PCRE_NO_START_OPTIMIZE 0x04000000
CONSTANT: PCRE_NO_START_OPTIMISE 0x04000000 CONSTANT: PCRE_NO_START_OPTIMISE 0x04000000
CONSTANT: PCRE_PARTIAL_HARD 0x08000000 CONSTANT: PCRE_PARTIAL_HARD 0x08000000
CONSTANT: PCRE_NOTEMPTY_ATSTART 0x10000000 CONSTANT: PCRE_NOTEMPTY_ATSTART 0x10000000
! New in 8.10
CONSTANT: PCRE_UCP 0x20000000 CONSTANT: PCRE_UCP 0x20000000
ENUM: PCRE_ERRORS ENUM: PCRE_ERRORS
@ -137,7 +138,9 @@ FUNCTION: void* pcre_compile2 ( c-string pattern,
char* tableptr ) char* tableptr )
FUNCTION: int pcre_info ( void* pcre, int* optptr, int* first_byte ) FUNCTION: int pcre_info ( void* pcre, int* optptr, int* first_byte )
FUNCTION: int pcre_fullinfo ( void* pcre, pcre_extra* extra, int what, void *where ) FUNCTION: int pcre_fullinfo ( void* pcre,
pcre_extra* extra,
int what, void *where )
FUNCTION: pcre_extra* pcre_study ( void* pcre, int options, char** errptr ) FUNCTION: pcre_extra* pcre_study ( void* pcre, int options, char** errptr )
FUNCTION: int pcre_exec ( void* pcre, FUNCTION: int pcre_exec ( void* pcre,

View File

@ -27,7 +27,15 @@ CONSTANT: iso-date "(?P<year>\\d{4})-(?P<month>\\d{2})-(?P<day>\\d{2})"
{ "year" "month" "day" } [ pcre_get_stringnumber ] with map { "year" "month" "day" } [ pcre_get_stringnumber ] with map
] unit-test ] unit-test
{ t } [ "foo" <compiled-pcre> PCRE_UTF8 has-option? ] unit-test { t } [
"foo" <compiled-pcre> PCRE_UTF8 has-option?
] unit-test
! This option is not present on old PCRE versions.
{ t } [
"foo" <compiled-pcre> version 8.10 >
[ PCRE_UCP has-option? ] [ PCRE_UCP has-option? not ] if
] unit-test
os unix? [ [ 10 ] [ PCRE_CONFIG_NEWLINE pcre-config ] unit-test ] when os unix? [ [ 10 ] [ PCRE_CONFIG_NEWLINE pcre-config ] unit-test ] when

View File

@ -4,8 +4,7 @@
USING: accessors alien alien.accessors alien.c-types alien.data USING: accessors alien alien.accessors alien.c-types alien.data
alien.enums alien.strings arrays assocs combinators fry alien.enums alien.strings arrays assocs combinators fry
io.encodings.string io.encodings.utf8 kernel literals math io.encodings.string io.encodings.utf8 kernel literals math
math.bitwise math.parser pcre.ffi sequences splitting strings ; math.bitwise math.parser pcre.ffi regexp sequences splitting strings ;
QUALIFIED: regexp
IN: pcre IN: pcre
ERROR: bad-option what ; ERROR: bad-option what ;
@ -14,6 +13,9 @@ ERROR: malformed-regexp expr error ;
ERROR: pcre-error value ; ERROR: pcre-error value ;
: version ( -- f )
pcre_version " " splitting:split1 drop string>number ;
<PRIVATE <PRIVATE
: replace-all ( seq subseqs new -- seq ) : replace-all ( seq subseqs new -- seq )
@ -75,7 +77,8 @@ ERROR: pcre-error value ;
: options ( pcre -- opts ) : options ( pcre -- opts )
f PCRE_INFO_OPTIONS pcre-fullinfo ; f PCRE_INFO_OPTIONS pcre-fullinfo ;
CONSTANT: default-opts flags{ PCRE_UTF8 PCRE_UCP } : default-opts ( -- opts )
PCRE_UTF8 version 8.10 >= [ PCRE_UCP bitor ] when ;
: (pcre) ( expr -- pcre err-message err-offset ) : (pcre) ( expr -- pcre err-message err-offset )
default-opts { c-string int } [ f pcre_compile ] with-out-parameters ; default-opts { c-string int } [ f pcre_compile ] with-out-parameters ;
@ -155,6 +158,3 @@ M: regexp:regexp findall
: split ( subject obj -- strings ) : split ( subject obj -- strings )
dupd findall [ first second ] map split-subseqs ; dupd findall [ first second ] map split-subseqs ;
: version ( -- r )
pcre_version " " splitting:split1 drop string>number ;