Last updated:
0 purchases
gura
Gura Dart parser #
This repository contains the implementation of a Gura configuration format
parser for Dart, written in pure Dart. (Compliant with spec version 1.0.0).
Installation #
dart pub add gura
copied to clipboard
Usage #
Import package:gura/gura.dart and use the [parse()], [parseFile()], or [parseFileSync()]
functions to convert your Gura input into a Map<String, dynamic> for use in your code.
Examples #
import 'package:gura/gura.dart';
final String guraString = '''
# This is a Gura document.
title: "Gura Example"
an_object:
username: "Stephen"
pass: "Hawking"
# Line breaks are ok when inside arrays
hosts: [
"alpha",
"omega"
]
''';
void main()
{
// parse: transforms a Gura string into a Map of Gura key/value pairs
final Map<String, dynamic> parsedGura = parse(guraString);
print(parsedGura);
// Access a specific field
print('Title -> ${parsedGura['title']}');
// Iterate over structures (parsedGura['hosts'] is List<dynamic> but we know
// it contains strings so we can safely cast to String when iterating over it)
for (final String host in parsedGura['hosts'])
print('Host -> $host');
// dump: stringifies Map<String, dynamic> as a Gura-compatible string
print(dump(parsedGura));
}
copied to clipboard
import 'dart:io';
import 'package:gura/gura.dart';
Future<void> main() async
{
final File guraFile = File('foo_bar.ura');
final Map<String, dynamic> parsedGura = await parseFile(guraFile);
...
}
copied to clipboard
import 'dart:io';
import 'package:gura/gura.dart';
void main()
{
final File guraFile = File('foo_bar.ura');
final Map<String, dynamic> parsedGura = parseFileSync(guraFile);
...
}
copied to clipboard
In the event that any of the library function names (parse, parseFile, etc.)
conflict with functions from another library, alias gura and use qualified function
calls via the alias:
import 'dart:io';
import 'package:gura/gura.dart' as gura;
void main()
{
final File guraFile = File('foo_bar.ura');
final Map<String, dynamic> parsedGura = await gura.parseFile(guraFile);
...
}
copied to clipboard
Contributing #
Fork this project
Create new branch for your feature
Commit and push your changes
Submit a pull request
Sadly, Dart's selection of tools for maintaining a consistent code style do not
allow for much customization in a way that supports my personal code style, and
I don't like the opinionated style of dartfmt, so if you choose to contribute,
please do your best to maintain code style consistent with the rest of the repo
in your contributions. I'll review PRs to ensure this.
Tests #
To run all tests, run dart test in the project root.
Credits #
Credit for the vast majority of code and logic in this project goes to the original
authors of the TS/JS Gura parser.
This parser started as a 1:1 port of the TypeScript/JavaScript parser implementation,
but I've since done a lot of cleanup, restructuring, some logic refactoring, and
I've redocumented everything, all to help me better solidify my understanding of the
inner-workings of the original implementation.
There are also a lot of TypeScript/JavaScript mechanics that simply didn't translate
well to Dart so keeping the implementation port 1:1 was never going to work out,
though I didn't know quite how frequently I would encounter that problem until I
started the project.
License #
This repository is distributed under the terms of the MIT license.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.