
godep restore pushd $GOPATH/src/github.com/appc/spec git co master popd go get go4.org/errorutil rm -rf Godeps godep save ./... git add vendor git add -f $(git ls-files --other vendor/) git co -- Godeps/LICENSES Godeps/.license_file_state Godeps/OWNERS
71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
// Copyright (c) 2015, Daniel Martí <mvdan@mvdan.cc>
|
|
// See LICENSE for licensing information
|
|
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"sort"
|
|
"strings"
|
|
"text/template"
|
|
|
|
"golang.org/x/net/idna"
|
|
|
|
"github.com/mvdan/xurls"
|
|
)
|
|
|
|
const path = "regex.go"
|
|
|
|
var regexTmpl = template.Must(template.New("regex").Parse(`// Generated by regexgen
|
|
|
|
package xurls
|
|
|
|
const ({{ range $key, $value := . }}
|
|
{{$key}} = ` + "`" + `{{$value}}` + "`" + `{{end}}
|
|
)
|
|
`))
|
|
|
|
func writeRegex(tlds []string) error {
|
|
allTldsSet := make(map[string]struct{})
|
|
add := func(tld string) {
|
|
if _, e := allTldsSet[tld]; e {
|
|
log.Fatalf("Duplicate TLD: %s", tld)
|
|
}
|
|
allTldsSet[tld] = struct{}{}
|
|
}
|
|
for _, tldlist := range [...][]string{tlds, xurls.PseudoTLDs} {
|
|
for _, tld := range tldlist {
|
|
add(tld)
|
|
asciiTld, err := idna.ToASCII(tld)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if asciiTld != tld {
|
|
add(asciiTld)
|
|
}
|
|
}
|
|
}
|
|
var allTlds []string
|
|
for tld := range allTldsSet {
|
|
allTlds = append(allTlds, tld)
|
|
}
|
|
sort.Strings(allTlds)
|
|
f, err := os.Create(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer f.Close()
|
|
return regexTmpl.Execute(f, map[string]string{
|
|
"gtld ": `(?i)(` + strings.Join(allTlds, `|`) + `)(?-i)`,
|
|
"otherScheme": `(?i)(` + strings.Join(xurls.SchemesNoAuthority, `|`) + `)(?-i):`,
|
|
})
|
|
}
|
|
|
|
func main() {
|
|
log.Printf("Generating %s...", path)
|
|
if err := writeRegex(xurls.TLDs); err != nil {
|
|
log.Fatalf("Could not write %s: %v", path, err)
|
|
}
|
|
}
|