diff options
author | Araq <rumpf_a@web.de> | 2011-05-14 01:13:44 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2011-05-14 01:13:44 +0200 |
commit | 3e9dcc8be5d1286e3647e8f665f456966aa02437 (patch) | |
tree | 8bc3b42f28feba6f93c0bd3c386dcb82eabff484 /lib | |
parent | 32241aa9fe1a22f388124a6e5db8fb0517f01789 (diff) | |
download | Nim-3e9dcc8be5d1286e3647e8f665f456966aa02437.tar.gz |
deprecated system.copy: use system.substr instead
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/impure/re.nim | 22 | ||||
-rwxr-xr-x | lib/pure/cookies.nim | 4 | ||||
-rwxr-xr-x | lib/pure/httpclient.nim | 6 | ||||
-rwxr-xr-x | lib/pure/httpserver.nim | 12 | ||||
-rwxr-xr-x | lib/pure/os.nim | 34 | ||||
-rwxr-xr-x | lib/pure/parseopt.nim | 2 | ||||
-rwxr-xr-x | lib/pure/parseutils.nim | 8 | ||||
-rwxr-xr-x | lib/pure/pegs.nim | 16 | ||||
-rwxr-xr-x | lib/pure/regexprs.nim | 2 | ||||
-rwxr-xr-x | lib/pure/ropes.nim | 4 | ||||
-rwxr-xr-x | lib/pure/strtabs.nim | 4 | ||||
-rwxr-xr-x | lib/pure/strutils.nim | 26 | ||||
-rwxr-xr-x | lib/pure/xmldom.nim | 4 | ||||
-rwxr-xr-x | lib/system.nim | 15 |
14 files changed, 85 insertions, 74 deletions
diff --git a/lib/impure/re.nim b/lib/impure/re.nim index 36adf5d1f..ccc13248a 100755 --- a/lib/impure/re.nim +++ b/lib/impure/re.nim @@ -88,7 +88,7 @@ proc matchOrFind(s: string, pattern: TRegEx, matches: var openarray[string], for i in 1..int(res)-1: var a = rawMatches[i * 2] var b = rawMatches[i * 2 + 1] - if a >= 0'i32: matches[i-1] = copy(s, int(a), int(b)-1) + if a >= 0'i32: matches[i-1] = substr(s, int(a), int(b)-1) else: matches[i-1] = "" return rawMatches[1] - rawMatches[0] @@ -106,7 +106,7 @@ proc findBounds*(s: string, pattern: TRegEx, matches: var openarray[string], for i in 1..int(res)-1: var a = rawMatches[i * 2] var b = rawMatches[i * 2 + 1] - if a >= 0'i32: matches[i-1] = copy(s, int(a), int(b)-1) + if a >= 0'i32: matches[i-1] = substr(s, int(a), int(b)-1) else: matches[i-1] = "" return (rawMatches[0].int, rawMatches[1].int - 1) @@ -186,7 +186,7 @@ proc find*(s: string, pattern: TRegEx, matches: var openarray[string], for i in 1..int(res)-1: var a = rawMatches[i * 2] var b = rawMatches[i * 2 + 1] - if a >= 0'i32: matches[i-1] = copy(s, int(a), int(b)-1) + if a >= 0'i32: matches[i-1] = substr(s, int(a), int(b)-1) else: matches[i-1] = "" return rawMatches[0] @@ -277,10 +277,10 @@ proc replace*(s: string, sub: TRegEx, by = ""): string = while true: var match = findBounds(s, sub, prev) if match.first < 0: break - add(result, copy(s, prev, match.first-1)) + add(result, substr(s, prev, match.first-1)) add(result, by) prev = match.last + 1 - add(result, copy(s, prev)) + add(result, substr(s, prev)) proc replacef*(s: string, sub: TRegEx, by: string): string = ## Replaces `sub` in `s` by the string `by`. Captures can be accessed in `by` @@ -300,10 +300,10 @@ proc replacef*(s: string, sub: TRegEx, by: string): string = while true: var match = findBounds(s, sub, caps, prev) if match.first < 0: break - add(result, copy(s, prev, match.first-1)) + add(result, substr(s, prev, match.first-1)) addf(result, by, caps) prev = match.last + 1 - add(result, copy(s, prev)) + add(result, substr(s, prev)) when false: result = "" var i = 0 @@ -316,8 +316,8 @@ proc replacef*(s: string, sub: TRegEx, by: string): string = else: addf(result, by, caps) inc(i, x) - # copy the rest: - add(result, copy(s, i)) + # substr the rest: + add(result, substr(s, i)) proc parallelReplace*(s: string, subs: openArray[ tuple[pattern: TRegEx, repl: string]]): string = @@ -337,7 +337,7 @@ proc parallelReplace*(s: string, subs: openArray[ add(result, s[i]) inc(i) # copy the rest: - add(result, copy(s, i)) + add(result, substr(s, i)) proc transformFile*(infile, outfile: string, subs: openArray[tuple[pattern: TRegEx, repl: string]]) = @@ -385,7 +385,7 @@ iterator split*(s: string, sep: TRegEx): string = x = matchLen(s, sep, last) if x > 0: break if first < last: - yield copy(s, first, last-1) + yield substr(s, first, last-1) proc split*(s: string, sep: TRegEx): seq[string] = ## Splits the string `s` into substrings. diff --git a/lib/pure/cookies.nim b/lib/pure/cookies.nim index eed6c7512..8e5de008c 100755 --- a/lib/pure/cookies.nim +++ b/lib/pure/cookies.nim @@ -1,7 +1,7 @@ # # # Nimrod's Runtime Library -# (c) Copyright 2010 Andreas Rumpf +# (c) Copyright 2011 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. @@ -24,7 +24,7 @@ proc parseCookies*(s: string): PStringTable = inc(i) # skip '=' var valstart = i while s[i] != ';' and s[i] != '\0': inc(i) - result[copy(s, keystart, keyend)] = copy(s, valstart, i-1) + result[substr(s, keystart, keyend)] = substr(s, valstart, i-1) if s[i] == '\0': break inc(i) # skip ';' diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim index 39ceb5f68..73a8cb853 100755 --- a/lib/pure/httpclient.nim +++ b/lib/pure/httpclient.nim @@ -109,7 +109,7 @@ proc parseChunks(d: var string, start: int, s: TSocket): string = if charAt(d, i, s) == '\L': inc(i) else: httpError("CR-LF after chunksize expected") - var x = copy(d, i, i+chunkSize-1) + var x = substr(d, i, i+chunkSize-1) var size = x.len result.add(x) inc(i, size) @@ -133,7 +133,7 @@ proc parseBody(d: var string, start: int, s: TSocket, if headers["Transfer-Encoding"] == "chunked": result = parseChunks(d, start, s) else: - result = copy(d, start) + result = substr(d, start) # -REGION- Content-Length # (http://tools.ietf.org/html/rfc2616#section-4.4) NR.3 var contentLengthHeader = headers["Content-Length"] @@ -236,7 +236,7 @@ proc request*(url: string, httpMethod = httpGET, extraHeaders = "", ## | Extra headers can be specified and must be seperated by ``\c\L`` var r = parseUrl(url) - var headers = copy($httpMethod, len("http")) + var headers = substr($httpMethod, len("http")) headers.add(" /" & r.path & r.query) headers.add(" HTTP/1.1\c\L") diff --git a/lib/pure/httpserver.nim b/lib/pure/httpserver.nim index f8368a631..eb5dd7d73 100755 --- a/lib/pure/httpserver.nim +++ b/lib/pure/httpserver.nim @@ -121,7 +121,7 @@ proc executeCgi(client: TSocket, path, query: string, meth: TRequestMethod) = if L.startsWith("content-length:"): var i = len("content-length:") while L[i] in Whitespace: inc(i) - contentLength = parseInt(copy(L, i)) + contentLength = parseInt(substr(L, i)) if contentLength < 0: badRequest(client) @@ -165,7 +165,7 @@ proc acceptRequest(client: TSocket) = # extract path if q >= 0: # strip "?..." from path, this may be found in both POST and GET - path = "." & data[1].copy(0, q-1) + path = "." & data[1].substr(0, q-1) else: path = "." & data[1] # path starts with "/", by adding "." in front of it we serve files from cwd @@ -173,7 +173,7 @@ proc acceptRequest(client: TSocket) = if cmpIgnoreCase(data[0], "GET") == 0: if q >= 0: cgi = true - query = data[1].copy(q+1) + query = data[1].substr(q+1) elif cmpIgnoreCase(data[0], "POST") == 0: cgi = true meth = reqPost @@ -250,11 +250,11 @@ proc next*(s: var TServer) = if data[last] == '?' and query == 0: query = last inc(last) if query > 0: - s.query = data.copy(query+1, last-1) - s.path = data.copy(i, query-1) + s.query = data.substr(query+1, last-1) + s.path = data.substr(i, query-1) else: s.query = "" - s.path = data.copy(i, last-1) + s.path = data.substr(i, last-1) proc close*(s: TServer) = ## closes the server (and the socket the server uses). diff --git a/lib/pure/os.nim b/lib/pure/os.nim index 7847fa332..2b2cb1ba7 100755 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -330,7 +330,7 @@ proc JoinPath*(head, tail: string): string {. result = tail elif head[len(head)-1] in {DirSep, AltSep}: if tail[0] in {DirSep, AltSep}: - result = head & copy(tail, 1) + result = head & substr(tail, 1) else: result = head & tail else: @@ -362,8 +362,8 @@ proc SplitPath*(path: string, head, tail: var string) {.noSideEffect, sepPos = i break if sepPos >= 0: - head = copy(path, 0, sepPos-1) - tail = copy(path, sepPos+1) + head = substr(path, 0, sepPos-1) + tail = substr(path, sepPos+1) else: head = "" tail = path # make a string copy here @@ -388,8 +388,8 @@ proc SplitPath*(path: string): tuple[head, tail: string] {. sepPos = i break if sepPos >= 0: - result.head = copy(path, 0, sepPos-1) - result.tail = copy(path, sepPos+1) + result.head = substr(path, 0, sepPos-1) + result.tail = substr(path, sepPos+1) else: result.head = "" result.tail = path @@ -412,7 +412,7 @@ proc parentDir*(path: string): string {. sepPos = i break if sepPos >= 0: - result = copy(path, 0, sepPos-1) + result = substr(path, 0, sepPos-1) else: result = path @@ -462,9 +462,9 @@ proc splitFile*(path: string): tuple[dir, name, ext: string] {. elif path[i] in {dirsep, altsep}: sepPos = i break - result.dir = copy(path, 0, sepPos-1) - result.name = copy(path, sepPos+1, dotPos-1) - result.ext = copy(path, dotPos) + result.dir = substr(path, 0, sepPos-1) + result.name = substr(path, sepPos+1, dotPos-1) + result.ext = substr(path, dotPos) proc extractDir*(path: string): string {.noSideEffect, deprecated.} = ## Extracts the directory of a given path. This is almost the @@ -507,8 +507,8 @@ proc SplitFilename*(filename: string, name, extension: var string) {. ## **Deprecated since version 0.8.2**: Use ``splitFile(filename)`` instead. var extPos = searchExtPos(filename) if extPos >= 0: - name = copy(filename, 0, extPos-1) - extension = copy(filename, extPos) + name = substr(filename, 0, extPos-1) + extension = substr(filename, extPos) else: name = filename # make a string copy here extension = "" @@ -537,7 +537,7 @@ proc ChangeFileExt*(filename, ext: string): string {. ## of none such beast.) var extPos = searchExtPos(filename) if extPos < 0: result = filename & normExt(ext) - else: result = copy(filename, 0, extPos-1) & normExt(ext) + else: result = substr(filename, 0, extPos-1) & normExt(ext) proc addFileExt*(filename, ext: string): string {. noSideEffect, rtl, extern: "nos$1".} = @@ -748,7 +748,7 @@ proc getEnv*(key: string): string = ## `existsEnv(key)`. var i = findEnvVar(key) if i >= 0: - return copy(environment[i], find(environment[i], '=')+1) + return substr(environment[i], find(environment[i], '=')+1) else: var env = cgetenv(key) if env == nil: return "" @@ -788,7 +788,7 @@ iterator iterOverEnvironment*(): tuple[key, value: string] {.deprecated.} = getEnvVarsC() for i in 0..high(environment): var p = find(environment[i], '=') - yield (copy(environment[i], 0, p-1), copy(environment[i], p+1)) + yield (substr(environment[i], 0, p-1), substr(environment[i], p+1)) iterator envPairs*(): tuple[key, value: string] = ## Iterate over all `environments variables`:idx:. In the first component @@ -797,7 +797,7 @@ iterator envPairs*(): tuple[key, value: string] = getEnvVarsC() for i in 0..high(environment): var p = find(environment[i], '=') - yield (copy(environment[i], 0, p-1), copy(environment[i], p+1)) + yield (substr(environment[i], 0, p-1), substr(environment[i], p+1)) iterator walkFiles*(pattern: string): string = ## Iterate over all the files that match the `pattern`. On POSIX this uses @@ -944,14 +944,14 @@ proc createDir*(dir: string) {.rtl, extern: "nos$1".} = ## fail if the path already exists because for most usages this does not ## indicate an error. for i in 1.. dir.len-1: - if dir[i] in {dirsep, altsep}: rawCreateDir(copy(dir, 0, i-1)) + if dir[i] in {dirsep, altsep}: rawCreateDir(substr(dir, 0, i-1)) rawCreateDir(dir) proc copyDir*(source, dest: string) {.rtl, extern: "nos$1".} = ## Copies a directory from `source` to `dest`. If this fails, `EOS` is raised. createDir(dest) for kind, path in walkDir(source): - var noSource = path.copy(source.len()+1) + var noSource = path.substr(source.len()+1) case kind of pcFile: copyFile(path, dest / noSource) diff --git a/lib/pure/parseopt.nim b/lib/pure/parseopt.nim index 1b09934f2..c4625c161 100755 --- a/lib/pure/parseopt.nim +++ b/lib/pure/parseopt.nim @@ -126,7 +126,7 @@ proc next*(p: var TOptParser) {. proc cmdLineRest*(p: TOptParser): string {. rtl, extern: "npo$1".} = ## retrieves the rest of the command line that has not been parsed yet. - result = strip(copy(p.cmd, p.pos, len(p.cmd) - 1)) + result = strip(substr(p.cmd, p.pos, len(p.cmd) - 1)) proc getRestOfCommandLine*(p: TOptParser): string {.deprecated.} = ## **Deprecated since version 0.8.2**: Use `cmdLineRest` instead. diff --git a/lib/pure/parseutils.nim b/lib/pure/parseutils.nim index 90bb5d79f..a7776bd5f 100755 --- a/lib/pure/parseutils.nim +++ b/lib/pure/parseutils.nim @@ -73,7 +73,7 @@ proc parseIdent*(s: string, ident: var string, start = 0): int = if s[i] in IdentStartChars: inc(i) while s[i] in IdentChars: inc(i) - ident = copy(s, start, i-1) + ident = substr(s, start, i-1) result = i-start proc parseToken*(s: string, token: var string, validChars: set[char], @@ -86,7 +86,7 @@ proc parseToken*(s: string, token: var string, validChars: set[char], var i = start while s[i] in validChars: inc(i) result = i-start - token = copy(s, start, i-1) + token = substr(s, start, i-1) proc skipWhitespace*(s: string, start = 0): int {.inline.} = ## skips the whitespace starting at ``s[start]``. Returns the number of @@ -120,7 +120,7 @@ proc parseUntil*(s: string, token: var string, until: set[char], var i = start while s[i] notin until: inc(i) result = i-start - token = copy(s, start, i-1) + token = substr(s, start, i-1) proc parseWhile*(s: string, token: var string, validChars: set[char], start = 0): int {.inline.} = @@ -130,7 +130,7 @@ proc parseWhile*(s: string, token: var string, validChars: set[char], var i = start while s[i] in validChars: inc(i) result = i-start - token = copy(s, start, i-1) + token = substr(s, start, i-1) {.push overflowChecks: on.} # this must be compiled with overflow checking turned on: diff --git a/lib/pure/pegs.nim b/lib/pure/pegs.nim index 9b2606b33..988e510e3 100755 --- a/lib/pure/pegs.nim +++ b/lib/pure/pegs.nim @@ -736,7 +736,7 @@ proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {. var (a, b) = c.matches[p.index] var n: TPeg n.kind = succ(pkTerminal, ord(p.kind)-ord(pkBackRef)) - n.term = s.copy(a, b) + n.term = s.substr(a, b) result = rawMatch(s, n, start, c) of pkStartAnchor: if c.origStart == start: result = 0 @@ -754,7 +754,7 @@ proc match*(s: string, pattern: TPeg, matches: var openarray[string], result = rawMatch(s, pattern, start, c) == len(s) - start if result: for i in 0..c.ml-1: - matches[i] = copy(s, c.matches[i][0], c.matches[i][1]) + matches[i] = substr(s, c.matches[i][0], c.matches[i][1]) proc match*(s: string, pattern: TPeg, start = 0): bool {.nosideEffect, rtl, extern: "npegs$1".} = @@ -774,7 +774,7 @@ proc matchLen*(s: string, pattern: TPeg, matches: var openarray[string], result = rawMatch(s, pattern, start, c) if result >= 0: for i in 0..c.ml-1: - matches[i] = copy(s, c.matches[i][0], c.matches[i][1]) + matches[i] = substr(s, c.matches[i][0], c.matches[i][1]) proc matchLen*(s: string, pattern: TPeg, start = 0): int {.nosideEffect, rtl, extern: "npegs$1".} = @@ -903,7 +903,7 @@ proc replacef*(s: string, sub: TPeg, by: string): string {. else: addf(result, by, caps) inc(i, x) - add(result, copy(s, i)) + add(result, substr(s, i)) proc replace*(s: string, sub: TPeg, by = ""): string {. nosideEffect, rtl, extern: "npegs$1".} = @@ -920,7 +920,7 @@ proc replace*(s: string, sub: TPeg, by = ""): string {. else: addf(result, by, caps) inc(i, x) - add(result, copy(s, i)) + add(result, substr(s, i)) proc parallelReplace*(s: string, subs: openArray[ tuple[pattern: TPeg, repl: string]]): string {. @@ -941,7 +941,7 @@ proc parallelReplace*(s: string, subs: openArray[ add(result, s[i]) inc(i) # copy the rest: - add(result, copy(s, i)) + add(result, substr(s, i)) proc transformFile*(infile, outfile: string, subs: openArray[tuple[pattern: TPeg, repl: string]]) {. @@ -990,7 +990,7 @@ iterator split*(s: string, sep: TPeg): string = x = matchLen(s, sep, last) if x > 0: break if first < last: - yield copy(s, first, last-1) + yield substr(s, first, last-1) proc split*(s: string, sep: TPeg): seq[string] {. nosideEffect, rtl, extern: "npegs$1".} = @@ -1688,7 +1688,7 @@ when isMainModule: assert rawMatch(s, expr.rule, 0, c) == len(s) var a = "" for i in 0..c.ml-1: - a.add(copy(s, c.matches[i][0], c.matches[i][1])) + a.add(substr(s, c.matches[i][0], c.matches[i][1])) assert a == "abcdef" #echo expr.rule diff --git a/lib/pure/regexprs.nim b/lib/pure/regexprs.nim index fb9601c18..3524aac0a 100755 --- a/lib/pure/regexprs.nim +++ b/lib/pure/regexprs.nim @@ -84,7 +84,7 @@ proc matchOrFind(s: string, pattern: PPcre, matches: var openarray[string], var a = rawMatches[i * 2] b = rawMatches[i * 2 + 1] - if a >= 0'i32: matches[i] = copy(s, a, int(b)-1) + if a >= 0'i32: matches[i] = substr(s, a, int(b)-1) else: matches[i] = "" return res diff --git a/lib/pure/ropes.nim b/lib/pure/ropes.nim index 52406d4d1..69737576f 100755 --- a/lib/pure/ropes.nim +++ b/lib/pure/ropes.nim @@ -287,7 +287,7 @@ when false: if frmt[i] != '$': inc(i) else: break if i - 1 >= start: - add(result, copy(frmt, start, i-1)) + add(result, substr(frmt, start, i-1)) proc `%`*(frmt: string, args: openarray[PRope]): PRope {. rtl, extern: "nroFormat".} = @@ -330,7 +330,7 @@ proc `%`*(frmt: string, args: openarray[PRope]): PRope {. if frmt[i] != '$': inc(i) else: break if i - 1 >= start: - add(result, copy(frmt, start, i - 1)) + add(result, substr(frmt, start, i - 1)) proc addf*(c: var PRope, frmt: string, args: openarray[PRope]) {. rtl, extern: "nro$1".} = diff --git a/lib/pure/strtabs.nim b/lib/pure/strtabs.nim index 78f489615..2028daa50 100755 --- a/lib/pure/strtabs.nim +++ b/lib/pure/strtabs.nim @@ -181,12 +181,12 @@ proc `%`*(f: string, t: PStringTable, flags: set[TFormatFlag] = {}): string {. of '{': var j = i + 1 while j < f.len and f[j] != '}': inc(j) - add(result, getValue(t, flags, copy(f, i+2, j-1))) + add(result, getValue(t, flags, substr(f, i+2, j-1))) i = j + 1 of 'a'..'z', 'A'..'Z', '\x80'..'\xFF', '_': var j = i + 1 while j < f.len and f[j] in PatternChars: inc(j) - add(result, getValue(t, flags, copy(f, i+1, j-1))) + add(result, getValue(t, flags, substr(f, i+1, j-1))) i = j else: add(result, f[i]) diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index f13910dbf..7ed224b67 100755 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -83,7 +83,7 @@ proc capitalize*(s: string): string {.noSideEffect, procvar, rtl, extern: "nsuCapitalize".} = ## Converts the first character of `s` into upper case. ## This works only for the letters a-z. - result = toUpper(s[0]) & copy(s, 1) + result = toUpper(s[0]) & substr(s, 1) proc normalize*(s: string): string {.noSideEffect, procvar, rtl, extern: "nsuNormalize".} = @@ -175,14 +175,14 @@ proc addf*(s: var string, formatstr: string, a: openarray[string]) {. of '{': var j = i+1 while formatstr[j] notin {'\0', '}'}: inc(j) - var x = findNormalized(copy(formatstr, i+2, j-1), a) + var x = findNormalized(substr(formatstr, i+2, j-1), a) if x >= 0 and x < high(a): add s, a[x+1] else: raise newException(EInvalidValue, "invalid format string") i = j+1 of 'a'..'z', 'A'..'Z', '\128'..'\255', '_': var j = i+1 while formatstr[j] in PatternChars: inc(j) - var x = findNormalized(copy(formatstr, i+1, j-1), a) + var x = findNormalized(substr(formatstr, i+1, j-1), a) if x >= 0 and x < high(a): add s, a[x+1] else: raise newException(EInvalidValue, "invalid format string") i = j @@ -253,7 +253,7 @@ proc strip*(s: string, leading = true, trailing = true): string {.noSideEffect, while s[first] in chars: inc(first) if trailing: while last >= 0 and s[last] in chars: dec(last) - result = copy(s, first, last) + result = substr(s, first, last) proc toOctal*(c: char): string {.noSideEffect, rtl, extern: "nsuToOctal".} = ## Converts a character `c` to its octal representation. The resulting @@ -293,7 +293,7 @@ iterator split*(s: string, seps: set[char] = Whitespace): string = var first = last while last < len(s) and s[last] not_in seps: inc(last) # BUGFIX! if first <= last-1: - yield copy(s, first, last-1) + yield substr(s, first, last-1) iterator split*(s: string, sep: char): string = ## Splits the string `s` into substrings. @@ -326,7 +326,7 @@ iterator split*(s: string, sep: char): string = while last <= len(s): var first = last while last < len(s) and s[last] != sep: inc(last) - yield copy(s, first, last-1) + yield substr(s, first, last-1) inc(last) iterator splitLines*(s: string): string = @@ -354,7 +354,7 @@ iterator splitLines*(s: string): string = var last = 0 while true: while s[last] notin {'\0', '\c', '\l'}: inc(last) - yield copy(s, first, last-1) + yield substr(s, first, last-1) # skip newlines: if s[last] == '\l': inc(last) elif s[last] == '\c': @@ -504,7 +504,7 @@ iterator tokenize*(s: string, seps: set[char] = Whitespace): tuple[ var isSep = s[j] in seps while j < s.len and (s[j] in seps) == isSep: inc(j) if j > i: - yield (copy(s, i, j-1), isSep) + yield (substr(s, i, j-1), isSep) else: break i = j @@ -520,14 +520,14 @@ proc wordWrap*(s: string, maxLineWidth = 80, for word, isSep in tokenize(s, seps): if len(word) > SpaceLeft: if splitLongWords and len(word) > maxLineWidth: - result.add(copy(word, 0, spaceLeft-1)) + result.add(substr(word, 0, spaceLeft-1)) var w = spaceLeft+1 var wordLeft = len(word) - spaceLeft while wordLeft > 0: result.add(newLine) var L = min(maxLineWidth, wordLeft) SpaceLeft = maxLineWidth - L - result.add(copy(word, w, w+L-1)) + result.add(substr(word, w, w+L-1)) inc(w, L) dec(wordLeft, L) else: @@ -705,11 +705,11 @@ proc replace*(s, sub: string, by = ""): string {.noSideEffect, while true: var j = findAux(s, sub, i, a) if j < 0: break - add result, copy(s, i, j - 1) + add result, substr(s, i, j - 1) add result, by i = j + len(sub) # copy the rest: - add result, copy(s, i) + add result, substr(s, i) proc replace*(s: string, sub, by: char): string {.noSideEffect, rtl, extern: "nsuReplaceChar".} = @@ -843,7 +843,7 @@ proc validEmailAddress*(s: string): bool {.noSideEffect, while s[i] in {'0'..'9', 'a'..'z', '-', '.'}: inc(i) if s[i] != '\0': return false - var x = copy(s, j+1) + var x = substr(s, j+1) if len(x) == 2 and x[0] in Letters and x[1] in Letters: return true case toLower(x) of "com", "org", "net", "gov", "mil", "biz", "info", "mobi", "name", diff --git a/lib/pure/xmldom.nim b/lib/pure/xmldom.nim index bf031fb88..923fc9e18 100755 --- a/lib/pure/xmldom.nim +++ b/lib/pure/xmldom.nim @@ -1021,9 +1021,9 @@ proc splitData*(TextNode: PText, offset: int): PText = if offset > TextNode.data.len(): raise newException(EIndexSizeErr, "Index out of bounds") - var left: string = TextNode.data.copy(0, offset) + var left: string = TextNode.data.substr(0, offset) TextNode.data = left - var right: string = TextNode.data.copy(offset, TextNode.data.len()) + var right: string = TextNode.data.substr(offset, TextNode.data.len()) if TextNode.FParentNode != nil: for i in low(TextNode.FParentNode.childNodes)..high(TextNode.FParentNode.childNodes): diff --git a/lib/system.nim b/lib/system.nim index a18412790..21da9d6ff 100755 --- a/lib/system.nim +++ b/lib/system.nim @@ -909,8 +909,19 @@ proc addQuitProc*(QuitProc: proc {.noconv.}) {.importc: "atexit", nodecl.} # not be called explicitly! The user may decide to do this manually though. proc copy*(s: string, first = 0): string {. - magic: "CopyStr", importc: "copyStr", noSideEffect.} + magic: "CopyStr", importc: "copyStr", noSideEffect, deprecated.} proc copy*(s: string, first, last: int): string {. + magic: "CopyStrLast", importc: "copyStrLast", noSideEffect, + deprecated.} + ## copies a slice of `s` into a new string and returns this new + ## string. The bounds `first` and `last` denote the indices of + ## the first and last characters that shall be copied. If ``last`` + ## is omitted, it is treated as ``high(s)``. + ## **Deprecated since version 0.8.12**: Use ``substr`` instead. + +proc substr*(s: string, first = 0): string {. + magic: "CopyStr", importc: "copyStr", noSideEffect.} +proc substr*(s: string, first, last: int): string {. magic: "CopyStrLast", importc: "copyStrLast", noSideEffect.} ## copies a slice of `s` into a new string and returns this new ## string. The bounds `first` and `last` denote the indices of @@ -1783,7 +1794,7 @@ template `-|`(b, s: expr): expr = proc `[]`*(s: string, x: TSlice[int]): string {.inline.} = ## slice operation for strings. Negative indexes are supported. - result = s.copy(x.a-|s, x.b-|s) + result = s.substr(x.a-|s, x.b-|s) proc `[]=`*(s: var string, x: TSlice[int], b: string) = ## slice assignment for strings. Negative indexes are supported. |