diff options
Diffstat (limited to 'lib/patterns/patterns.tm')
| -rw-r--r-- | lib/patterns/patterns.tm | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/patterns/patterns.tm b/lib/patterns/patterns.tm index bab0c3dc..c5444b86 100644 --- a/lib/patterns/patterns.tm +++ b/lib/patterns/patterns.tm @@ -10,6 +10,12 @@ lang Pat return Pat.from_text("$n") extend Text + func matching_pattern(text:Text, pattern:Pat, pos:Int = 1 -> PatternMatch?) + result : PatternMatch + if C_code:Bool(Pattern$match_at(@text, @pattern, @pos, (void*)&@result)) + return result + return none + func matches_pattern(text:Text, pattern:Pat -> Bool) return C_code:Bool(Pattern$matches(@text, @pattern)) @@ -45,3 +51,16 @@ extend Text func trim_pattern(text:Text, pattern=$Pat"{space}", left=yes, right=yes -> Text) return C_code:Text(Pattern$trim(@text, @pattern, @left, @right)) + +func main() + >> "Hello world".matching_pattern($Pat'{id}') + >> "...Hello world".matching_pattern($Pat'{id}') +# func main(pattern:Pat, input=(/dev/stdin)) +# for line in input.by_line()! +# skip if not line.has_pattern(pattern) +# pos := 1 +# for match in line.by_pattern(pattern) +# say(line.slice(pos, match.index-1), newline=no) +# say("\033[34;1m$(match.text)\033[m", newline=no) +# pos = match.index + match.text.length +# say(line.from(pos), newline=yes) |
