diff --git a/page.go b/page.go
index c05b952..4b3d170 100644
--- a/page.go
+++ b/page.go
@@ -3,11 +3,12 @@ package main
import (
"fmt"
"html/template"
+ "io/ioutil"
"log"
"net/http"
"os"
+ "regexp"
"sort"
- "strings"
)
const packageTemplateString = `
@@ -129,7 +130,7 @@ const packageTemplateString = `
To import this package, add the following line to your code:
import "{{.Repo.GopkgPath}}"
- {{if .CleanName}}
Refer to it as {{.CleanName}}.{{end}}
+ {{if .PackageName}}
Refer to it as {{.PackageName}}.{{end}}
For more details, see the API documentation.
@@ -196,9 +197,11 @@ type packageData struct {
Repo *Repo
LatestVersions VersionList // Contains only the latest version for each major
FullVersion Version // Version that the major requested resolves to
- CleanName string
+ PackageName string // Actual package identifier as specified in http://golang.org/ref/spec#PackageClause
}
+var regexpPackageName = regexp.MustCompile(`\
package ([\p{L}_][\pL\p{Nd}_]*)\
`)
+
func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo) {
data := &packageData{
Repo: repo,
@@ -217,25 +220,19 @@ func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo)
}
sort.Sort(sort.Reverse(data.LatestVersions))
- data.CleanName = repo.Name
- if strings.HasPrefix(data.CleanName, "go-") || strings.HasPrefix(data.CleanName, "go.") {
- data.CleanName = data.CleanName[3:]
- }
- if strings.HasSuffix(data.CleanName, "-go") {
- data.CleanName = data.CleanName[:len(data.CleanName)-3]
- }
- for i, c := range data.CleanName {
- if c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' {
- continue
+ godocResp, err := http.Get("http://godoc.org/" + repo.GopkgPath())
+ if err == nil {
+ godocRespBytes, err := ioutil.ReadAll(godocResp.Body)
+ godocResp.Body.Close()
+ if err == nil {
+ matches := regexpPackageName.FindSubmatch(godocRespBytes)
+ if len(matches) == 2 {
+ data.PackageName = string(matches[1])
+ }
}
- if i > 0 && (c == '_' || c >= '0' && c <= '9') {
- continue
- }
- data.CleanName = ""
- break
}
- err := packageTemplate.Execute(resp, data)
+ err = packageTemplate.Execute(resp, data)
if err != nil {
log.Printf("error executing tmplPackage: %s\n", err)
}