go-gypsy

Go YAML Parser for Simple YAML

  • Owner: kylelemons/go-gypsy
  • Platform:
  • License:: Apache License 2.0
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

// Copyright 2013 Google, Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Gypsy is a simplified YAML parser written in Go. It is intended to be used as
// a simple configuration file, and as such does not support a lot of the more
// nuanced syntaxes allowed in full-fledged YAML. YAML does not allow indent with
// tabs, and GYPSY does not ever consider a tab to be a space character. It is
// recommended that your editor be configured to convert tabs to spaces when
// editing Gypsy config files.
//
// Gypsy understands the following to be a list:
//
// - one
// - two
// - three
//
// This is parsed as a yaml.List, and can be retrieved from the
// yaml.Node.List() method. In this case, each element of the yaml.List would
// be a yaml.Scalar whose value can be retrieved with the yaml.Scalar.String()
// method.
//
// Gypsy understands the following to be a mapping:
//
// key: value
// foo: bar
// running: away
//
// A mapping is an unordered list of key:value pairs. All whitespace after the
// colon is stripped from the value and is used for alignment purposes during
// export. If the value is not a list or a map, everything after the first
// non-space character until the end of the line is used as the yaml.Scalar
// value.
//
// Gypsy allows arbitrary nesting of maps inside lists, lists inside of maps, and
// maps and/or lists nested inside of themselves.
//
// A map inside of a list:
//
// - name: John Smith
// age: 42
// - name: Jane Smith
// age: 45
//
// A list inside of a map:
//
// schools:
// - Meadow Glen
// - Forest Creek
// - Shady Grove
// libraries:
// - Joseph Hollingsworth Memorial
// - Andrew Keriman Memorial
//
// A list of lists:
//
// - - one
// - two
// - three
// - - un
// - deux
// - trois
// - - ichi
// - ni
// - san
//
// A map of maps:
//
// google:
// company: Google, Inc.
// ticker: GOOG
// url: http://google.com/
// yahoo:
// company: Yahoo, Inc.
// ticker: YHOO
// url: http://yahoo.com/
//
// In the case of a map of maps, all sub-keys must be on subsequent lines and
// indented equally. It is allowable for the first key/value to be on the same
// line if there is more than one key/value pair, but this is not recommended.
//
// Values can also be expressed in long form (leading whitespace of the first line
// is removed from it and all subsequent lines). In the normal (baz) case,
// newlines are treated as spaces, all indentation is removed. In the folded case
// (bar), newlines are treated as spaces, except pairs of newlines (e.g. a blank
// line) are treated as a single newline, only the indentation level of the first
// line is removed, and newlines at the end of indented lines are preserved. In
// the verbatim (foo) case, only the indent at the level of the first line is
// stripped. The example:
//
// foo:, // lorem ipsum dolor
// sit amet
// bar: >
// lorem ipsum
//
// dolor
//
// sit amet
// baz:
// lorem ipsum
// dolor sit amet
//
// The YAML subset understood by Gypsy can be expressed (loosely) in the following
// grammar (not including comments):
//
// OBJECT = MAPPING, SEQUENCE, SCALAR .
// SHORT-OBJECT = SHORT-MAPPING, SHORT-SEQUENCE, SHORT-SCALAR .
// EOL = '\n'
//
// MAPPING = { LONG-MAPPING, SHORT-MAPPING } .
// SEQUENCE = { LONG-SEQUENCE, SHORT-SEQUENCE } .
// SCALAR = { LONG-SCALAR, SHORT-SCALAR } .
//
// LONG-MAPPING = { INDENT KEY ':' OBJECT EOL } .
// SHORT-MAPPING = '{' KEY ':' SHORT-OBJECT { ',' KEY ':' SHORT-OBJECT } '}' EOL .
//
// LONG-SEQUENCE = { INDENT '-' OBJECT EOL } EOL .
// SHORT-SEQUENCE = '[' SHORT-OBJECT { ',' SHORT-OBJECT } ']' EOL .
//
// LONG-SCALAR = ( ', ', '>', ) EOL { INDENT SHORT-SCALAR EOL }
// SHORT-SCALAR = { alpha, digit, punct, ' ', '\t' } .
//
// KEY = { alpha, digit }
// INDENT = { ' ' }
//
// Any line where the first non-space character is a sharp sign (#) is a comment.
// It will be ignored.
// Only full-line comments are allowed.
package yaml

// BUG(kevlar): Multi-line strings are currently not supported.

Main metrics

Overview
Name With Ownerkylelemons/go-gypsy
Primary LanguageGo
Program languageGo (Language Count: 1)
Platform
License:Apache License 2.0
所有者活动
Created At2011-06-19 17:47:02
Pushed At2023-08-11 10:06:26
Last Commit At2020-08-30 12:37:32
Release Count4
Last Release Namev1.0.0 (Posted on )
First Release Namego.r60 (Posted on )
用户参与
Stargazers Count216
Watchers Count8
Fork Count47
Commits Count68
Has Issues Enabled
Issues Count10
Issue Open Count3
Pull Requests Count10
Pull Requests Open Count0
Pull Requests Close Count13
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private