mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
623 lines
17 KiB
Mathematica
623 lines
17 KiB
Mathematica
;
|
|
; GT.M PCRE Extension
|
|
; Copyright (C) 2012 Piotr Koper <piotr.koper@gmail.com>
|
|
;
|
|
; This program is free software: you can redistribute it and/or modify
|
|
; it under the terms of the GNU Affero General Public License as
|
|
; published by the Free Software Foundation, either version 3 of the
|
|
; License, or (at your option) any later version.
|
|
;
|
|
; This program is distributed in the hope that it will be useful,
|
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
; GNU Affero General Public License for more details.
|
|
;
|
|
; You should have received a copy of the GNU Affero General Public License
|
|
; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
;
|
|
|
|
|
|
|
|
; GT.M PCRE Extension Examples
|
|
;
|
|
; see pcre.m for comments on routines parameters and all possible values for
|
|
; the options
|
|
;
|
|
pcreexamples ;GT.M PCRE Extension Examples
|
|
;1.0;Initial release;pkoper
|
|
d routines
|
|
q
|
|
|
|
|
|
; GT.M PCRE Extension API
|
|
; The shining examples
|
|
;
|
|
|
|
test
|
|
; Test the subject for the match
|
|
w $$test^pcre("The quick brown fox jumps over the lazy dog","fox"),!
|
|
w $$test^pcre("The quick brown fox jumps over the lazy dog","FoX","caseless"),!
|
|
q
|
|
|
|
match
|
|
n n
|
|
; Simple match
|
|
w $$match^pcre("The quick brown fox jumps over the lazy dog"," (\w+) ",.n),! zwr
|
|
|
|
; Match with a named groups
|
|
w $$match^pcre("The quick brown fox jumps over the lazy dog","(?<first>\w+) (?<second>\w+)",.n),! zwr
|
|
|
|
; Match with a named group and limit the output to only the "second"
|
|
w $$match^pcre("The quick brown fox jumps over the lazy dog","(?<first>\w+) (?<second>\w+)",.n,"second"),! zwr
|
|
|
|
; Match with a named group with only named patterns
|
|
w $$match^pcre("The quick brown fox jumps over the lazy dog","(?<first>\w+) (?<second>\w+)",.n,,"named_only"),! zwr
|
|
q
|
|
|
|
global
|
|
n n
|
|
; Global match
|
|
w $$global^pcre("The quick brown fox jumps over the lazy dog","(\w+)",.n),! zwr
|
|
|
|
; Global match with a named groups
|
|
w $$global^pcre("The quick brown fox jumps over the lazy dog","(?<first>\w+)\s+(?<second>\w+)",.n),! zwr
|
|
|
|
; Global match with grouped captured data
|
|
w $$global^pcre("The quick brown fox jumps over the lazy dog","(?<first>\w+)\s+(?<second>\w+)",.n,,"grouped"),! zwr
|
|
|
|
; Global match with grouped captured data and only named patterns
|
|
w $$global^pcre("The quick brown fox jumps over the lazy dog","(?<first>\w+)\s+(?<second>\w+)",.n,,"grouped|named_only"),! zwr
|
|
q
|
|
|
|
replace
|
|
; Just the replace
|
|
w $$replace^pcre("The quick brown fox jumps over the lazy dog","brown","yellow"),!
|
|
|
|
; Change the word order
|
|
w $$replace^pcre("The quick brown fox jumps over the lazy dog","(\w+)\s+(\w+)","\2 \1"),!
|
|
|
|
; Change the word order with named groups
|
|
w $$replace^pcre("The quick brown fox jumps over the lazy dog","(?<first>\w+)\s+(?<second>\w+)","\{second} \{first}"),!
|
|
|
|
; Escape the \ sequence
|
|
w $$replace^pcre("The quick brown fox jumps over the lazy dog","(?<first>\w+)\s+(?<second>\w+)","\{second} \\{first}"),!
|
|
|
|
; More \ chars
|
|
w $$replace^pcre("The quick brown fox jumps over the lazy dog","(?<first>\w+)\s+(?<second>\w+)","\\\{second} \\\\{first}"),!
|
|
q
|
|
|
|
|
|
|
|
; PCRE API
|
|
; Low level PCRE API examples
|
|
;
|
|
api
|
|
n subject,pattern,options,offset,ref,count,i,begin,end,s,name,n
|
|
|
|
; Setup exception trap as in myexception2^pcreexamples
|
|
s $zt="d trap^pcre("_$st_") zg "_$zl_":apitrap^pcreexamples"
|
|
|
|
s subject="The quick brown fox "_$c(10)_"jumps over the lazy dog"
|
|
s pattern="(?<all>(.*?(?<red>F\S+).*?)(?<high>\w+))"
|
|
|
|
; options are case insensitive, as well as all stringified option
|
|
; names for all functions in this extension
|
|
s options="CASELESS|multiLINE|NL_CrLf|NO_AUTO_CAPTURE|dotall"
|
|
s offset=5 ; start the match with "quick"
|
|
|
|
; Compile the pattern
|
|
s ref=$$compile^pcre(.pattern,.options) ; pass by the reference
|
|
|
|
; Run the match
|
|
s count=$$exec^pcre(.ref,.subject,,.offset)
|
|
w "count: ",count,!
|
|
|
|
; To access the ovector array $$ovector^pcre and $$ovecsize^pcre can
|
|
; be used.
|
|
;
|
|
; ovector array size is always (n + 1) * 3, where n is a number of
|
|
; possible capture strings in the submitted pattern for the
|
|
; $$compile^pcre(). The exact number of usable pairs of integers in
|
|
; ovector array is by the $$exec^pcre().
|
|
;
|
|
w "ovecsize: ",$$ovecsize^pcre(.ref),!
|
|
|
|
; Get the captured data in an old way
|
|
f i=0:1:count-1 d
|
|
. s begin=$$ovector^pcre(.ref,i*2)+1
|
|
. s end=$$ovector^pcre(.ref,i*2+1)
|
|
. s s=$ze(subject,begin,end)
|
|
. w i,": ",s,!
|
|
|
|
; See what's in the nametable
|
|
;
|
|
; $$nametable^pcre returns i-th element of nametable array, where the
|
|
; index of the ovector array is passed by the reference in n, and the
|
|
; return value is a name.
|
|
;
|
|
f i=1:1 s name=$$nametable^pcre(.ref,.i,.n) q:name="" d
|
|
. s begin=$$ovector^pcre(.ref,n*2)+1 ; the returned subject index in n
|
|
. s end=$$ovector^pcre(.ref,n*2+1)
|
|
. s s=$ze(subject,begin,end)
|
|
. w name,": ",s,!
|
|
|
|
; Use $$substring^pcre() to get the captured string instead of playing
|
|
; with $$ovector^pcre().
|
|
f i=0:1:count-1 w i,": ",$$substring^pcre(.ref,.i),!
|
|
|
|
; .. and get the begin and the end index of the captured data in the
|
|
; subject, as a side effect.
|
|
f i=0:1:count-1 d
|
|
. w i,": ",$$substring^pcre(.ref,.i,.begin,.end),!
|
|
. w "begin: ",begin,!
|
|
. w "end: ",end,!
|
|
|
|
; Get some details on compiled pattern
|
|
w "options: ",$$fullinfo^pcre(.ref,"OPTIONS"),!
|
|
w "capture count: ",$$fullinfo^pcre(.ref,"CAPTURECOUNT"),!
|
|
w "jit: ",$$fullinfo^pcre(.ref,"JIT"),!
|
|
w "min length: ",$$fullinfo^pcre(.ref,"MINLENGTH"),!
|
|
|
|
; Free the data internally allocated for the PCRE structures
|
|
;
|
|
d free^pcre(.ref)
|
|
|
|
; Finally, raise an example exception
|
|
;
|
|
; see "Exception Handler Examples"
|
|
;
|
|
w $t(api+4^pcreexamples),!
|
|
w $$compile^pcre("aa)bb"),!
|
|
w "should never be written, the %PCRE-E-COMPILE should be raised",!
|
|
q
|
|
|
|
apitrap
|
|
w "apitrap^pcreexamples",!
|
|
q
|
|
|
|
|
|
|
|
|
|
; Perl5 Global Match Compatibility
|
|
;
|
|
; Global match as with /g switch on regular expressions in Perl5 is supported.
|
|
;
|
|
; See $$global^pcre and $$replace^pcre examples.
|
|
|
|
|
|
; Compatibility Case: Empty Matches
|
|
;
|
|
|
|
; Global Match
|
|
;
|
|
p5global
|
|
w "$ perl -e '$_ = ""aa""; print ""1: $1\n"" while /(b*|aa)/mg'",!
|
|
zsy "perl -e ""\$_ = \""aa\""; print \""1: \$1\n\"" while /(b*|aa)/mg"""
|
|
d global^pcre("aa","b*|aa",.n) zwr
|
|
q
|
|
|
|
; Global Replace
|
|
;
|
|
p5replace
|
|
w "$ perl -e '$_ = ""aa""; s/(b*|a)/Xy/g; print ""$_\n""'",!
|
|
zsy "perl -e ""\$_ = \""aa\""; s/(b*|a)/Xy/g; print \""\$_\n\"""""
|
|
w $$replace^pcre("aa","(b*|a)","Xy"),!
|
|
|
|
w "$ perl -e '$_ = ""aa""; s/(b*|aa)/Xy/g; print ""$_\n""'",!
|
|
zsy "perl -e ""\$_ = \""aa\""; s/(b*|aa)/Xy/g; print \""\$_\n\"""""
|
|
w $$replace^pcre("aa","(b*|aa)","Xy"),!
|
|
|
|
w "$ perl -e '$_ = ""aaa""; s/(b*|aa)/Xy/g; print ""$_\n""'",!
|
|
zsy "perl -e ""\$_ = \""aaa\""; s/(b*|aa)/Xy/g; print \""\$_\n\"""""
|
|
w $$replace^pcre("aaa","(b*|aa)","Xy"),!
|
|
q
|
|
|
|
|
|
; Compatibility Case: New Line Characters
|
|
;
|
|
|
|
; Multi-line with LF
|
|
;
|
|
p5lf
|
|
w "perl -e '$_ = ""aa\nbb""; print ""1: $1\n"" while /(.*)/mg'",!
|
|
zsy "perl -e ""\$_ = \""aa\nbb\""; print \""1: \$1\n\"" while /(.*)/mg"""
|
|
d global^pcre("aa"_$c(10)_"bb",".*",.n,,"multiline|nl_lf") zwr
|
|
q
|
|
|
|
; Various New Line Specs
|
|
;
|
|
p5nl
|
|
d global^pcre("aa"_$c(13)_$c(10)_"bb",".*",.n,,"multiline|nl_lf") zwr
|
|
d global^pcre("aa"_$c(13)_$c(10)_"bb",".*",.n,,"multiline|nl_cr") zwr
|
|
d global^pcre("aa"_$c(13)_$c(10)_"bb",".*",.n,,"multiline|nl_crlf") zwr
|
|
q
|
|
|
|
|
|
|
|
; PCRE library version
|
|
;
|
|
version
|
|
w $$version^pcre,!
|
|
q
|
|
|
|
; PCRE compile time defaults
|
|
;
|
|
newline
|
|
w $$config^pcre("NEWLINE"),!
|
|
q
|
|
|
|
utf8support
|
|
w $$config^pcre("UTF8"),!
|
|
q
|
|
|
|
; Stack Usage
|
|
;
|
|
; PCRE's stack usage discover procedure
|
|
;
|
|
stackusage
|
|
w $$stackusage^pcre,!
|
|
q
|
|
|
|
|
|
|
|
; Locale Support Examples
|
|
;
|
|
; Polish language has been used as an example for I18N support in PCRE.
|
|
;
|
|
|
|
; The example word "dąb" (encoded here in UTF-8) is an "oak" in Polish.
|
|
;
|
|
; The second letter in "dąb" is <aogonek> (I18N) which is:
|
|
; $c(177) in ISO8859-2,
|
|
; $c(261) in UTF-8,
|
|
; see http://en.wikipedia.org/wiki/Polish_code_pages for complete listing
|
|
;
|
|
|
|
; Note of $CHAR(n) in different GT.M character modes:
|
|
;
|
|
; In UTF-8 mode $c(177) will return two octet encoded UTF-8 char is
|
|
; probably not an expected result when working with single octet ISO
|
|
; encoded chars.
|
|
;
|
|
; Use $zch(177) to create single octet ISO char, but be prepared for
|
|
; %GTM-E-BADCHAR errors. Also the result of $l(), $a() and others might
|
|
; be not what is expected.
|
|
;
|
|
|
|
|
|
; Locale: C or POSIX (i.e. no localization)
|
|
;
|
|
nolocale
|
|
w $zchset,!
|
|
w $$match^pcre("d"_$zch(177)_"b","\w{3}",.n,,,),! zwr
|
|
q
|
|
|
|
; Locale: ISO
|
|
;
|
|
isolocale
|
|
w $zchset,!
|
|
w $$match^pcre("d"_$zch(177)_"b","\w{3}",.n,,,"pl_PL"),! zwr
|
|
q
|
|
|
|
; Locale: UTF-8
|
|
;
|
|
utflocale
|
|
; M and UTF-8 mode
|
|
w $$match^pcre("d"_$zch(196)_$zch(133)_"b","\w{3}",.n,,"UTF8|UCP","pl_PL.UTF8"),! zwr
|
|
|
|
; UTF-8 mode only
|
|
w $$match^pcre("d"_$c(261)_"b","\w{3}",.n,,"UTF8|UCP","pl_PL.UTF8"),! zwr
|
|
q
|
|
|
|
; Locale: environment ($LANG, $LC_CTYPE)
|
|
;
|
|
; Set the GT.M environment for LANG="pl_PL" or LANG="pl_PL.UTF8" to obtain
|
|
; different results.
|
|
;
|
|
envlocale
|
|
w $ztrnlnm("LANG"),!
|
|
w $ztrnlnm("LC_CTYPE"),!
|
|
w $$match^pcre("d"_$c(177)_"b","\w{3}",.n,,,"env"),! zwr
|
|
w $$match^pcre("d"_$zch(196)_$zch(133)_"b","\w{3}",.n,,"UTF8|UCP","pl_PL.UTF8"),! zwr
|
|
q
|
|
|
|
|
|
; Notes on GT.M in UTF-8
|
|
;
|
|
; Enabling native support for UTF-8 in GT.M requires:
|
|
; 1) libicu
|
|
; 2) environment:
|
|
; gtm_chset=UTF-8
|
|
; gtm_icu_version=4.8
|
|
; 3) recompiled object files for UTF-8
|
|
;
|
|
;
|
|
; Instructions for UTF-8 in Debian 6
|
|
;
|
|
; 1) Install libicu (libicu48)
|
|
; $ apt-get install libicu48
|
|
; 2) append environment setup to GT.M's user .bash_profile
|
|
; export gtm_chset=UTF-8
|
|
; export gtm_icu_version=4.8
|
|
; 3) remove *.o files from the GT.M installation directory
|
|
; $ rm /opt/gtm/*.o
|
|
; 4) allow GT.M's user to write new object files
|
|
; $ chown gtm /opt/gtm
|
|
;
|
|
;
|
|
; Startup errors in UTF-8 mode
|
|
;
|
|
; %GTM-E-INVOBJ, Cannot ZLINK object file due to unexpected format
|
|
; %GTM-I-TEXT, Object compiled with CHSET=M which is different from $ZCHSET
|
|
;
|
|
; The above errors are written by the GT.M at the startup when the environment
|
|
; has the correct setup for the UTF-8, but GT.M can't use already existing
|
|
; object files for execution, because they were compiled for the M charset.
|
|
; Remove all GT.M's object files like in step 3) in the "Instructions for
|
|
; UTF-8 in Debian 6" above.
|
|
;
|
|
|
|
|
|
|
|
; Match Limits
|
|
;
|
|
; PCRE has built-in limits on internal matching and recursion.
|
|
;
|
|
; Those limits prevent the PCRE engine from a very long runs, especially
|
|
; when there would be no matches and all possible paths in the match
|
|
; tree must be checked.
|
|
;
|
|
; Functions using $$compile^pcre and the $$compile^pcre itself allows
|
|
; setting MATCH_LIMIT and MATCH_LIMIT_RECURSION in optional arguments
|
|
; named mlimit and reclimit:
|
|
;
|
|
; $$compile^pcre(pattern,options,locale,mlimit,reclimit)
|
|
; $$match^pcre(subject,pattern,match,capture,options,locale,mlimit,reclimit)
|
|
; $$global^pcre(subject,pattern,match,capture,options,locale,mlimit,reclimit)
|
|
; $$replace^pcre(subject,pattern,subst,first,last,options,locale,mlimit,reclimit)
|
|
;
|
|
; If the mlimit or reclimit are not specified, the PCRE library
|
|
; compilation time defaults are used.
|
|
;
|
|
limits
|
|
w "Compile time (default) MATCH_LIMIT is: ",$$config^pcre("MATCH_LIMIT"),!
|
|
w "Compile time (default) MATCH_LIMIT_RECURSION is: ",$$config^pcre("MATCH_LIMIT"),!
|
|
q
|
|
|
|
; Example pattern with a very long run time
|
|
;
|
|
longrun
|
|
w $$match^pcre("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","(\D+|<\d+>)*[!?]",.n),! zwr
|
|
w "should never be written, the %PCRE-E-MATCHLIMIT should be raised",!
|
|
q
|
|
|
|
; Equal to the longrun^pcreexamples, but corrected pattern
|
|
;
|
|
shortrun
|
|
w $$match^pcre("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","((?>\D+)|<\d+>)*[!?]",.n),! zwr
|
|
q
|
|
|
|
; Enforced mlimit
|
|
;
|
|
enforcedlimit
|
|
w $$match^pcre("aaaaaa","(.)(.)",.n,,,,2),! zwr
|
|
w "should never be written, the %PCRE-E-MATCHLIMIT should be raised",!
|
|
q
|
|
|
|
|
|
|
|
; Exception Handling
|
|
;
|
|
; Error conditions are handled by setting the $zc to user codes, see labels at
|
|
; the end of this file. When neither $zt nor $et are set by the user, the
|
|
; default handler (trap^pcre) is used within $zt mechanism.
|
|
;
|
|
; The default handler will write out the details of the exception, and
|
|
; depending on the caller type, it will re raise the exception. This will lead
|
|
; to:
|
|
; a) writing the exception details, when called from the GT.M prompt,
|
|
; b) writing the exception details, the M code place when the pcre routine
|
|
; was called, and terminating the GT.M image.
|
|
;
|
|
; The user should define own exception handler using $zt or $et, see
|
|
; pcreexamples.m for example exception handlers.
|
|
;
|
|
|
|
|
|
; Exception Handler Examples
|
|
;
|
|
|
|
; No handler
|
|
;
|
|
nohandler
|
|
s ($ec,$et,$zt)=""
|
|
s x=$$compile^pcre("a)b")
|
|
w "will never be written",!
|
|
q
|
|
;
|
|
; GTM>d nohandler^pcreexamples
|
|
; %PCRE-E-COMPILE, Pattern compilation failed, unmatched parentheses in a <-- HERE
|
|
; %PCRE-I-RTSLOC, At M source location nohandler+2^pcreexamples
|
|
; %GTM-E-SETECODE, Non-empty value assigned to $ECODE (user-defined error trap)
|
|
; %GTM-I-RTSLOC, At M source location trap+32^pcre
|
|
; $ (GT.M image has been terminated)
|
|
;
|
|
|
|
|
|
; Simple handler
|
|
;
|
|
myexception1
|
|
s $zt="zg "_$zl_":mytrap1^pcreexamples"
|
|
s x=$$compile^pcre("a)b")
|
|
w "will never be written",!
|
|
q
|
|
|
|
mytrap1
|
|
w "it's a trap",!
|
|
w $ec,!
|
|
s $ec=""
|
|
q
|
|
;
|
|
; GTM>d myexception1^pcreexamples
|
|
; it's a trap
|
|
; ,U16392,
|
|
; GTM>
|
|
;
|
|
|
|
|
|
; Simple handler with pcre exception details
|
|
;
|
|
myexception2
|
|
s $zt="d trap^pcre("_$st_") zg "_$zl_":mytrap2^pcreexamples"
|
|
s x=$$compile^pcre("a)b")
|
|
w "will never be written",!
|
|
q
|
|
|
|
mytrap2
|
|
w "it's a trap",!
|
|
w $ec,!
|
|
s $ec=""
|
|
q
|
|
;
|
|
; GTM>d myexception2^pcreexamples
|
|
; %PCRE-E-COMPILE, Pattern compilation failed, unmatched parentheses in a <-- HERE
|
|
; %PCRE-I-RTSLOC, At M source location myexception2+2^pcreexamples
|
|
; it's a trap
|
|
; ,U16392,
|
|
; GTM>
|
|
;
|
|
; In this example the trap^pcre is called with optional argument (level
|
|
; of M execution stack), for which trap^pcre will produce the
|
|
; %PCRE-I-RTSLOC details.
|
|
;
|
|
; DETAILS:
|
|
; The trap^pcre is executed in the stack frame where the error condition
|
|
; occurred, that gives the trap^pcre routine an access to the local
|
|
; variables like locale (locale name) or err (PCRE error message).
|
|
; The following zg command drops stack frames up to the current frame
|
|
; (the frame where the s $zt=.. is used), and executes the mytrap label,
|
|
; where locale or err is not available.
|
|
;
|
|
|
|
|
|
; Simple handler with limited pcre exception details
|
|
;
|
|
myexception3
|
|
s $zt="zg "_$zl_":mytrap3^pcreexamples"
|
|
s x=$$compile^pcre("a)b")
|
|
w "will never be written",!
|
|
q
|
|
|
|
mytrap3
|
|
d trap^pcre($st)
|
|
w "it's a trap",!
|
|
w $ec,!
|
|
s $ec=""
|
|
q
|
|
;
|
|
; GTM>d myexception3^pcreexamples
|
|
; %PCRE-E-COMPILE, Pattern compilation failed, unknown reason
|
|
; %PCRE-I-RTSLOC, At M source location myexception3+2^pcreexamples
|
|
; it's a trap
|
|
; ,U16392,
|
|
; GTM>
|
|
;
|
|
; DETAILS:
|
|
; The trap^pcre is executed in the stack frame where the compile^pcre
|
|
; was called. The deeper stack frames has already been dropped by the
|
|
; zg command, so the err local variable is not available in this
|
|
; context. Thats why trap^pcre doesn't know the exact reason why the
|
|
; %PCRE-E-COMPILE was raised.
|
|
;
|
|
|
|
|
|
; Note on $st() and repeated exceptions
|
|
;
|
|
; The $st() function returns information connected with $ec codes in
|
|
; a stack manner. That means that when once the $ec was set at n-th
|
|
; execution level, any future exceptions at that level won't change
|
|
; the $st() output for that level unless $ec is cleared.
|
|
;
|
|
; Always clear $ec when the exception handling is done.
|
|
;
|
|
|
|
|
|
; Execute all of the routines in this file
|
|
;
|
|
routines
|
|
w ">> test^pcreexamples",!
|
|
d test^pcreexamples
|
|
|
|
w !,">> match^pcreexamples",!
|
|
d match^pcreexamples
|
|
|
|
w !,">> global^pcreexamples",!
|
|
d global^pcreexamples
|
|
|
|
w !,">> replace^pcreexamples",!
|
|
d replace^pcreexamples
|
|
|
|
w !,">> p5global^pcreexamples",!
|
|
d p5global^pcreexamples
|
|
|
|
w !,">> p5replace^pcreexamples",!
|
|
d p5replace^pcreexamples
|
|
|
|
w !,">> p5lf^pcreexamples",!
|
|
d p5lf^pcreexamples
|
|
|
|
w !,">> p5nl^pcreexamples",!
|
|
d p5nl^pcreexamples
|
|
|
|
w !,">> version^pcreexamples",!
|
|
d version^pcreexamples
|
|
|
|
w !,">> newline^pcreexamples",!
|
|
d newline^pcreexamples
|
|
|
|
w !,">> utf8support^pcreexamples",!
|
|
d utf8support^pcreexamples
|
|
|
|
w !,">> stackusage^pcreexamples",!
|
|
d stackusage^pcreexamples
|
|
|
|
w !,">> nolocale^pcreexamples",!
|
|
d nolocale^pcreexamples
|
|
|
|
w !,">> isolocale^pcreexamples",!
|
|
d isolocale^pcreexamples
|
|
|
|
w !,">> utflocale^pcreexamples",!
|
|
d utflocale^pcreexamples
|
|
|
|
w !,">> envlocale^pcreexamples",!
|
|
d envlocale^pcreexamples
|
|
|
|
w !,">> limits^pcreexamples",!
|
|
d limits^pcreexamples
|
|
|
|
w !,">> longrun^pcreexamples",!
|
|
w "(skipped, uncomment to raise the exception)",!
|
|
; d longrun^pcreexamples
|
|
|
|
w !,">> shortrun^pcreexamples",!
|
|
d shortrun^pcreexamples
|
|
|
|
w !,">> enforcedlimit^pcreexamples",!
|
|
w "(skipped, uncomment to raise the exception)",!
|
|
; d enforcedlimit^pcreexamples
|
|
|
|
w !,">> nohandler^pcreexamples",!
|
|
w "(skipped, uncomment to raise the exception)",!
|
|
; d nohandler^pcreexamples
|
|
|
|
w !,">> myexception1^pcreexamples",!
|
|
d myexception1^pcreexamples
|
|
|
|
w !,">> myexception2^pcreexamples",!
|
|
d myexception2^pcreexamples
|
|
|
|
w !,">> myexception3^pcreexamples",!
|
|
d myexception3^pcreexamples
|
|
q
|