diff options
author | Benjamin <b.mpickford@outlook.com> | 2019-11-18 06:18:01 +1000 |
---|---|---|
committer | Wim <wim@42.be> | 2019-11-17 21:18:01 +0100 |
commit | 0917dc876613fd71c9726a34bf0138b4f5121be9 (patch) | |
tree | 1eacaadaa4869e8f74ccf65c684c2a80f90787f9 /vendor/gitlab.com/golang-commonmark/puny/puny.go | |
parent | aba86855b5f71c9809d892a7eebc6b69872fcd5b (diff) | |
download | matterbridge-msglm-0917dc876613fd71c9726a34bf0138b4f5121be9.tar.gz matterbridge-msglm-0917dc876613fd71c9726a34bf0138b4f5121be9.tar.bz2 matterbridge-msglm-0917dc876613fd71c9726a34bf0138b4f5121be9.zip |
Update markdown parsing library to github.com/gomarkdown/markdown (#944)
Diffstat (limited to 'vendor/gitlab.com/golang-commonmark/puny/puny.go')
-rw-r--r-- | vendor/gitlab.com/golang-commonmark/puny/puny.go | 287 |
1 files changed, 0 insertions, 287 deletions
diff --git a/vendor/gitlab.com/golang-commonmark/puny/puny.go b/vendor/gitlab.com/golang-commonmark/puny/puny.go deleted file mode 100644 index 8f71402c..00000000 --- a/vendor/gitlab.com/golang-commonmark/puny/puny.go +++ /dev/null @@ -1,287 +0,0 @@ -// 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 puny provides functions for encoding/decoding to/from punycode. -package puny - -import ( - "errors" - "strings" - "unicode/utf8" -) - -const ( - maxInt32 int32 = 2147483647 - base int32 = 36 - tMin int32 = 1 - baseMinusTMin = base - tMin - tMax int32 = 26 - skew int32 = 38 - damp int32 = 700 - initialBias int32 = 72 - initialN int32 = 128 -) - -var ( - ErrOverflow = errors.New("overflow: input needs wider integers to process") - ErrNotBasic = errors.New("illegal input >= 0x80 (not a basic code point)") - ErrInvalidInput = errors.New("invalid input") -) - -func adapt(delta, numPoints int32, firstTime bool) int32 { - if firstTime { - delta /= damp - } else { - delta /= 2 - } - delta += delta / numPoints - k := int32(0) - for delta > baseMinusTMin*tMax/2 { - delta = delta / baseMinusTMin - k += base - } - return k + (baseMinusTMin+1)*delta/(delta+skew) -} - -func basicToDigit(b byte) int32 { - switch { - case b >= '0' && b <= '9': - return int32(b - 22) - case b >= 'A' && b <= 'Z': - return int32(b - 'A') - case b >= 'a' && b <= 'z': - return int32(b - 'a') - } - return base -} - -func digitToBasic(digit int32) byte { - switch { - case digit >= 0 && digit <= 25: - return byte(digit) + 'a' - case digit >= 26 && digit <= 35: - return byte(digit) - 26 + '0' - } - panic("unreachable") -} - -func lastIndex(s string, c byte) int { - for i := len(s) - 1; i >= 0; i-- { - if s[i] == c { - return i - } - } - return -1 -} - -func ascii(s string) bool { - for _, r := range s { - if r > 0x7e { - return false - } - } - return true -} - -// Decode converts a Punycode string of ASCII-only symbols to a string of Unicode symbols. -func Decode(s string) (string, error) { - basic := lastIndex(s, '-') - output := make([]rune, 0, len(s)) - for i := 0; i < basic; i++ { - b := s[i] - if b >= 0x80 { - return "", ErrNotBasic - } - output = append(output, rune(b)) - } - - i, n, bias, pos := int32(0), initialN, initialBias, basic+1 - - for pos < len(s) { - oldi, w, k := i, int32(1), base - for { - digit := basicToDigit(s[pos]) - pos++ - - if digit >= base || digit > (maxInt32-i)/w { - return "", ErrOverflow - } - - i += digit * w - - t := k - bias - if t < tMin { - t = tMin - } else if t > tMax { - t = tMax - } - - if digit < t { - break - } - - if pos == len(s) { - return "", ErrInvalidInput - } - - baseMinusT := base - t - if w > maxInt32/baseMinusT { - return "", ErrOverflow - } - - w *= baseMinusT - k += base - } - - out := int32(len(output) + 1) - bias = adapt(i-oldi, out, oldi == 0) - - if i/out > maxInt32-n { - return "", ErrOverflow - } - - n += i / out - i %= out - - output = append(output, 0) - copy(output[i+1:], output[i:]) - output[i] = rune(n) - - i++ - } - - return string(output), nil -} - -// Encode converts a string of Unicode symbols (e.g. a domain name label) to a -// Punycode string of ASCII-only symbols. -func Encode(input string) (string, error) { - n := initialN - delta := int32(0) - bias := initialBias - - var output []byte - runes := 0 - for _, r := range input { - if r >= 0x80 { - runes++ - continue - } - output = append(output, byte(r)) - } - - basicLength := len(output) - handledCPCount := basicLength - - if basicLength > 0 { - output = append(output, '-') - } - - for runes > 0 { - m := maxInt32 - for _, r := range input { - if r >= n && r < m { - m = r - } - } - - handledCPCountPlusOne := int32(handledCPCount + 1) - if m-n > (maxInt32-delta)/handledCPCountPlusOne { - return "", ErrOverflow - } - - delta += (m - n) * handledCPCountPlusOne - n = m - - for _, r := range input { - if r < n { - delta++ - if delta < 0 { - return "", ErrOverflow - } - continue - } - if r > n { - continue - } - q := delta - for k := base; ; k += base { - t := k - bias - if t < tMin { - t = tMin - } else if t > tMax { - t = tMax - } - if q < t { - break - } - qMinusT := q - t - baseMinusT := base - t - output = append(output, digitToBasic(t+qMinusT%baseMinusT)) - q = qMinusT / baseMinusT - } - - output = append(output, digitToBasic(q)) - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength) - delta = 0 - handledCPCount++ - runes-- - } - delta++ - n++ - } - return string(output), nil -} - -func sep(r rune) bool { return r == '.' || r == '。' || r == '.' || r == '。' } - -func mapLabels(s string, fn func(string) string) string { - var result string - i := strings.IndexByte(s, '@') - if i != -1 { - result = s[:i+1] - s = s[i+1:] - } - var labels []string - start := 0 - for i, r := range s { - if !sep(r) { - continue - } - labels = append(labels, fn(s[start:i])) - start = i + utf8.RuneLen(r) - } - labels = append(labels, fn(s[start:])) - return result + strings.Join(labels, ".") -} - -// ToUnicode converts a Punycode string representing a domain name or an email address -// to Unicode. Only the Punycoded parts of the input will be converted. -func ToUnicode(s string) string { - return mapLabels(s, func(s string) string { - if !strings.HasPrefix(s, "xn--") { - return s - } - d, err := Decode(strings.ToLower(s[4:])) - if err != nil { - return s - } - return d - }) -} - -// ToASCII converts a Unicode string representing a domain name or an email address to -// Punycode. Only the non-ASCII parts of the domain name will be converted. -func ToASCII(s string) string { - return mapLabels(s, func(s string) string { - if ascii(s) { - return s - } - d, err := Encode(s) - if err != nil { - return s - } - return "xn--" + d - }) -} |