// 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 } return "", "", NotFoundError{Message: "Tag or branch not found."} } // 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] = ' ' } } }