aboutsummaryrefslogtreecommitdiff
path: root/lib/patterns/patterns.tm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/patterns/patterns.tm')
-rw-r--r--lib/patterns/patterns.tm19
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)