diff --git a/basis/mime-types/mime-types-docs.factor b/basis/mime-types/mime-types-docs.factor index 058a71d838..b7fa46d587 100644 --- a/basis/mime-types/mime-types-docs.factor +++ b/basis/mime-types/mime-types-docs.factor @@ -11,7 +11,7 @@ HELP: mime-db HELP: mime-type { $values - { "path" "a pathname string" } + { "filename" "a filename" } { "mime-type" "a MIME type string" } } { $description "Outputs the MIME type associtated with a path by parsing the path's file extension and looking it up in the table returned by " { $link mime-types } "." } ; diff --git a/unfinished/regexp2/backend/backend.factor b/unfinished/regexp2/backend/backend.factor index 81ffb334bd..fa5c1f7f97 100644 --- a/unfinished/regexp2/backend/backend.factor +++ b/unfinished/regexp2/backend/backend.factor @@ -21,7 +21,6 @@ TUPLE: regexp 0 >>state V{ } clone >>stack V{ } clone >>new-states - H{ } clone >>options H{ } clone >>visited-states ; SYMBOL: current-regexp diff --git a/unfinished/regexp2/dfa/dfa.factor b/unfinished/regexp2/dfa/dfa.factor index 468ffa73e5..cd2f4186f4 100644 --- a/unfinished/regexp2/dfa/dfa.factor +++ b/unfinished/regexp2/dfa/dfa.factor @@ -15,7 +15,7 @@ IN: regexp2.dfa eps swap find-delta ; : find-epsilon-closure ( states regexp -- new-states ) - '[ dup , (find-epsilon-closure) union ] [ length ] while-changes + '[ dup _ (find-epsilon-closure) union ] [ length ] while-changes natural-sort ; : find-closure ( states transition regexp -- new-states ) diff --git a/unfinished/regexp2/parser/parser.factor b/unfinished/regexp2/parser/parser.factor index 206db3883d..a970f82aab 100644 --- a/unfinished/regexp2/parser/parser.factor +++ b/unfinished/regexp2/parser/parser.factor @@ -291,6 +291,8 @@ ERROR: bad-escaped-literals seq ; { CHAR: f [ HEX: c ] } { CHAR: a [ HEX: 7 ] } { CHAR: e [ HEX: 1b ] } + { CHAR: $ [ CHAR: $ ] } + { CHAR: ^ [ CHAR: ^ ] } { CHAR: d [ digit-class ] } { CHAR: D [ digit-class ] } diff --git a/unfinished/regexp2/regexp2-tests.factor b/unfinished/regexp2/regexp2-tests.factor index 88bbc5f56c..f691c2becf 100644 --- a/unfinished/regexp2/regexp2-tests.factor +++ b/unfinished/regexp2/regexp2-tests.factor @@ -222,6 +222,8 @@ IN: regexp2-tests drop ] unit-test +[ ] [ "(\\$[\\p{XDigit}]|[\\p{Digit}])" drop ] unit-test + ! Comment [ t ] [ "ac" "a(?#boo)c" matches? ] unit-test diff --git a/unfinished/regexp2/regexp2.factor b/unfinished/regexp2/regexp2.factor index 24221baeb6..feec8ea97e 100644 --- a/unfinished/regexp2/regexp2.factor +++ b/unfinished/regexp2/regexp2.factor @@ -3,7 +3,8 @@ USING: accessors combinators kernel math math.ranges sequences regexp2.backend regexp2.utils memoize sets regexp2.parser regexp2.nfa regexp2.dfa regexp2.traversal -regexp2.transition-tables ; +regexp2.transition-tables assocs prettyprint.backend +make ; IN: regexp2 : default-regexp ( string -- regexp ) @@ -14,6 +15,7 @@ IN: regexp2 >>minimized-table H{ } clone >>nfa-traversal-flags H{ } clone >>dfa-traversal-flags + H{ } clone >>options reset-regexp ; : construct-regexp ( regexp -- regexp' ) @@ -60,3 +62,30 @@ IN: regexp2 : R` CHAR: ` ; parsing : R{ CHAR: } ; parsing : R| CHAR: | ; parsing + +: find-regexp-syntax ( string -- prefix suffix ) + { + { "R/ " "/" } + { "R! " "!" } + { "R\" " "\"" } + { "R# " "#" } + { "R' " "'" } + { "R( " ")" } + { "R@ " "@" } + { "R[ " "]" } + { "R` " "`" } + { "R{ " "}" } + { "R| " "|" } + } swap [ subseq? not nip ] curry assoc-find drop ; + +: option? ( option regexp -- ? ) + options>> key? ; + +M: regexp pprint* + [ + [ + dup raw>> + dup find-regexp-syntax swap % swap % % + case-insensitive swap option? [ "i" % ] when + ] "" make + ] keep present-text ; diff --git a/unfinished/regexp2/traversal/traversal.factor b/unfinished/regexp2/traversal/traversal.factor index 0bc304bfe0..ba9284c110 100644 --- a/unfinished/regexp2/traversal/traversal.factor +++ b/unfinished/regexp2/traversal/traversal.factor @@ -45,7 +45,9 @@ TUPLE: dfa-traverser ] when text-finished? ; : increment-state ( dfa-traverser state -- dfa-traverser ) - >r [ 1+ ] change-current-index dup current-state>> >>last-state r> + [ + [ 1+ ] change-current-index dup current-state>> >>last-state + ] dip first >>current-state ; : match-failed ( dfa-traverser -- dfa-traverser ) diff --git a/unfinished/regexp2/utils/utils.factor b/unfinished/regexp2/utils/utils.factor index 48c68d883f..ab51436f8b 100644 --- a/unfinished/regexp2/utils/utils.factor +++ b/unfinished/regexp2/utils/utils.factor @@ -9,7 +9,7 @@ IN: regexp2.utils : (while-changes) ( obj quot pred pred-ret -- obj ) ! quot: ( obj -- obj' ) ! pred: ( obj -- <=> ) - >r >r dup slip r> pick over call r> dupd = + [ [ dup slip ] dip pick over call ] dip dupd = [ 3drop ] [ (while-changes) ] if ; inline recursive : while-changes ( obj quot pred -- obj' )