Gura Dart 解析器

该存储库包含为 Dart 实现的 Gura 配置格式解析器,完全使用 Dart 编写。(符合规范版本 1.0.0)。

安装

dart pub add gura

用法

导入 package:gura/gura.dart 并使用 [parse()]、[parseFile()] 或 [parseFileSync()]
函数将您的 Gura 输入转换为 Map<String, dynamic> 以便在您的代码中使用。

示例

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));
}
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);
    ...
}
import 'dart:io';
import 'package:gura/gura.dart';

void main()
{
    final File guraFile = File('foo_bar.ura');
    final Map<String, dynamic> parsedGura = parseFileSync(guraFile);
    ...
}

如果库函数名称(parseparseFile 等)
与另一个库的函数发生冲突,请为 gura 创建一个别名,并通过该别名使用限定函数
调用

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);
    ...
}

贡献

  1. Fork 此项目
  2. 为您的功能创建新分支
  3. 提交并推送您的更改
  4. 提交拉取请求

遗憾的是,Dart 在维护一致代码风格方面的工具选择
不允许进行太多自定义以支持我的个人代码风格,并且
我不喜欢 dartfmt 的主观风格,因此如果您选择贡献,
请在您的贡献中尽力保持代码风格与仓库其余部分一致。
我将审查 PR 以确保这一点。

测试

要运行所有测试,请在项目根目录中运行 dart test

GitHub

https://github.com/zajrik/gura-dart-parser