summary refs log tree commit diff stats
path: root/tools/nimgrep.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tools/nimgrep.nim')
-rw-r--r--tools/nimgrep.nim90
1 files changed, 45 insertions, 45 deletions
diff --git a/tools/nimgrep.nim b/tools/nimgrep.nim
index 72e4adc07..221181f66 100644
--- a/tools/nimgrep.nim
+++ b/tools/nimgrep.nim
@@ -21,10 +21,10 @@ Options:
   --find, -f          find the pattern (default)
   --replace, -r       replace the pattern
   --peg               pattern is a peg
-  --re                pattern is a regular expression (default); extended 
+  --re                pattern is a regular expression (default); extended
                       syntax for the regular expression is always turned on
   --recursive         process directories recursively
-  --confirm           confirm each occurrence/replacement; there is a chance 
+  --confirm           confirm each occurrence/replacement; there is a chance
                       to abort any time without touching the file
   --stdin             read pattern from stdin (to avoid the shell's confusing
                       quoting rules)
@@ -39,13 +39,13 @@ Options:
 """
 
 type
-  TOption = enum 
+  TOption = enum
     optFind, optReplace, optPeg, optRegex, optRecursive, optConfirm, optStdin,
     optWord, optIgnoreCase, optIgnoreStyle, optVerbose
   TOptions = set[TOption]
-  TConfirmEnum = enum 
+  TConfirmEnum = enum
     ceAbort, ceYes, ceAll, ceNo, ceNone
-    
+
 var
   filenames: seq[string] = @[]
   pattern = ""
@@ -58,34 +58,34 @@ proc ask(msg: string): string =
   stdout.write(msg)
   result = stdin.readLine()
 
-proc confirm: TConfirmEnum = 
+proc confirm: TConfirmEnum =
   while true:
     case normalize(ask("     [a]bort; [y]es, a[l]l, [n]o, non[e]: "))
-    of "a", "abort": return ceAbort 
+    of "a", "abort": return ceAbort
     of "y", "yes": return ceYes
     of "l", "all": return ceAll
     of "n", "no": return ceNo
     of "e", "none": return ceNone
     else: discard
 
-proc countLines(s: string, first, last: int): int = 
+proc countLines(s: string, first, last: int): int =
   var i = first
   while i <= last:
-    if s[i] == '\13': 
+    if s[i] == '\13':
       inc result
       if i < last and s[i+1] == '\10': inc(i)
-    elif s[i] == '\10': 
+    elif s[i] == '\10':
       inc result
     inc i
 
-proc beforePattern(s: string, first: int): int = 
+proc beforePattern(s: string, first: int): int =
   result = first-1
   while result >= 0:
     if s[result] in NewLines: break
     dec(result)
   inc(result)
 
-proc afterPattern(s: string, last: int): int = 
+proc afterPattern(s: string, last: int): int =
   result = last+1
   while result < s.len:
     if s[result] in NewLines: break
@@ -99,7 +99,7 @@ proc writeColored(s: string) =
     stdout.write(s)
 
 proc highlight(s, match, repl: string, t: tuple[first, last: int],
-               line: int, showRepl: bool) = 
+               line: int, showRepl: bool) =
   const alignment = 6
   stdout.write(line.`$`.align(alignment), ": ")
   var x = beforePattern(s, t.first)
@@ -118,17 +118,17 @@ proc highlight(s, match, repl: string, t: tuple[first, last: int],
 proc processFile(filename: string) =
   var filenameShown = false
   template beforeHighlight =
-    if not filenameShown and optVerbose notin options: 
-      stdout.writeln(filename)
+    if not filenameShown and optVerbose notin options:
+      stdout.writeLine(filename)
       filenameShown = true
-  
+
   var buffer: string
   try:
     buffer = system.readFile(filename)
-  except IOError: 
+  except IOError:
     echo "cannot open file: ", filename
     return
-  if optVerbose in options: stdout.writeln(filename)
+  if optVerbose in options: stdout.writeLine(filename)
   var pegp: TPeg
   var rep: Regex
   var result: string
@@ -140,10 +140,10 @@ proc processFile(filename: string) =
       rep = re(pattern)
   else:
     pegp = peg(pattern)
-    
+
   if optReplace in options:
     result = newStringOfCap(buffer.len)
-    
+
   var line = 1
   var i = 0
   var matches: array[0..re.MaxSubpatterns-1, string]
@@ -157,24 +157,24 @@ proc processFile(filename: string) =
       t = findBounds(buffer, rep, matches, i)
     if t.first <= 0: break
     inc(line, countLines(buffer, i, t.first-1))
-    
+
     var wholeMatch = buffer.substr(t.first, t.last)
-    
+
     beforeHighlight()
-    if optReplace notin options: 
+    if optReplace notin options:
       highlight(buffer, wholeMatch, "", t, line, showRepl=false)
     else:
       var r: string
       if optRegex notin options:
         r = replace(wholeMatch, pegp, replacement % matches)
-      else: 
+      else:
         r = replace(wholeMatch, rep, replacement % matches)
-      if optConfirm in options: 
+      if optConfirm in options:
         highlight(buffer, wholeMatch, r, t, line, showRepl=true)
         case confirm()
         of ceAbort: quit(0)
-        of ceYes: reallyReplace = true 
-        of ceAll: 
+        of ceYes: reallyReplace = true
+        of ceAll:
           reallyReplace = true
           options.excl(optConfirm)
         of ceNo:
@@ -203,11 +203,11 @@ proc processFile(filename: string) =
 
 proc hasRightExt(filename: string, exts: seq[string]): bool =
   var y = splitFile(filename).ext.substr(1) # skip leading '.'
-  for x in items(exts): 
+  for x in items(exts):
     if os.cmpPaths(x, y) == 0: return true
 
-proc styleInsensitive(s: string): string = 
-  template addx: stmt = 
+proc styleInsensitive(s: string): string =
+  template addx: stmt =
     result.add(s[i])
     inc(i)
   result = ""
@@ -215,7 +215,7 @@ proc styleInsensitive(s: string): string =
   var brackets = 0
   while i < s.len:
     case s[i]
-    of 'A'..'Z', 'a'..'z', '0'..'9': 
+    of 'A'..'Z', 'a'..'z', '0'..'9':
       addx()
       if brackets == 0: result.add("_?")
     of '_':
@@ -234,29 +234,29 @@ proc styleInsensitive(s: string): string =
         while s[i] != '>' and s[i] != '\0': addx()
     of '\\':
       addx()
-      if s[i] in strutils.Digits: 
+      if s[i] in strutils.Digits:
         while s[i] in strutils.Digits: addx()
       else:
         addx()
     else: addx()
 
-proc walker(dir: string) = 
+proc walker(dir: string) =
   for kind, path in walkDir(dir):
     case kind
-    of pcFile: 
+    of pcFile:
       if extensions.len == 0 or path.hasRightExt(extensions):
         processFile(path)
-    of pcDir: 
+    of pcDir:
       if optRecursive in options:
         walker(path)
     else: discard
   if existsFile(dir): processFile(dir)
 
-proc writeHelp() = 
+proc writeHelp() =
   stdout.write(Usage)
   quit(0)
 
-proc writeVersion() = 
+proc writeVersion() =
   stdout.write(Version & "\n")
   quit(0)
 
@@ -267,9 +267,9 @@ proc checkOptions(subset: TOptions, a, b: string) =
 for kind, key, val in getopt():
   case kind
   of cmdArgument:
-    if options.contains(optStdin): 
+    if options.contains(optStdin):
       filenames.add(key)
-    elif pattern.len == 0: 
+    elif pattern.len == 0:
       pattern = key
     elif options.contains(optReplace) and replacement.len == 0:
       replacement = key
@@ -306,7 +306,7 @@ checkOptions({optFind, optReplace}, "find", "replace")
 checkOptions({optPeg, optRegex}, "peg", "re")
 checkOptions({optIgnoreCase, optIgnoreStyle}, "ignore_case", "ignore_style")
 
-if optStdin in options: 
+if optStdin in options:
   pattern = ask("pattern [ENTER to exit]: ")
   if isNil(pattern) or pattern.len == 0: quit(0)
   if optReplace in options:
@@ -314,18 +314,18 @@ if optStdin in options:
 
 if pattern.len == 0:
   writeHelp()
-else: 
-  if filenames.len == 0: 
+else:
+  if filenames.len == 0:
     filenames.add(os.getCurrentDir())
-  if optRegex notin options: 
+  if optRegex notin options:
     if optWord in options:
       pattern = r"(^ / !\letter)(" & pattern & r") !\letter"
-    if optIgnoreStyle in options: 
+    if optIgnoreStyle in options:
       pattern = "\\y " & pattern
     elif optIgnoreCase in options:
       pattern = "\\i " & pattern
   else:
-    if optIgnoreStyle in options: 
+    if optIgnoreStyle in options:
       pattern = styleInsensitive(pattern)
     if optWord in options:
       pattern = r"\b (:?" & pattern & r") \b"