4d47/ani

此包最新版本(dev-master)没有可用的许可信息。

几乎等于INI,受ArchieML和PHP数组启发的解析器/发射器

dev-master 2018-12-12 17:48 UTC

This package is not auto-updated.

Last update: 2024-09-27 23:47:21 UTC


README

这是对一种结构化文本格式的探索,这种格式是

  • 易于编写
  • 易于嵌入其他格式
  • s ≈ emit(parse(s))

与INI的不同之处

  • 没有解析错误
  • 具有多行值
  • 具有列表
  • 使用冒号代替等号

上下文 从ArchieML的移植中构建。想用更简单的语法替换一堆YAML文件,该语法在序列化时不会改变格式。

使用方法

$result = Ani\parse("key: value");
$string = Ani\emit($result);

格式

» key: value
« [ 'key' => 'value' ]

重复键创建对象列表

» name: frank
  age: 52
  name: vincent
  age: 64
« [
    [
      'name' => 'frank',
      'age' => 52
    ],
    [
      'name' => 'vincent',
      'age' => 62
    ]
  ]

文本行不会被忽略

» key: value
  Jane is this working ?
« [
    'key' => 'value',
    'Jane is this working ?'
  ]

看起来像键的文本行可以用反斜杠转义

» \key: value
« [ 'key: value' ]

因此简单的“平面数组”很容易

» milk
  cereals
« [ 'milk', 'cereals' ]

并且有部分

» [groceries]
  milk
  cereals
« [ 'groceries' => [ 'milk', 'cereals' ] ]

部分的复数(有争议)确定初始列表类型

» [groceries]
  name: milk
« [ 'groceries' => [ [ 'name' => 'milk' ] ] ]

» [grocery]
  name: milk
« [ 'grocery' => [ 'name' => 'milk' ] ]

多行通过写入换行符并缩进值开始!

» title: Funky
  content:
    Something along
      the lines
« [ 'title' => 'Funky', 'content' => 'Something along\n  the lines' ]

几乎相等于

  • 键前的空格丢失
  • 部分名称周围的空格丢失
  • 多行缩进总是两个空格