diff options
Diffstat (limited to 'vendor/gitlab.com/golang-commonmark/mdurl/url.go')
-rw-r--r-- | vendor/gitlab.com/golang-commonmark/mdurl/url.go | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/vendor/gitlab.com/golang-commonmark/mdurl/url.go b/vendor/gitlab.com/golang-commonmark/mdurl/url.go new file mode 100644 index 00000000..72c3f58a --- /dev/null +++ b/vendor/gitlab.com/golang-commonmark/mdurl/url.go @@ -0,0 +1,101 @@ +// Copyright 2015 The Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package url provides functions for parsing, decoding and encoding URLs. +package mdurl + +// A URL represents a parsed URL. +type URL struct { + Scheme string + RawScheme string + Slashes bool + Auth string + Host string + Port string + Path string + RawQuery string + HasQuery bool + Fragment string + HasFragment bool + IPv6 bool +} + +// String reassembles the URL into a URL string. +func (u *URL) String() string { + size := len(u.Path) + if u.Scheme != "" { + size += len(u.Scheme) + 1 + } + if u.Slashes { + size += 2 + } + if u.Auth != "" { + size += len(u.Auth) + 1 + } + if u.Host != "" { + size += len(u.Host) + if u.IPv6 { + size += 2 + } + } + if u.Port != "" { + size += len(u.Port) + 1 + } + if u.HasQuery { + size += len(u.RawQuery) + 1 + } + if u.HasFragment { + size += len(u.Fragment) + 1 + } + if size == 0 { + return "" + } + + buf := make([]byte, size) + i := 0 + if u.Scheme != "" { + i += copy(buf, u.Scheme) + buf[i] = ':' + i++ + } + if u.Slashes { + buf[i] = '/' + i++ + buf[i] = '/' + i++ + } + if u.Auth != "" { + i += copy(buf[i:], u.Auth) + buf[i] = '@' + i++ + } + if u.Host != "" { + if u.IPv6 { + buf[i] = '[' + i++ + i += copy(buf[i:], u.Host) + buf[i] = ']' + i++ + } else { + i += copy(buf[i:], u.Host) + } + } + if u.Port != "" { + buf[i] = ':' + i++ + i += copy(buf[i:], u.Port) + } + i += copy(buf[i:], u.Path) + if u.HasQuery { + buf[i] = '?' + i++ + i += copy(buf[i:], u.RawQuery) + } + if u.HasFragment { + buf[i] = '#' + i++ + i += copy(buf[i:], u.Fragment) + } + return string(buf) +} |