From 6c6dfff4e90fba5cfda70f1a210552f32f134480 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Sun, 19 Aug 2012 13:00:28 +0100 Subject: [PATCH] Added strutils.rfind. --- lib/pure/strutils.nim | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index 2509bf689e..0f11b4d896 100755 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -654,6 +654,20 @@ proc find*(s: string, chars: set[char], start: int = 0): int {.noSideEffect, for i in start..s.len-1: if s[i] in chars: return i return -1 + +proc rfind*(s, sub: string, start: int = -1): int {.noSideEffect.} = + ## Searches for `sub` in `s` in reverse, starting at `start` and going + ## backwards to 0. Searching is case-sensitive. If `sub` is not in `s`, -1 is + ## returned. + let realStart = if start == -1: s.len else: start + for i in countdown(realStart-sub.len, 0): + for j in 0..sub.len-1: + result = i + if sub[j] != s[i+j]: + result = -1 + break + if result != -1: return + return -1 proc quoteIfContainsWhite*(s: string): string = ## returns ``'"' & s & '"'`` if `s` contains a space and does not