summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pure')
-rw-r--r--[-rwxr-xr-x]lib/pure/algorithm.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/base64.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/browsers.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/cgi.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/collections/intsets.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/collections/lists.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/collections/queues.nim0
-rw-r--r--lib/pure/collections/sequtils.nim220
-rw-r--r--[-rwxr-xr-x]lib/pure/collections/sets.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/collections/tables.nim21
-rw-r--r--[-rwxr-xr-x]lib/pure/colors.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/complex.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/cookies.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/dynlib.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/encodings.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/gentabs.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/hashes.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/htmlgen.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/htmlparser.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/httpclient.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/httpserver.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/json.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/lexbase.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/marshal.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/math.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/md5.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/os.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/osproc.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/parsecfg.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/parsecsv.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/parseopt.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/parsesql.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/parseurl.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/parseutils.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/parsexml.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/pegs.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/redis.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/romans.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/ropes.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/scgi.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/smtp.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/sockets.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/streams.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/strtabs.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/strutils.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/terminal.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/times.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/unidecode/unidecode.dat0
-rw-r--r--[-rwxr-xr-x]lib/pure/unidecode/unidecode.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/xmldom.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/xmldomparser.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/xmlparser.nim0
-rw-r--r--[-rwxr-xr-x]lib/pure/xmltree.nim0
53 files changed, 176 insertions, 65 deletions
diff --git a/lib/pure/algorithm.nim b/lib/pure/algorithm.nim
index 8b44e69d9..8b44e69d9 100755..100644
--- a/lib/pure/algorithm.nim
+++ b/lib/pure/algorithm.nim
diff --git a/lib/pure/base64.nim b/lib/pure/base64.nim
index 8c4883c11..8c4883c11 100755..100644
--- a/lib/pure/base64.nim
+++ b/lib/pure/base64.nim
diff --git a/lib/pure/browsers.nim b/lib/pure/browsers.nim
index a12f0f7f3..a12f0f7f3 100755..100644
--- a/lib/pure/browsers.nim
+++ b/lib/pure/browsers.nim
diff --git a/lib/pure/cgi.nim b/lib/pure/cgi.nim
index c499abdc0..c499abdc0 100755..100644
--- a/lib/pure/cgi.nim
+++ b/lib/pure/cgi.nim
diff --git a/lib/pure/collections/intsets.nim b/lib/pure/collections/intsets.nim
index 2a8d7eec2..2a8d7eec2 100755..100644
--- a/lib/pure/collections/intsets.nim
+++ b/lib/pure/collections/intsets.nim
diff --git a/lib/pure/collections/lists.nim b/lib/pure/collections/lists.nim
index ad8eca6a9..ad8eca6a9 100755..100644
--- a/lib/pure/collections/lists.nim
+++ b/lib/pure/collections/lists.nim
diff --git a/lib/pure/collections/queues.nim b/lib/pure/collections/queues.nim
index 5481272f0..5481272f0 100755..100644
--- a/lib/pure/collections/queues.nim
+++ b/lib/pure/collections/queues.nim
diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim
index 298e7f27e..c2d638a8c 100644
--- a/lib/pure/collections/sequtils.nim
+++ b/lib/pure/collections/sequtils.nim
@@ -117,7 +117,7 @@ proc filter*[T](seq1: seq[T], pred: proc(item: T): bool {.closure.}): seq[T] =
   ##   assert f2 == @["yellow"]
   accumulateResult(filter(seq1, pred))
 
-template filterIt*(seq1, pred: expr): expr {.immediate, dirty.} =
+template filterIt*(seq1, pred: expr): expr {.immediate.} =
   ## Returns a new sequence with all the items that fulfilled the predicate.
   ##
   ## Unlike the `proc` version, the predicate needs to be an expression using
@@ -128,9 +128,12 @@ template filterIt*(seq1, pred: expr): expr {.immediate, dirty.} =
   ##    let
   ##      temperatures = @[-272.15, -2.0, 24.5, 44.31, 99.9, -113.44]
   ##      acceptable = filterIt(temperatures, it < 50 and it > -10)
+  ##      notAcceptable = filterIt(temperatures, it > 50 or it < -10)
   ##    assert acceptable == @[-2.0, 24.5, 44.31]
+  ##    assert notAcceptable == @[-272.15, 99.9, -113.44]
   var result {.gensym.}: type(seq1) = @[]
-  for it in items(seq1):
+  for internalit in items(seq1):
+    let it {.inject.} = internalit
     if pred: result.add(it)
   result
 
@@ -151,64 +154,163 @@ template toSeq*(iter: expr): expr {.immediate.} =
   for x in iter: add(result, x)
   result
 
+template foldl*(sequence, operation: expr): expr =
+  ## Template to fold a sequence from left to right, returning the accumulation.
+  ##
+  ## The sequence is required to have at least a single element. Debug versions
+  ## of your program will assert in this situation but release versions will
+  ## happily go ahead. If the sequence has a single element it will be returned
+  ## without applying ``operation``.
+  ##
+  ## The ``operation`` parameter should be an expression which uses the
+  ## variables ``a`` and ``b`` for each step of the fold. Since this is a left
+  ## fold, for non associative binary operations like substraction think that
+  ## the sequence of numbers 1, 2 and 3 will be parenthesized as (((1) - 2) -
+  ## 3).  Example:
+  ##
+  ## .. code-block:: nimrod
+  ##   let
+  ##     numbers = @[5, 9, 11]
+  ##     addition = foldl(numbers, a + b)
+  ##     substraction = foldl(numbers, a - b)
+  ##     multiplication = foldl(numbers, a * b)
+  ##     words = @["nim", "rod", "is", "cool"]
+  ##     concatenation = foldl(words, a & b)
+  ##   assert addition == 25, "Addition is (((5)+9)+11)"
+  ##   assert substraction == -15, "Substraction is (((5)-9)-11)"
+  ##   assert multiplication == 495, "Multiplication is (((5)*9)*11)"
+  ##   assert concatenation == "nimrodiscool"
+  assert sequence.len > 0, "Can't fold empty sequences"
+  var result {.gensym.}: type(sequence[0])
+  result = sequence[0]
+  for i in countup(1, sequence.len - 1):
+    let
+      a {.inject.} = result
+      b {.inject.} = sequence[i]
+    result = operation
+  result
+
+template foldr*(sequence, operation: expr): expr =
+  ## Template to fold a sequence from right to left, returning the accumulation.
+  ##
+  ## The sequence is required to have at least a single element. Debug versions
+  ## of your program will assert in this situation but release versions will
+  ## happily go ahead. If the sequence has a single element it will be returned
+  ## without applying ``operation``.
+  ##
+  ## The ``operation`` parameter should be an expression which uses the
+  ## variables ``a`` and ``b`` for each step of the fold. Since this is a right
+  ## fold, for non associative binary operations like substraction think that
+  ## the sequence of numbers 1, 2 and 3 will be parenthesized as (1 - (2 -
+  ## (3))). Example:
+  ##
+  ## .. code-block:: nimrod
+  ##   let
+  ##     numbers = @[5, 9, 11]
+  ##     addition = foldr(numbers, a + b)
+  ##     substraction = foldr(numbers, a - b)
+  ##     multiplication = foldr(numbers, a * b)
+  ##     words = @["nim", "rod", "is", "cool"]
+  ##     concatenation = foldr(words, a & b)
+  ##   assert addition == 25, "Addition is (5+(9+(11)))"
+  ##   assert substraction == 7, "Substraction is (5-(9-(11)))"
+  ##   assert multiplication == 495, "Multiplication is (5*(9*(11)))"
+  ##   assert concatenation == "nimrodiscool"
+  assert sequence.len > 0, "Can't fold empty sequences"
+  var result {.gensym.}: type(sequence[0])
+  result = sequence[sequence.len - 1]
+  for i in countdown(sequence.len - 2, 0):
+    let
+      a {.inject.} = sequence[i]
+      b {.inject.} = result
+    result = operation
+  result
+
 when isMainModule:
   import strutils
-  proc toStr(x: int): string {.procvar.} = $x
-  # concat test
-  let
-    s1 = @[1, 2, 3]
-    s2 = @[4, 5]
-    s3 = @[6, 7]
-    total = concat(s1, s2, s3)
-  assert total == @[1, 2, 3, 4, 5, 6, 7]
-
-  # duplicates test
-  let
-    dup1 = @[1, 1, 3, 4, 2, 2, 8, 1, 4]
-    dup2 = @["a", "a", "c", "d", "d"]
-    unique1 = distnct(dup1)
-    unique2 = distnct(dup2)
-  assert unique1 == @[1, 3, 4, 2, 8]
-  assert unique2 == @["a", "c", "d"]
-
-  # zip test
-  let
-    short = @[1, 2, 3]
-    long = @[6, 5, 4, 3, 2, 1]
-    words = @["one", "two", "three"]
-    zip1 = zip(short, long)
-    zip2 = zip(short, words)
-  assert zip1 == @[(1, 6), (2, 5), (3, 4)]
-  assert zip2 == @[(1, "one"), (2, "two"), (3, "three")]
-  assert zip1[2].b == 4
-  assert zip2[2].b == "three"
-
-  # filter proc test
-  let
-    colors = @["red", "yellow", "black"]
-    f1 = filter(colors, proc(x: string): bool = x.len < 6)
-    f2 = filter(colors) do (x: string) -> bool : x.len > 5
-  assert f1 == @["red", "black"]
-  assert f2 == @["yellow"]
-
-  # filter iterator test
-  let numbers = @[1, 4, 5, 8, 9, 7, 4]
-  for n in filter(numbers, proc (x: int): bool = x mod 2 == 0):
-    echo($n)
-  # echoes 4, 8, 4 in separate lines
-
-  # filterIt test
-  let
-    temperatures = @[-272.15, -2.0, 24.5, 44.31, 99.9, -113.44]
-    acceptable = filterIt(temperatures, it < 50 and it > -10)
-  assert acceptable == @[-2.0, 24.5, 44.31]
-
-  # toSeq test
-  let
-    numeric = @[1, 2, 3, 4, 5, 6, 7, 8, 9]
-    odd_numbers = toSeq(filter(numeric) do (x: int) -> bool:
-      if x mod 2 == 1:
-        result = true)
-  assert odd_numbers == @[1, 3, 5, 7, 9]
+  block: # concat test
+    let
+      s1 = @[1, 2, 3]
+      s2 = @[4, 5]
+      s3 = @[6, 7]
+      total = concat(s1, s2, s3)
+    assert total == @[1, 2, 3, 4, 5, 6, 7]
+
+  block: # duplicates test
+    let
+      dup1 = @[1, 1, 3, 4, 2, 2, 8, 1, 4]
+      dup2 = @["a", "a", "c", "d", "d"]
+      unique1 = distnct(dup1)
+      unique2 = distnct(dup2)
+    assert unique1 == @[1, 3, 4, 2, 8]
+    assert unique2 == @["a", "c", "d"]
+
+  block: # zip test
+    let
+      short = @[1, 2, 3]
+      long = @[6, 5, 4, 3, 2, 1]
+      words = @["one", "two", "three"]
+      zip1 = zip(short, long)
+      zip2 = zip(short, words)
+    assert zip1 == @[(1, 6), (2, 5), (3, 4)]
+    assert zip2 == @[(1, "one"), (2, "two"), (3, "three")]
+    assert zip1[2].b == 4
+    assert zip2[2].b == "three"
+
+  block: # filter proc test
+    let
+      colors = @["red", "yellow", "black"]
+      f1 = filter(colors, proc(x: string): bool = x.len < 6)
+      f2 = filter(colors) do (x: string) -> bool : x.len > 5
+    assert f1 == @["red", "black"]
+    assert f2 == @["yellow"]
+
+  block: # filter iterator test
+    let numbers = @[1, 4, 5, 8, 9, 7, 4]
+    for n in filter(numbers, proc (x: int): bool = x mod 2 == 0):
+      echo($n)
+    # echoes 4, 8, 4 in separate lines
+
+  block: # filterIt test
+    let
+      temperatures = @[-272.15, -2.0, 24.5, 44.31, 99.9, -113.44]
+      acceptable = filterIt(temperatures, it < 50 and it > -10)
+      notAcceptable = filterIt(temperatures, it > 50 or it < -10)
+    assert acceptable == @[-2.0, 24.5, 44.31]
+    assert notAcceptable == @[-272.15, 99.9, -113.44]
+
+  block: # toSeq test
+    let
+      numeric = @[1, 2, 3, 4, 5, 6, 7, 8, 9]
+      odd_numbers = toSeq(filter(numeric) do (x: int) -> bool:
+        if x mod 2 == 1:
+          result = true)
+    assert odd_numbers == @[1, 3, 5, 7, 9]
+
+  block: # foldl tests
+    let
+      numbers = @[5, 9, 11]
+      addition = foldl(numbers, a + b)
+      substraction = foldl(numbers, a - b)
+      multiplication = foldl(numbers, a * b)
+      words = @["nim", "rod", "is", "cool"]
+      concatenation = foldl(words, a & b)
+    assert addition == 25, "Addition is (((5)+9)+11)"
+    assert substraction == -15, "Substraction is (((5)-9)-11)"
+    assert multiplication == 495, "Multiplication is (((5)*9)*11)"
+    assert concatenation == "nimrodiscool"
+
+  block: # foldr tests
+    let
+      numbers = @[5, 9, 11]
+      addition = foldr(numbers, a + b)
+      substraction = foldr(numbers, a - b)
+      multiplication = foldr(numbers, a * b)
+      words = @["nim", "rod", "is", "cool"]
+      concatenation = foldr(words, a & b)
+    assert addition == 25, "Addition is (5+(9+(11)))"
+    assert substraction == 7, "Substraction is (5-(9-(11)))"
+    assert multiplication == 495, "Multiplication is (5*(9*(11)))"
+    assert concatenation == "nimrodiscool"
 
   echo "Finished doc tests"
diff --git a/lib/pure/collections/sets.nim b/lib/pure/collections/sets.nim
index 42b77d427..42b77d427 100755..100644
--- a/lib/pure/collections/sets.nim
+++ b/lib/pure/collections/sets.nim
diff --git a/lib/pure/collections/tables.nim b/lib/pure/collections/tables.nim
index 4290af08a..02d099c1f 100755..100644
--- a/lib/pure/collections/tables.nim
+++ b/lib/pure/collections/tables.nim
@@ -159,8 +159,11 @@ proc del*[A, B](t: var TTable[A, B], key: A) =
     dec(t.counter)
 
 proc initTable*[A, B](initialSize=64): TTable[A, B] =
-  ## creates a new hash table that is empty. `initialSize` needs to be
-  ## a power of two.
+  ## creates a new hash table that is empty.
+  ##
+  ## `initialSize` needs to be a power of two. If you need to accept runtime
+  ## values for this you could use the ``nextPowerOfTwo`` proc from the
+  ## `math <math.html>`_ module.
   assert isPowerOfTwo(initialSize)
   result.counter = 0
   newSeq(result.data, initialSize)
@@ -290,8 +293,11 @@ proc add*[A, B](t: var TOrderedTable[A, B], key: A, val: B) =
   AddImpl()
 
 proc initOrderedTable*[A, B](initialSize=64): TOrderedTable[A, B] =
-  ## creates a new ordered hash table that is empty. `initialSize` needs to be
-  ## a power of two.
+  ## creates a new ordered hash table that is empty.
+  ##
+  ## `initialSize` needs to be a power of two. If you need to accept runtime
+  ## values for this you could use the ``nextPowerOfTwo`` proc from the
+  ## `math <math.html>`_ module.
   assert isPowerOfTwo(initialSize)
   result.counter = 0
   result.first = -1
@@ -437,8 +443,11 @@ proc `[]=`*[A](t: var TCountTable[A], key: A, val: int) =
   PutImpl()
 
 proc initCountTable*[A](initialSize=64): TCountTable[A] =
-  ## creates a new count table that is empty. `initialSize` needs to be
-  ## a power of two.
+  ## creates a new count table that is empty.
+  ##
+  ## `initialSize` needs to be a power of two. If you need to accept runtime
+  ## values for this you could use the ``nextPowerOfTwo`` proc from the
+  ## `math <math.html>`_ module.
   assert isPowerOfTwo(initialSize)
   result.counter = 0
   newSeq(result.data, initialSize)
diff --git a/lib/pure/colors.nim b/lib/pure/colors.nim
index 9f824e5de..9f824e5de 100755..100644
--- a/lib/pure/colors.nim
+++ b/lib/pure/colors.nim
diff --git a/lib/pure/complex.nim b/lib/pure/complex.nim
index df08ace72..df08ace72 100755..100644
--- a/lib/pure/complex.nim
+++ b/lib/pure/complex.nim
diff --git a/lib/pure/cookies.nim b/lib/pure/cookies.nim
index d1cf36a87..d1cf36a87 100755..100644
--- a/lib/pure/cookies.nim
+++ b/lib/pure/cookies.nim
diff --git a/lib/pure/dynlib.nim b/lib/pure/dynlib.nim
index a64b7f138..a64b7f138 100755..100644
--- a/lib/pure/dynlib.nim
+++ b/lib/pure/dynlib.nim
diff --git a/lib/pure/encodings.nim b/lib/pure/encodings.nim
index ce4238409..ce4238409 100755..100644
--- a/lib/pure/encodings.nim
+++ b/lib/pure/encodings.nim
diff --git a/lib/pure/gentabs.nim b/lib/pure/gentabs.nim
index 617473c14..617473c14 100755..100644
--- a/lib/pure/gentabs.nim
+++ b/lib/pure/gentabs.nim
diff --git a/lib/pure/hashes.nim b/lib/pure/hashes.nim
index cf0777ff7..cf0777ff7 100755..100644
--- a/lib/pure/hashes.nim
+++ b/lib/pure/hashes.nim
diff --git a/lib/pure/htmlgen.nim b/lib/pure/htmlgen.nim
index 75af2c892..75af2c892 100755..100644
--- a/lib/pure/htmlgen.nim
+++ b/lib/pure/htmlgen.nim
diff --git a/lib/pure/htmlparser.nim b/lib/pure/htmlparser.nim
index ad952fc41..ad952fc41 100755..100644
--- a/lib/pure/htmlparser.nim
+++ b/lib/pure/htmlparser.nim
diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim
index cc0129b45..cc0129b45 100755..100644
--- a/lib/pure/httpclient.nim
+++ b/lib/pure/httpclient.nim
diff --git a/lib/pure/httpserver.nim b/lib/pure/httpserver.nim
index ce816b7d4..ce816b7d4 100755..100644
--- a/lib/pure/httpserver.nim
+++ b/lib/pure/httpserver.nim
diff --git a/lib/pure/json.nim b/lib/pure/json.nim
index d2516adfb..d2516adfb 100755..100644
--- a/lib/pure/json.nim
+++ b/lib/pure/json.nim
diff --git a/lib/pure/lexbase.nim b/lib/pure/lexbase.nim
index 2756290d8..2756290d8 100755..100644
--- a/lib/pure/lexbase.nim
+++ b/lib/pure/lexbase.nim
diff --git a/lib/pure/marshal.nim b/lib/pure/marshal.nim
index f52b554cc..f52b554cc 100755..100644
--- a/lib/pure/marshal.nim
+++ b/lib/pure/marshal.nim
diff --git a/lib/pure/math.nim b/lib/pure/math.nim
index d65330c4a..d65330c4a 100755..100644
--- a/lib/pure/math.nim
+++ b/lib/pure/math.nim
diff --git a/lib/pure/md5.nim b/lib/pure/md5.nim
index e75f80b4c..e75f80b4c 100755..100644
--- a/lib/pure/md5.nim
+++ b/lib/pure/md5.nim
diff --git a/lib/pure/os.nim b/lib/pure/os.nim
index 408fbd9d4..408fbd9d4 100755..100644
--- a/lib/pure/os.nim
+++ b/lib/pure/os.nim
diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim
index e627e73c8..e627e73c8 100755..100644
--- a/lib/pure/osproc.nim
+++ b/lib/pure/osproc.nim
diff --git a/lib/pure/parsecfg.nim b/lib/pure/parsecfg.nim
index 6a0f2ed49..6a0f2ed49 100755..100644
--- a/lib/pure/parsecfg.nim
+++ b/lib/pure/parsecfg.nim
diff --git a/lib/pure/parsecsv.nim b/lib/pure/parsecsv.nim
index 5970f2090..5970f2090 100755..100644
--- a/lib/pure/parsecsv.nim
+++ b/lib/pure/parsecsv.nim
diff --git a/lib/pure/parseopt.nim b/lib/pure/parseopt.nim
index 6d9d16bc9..6d9d16bc9 100755..100644
--- a/lib/pure/parseopt.nim
+++ b/lib/pure/parseopt.nim
diff --git a/lib/pure/parsesql.nim b/lib/pure/parsesql.nim
index 31951e966..31951e966 100755..100644
--- a/lib/pure/parsesql.nim
+++ b/lib/pure/parsesql.nim
diff --git a/lib/pure/parseurl.nim b/lib/pure/parseurl.nim
index 937f26f6f..937f26f6f 100755..100644
--- a/lib/pure/parseurl.nim
+++ b/lib/pure/parseurl.nim
diff --git a/lib/pure/parseutils.nim b/lib/pure/parseutils.nim
index 989d45f47..989d45f47 100755..100644
--- a/lib/pure/parseutils.nim
+++ b/lib/pure/parseutils.nim
diff --git a/lib/pure/parsexml.nim b/lib/pure/parsexml.nim
index c49986087..c49986087 100755..100644
--- a/lib/pure/parsexml.nim
+++ b/lib/pure/parsexml.nim
diff --git a/lib/pure/pegs.nim b/lib/pure/pegs.nim
index 4e31ffc0c..4e31ffc0c 100755..100644
--- a/lib/pure/pegs.nim
+++ b/lib/pure/pegs.nim
diff --git a/lib/pure/redis.nim b/lib/pure/redis.nim
index bb6ea6768..bb6ea6768 100755..100644
--- a/lib/pure/redis.nim
+++ b/lib/pure/redis.nim
diff --git a/lib/pure/romans.nim b/lib/pure/romans.nim
index dee3226d8..dee3226d8 100755..100644
--- a/lib/pure/romans.nim
+++ b/lib/pure/romans.nim
diff --git a/lib/pure/ropes.nim b/lib/pure/ropes.nim
index 4a6c3f530..4a6c3f530 100755..100644
--- a/lib/pure/ropes.nim
+++ b/lib/pure/ropes.nim
diff --git a/lib/pure/scgi.nim b/lib/pure/scgi.nim
index 0f3b44e00..0f3b44e00 100755..100644
--- a/lib/pure/scgi.nim
+++ b/lib/pure/scgi.nim
diff --git a/lib/pure/smtp.nim b/lib/pure/smtp.nim
index abf268942..abf268942 100755..100644
--- a/lib/pure/smtp.nim
+++ b/lib/pure/smtp.nim
diff --git a/lib/pure/sockets.nim b/lib/pure/sockets.nim
index e70fbd09a..e70fbd09a 100755..100644
--- a/lib/pure/sockets.nim
+++ b/lib/pure/sockets.nim
diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim
index 581db3163..581db3163 100755..100644
--- a/lib/pure/streams.nim
+++ b/lib/pure/streams.nim
diff --git a/lib/pure/strtabs.nim b/lib/pure/strtabs.nim
index 77b463fc0..77b463fc0 100755..100644
--- a/lib/pure/strtabs.nim
+++ b/lib/pure/strtabs.nim
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim
index b5f5a41eb..b5f5a41eb 100755..100644
--- a/lib/pure/strutils.nim
+++ b/lib/pure/strutils.nim
diff --git a/lib/pure/terminal.nim b/lib/pure/terminal.nim
index 3be6088ed..3be6088ed 100755..100644
--- a/lib/pure/terminal.nim
+++ b/lib/pure/terminal.nim
diff --git a/lib/pure/times.nim b/lib/pure/times.nim
index b86c72ed3..b86c72ed3 100755..100644
--- a/lib/pure/times.nim
+++ b/lib/pure/times.nim
diff --git a/lib/pure/unidecode/unidecode.dat b/lib/pure/unidecode/unidecode.dat
index 9dff0a4a9..9dff0a4a9 100755..100644
--- a/lib/pure/unidecode/unidecode.dat
+++ b/lib/pure/unidecode/unidecode.dat
diff --git a/lib/pure/unidecode/unidecode.nim b/lib/pure/unidecode/unidecode.nim
index 1d36d11b5..1d36d11b5 100755..100644
--- a/lib/pure/unidecode/unidecode.nim
+++ b/lib/pure/unidecode/unidecode.nim
diff --git a/lib/pure/xmldom.nim b/lib/pure/xmldom.nim
index 47e94243e..47e94243e 100755..100644
--- a/lib/pure/xmldom.nim
+++ b/lib/pure/xmldom.nim
diff --git a/lib/pure/xmldomparser.nim b/lib/pure/xmldomparser.nim
index fda46bac0..fda46bac0 100755..100644
--- a/lib/pure/xmldomparser.nim
+++ b/lib/pure/xmldomparser.nim
diff --git a/lib/pure/xmlparser.nim b/lib/pure/xmlparser.nim
index 8c5c5f5ab..8c5c5f5ab 100755..100644
--- a/lib/pure/xmlparser.nim
+++ b/lib/pure/xmlparser.nim
diff --git a/lib/pure/xmltree.nim b/lib/pure/xmltree.nim
index 1a1467e8f..1a1467e8f 100755..100644
--- a/lib/pure/xmltree.nim
+++ b/lib/pure/xmltree.nim