summary refs log tree commit diff stats
path: root/lib/deprecated/pure/parseurl.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/deprecated/pure/parseurl.nim')
-rw-r--r--lib/deprecated/pure/parseurl.nim114
1 files changed, 114 insertions, 0 deletions
diff --git a/lib/deprecated/pure/parseurl.nim b/lib/deprecated/pure/parseurl.nim
new file mode 100644
index 000000000..6d58e8a73
--- /dev/null
+++ b/lib/deprecated/pure/parseurl.nim
@@ -0,0 +1,114 @@
+#
+#
+#            Nim's Runtime Library
+#        (c) Copyright 2015 Dominik Picheta
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+## **Warnings:** This module is deprecated since version 0.10.2.
+## Use the `uri <uri.html>`_ module instead.
+##
+## Parses & constructs URLs.
+
+{.deprecated.}
+
+import strutils
+
+type
+  Url* = tuple[      ## represents a *Uniform Resource Locator* (URL)
+                     ## any optional component is "" if it does not exist
+    scheme, username, password,
+    hostname, port, path, query, anchor: string]
+
+{.deprecated: [TUrl: Url].}
+
+proc parseUrl*(url: string): Url {.deprecated.} =
+  var i = 0
+
+  var scheme, username, password: string = ""
+  var hostname, port, path, query, anchor: string = ""
+
+  var temp = ""
+
+  if url[i] != '/': # url isn't a relative path
+    while true:
+      # Scheme
+      if url[i] == ':':
+        if url[i+1] == '/' and url[i+2] == '/':
+          scheme = temp
+          temp.setLen(0)
+          inc(i, 3) # Skip the //
+      # Authority(username, password)
+      if url[i] == '@':
+        username = temp
+        let colon = username.find(':')
+        if colon >= 0:
+          password = username.substr(colon+1)
+          username = username.substr(0, colon-1)
+        temp.setLen(0)
+        inc(i) #Skip the @
+      # hostname(subdomain, domain, port)
+      if url[i] == '/' or url[i] == '\0':
+        hostname = temp
+        let colon = hostname.find(':')
+        if colon >= 0:
+          port = hostname.substr(colon+1)
+          hostname = hostname.substr(0, colon-1)
+
+        temp.setLen(0)
+        break
+
+      temp.add(url[i])
+      inc(i)
+
+  if url[i] == '/': inc(i) # Skip the '/'
+  # Path
+  while true:
+    if url[i] == '?':
+      path = temp
+      temp.setLen(0)
+    if url[i] == '#':
+      if temp[0] == '?':
+        query = temp
+      else:
+        path = temp
+      temp.setLen(0)
+
+    if url[i] == '\0':
+      if temp[0] == '?':
+        query = temp
+      elif temp[0] == '#':
+        anchor = temp
+      else:
+        path = temp
+      break
+
+    temp.add(url[i])
+    inc(i)
+
+  return (scheme, username, password, hostname, port, path, query, anchor)
+
+proc `$`*(u: Url): string {.deprecated.} =
+  ## turns the URL `u` into its string representation.
+  result = ""
+  if u.scheme.len > 0:
+    result.add(u.scheme)
+    result.add("://")
+  if u.username.len > 0:
+    result.add(u.username)
+    if u.password.len > 0:
+      result.add(":")
+      result.add(u.password)
+    result.add("@")
+  result.add(u.hostname)
+  if u.port.len > 0:
+    result.add(":")
+    result.add(u.port)
+  if u.path.len > 0:
+    result.add("/")
+    result.add(u.path)
+  result.add(u.query)
+  result.add(u.anchor)
+