2013-09-04 20:01:31 +04:00
|
|
|
// Copyright 2013 The Go Authors. All rights reserved.
|
|
|
|
//
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file or at
|
|
|
|
// https://developers.google.com/open-source/licenses/bsd.
|
|
|
|
|
|
|
|
package gosrc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"regexp"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
var defaultTags = map[string]string{"git": "master", "hg": "default"}
|
|
|
|
|
|
|
|
func bestTag(tags map[string]string, defaultTag string) (string, string, error) {
|
|
|
|
if commit, ok := tags["go1"]; ok {
|
|
|
|
return "go1", commit, nil
|
|
|
|
}
|
|
|
|
if commit, ok := tags[defaultTag]; ok {
|
|
|
|
return defaultTag, commit, nil
|
|
|
|
}
|
2014-11-06 23:49:56 +03:00
|
|
|
return "", "", NotFoundError{Message: "Tag or branch not found."}
|
2013-09-04 20:01:31 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
// expand replaces {k} in template with match[k] or subs[atoi(k)] if k is not in match.
|
|
|
|
func expand(template string, match map[string]string, subs ...string) string {
|
|
|
|
var p []byte
|
|
|
|
var i int
|
|
|
|
for {
|
|
|
|
i = strings.Index(template, "{")
|
|
|
|
if i < 0 {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
p = append(p, template[:i]...)
|
|
|
|
template = template[i+1:]
|
|
|
|
i = strings.Index(template, "}")
|
|
|
|
if s, ok := match[template[:i]]; ok {
|
|
|
|
p = append(p, s...)
|
|
|
|
} else {
|
|
|
|
j, _ := strconv.Atoi(template[:i])
|
|
|
|
p = append(p, subs[j]...)
|
|
|
|
}
|
|
|
|
template = template[i+1:]
|
|
|
|
}
|
|
|
|
p = append(p, template...)
|
|
|
|
return string(p)
|
|
|
|
}
|
|
|
|
|
|
|
|
var readmePat = regexp.MustCompile(`(?i)^readme(?:$|\.)`)
|
|
|
|
|
|
|
|
// isDocFile returns true if a file with name n should be included in the
|
|
|
|
// documentation.
|
|
|
|
func isDocFile(n string) bool {
|
|
|
|
if strings.HasSuffix(n, ".go") && n[0] != '_' && n[0] != '.' {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return readmePat.MatchString(n)
|
|
|
|
}
|
|
|
|
|
|
|
|
var linePat = regexp.MustCompile(`(?m)^//line .*$`)
|
|
|
|
|
|
|
|
func OverwriteLineComments(p []byte) {
|
|
|
|
for _, m := range linePat.FindAllIndex(p, -1) {
|
|
|
|
for i := m[0] + 2; i < m[1]; i++ {
|
|
|
|
p[i] = ' '
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|