]> Cypherpunks repositories - gostls13.git/commitdiff
godoc: slightly smarter synopsis extraction
authorRobert Griesemer <gri@golang.org>
Tue, 22 May 2012 17:04:13 +0000 (10:04 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 22 May 2012 17:04:13 +0000 (10:04 -0700)
Ignore synopses that start with
"Copyright", "All rights", and "Author".

R=rsc
CC=golang-dev
https://golang.org/cl/6218047

src/pkg/go/doc/synopsis.go
src/pkg/go/doc/synopsis_test.go

index 2192d78c0cdec1942fe3ef4a7d9cfd4dd579d74b..2d18174393e67201f002a8ae6f68d7e08d398464 100644 (file)
@@ -4,7 +4,10 @@
 
 package doc
 
-import "unicode"
+import (
+       "strings"
+       "unicode"
+)
 
 // firstSentenceLen returns the length of the first sentence in s.
 // The sentence ends after the first period followed by space and
@@ -24,17 +27,12 @@ func firstSentenceLen(s string) int {
        return len(s)
 }
 
-// Synopsis returns a cleaned version of the first sentence in s.
-// That sentence ends after the first period followed by space and
-// not preceded by exactly one uppercase letter. The result string
-// has no \n, \r, or \t characters and uses only single spaces between
-// words.
-//
-func Synopsis(s string) string {
-       n := firstSentenceLen(s)
+// clean replaces each sequence of space, \n, \r, or \t characters
+// with a single space and removes any trailing and leading spaces.
+func clean(s string) string {
        var b []byte
        p := byte(' ')
-       for i := 0; i < n; i++ {
+       for i := 0; i < len(s); i++ {
                q := s[i]
                if q == '\n' || q == '\r' || q == '\t' {
                        q = ' '
@@ -50,3 +48,26 @@ func Synopsis(s string) string {
        }
        return string(b)
 }
+
+// Synopsis returns a cleaned version of the first sentence in s.
+// That sentence ends after the first period followed by space and
+// not preceded by exactly one uppercase letter. The result string
+// has no \n, \r, or \t characters and uses only single spaces between
+// words. If s starts with any of the IllegalPrefixes, the result
+// is the empty string.
+//
+func Synopsis(s string) string {
+       s = clean(s[0:firstSentenceLen(s)])
+       for _, prefix := range IllegalPrefixes {
+               if strings.HasPrefix(strings.ToLower(s), prefix) {
+                       return ""
+               }
+       }
+       return s
+}
+
+var IllegalPrefixes = []string{
+       "copyright",
+       "all rights",
+       "author",
+}
index dfc6598af47ce331afab661cf6669eac603676d8..fd7081a07c2c6adc3758192c2b6ed50c9ecbf1e7 100644 (file)
@@ -28,6 +28,11 @@ var tests = []struct {
        {"P. Q.   ", 8, "P. Q."},
        {"Package Καλημέρα κόσμε.", 36, "Package Καλημέρα κόσμε."},
        {"Package こんにちは 世界\n", 31, "Package こんにちは 世界"},
+       {"Package foo does bar.", 21, "Package foo does bar."},
+       {"Copyright 2012 Google, Inc. Package foo does bar.", 27, ""},
+       {"All Rights reserved. Package foo does bar.", 20, ""},
+       {"All rights reserved. Package foo does bar.", 20, ""},
+       {"Authors: foo@bar.com. Package foo does bar.", 21, ""},
 }
 
 func TestSynopsis(t *testing.T) {