123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #
- #
- # 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]
- 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)
|