From df74d3ac62d2ed7f93ae71af635229a7141fbac0 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 21 Aug 2008 13:07:01 -0500 Subject: [PATCH] move words around, some docs, start of case insensitive --- extra/regexp2/backend/backend.factor | 1 + extra/regexp2/regexp2-docs.factor | 14 ++++++++++++++ extra/regexp2/regexp2.factor | 24 ++++++++++++++++++++---- extra/regexp2/traversal/traversal.factor | 8 -------- 4 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 extra/regexp2/regexp2-docs.factor diff --git a/extra/regexp2/backend/backend.factor b/extra/regexp2/backend/backend.factor index 5f59c25bc3..b12cf20df5 100644 --- a/extra/regexp2/backend/backend.factor +++ b/extra/regexp2/backend/backend.factor @@ -10,6 +10,7 @@ TUPLE: regexp nfa-table dfa-table minimized-table + case-insensitive { state integer } { new-states vector } { visited-states hashtable } ; diff --git a/extra/regexp2/regexp2-docs.factor b/extra/regexp2/regexp2-docs.factor new file mode 100644 index 0000000000..f903c14bc4 --- /dev/null +++ b/extra/regexp2/regexp2-docs.factor @@ -0,0 +1,14 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel strings help.markup help.syntax regexp2.backend ; +IN: regexp2 + +HELP: +{ $values { "string" string } { "regexp" regexp } } +{ $description "Compiles a regular expression into a DFA and returns this object. Regular expressions only have to be compiled once and can then be used multiple times to match input strings." } ; + +HELP: +{ $values { "string" string } { "regexp" regexp } } +{ $description "Compiles a case-insensitive regular expression into a DFA and returns this object. Otherwise, exactly the same as " { $link } } ; + +{ } related-words diff --git a/extra/regexp2/regexp2.factor b/extra/regexp2/regexp2.factor index 0f15b3c1ec..51d4d5b24f 100644 --- a/extra/regexp2/regexp2.factor +++ b/extra/regexp2/regexp2.factor @@ -1,7 +1,8 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors combinators kernel regexp2.backend regexp2.utils -regexp2.parser regexp2.nfa regexp2.dfa regexp2.traversal state-tables +USING: accessors combinators kernel math math.ranges +sequences regexp2.backend regexp2.utils memoize +regexp2.parser regexp2.nfa regexp2.dfa regexp2.traversal regexp2.transition-tables ; IN: regexp2 @@ -13,8 +14,7 @@ IN: regexp2 >>minimized-table reset-regexp ; -: ( string -- regexp ) - default-regexp +: construct-regexp ( regexp -- regexp' ) { [ parse-regexp ] [ construct-nfa ] @@ -22,6 +22,22 @@ IN: regexp2 [ ] } cleave ; +: match ( string regexp -- pair ) + do-match return-match ; + +: matches? ( string regexp -- ? ) + dupd match [ [ length ] [ range-length 1- ] bi* = ] [ drop f ] if* ; + +: match-head ( string regexp -- end ) match length>> 1- ; + +MEMO: ( string -- regexp ) + default-regexp construct-regexp ; + +MEMO: ( string -- regexp ) + default-regexp + t >>case-insensitive + construct-regexp ; + : R! CHAR: ! ; parsing : R" CHAR: " ; parsing : R# CHAR: # ; parsing diff --git a/extra/regexp2/traversal/traversal.factor b/extra/regexp2/traversal/traversal.factor index 2fbdc49a2a..94e96bb935 100644 --- a/extra/regexp2/traversal/traversal.factor +++ b/extra/regexp2/traversal/traversal.factor @@ -78,11 +78,3 @@ TUPLE: dfa-traverser dup matches>> [ drop f ] [ [ start-index>> ] [ peek ] bi* 1 ] if-empty ; - -: match ( string regexp -- pair ) - do-match return-match ; - -: matches? ( string regexp -- ? ) - dupd match [ [ length ] [ range-length 1- ] bi* = ] [ drop f ] if* ; - -: match-head ( string regexp -- end ) match length>> 1- ;