Add jsre (#14870)
This commit is contained in:
parent
a6cbe58e8c
commit
4f6acf24ff
5 changed files with 53 additions and 4 deletions
|
|
@ -122,6 +122,9 @@
|
||||||
|
|
||||||
- `strformat.fmt` and `strformat.&` support `= specifier`. `fmt"{expr=}"` now expands to `fmt"expr={expr}"`.
|
- `strformat.fmt` and `strformat.&` support `= specifier`. `fmt"{expr=}"` now expands to `fmt"expr={expr}"`.
|
||||||
|
|
||||||
|
- Add `jsre` module, [Regular Expressions for the JavaScript target.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)
|
||||||
|
|
||||||
|
|
||||||
## Language changes
|
## Language changes
|
||||||
- In the newruntime it is now allowed to assign to the discriminator field
|
- In the newruntime it is now allowed to assign to the discriminator field
|
||||||
without restrictions as long as case object doesn't have custom destructor.
|
without restrictions as long as case object doesn't have custom destructor.
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
when defined(js):
|
when defined(js):
|
||||||
{.error: "This library needs to be compiled with a c-like backend, and depends on PCRE.".}
|
{.error: "This library needs to be compiled with a c-like backend, and depends on PCRE; See jsre for JS backend.".}
|
||||||
|
|
||||||
## What is NRE?
|
## What is NRE?
|
||||||
## ============
|
## ============
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
when defined(js):
|
when defined(js):
|
||||||
{.error: "This library needs to be compiled with a c-like backend, and depends on PCRE.".}
|
{.error: "This library needs to be compiled with a c-like backend, and depends on PCRE; See jsre for JS backend.".}
|
||||||
|
|
||||||
## Regular expression support for Nim.
|
## Regular expression support for Nim.
|
||||||
##
|
##
|
||||||
|
|
|
||||||
43
lib/js/jsre.nim
Normal file
43
lib/js/jsre.nim
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
## Regular Expressions for the JavaScript target.
|
||||||
|
## * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
|
||||||
|
|
||||||
|
type RegExp* {.importjs.} = object ## Regular Expressions for JavaScript target.
|
||||||
|
flags* {.importjs.}: cstring ## cstring that contains the flags of the RegExp object.
|
||||||
|
dotAll* {.importjs.}: bool ## Whether `.` matches newlines or not.
|
||||||
|
global* {.importjs.}: bool ## Whether to test against all possible matches in a string, or only against the first.
|
||||||
|
ignoreCase* {.importjs.}: bool ## Whether to ignore case while attempting a match in a string.
|
||||||
|
multiline* {.importjs.}: bool ## Whether to search in strings across multiple lines.
|
||||||
|
source* {.importjs.}: cstring ## The text of the pattern.
|
||||||
|
sticky* {.importjs.}: bool ## Whether the search is sticky.
|
||||||
|
unicode* {.importjs.}: bool ## Whether Unicode features are enabled.
|
||||||
|
lastIndex* {.importjs.}: cint ## Index at which to start the next match (read/write property).
|
||||||
|
input* {.importjs.}: cstring ## Read-only and modified on successful match.
|
||||||
|
lastMatch* {.importjs.}: cstring ## Ditto.
|
||||||
|
lastParen* {.importjs.}: cstring ## Ditto.
|
||||||
|
leftContext* {.importjs.}: cstring ## Ditto.
|
||||||
|
rightContext* {.importjs.}: cstring ## Ditto.
|
||||||
|
|
||||||
|
func newRegExp*(pattern: cstring; flags: cstring): RegExp {.importjs: "new RegExp(@)".}
|
||||||
|
## Creates a new RegExp object.
|
||||||
|
|
||||||
|
func compile*(self: RegExp; pattern: cstring; flags: cstring) {.importjs: "#.compile(@)".}
|
||||||
|
## Recompiles a regular expression during execution of a script.
|
||||||
|
|
||||||
|
func exec*(self: RegExp; pattern: cstring): seq[cstring] {.importjs: "#.exec(#)".}
|
||||||
|
## Executes a search for a match in its string parameter.
|
||||||
|
|
||||||
|
func test*(self: RegExp; pattern: cstring): bool {.importjs: "#.test(#)".}
|
||||||
|
## Tests for a match in its string parameter.
|
||||||
|
|
||||||
|
func toString*(self: RegExp): cstring {.importjs: "#.toString()".}
|
||||||
|
## Returns a string representing the RegExp object.
|
||||||
|
|
||||||
|
|
||||||
|
runnableExamples:
|
||||||
|
let jsregex: RegExp = newRegExp(r"\s+", r"i")
|
||||||
|
jsregex.compile(r"\w+", r"i")
|
||||||
|
doAssert jsregex.test(r"nim javascript")
|
||||||
|
doAssert jsregex.exec(r"nim javascript") == @["nim".cstring]
|
||||||
|
doAssert jsregex.toString() == r"/\w+/i"
|
||||||
|
jsregex.compile(r"[0-9]", r"i")
|
||||||
|
doAssert jsregex.test(r"0123456789abcd")
|
||||||
|
|
@ -15,6 +15,8 @@ const
|
||||||
|
|
||||||
var nimExe*: string
|
var nimExe*: string
|
||||||
|
|
||||||
|
template isJsOnly(file: string): bool = file.isRelativeTo("lib/js")
|
||||||
|
|
||||||
proc exe*(f: string): string =
|
proc exe*(f: string): string =
|
||||||
result = addFileExt(f, ExeExt)
|
result = addFileExt(f, ExeExt)
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
|
|
@ -256,10 +258,11 @@ proc buildDoc(nimArgs, destPath: string) =
|
||||||
destPath / changeFileExt(splitFile(d).name, "html"), d]
|
destPath / changeFileExt(splitFile(d).name, "html"), d]
|
||||||
i.inc
|
i.inc
|
||||||
for d in items(doc):
|
for d in items(doc):
|
||||||
|
let extra = if isJsOnly(d): " --backend:js " else: ""
|
||||||
var nimArgs2 = nimArgs
|
var nimArgs2 = nimArgs
|
||||||
if d.isRelativeTo("compiler"): doAssert false
|
if d.isRelativeTo("compiler"): doAssert false
|
||||||
commands[i] = nim & " doc $# --git.url:$# --outdir:$# --index:on $#" %
|
commands[i] = nim & " doc $# $# --git.url:$# --outdir:$# --index:on $#" %
|
||||||
[nimArgs2, gitUrl, destPath, d]
|
[extra, nimArgs2, gitUrl, destPath, d]
|
||||||
i.inc
|
i.inc
|
||||||
for d in items(withoutIndex):
|
for d in items(withoutIndex):
|
||||||
commands[i] = nim & " doc2 $# --git.url:$# -o:$# $#" %
|
commands[i] = nim & " doc2 $# --git.url:$# -o:$# $#" %
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue