Copyright 2012 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.

package doc

import (
	
	
)
firstSentenceLen returns the length of the first sentence in s. The sentence ends after the first period followed by space and not preceded by exactly one uppercase letter.
func ( string) int {
	var , ,  rune
	for ,  := range  {
		if  == '\n' ||  == '\r' ||  == '\t' {
			 = ' '
		}
		if  == ' ' &&  == '.' && (!unicode.IsUpper() || unicode.IsUpper()) {
			return 
		}
		if  == '。' ||  == '.' {
			return 
		}
		, ,  = , , 
	}
	return len()
}

const (
	keepNL = 1 << iota
)
clean replaces each sequence of space, \n, \r, or \t characters with a single space and removes any trailing and leading spaces. If the keepNL flag is set, newline characters are passed through instead of being change to spaces.
func ( string,  int) string {
	var  []byte
	 := byte(' ')
	for  := 0;  < len(); ++ {
		 := []
		if (&keepNL) == 0 &&  == '\n' ||  == '\r' ||  == '\t' {
			 = ' '
		}
		if  != ' ' ||  != ' ' {
			 = append(, )
			 = 
		}
remove trailing blank, if any
	if  := len();  > 0 &&  == ' ' {
		 = [0 : -1]
	}
	return string()
}
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 ( string) string {
	 = clean([0:firstSentenceLen()], 0)
	for ,  := range IllegalPrefixes {
		if strings.HasPrefix(strings.ToLower(), ) {
			return ""
		}
	}
	 = convertQuotes()
	return 
}

var IllegalPrefixes = []string{
	"copyright",
	"all rights",
	"author",