Advertisement
Guest User

Untitled

a guest
May 1st, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.05 KB | None | 0 0
  1. import strutils
  2.  
  3. type
  4.   TURL* = tuple[scheme, username, password,
  5.     hostname, port, path, query, anchor: string]
  6.    
  7. proc parse*(url: string): TURL =
  8.   var i: int = 0
  9.  
  10.   var scheme, username, password: string = ""
  11.   var hostname, port, path, query, anchor: string = ""
  12.  
  13.   var temp: string = ""
  14.  
  15.   if url[i] != '/': #url isn't a relative path
  16.     while True:
  17.       #Scheme
  18.       if url[i] == ':':
  19.         if url[i+1] == '/' and url[i+2] == '/':
  20.           scheme = temp
  21.           temp = ""
  22.           inc(i, 3) #Skip the //
  23.       #Authority(username, password)
  24.       if url[i] == '@':
  25.         username = temp.split(':')[0]
  26.         if temp.split(':').len() > 1:
  27.           password = temp.split(':')[1]
  28.         temp = ""
  29.         inc(i) #Skip the @
  30.       #hostname(subdomain, domain, port)
  31.       if url[i] == '/' or url[i] == '\0':
  32.         #TODO
  33.         hostname = temp
  34.         if hostname.split(':').len() > 1:
  35.           port = hostname.split(':')[1]
  36.           hostname = hostname.split(':')[0]
  37.        
  38.         temp = ""
  39.         break
  40.      
  41.       temp.add(url[i])
  42.       inc(i)
  43.  
  44.   #Path
  45.   while True:
  46.     if url[i] == '?':
  47.       path = temp
  48.       temp = ""
  49.     if url[i] == '#':
  50.       if temp[0] == '?':
  51.         query = temp
  52.       else:
  53.         path = temp
  54.       temp = ""
  55.      
  56.     if url[i] == '\0':
  57.       if temp[0] == '?':
  58.         query = temp
  59.       elif temp[0] == '#':
  60.         anchor = temp
  61.       else:
  62.         path = temp
  63.       break
  64.      
  65.     temp.add(url[i])
  66.     inc(i)
  67.    
  68.   return (scheme, username, password, hostname, port, path, query, anchor)
  69.  
  70. proc `$`*(t: TURL): string =
  71.   result = ""
  72.   if t.scheme != "": result.add(t.scheme & "://")
  73.   if t.username != "":
  74.     if t.password != "":
  75.       result.add(t.username & ":" & t.password & "@")
  76.     else:
  77.       result.add(t.username & "@")
  78.   if t.hostname != "": result.add(t.hostname)
  79.   if t.port != "": result.add(":" & t.port)
  80.   if t.path != "": result.add(t.path)
  81.   if t.query != "": result.add(t.query)
  82.   if t.anchor != "": result.add(t.anchor)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement