コード例 #1
0
ファイル: chap4_exercise.go プロジェクト: kmiku7/practice
func ParseIni(config_lines []string) map[string]map[string]string {
	config := make(map[string]map[string]string)
	current_seg := "General"
	for _, line := range config_lines {
		line = strings.TrimLeftFunc(line, unicode.IsSpace)
		if len(line) <= 0 || line[0] == ';' {
			continue
		}
		if line[0] == '[' && line[len(line)-1] == ']' {
			current_seg = line[1 : len(line)-1]
			continue
		}
		fields := strings.SplitN(line, "=", 2)
		if len(fields) != 2 {
			log.Fatal("Invalid Config Item: ", line)
			os.Exit(1)
		}
		key := strings.TrimLeftFunc(fields[0], unicode.IsSpace)
		value := strings.TrimLeftFunc(fields[1], unicode.IsSpace)
		if _, found := config[current_seg]; !found {
			config[current_seg] = make(map[string]string)
		}
		config[current_seg][key] = value
	}
	return config
}
コード例 #2
0
ファイル: mediatype.go プロジェクト: wenfang/golang1.5-src
func consumeMediaParam(v string) (param, value, rest string) { // 解析mediatype
	rest = strings.TrimLeftFunc(v, unicode.IsSpace)
	if !strings.HasPrefix(rest, ";") {
		return "", "", v
	}

	rest = rest[1:] // consume semicolon
	rest = strings.TrimLeftFunc(rest, unicode.IsSpace)
	param, rest = consumeToken(rest)
	param = strings.ToLower(param)
	if param == "" {
		return "", "", v
	}

	rest = strings.TrimLeftFunc(rest, unicode.IsSpace)
	if !strings.HasPrefix(rest, "=") {
		return "", "", v
	}
	rest = rest[1:] // consume equals sign
	rest = strings.TrimLeftFunc(rest, unicode.IsSpace)
	value, rest = consumeValue(rest)
	if value == "" {
		return "", "", v
	}
	return param, value, rest
}
コード例 #3
0
ファイル: stringsTest.go プロジェクト: upccup/cuplearn
// TrimLeftFunc returns a slice of the string s with all leading Unicode code point
// c satisfying f(c) removed
func TrimLeftFunc(s string, f func(rune) bool) string {
	inner_func := func(r rune) bool {
		return r <= 'c' || r >= 'i'
	}
	fmt.Println(strings.TrimLeftFunc("abcdefghijk", inner_func))   // defghijk
	fmt.Println(strings.TrimLeftFunc("agbcdefghijk", inner_func))  // gbcdefghijk
	fmt.Println(strings.TrimLeftFunc("asgbcdefghijk", inner_func)) // gbcdefghijk
	return strings.TrimLeftFunc(s, f)
}
コード例 #4
0
ファイル: read_line.go プロジェクト: runner-mei/snmpclient2
func ParseString(ss []string, is_end bool, vs string) (Variable, []string, error) {
	simple_line := strings.TrimSpace(vs)
	if !strings.HasPrefix(simple_line, "\"") {
		return nil, nil, errors.New("parse `" + strings.Join(ss, "\r\n") + "` failed, \"" + simple_line + "\" is not start with \".")
	}
	if 1 < len(simple_line) {
		if strings.HasSuffix(simple_line, "\"") {
			return NewOctetString([]byte(simple_line[1 : len(simple_line)-1])), ss[1:], nil
		}
	}

	p := -1
	for idx, sss := range ss[1:] {
		if re.MatchString(sss) {
			p = idx
			break
		} else if strings.Contains(sss, "MIB search path") ||
			//strings.HasPrefix(sss, "#") ||
			strings.Contains(sss, "Cannot find module") ||
			strings.Contains(sss, "#tools\\snmpwalk.exe") {
			p = idx
			break
		}
	}

	if -1 == p {
		if is_end {
			simple_line = strings.TrimLeftFunc(vs, unicode.IsSpace)
			if 1 != len(ss) {
				simple_line = simple_line[1:] + "\r\n" + strings.Join(ss[1:], "\r\n")
			}
			if strings.HasSuffix(simple_line, "\"") {
				simple_line = simple_line[:len(simple_line)-1]
			}
			if strings.HasPrefix(simple_line, "\"") {
				simple_line = simple_line[1:]
			}
			return NewOctetString([]byte(simple_line)), nil, nil
		}
		return nil, ss, more_line
	}
	p += 1

	simple_line = strings.TrimLeftFunc(vs, unicode.IsSpace)
	if 1 != p {
		simple_line = simple_line + "\r\n" + strings.Join(ss[1:p], "\r\n")
	}
	if strings.HasSuffix(simple_line, "\"") {
		simple_line = simple_line[:len(simple_line)-1]
	}

	if strings.HasPrefix(simple_line, "\"") {
		simple_line = simple_line[1:]
	}

	return NewOctetString([]byte(simple_line)), ss[p:], nil
}
コード例 #5
0
ファイル: goline.go プロジェクト: bmatsuo/goline
func splitShellCmd(cmd string) (name, args string) {
	cmd = strings.TrimLeftFunc(cmd, unicode.IsSpace)
	switch pre := strings.IndexFunc(cmd, unicode.IsSpace); {
	case pre > 0:
		name, args = cmd[:pre], strings.TrimLeftFunc(cmd[pre:], unicode.IsSpace)
	case pre == -1:
		name = cmd
	default:
		panic("unexpected case (untrimmed)")
	}
	return
}
コード例 #6
0
ファイル: ninja_writer.go プロジェクト: robinivanka/blueprint
func (n *ninjaWriterWithWrap) writeString(s string, space bool) {
	if n.err != nil {
		return
	}

	spaceLen := 0
	if space {
		spaceLen = 1
	}

	if n.writtenLen+len(s)+spaceLen > n.maxLineLen {
		_, n.err = io.WriteString(n.writer, " $\n")
		if n.err != nil {
			return
		}
		_, n.err = io.WriteString(n.writer, indentString[:indentWidth*2])
		if n.err != nil {
			return
		}
		n.writtenLen = indentWidth * 2
		s = strings.TrimLeftFunc(s, unicode.IsSpace)
	} else if space {
		io.WriteString(n.writer, " ")
		n.writtenLen++
	}

	_, n.err = io.WriteString(n.writer, s)
	n.writtenLen += len(s)
}
コード例 #7
0
ファイル: parser.go プロジェクト: marccampbell/docker
// Parse is the main parse routine.
// It handles an io.ReadWriteCloser and returns the root of the AST.
func Parse(rwc io.Reader) (*Node, error) {
	directiveEscapeSeen = false
	lookingForDirectives = true
	setTokenEscape(defaultTokenEscape) // Assume the default token for escape
	currentLine := 0
	root := &Node{}
	root.StartLine = -1
	scanner := bufio.NewScanner(rwc)

	for scanner.Scan() {
		scannedLine := strings.TrimLeftFunc(scanner.Text(), unicode.IsSpace)
		currentLine++
		line, child, err := ParseLine(scannedLine)
		if err != nil {
			return nil, err
		}
		startLine := currentLine

		if line != "" && child == nil {
			for scanner.Scan() {
				newline := scanner.Text()
				currentLine++

				if stripComments(strings.TrimSpace(newline)) == "" {
					continue
				}

				line, child, err = ParseLine(line + newline)
				if err != nil {
					return nil, err
				}

				if child != nil {
					break
				}
			}
			if child == nil && line != "" {
				_, child, err = ParseLine(line)
				if err != nil {
					return nil, err
				}
			}
		}

		if child != nil {
			// Update the line information for the current child.
			child.StartLine = startLine
			child.EndLine = currentLine
			// Update the line information for the root. The starting line of the root is always the
			// starting line of the first child and the ending line is the ending line of the last child.
			if root.StartLine < 0 {
				root.StartLine = currentLine
			}
			root.EndLine = currentLine
			root.Children = append(root.Children, child)
		}
	}

	return root, nil
}
コード例 #8
0
ファイル: replacers.go プロジェクト: ph34rd/html2md
func replaceTagsLi(c string, n *html.Node) string {
	data := strings.TrimLeftFunc(c, unicode.IsSpace)
	data = strings.Replace(data, "\n", "\n    ", -1)

	pref := "*   "

	p := n.Parent

	if p != nil {
		i := 0
		for c := p.FirstChild; c != nil; c = c.NextSibling {
			if c.DataAtom == atom.Li {
				i++
				if c == n {
					break
				}
			}
		}

		if p.DataAtom == atom.Ol {
			pref = fmt.Sprintf("%d.   ", i)
		}
	}

	return pref + data
}
コード例 #9
0
ファイル: www.go プロジェクト: hochhaus/mammothmail
func (w wsCollapser) Write(p []byte) (n int, err error) {
	lines := strings.Split(string(p), "\n")
	for i, line := range lines {
		l := line
		if *w.prevNewLine {
			l = strings.TrimLeftFunc(l, unicode.IsSpace)
		}
		curNewLine := (i < len(lines)-1) || (len(p) > 0 && p[len(p)-1] == '\n')
		if curNewLine {
			l = strings.TrimRightFunc(l, unicode.IsSpace)
		}
		if len(l) == 0 {
			*w.prevNewLine = curNewLine
			continue
		}
		if *w.prevNewLine && !*w.prevTag && l[0] != '<' {
			_, err := (*w.writer).Write([]byte(" "))
			if err != nil {
				return 0, err
			}
		}
		_, err := (*w.writer).Write([]byte(l))
		if err != nil {
			return 0, err
		}
		*w.prevTag = l[len(l)-1] == '>'
		*w.prevNewLine = curNewLine
	}
	return len(p), nil
}
コード例 #10
0
func (r *CommentStripper) Read(p []byte) (int, error) {
	for {
		if r.buf.Len() >= len(p) {
			return r.buf.Read(p)
		}
		line, err := r.r.ReadString(r.Delimiter)
		if len(line) > 0 {
			checkLine := line
			if r.Whitespace {
				checkLine = strings.TrimLeftFunc(checkLine, unicode.IsSpace)
			}
			if strings.HasPrefix(checkLine, r.Comment) {
				// yay, skip this line
				continue
			}
			r.buf.WriteString(line)
		}
		if err != nil {
			if r.buf.Len() > 0 {
				return r.buf.Read(p)
			}
			return 0, err
		}
	}
}
コード例 #11
0
ファイル: engnotation.go プロジェクト: eval01-tts/serviced
func parseEngineeringNotation(in string) (uint64, error) {
	if in == "" {
		return 0, nil
	}
	var numerics = func(r rune) bool {
		return r >= '0' && r <= '9'
	}
	var nonNumerics = func(r rune) bool {
		return !numerics(r)
	}
	suffix := strings.TrimLeftFunc(in, numerics)
	numeric := strings.TrimRightFunc(in, nonNumerics)
	val, err := strconv.ParseUint(numeric, 10, 64)
	if err != nil {
		return 0, fmt.Errorf("Parsing engineering notation for '%s'", in)
	}
	switch suffix {
	case "K", "k":
		val *= (1 << 10)
	case "M", "m":
		val *= (1 << 20)
	case "G", "g":
		val *= (1 << 30)
	case "T", "t":
		val *= (1 << 40)
	case "":
		break
	default:
		return 0, fmt.Errorf("Parsing engineering notation for '%s'", in)
	}
	return val, nil
}
コード例 #12
0
ファイル: config.go プロジェクト: Philipp15b/Captioneer
func ParseCaptions(source string) (*CaptionsConfiguration, error) {
	c := new(CaptionsConfiguration)
	c.Captions = make(map[string]string)
	c.Variables = make(map[string]string)

	source = strings.Replace(source, "\r\n", "\n", -1)
	for i, line := range strings.Split(source, "\n") {
		line = strings.TrimLeftFunc(line, unicode.IsSpace) // remove leading space

		// ignore comments and empty lines
		if strings.HasPrefix(line, "#") || strings.HasPrefix(line, "//") || line == "" {
			continue
		}

		parts := strings.SplitN(line, ": ", 2)

		if len(parts) != 2 {
			return nil, errors.New("Wrong format in line " + strconv.Itoa(i))
		}

		if strings.HasPrefix(line, "$") {
			name := strings.TrimLeft(parts[0], "$")
			c.Variables[name] = parts[1]
			continue
		}

		c.Captions[parts[0]] = parts[1]
	}
	return c, nil
}
コード例 #13
0
ファイル: generator.go プロジェクト: hooklift/govsphere
func comment(text string) string {
	lines := strings.Split(text, "\n")

	var output string
	if len(lines) == 1 && lines[0] == "" {
		return ""
	}

	// Helps to determine if
	// there is an actual comment
	// without screwing newlines
	// in real comments.
	hasComment := false

	for _, line := range lines {
		line = strings.TrimLeftFunc(line, unicode.IsSpace)
		if line != "" {
			hasComment = true
		}
		output += "\n// " + line
	}

	if hasComment {
		return output
	}
	return ""
}
コード例 #14
0
ファイル: moss.go プロジェクト: rnestler/moss
// Clean a message, remove leading username
func cleanMessage(rawMessage string) string {
	msg := strings.TrimPrefix(rawMessage, conf.Nick)
	msg = strings.TrimLeftFunc(msg, func(char rune) bool {
		return char == ',' || char == ':' || char == '-' || char == ' '
	})
	return msg
}
コード例 #15
0
ファイル: line_parsers.go プロジェクト: azurezk/docker
// parseJSON converts JSON arrays to an AST.
func parseJSON(rest string) (*Node, map[string]bool, error) {
	rest = strings.TrimLeftFunc(rest, unicode.IsSpace)
	if !strings.HasPrefix(rest, "[") {
		return nil, nil, fmt.Errorf(`Error parsing "%s" as a JSON array`, rest)
	}

	var myJSON []interface{}
	if err := json.NewDecoder(strings.NewReader(rest)).Decode(&myJSON); err != nil {
		return nil, nil, err
	}

	var top, prev *Node
	for _, str := range myJSON {
		s, ok := str.(string)
		if !ok {
			return nil, nil, errDockerfileNotStringArray
		}

		node := &Node{Value: s}
		if prev == nil {
			top = node
		} else {
			prev.Next = node
		}
		prev = node
	}

	return top, map[string]bool{"json": true}, nil
}
コード例 #16
0
ファイル: dbg.go プロジェクト: rainycape/otto
func parseFormat(format string) (frmt _frmt) {
	if ctlTest.MatchString(format) {
		format = strings.TrimLeftFunc(format, unicode.IsSpace)
		index := strings.Index(format, "//")
		if index != -1 {
			frmt.ctl = format[0:index]
			format = format[index+2:] // Skip the second slash via +2 (instead of +1)
		} else {
			frmt.ctl = format
			format = ""
		}
		for _, tmp := range ctlScan.FindAllStringSubmatch(frmt.ctl, -1) {
			for _, value := range tmp[1:] {
				switch value {
				case "panic":
					frmt.panic = true
				case "fatal":
					frmt.fatal = true
				case "check":
					frmt.check = true
				}
			}
		}
	}
	frmt.format = format
	frmt.operandCount = operandCount(format)
	return
}
コード例 #17
0
ファイル: main.go プロジェクト: mengjinglei/tools
func (s *Service) PostApps_Repos_Points(args *cmdArgs, env *rpcutil.Env) (err error) {

	appid := args.CmdArgs[0]
	repoid := args.CmdArgs[1]
	data, err := ioutil.ReadAll(env.Req.Body)
	if err != nil {
		return err
	}

	reqSql := strings.TrimLeftFunc(string(data), isWhiteSpace)
	point := strings.TrimRightFunc(reqSql, isWhiteSpace)

	wurl := fmt.Sprintf("/v4/apps/%s/repos/%s/points", appid, repoid)
	err = s.PandoraClient.CallWith(nil, nil, "POST", wurl, "text/plain", bytes.NewBuffer([]byte(point)), len(point))
	if err != nil {
		return fmt.Errorf("write pandora fail, error:%v", err)
	}

	err = s.InfluxdbClient.CallWith(nil, nil, "POST", "/write?db=pandora&rp=default", "text/plain", bytes.NewBuffer([]byte(point)), len(point))
	if err != nil && err.Error() != "No Content" {
		return fmt.Errorf("write influxdb fail, error:%v", err)
	}

	return
}
コード例 #18
0
ファイル: config.ini.go プロジェクト: allengaller/qreader
func DefaultConfigIni() string {
	s := strings.TrimLeftFunc(defaultConfigIni, unicode.IsSpace)
	if runtime.GOOS == "windows" {
		s = strings.Replace(s, "\n", "\r\n", -1)
	}
	return s
}
func main() {
	show("original", simple)
	show("leading ws removed", strings.TrimLeftFunc(simple, unicode.IsSpace))
	show("trailing ws removed", strings.TrimRightFunc(simple, unicode.IsSpace))
	// equivalent to strings.TrimFunc(simple, unicode.IsSpace)
	show("both removed", strings.TrimSpace(simple))
}
コード例 #20
0
ファイル: templater.go プロジェクト: juanluisvaladas/origin
func (templater *templater) templateFuncs(exposedFlags ...string) template.FuncMap {
	return template.FuncMap{
		"trim":                strings.TrimSpace,
		"trimRight":           func(s string) string { return strings.TrimRightFunc(s, unicode.IsSpace) },
		"trimLeft":            func(s string) string { return strings.TrimLeftFunc(s, unicode.IsSpace) },
		"gt":                  cobra.Gt,
		"eq":                  cobra.Eq,
		"rpad":                rpad,
		"appendIfNotPresent":  appendIfNotPresent,
		"flagsNotIntersected": flagsNotIntersected,
		"visibleFlags":        visibleFlags,
		"flagsUsages":         flagsUsages,
		"cmdGroups":           templater.cmdGroups,
		"cmdGroupsString":     templater.cmdGroupsString,
		"rootCmd":             templater.rootCmdName,
		"isRootCmd":           templater.isRootCmd,
		"optionsCmdFor":       templater.optionsCmdFor,
		"usageLine":           templater.usageLine,
		"exposed": func(c *cobra.Command) *flag.FlagSet {
			exposed := flag.NewFlagSet("exposed", flag.ContinueOnError)
			if len(exposedFlags) > 0 {
				for _, name := range exposedFlags {
					if flag := c.Flags().Lookup(name); flag != nil {
						exposed.AddFlag(flag)
					}
				}
			}
			return exposed
		},
	}
}
コード例 #21
0
ファイル: comment.go プロジェクト: gbbr/textmate
func (c *ToggleCommentCommand) Run(v *View, e *Edit) error {
	// TODO: Comment the line if we only have a cursor.
	// TODO: Expand the selection after altering it.
	// TODO: Align the comment characters for multiline selections.
	// TODO: Get the comment value from the Textmate files.
	comm := "//"

	for _, r := range v.Sel().Regions() {
		if r.Size() != 0 {
			t := v.Buffer().Substr(r)

			trim := strings.TrimLeftFunc(t, unicode.IsSpace)
			if strings.HasPrefix(trim, comm) {
				repl := comm
				if strings.HasPrefix(trim, comm+" ") {
					repl += " "
				}

				t = strings.Replace(t, repl, "", 1)
			} else {
				t = strings.Replace(t, trim, comm+" "+trim, 1)
			}

			v.Replace(e, r, t)
		}
	}

	return nil
}
コード例 #22
0
ファイル: main.go プロジェクト: nightscape/flynn
func register(cmd string, f interface{}, usage string) {
	switch f.(type) {
	case func(*docopt.Args, *controller.Client) error, func(*docopt.Args) error, func() error, func():
	default:
		panic(fmt.Sprintf("invalid command function %s '%T'", cmd, f))
	}
	commands[cmd] = command{strings.TrimLeftFunc(usage, unicode.IsSpace), f}
}
コード例 #23
0
ファイル: trimleftfunc.go プロジェクト: davinking/gopkg
func main() {
	fmt.Println(strings.TrimLeftFunc("&widuu&", func(r rune) bool {
		if r == '&' {
			return true
		}
		return false
	})) //	widuu&是不是跟上边的那个函数效果一样了
}
コード例 #24
0
ファイル: main.go プロジェクト: qt/qtqa
func extractChangeLog(commitMessage string) (entry changeLogEntry) {
	scanner := bufio.NewScanner(bytes.NewBufferString(commitMessage))

	for scanner.Scan() {
		trimmedLine := strings.TrimSpace(scanner.Text())

		if entry.text == "" {
			withoutChangeLog := strings.TrimPrefix(trimmedLine, "[ChangeLog]")
			if withoutChangeLog == trimmedLine {
				continue
			}

			remainder := withoutChangeLog
			for {
				withoutBracket := strings.TrimPrefix(remainder, "[")
				if withoutBracket == remainder {
					break
				}
				var group string
				remainder = strings.TrimLeftFunc(withoutBracket, func(ch rune) bool {
					endOfGroup := ch == ']'
					if !endOfGroup {
						group += string(ch)
					}
					return !endOfGroup
				})
				remainder = strings.TrimPrefix(remainder, "]")
				if entry.module == "" {
					entry.module = group
				} else if entry.class == "" {
					entry.class = group
				} else {
					remainder = "[" + withoutBracket
					break
				}
			}

			entry.text = strings.TrimSpace(remainder)
		} else if trimmedLine == "" {
			break
		} else {
			entry.text = entry.text + " " + trimmedLine
		}
	}

	if entry.text != "" {
		for scanner.Scan() {
			trimmedLine := strings.TrimSpace(scanner.Text())
			if !strings.HasPrefix(strings.ToLower(trimmedLine), "task-number:") {
				continue
			}
			entry.text = "[" + strings.TrimSpace(trimmedLine[len("task-number:"):]) + "] " + entry.text
			break
		}
	}

	return
}
コード例 #25
0
ファイル: parse.go プロジェクト: CadeLaRen/docker-3
func stripEscapedWhitespace(s string) string {
	esc := strings.Split(s, "\\\n")
	if len(esc) > 1 {
		for i := 1; i < len(esc); i++ {
			esc[i] = strings.TrimLeftFunc(esc[i], unicode.IsSpace)
		}
	}
	return strings.Join(esc, "")
}
コード例 #26
0
//export go_fast_blank
func go_fast_blank(s C.VALUE) C.VALUE {
	gs := C.GoString(C.rb_string_value_cstr(&s))

	if gs == "" || strings.TrimLeftFunc(gs, unicode.IsSpace) == "" {
		return C.Qtrue
	}

	return C.Qfalse
}
コード例 #27
0
ファイル: tag.go プロジェクト: oschmid/tessernote
// ParseTagNames parses a string for hashtags.
func ParseTagNames(text string) []string {
	var names []string
	matches := hashtag.Regex.FindAllString(text, len(text))
	for _, match := range matches {
		name := strings.TrimLeftFunc(match, isHashtagDecoration)
		names = append(names, name)
	}
	return names
}
コード例 #28
0
// TrimLeftFunc trims the runes from the left end of the text where the specified callback function returns true,
// returning a new structure and leaving the original unchanged.
func (piece *RichText) TrimLeftFunc(f func(rune) bool) *RichText {
	s := piece.String()
	trimmed := strings.TrimLeftFunc(s, f)
	if len(trimmed) == len(s) {
		return piece
	}
	_, right := piece.Split(len(s) - len(trimmed))
	return right
}
コード例 #29
0
ファイル: cli.go プロジェクト: snormore/flynn
func Register(cmd string, f interface{}, usage string) *command {
	switch f.(type) {
	case func(*docopt.Args, cluster.Host) error, func(*docopt.Args):
	default:
		panic(fmt.Sprintf("invalid command function %s '%T'", cmd, f))
	}
	c := &command{usage: strings.TrimLeftFunc(usage, unicode.IsSpace), f: f}
	commands[cmd] = c
	return c
}
コード例 #30
0
ファイル: grub2.go プロジェクト: felixonmars/dde-daemon
func (grub *Grub2) parseTitle(line string) (string, bool) {
	line = strings.TrimLeftFunc(line, unicode.IsSpace)
	if entryRegexpSingleQuote.MatchString(line) {
		return entryRegexpSingleQuote.FindStringSubmatch(line)[2], true
	} else if entryRegexpDoubleQuote.MatchString(line) {
		return entryRegexpDoubleQuote.FindStringSubmatch(line)[2], true
	} else {
		return "", false
	}
}