| // 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] = ' ' |
| } |
| } |
| } |