Tidy up parsing API
This commit is contained in:
		
							parent
							
								
									7b7ad2e791
								
							
						
					
					
						commit
						7cd6ac1c51
					
				
							
								
								
									
										17
									
								
								ini.go
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								ini.go
									
									
									
									
									
								
							| @ -18,10 +18,17 @@ func (parser *Parser) Err() error { | ||||
| 	return parser.err | ||||
| } | ||||
| 
 | ||||
| // Returns `true` if `parser` has reached the end of parsable tokens, either because the stream has | ||||
| // ended or it has encountered an error. | ||||
| func (parser *Parser) IsEnd() bool { | ||||
| 	return parser.isEnd | ||||
| } | ||||
| 
 | ||||
| // Creates and returns a new [Parser] by reference from `reader` | ||||
| func NewParser(reader io.Reader) *Parser { | ||||
| 	return &Parser{ | ||||
| 		scanner: bufio.NewScanner(reader), | ||||
| 		isEnd:   false, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @ -31,7 +38,7 @@ func NewParser(reader io.Reader) *Parser { | ||||
| // | ||||
| // Note that the `parser` does not guarantee any parse order for key-value pairs extracted from the | ||||
| // `parser` stream. | ||||
| func (parser *Parser) Parse() (Entry, bool) { | ||||
| func (parser *Parser) Parse() Entry { | ||||
| 	for parser.scanner.Scan() { | ||||
| 		var line = strings.TrimSpace(parser.scanner.Text()) | ||||
| 		var lineLen = len(line) | ||||
| @ -72,7 +79,7 @@ func (parser *Parser) Parse() (Entry, bool) { | ||||
| 				Section: parser.section, | ||||
| 				Key:     strings.TrimSpace(line[0:assignmentIndex]), | ||||
| 				Value:   value, | ||||
| 			}, true | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// Key which is its own value. | ||||
| @ -82,12 +89,13 @@ func (parser *Parser) Parse() (Entry, bool) { | ||||
| 			Section: parser.section, | ||||
| 			Key:     keyValue, | ||||
| 			Value:   keyValue, | ||||
| 		}, true | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	parser.err = parser.scanner.Err() | ||||
| 	parser.isEnd = true | ||||
| 
 | ||||
| 	return Entry{}, false | ||||
| 	return Entry{} | ||||
| } | ||||
| 
 | ||||
| // State machine for parsing streamable INI file sources. | ||||
| @ -95,4 +103,5 @@ type Parser struct { | ||||
| 	scanner *bufio.Scanner | ||||
| 	err     error | ||||
| 	section string | ||||
| 	isEnd   bool | ||||
| } | ||||
|  | ||||
| @ -3,9 +3,9 @@ | ||||
| Unsatisfied with the INI parsing tools provided by third-parties in the Golang ecosystem, INI Gusher aims to solve parsing and saving of INI files as simply as possible. | ||||
| 
 | ||||
| ```go | ||||
| var iniParser = ini.NewParser(modInfoFile) | ||||
| var parser = ini.NewParser(modInfoFile) | ||||
| 
 | ||||
| for entry, parsed := iniParser.Parse(); parsed; entry, parsed = iniParser.Parse() { | ||||
| for entry, parsed := parser.Parse(); parsed; entry, parsed = parser.Parse() { | ||||
|     var myValue = myValueMap[entry.Section] | ||||
| 
 | ||||
|     switch entry.Key { | ||||
| @ -22,7 +22,7 @@ for entry, parsed := iniParser.Parse(); parsed; entry, parsed = iniParser.Parse( | ||||
|     myValueMap[entry.Section] = myValue | ||||
| } | ||||
| 
 | ||||
| if err := iniParser.Err(); err != nil { | ||||
| if err := parser.Err(); err != nil { | ||||
|     return err | ||||
| } | ||||
| ``` | ||||
| @ -39,6 +39,7 @@ As with Golang itself, INI Gusher is fairly opinionated; The API uses incrementa | ||||
|   * Unquoted keys may only use alphanumerics of any case. | ||||
|   * Unquoted values may only use alphanumerics of any case and whitespace is only acknowledged if it is between them. | ||||
|   * Keys and values may be surrounded in double-quotes (`"`) to preseve trailing whitespace and allow all characters. | ||||
|   * Sections allow all characters between their opening and closing braces (`"[]"`). | ||||
|   * Whitespace is ignored everywhere else. | ||||
|   * The default section is an empty string (`""`). | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user