Regexp
Go like Regular expressions
regexp
regexp "[0-9]" |type?
; returns native
regexp//is-match
regexp "[0-9]" |is-match "5"
; returns 1
regexp "[0-9]" |is-match "a"
; returns 0
regexp//submatch?
regexp "x([0-9]+)y" |submatch? "x123y"
; returns "123"
regexp//submatches?
regexp "x([0-9]+)y" |submatches? "x123y x234y"
; returns { "123" }
regexp//submatches\all?
regexp "x([0-9]+)(y+)?" |submatches\all? "x11yy x22"
; returns { { "11" "yy" } { "22" "" } }
regexp//find-all
regexp "[0-9]+" |find-all "x123y x234y"
; returns { "123" "234" }
regexp//match?
regexp "[0-9]+c+" |match? "aa33bb55cc"
; returns "55cc"
regexp//replace-all
regexp "[0-9]+" |replace-all "x123y x234y" "XXX"
; returns "xXXXy xXXXy"
Validation
validation dialect for Rye values
validate
validate dict { a: 1 } { a: required }
; returns dict { a 1 }
validate dict { a: 1 } { b: optional 2 }
; returns dict { b 2 }
validate dict { a: 1 } { a: optional 0 b: optional 2 }
; returns dict { b 2 a 1 }
validate dict { a: 1 } { a: required integer }
; returns dict { a 1 }
validate dict { a: "1" } { a: required integer }
; returns dict { a 1 }
validate dict { a: "1" } { a: required integer } |-> "a" |type?
; returns integer
validate dict { a: 3.14 } { a: required decimal }
; returns dict { a 3.14 }
validate dict { a: 3 } { a: required decimal }
; returns dict { a 3 }
validate dict { a: "3.14" } { a: required decimal }
; returns dict { a 3.14 }
validate dict { a: "3.14" } { a: required decimal } |-> "a" |type?
; returns decimal
validate dict { a: "jim" } { a: required string }
; returns dict { a "jim" }
validate dict { a: "e@ma.il" } { a: required email }
; returns dict { a "e@ma.il" }
validate dict { a: "e@ma.il" } { a: required email } |-> "a" |type?
; returns string
validate dict { a: "30.12.2024" } { a: required date }
; returns dict { a 2024-12-30 }
validate dict { a: "2024-12-30" } { a: required date }
; returns dict { a 2024-12-30 }
validate dict { a: "2024-12-30" } { a: required date } |-> "a" |type?
; returns date
validate dict { a: 5 } { a: required integer check { < 10 } }
; returns dict { a 5 }
validate dict { a: 5 } { a: required integer calc { + 10 } }
; returns dict { a 15 }
validate dict { a: 5 } { b: required } |disarm |type?
; returns error
validate dict { b: "5c" } { b: optional 0 integer } |disarm |type?
; returns error
validate dict { b: "2x0" } { b: required decimal } |disarm |status?
; returns 403
validate dict { b: "not-mail" } { b: required email } |disarm |message?
; returns "validation error"
validate dict { b: "2023-1-1" } { b: required date } |disarm |details?
; returns dict { b "not date" }
validate>ctx
validate>ctx dict { a: 1 } { a: required } |type?
; returns ctx
validate>ctx dict { a: 1 } { a: optional 0 } |-> 'a
; returns 1
JSON
parsing and generating JSON
parse-json
"[ 1, 2, 3 ]" |parse-json |length?
; returns 3
"[ 1, 2, 3 ]" |parse-json |type?
; returns list
to-json
list { 1 2 3 } |to-json
; returns "[1, 2, 3] "
to-json\lines
table { "a" "b" } { 2 "x" 3 "y" } |to-json\lines
; returns "{"a": 2, "b": "x"}
; {"a": 3, "b": "y"}
; "
SXML
streaming, Sax like XML dialect (still in design)
rye-reader//do-sxml
"<scene><bot>C3PO</bot><bot>R2D2</bot><jedi>Luke</jedi></scene>" |reader .do-sxml { _ [ .prns ] }
; prints "C3PO R2D2 Luke "
"<scene><bot>C3PO</bot><bot>R2D2</bot><jedi>Luke</jedi></scene>" |reader .do-sxml { <bot> { _ [ .prns ] } }
; prints "C3PO R2D2 "
"<scene><ship>XWing</ship><bot>R2D2</bot><jedi>Luke</jedi></scene>" |reader .do-sxml { <bot> <jedi> { _ [ .prns ] } }
; prints "R2D2 Luke "
"<scene><xwing><bot>R2D2</bot><person>Luke</person></xwing><destroyer><person>Vader</person></destroyer></scene>" |reader .do-sxml { <xwing> { <person> { _ [ .prns ] } } }
; prints "Luke "
rye-sxml-start//attr?
"<scene><ship type="xwing"><person age="25">Luke</person></ship><ship type="destroyer"><person age="55">Vader</person></ship></scene>" |reader .do-sxml { <ship> [ .attr? 0 |prns ] }
; prints "xwing destroyer "
"<scene><ship type="xwing"><person age="25">Luke</person></ship><ship type="destroyer"><person age="55">Vader</person></ship></scene>" |reader .do-sxml { <person> [ .attr? 0 |prns ] }
; prints "25 55 "
HTML
streaming, Sax like HTML dialect (still in design)
unescape\html
unescape\html ">hello<"
; returns ">hello<"
escape\html
escape\html "<hello>"
; returns "<hello>"
html->markdown
html->markdown "<h1>title</h1><p>para</p>"
; returns "# title
;
; para"
rye-reader//parse-html
"<html><body><div class='menu'><a href='/'>home</a><a href='/about/'>about</a>" |reader .parse-html { <a> [ .attr? 'href |prns ] }
; prints "/ /about/ "