4d47 / ani
Almost INI, parser/emitter inspired by ArchieML and PHP array
Installs: 10
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 2
Open Issues: 2
pkg:composer/4d47/ani
Requires
- php: >=5.6
- mmucklo/inflect: *
Requires (Dev)
- phpunit/phpunit: ~4.5
- symfony/yaml: ~4.2
This package is not auto-updated.
Last update: 2025-10-25 04:48:43 UTC
README
This is an exploration of a format for structured text that is:
- Easy for authoring
- Easy to embed other formats
- s ≈ emit(parse(s))
Differences from INI:
- No parsing errors
- Has multiline value
- Has lists
- Use colon instead of equal
Context Built out from a port of ArchieML. Wanted to replace a bunch of YAML files with a simpler syntax that did not change formatting on serialization.
Usage
$result = Ani\parse("key: value"); $string = Ani\emit($result);
Format
» key: value
« [ 'key' => 'value' ]
Duplicate keys creates a list of objects:
» name: frank
  age: 52
  name: vincent
  age: 64
« [
    [
      'name' => 'frank',
      'age' => 52
    ],
    [
      'name' => 'vincent',
      'age' => 62
    ]
  ]
Text lines are not ignored:
» key: value
  Jane is this working ?
« [
    'key' => 'value',
    'Jane is this working ?'
  ]
A text line that looks like a key can be escaped with backslash:
» \key: value
« [ 'key: value' ]
So simple "flat array" is easy:
» milk
  cereals
« [ 'milk', 'cereals' ]
And sections:
» [groceries]
  milk
  cereals
« [ 'groceries' => [ 'milk', 'cereals' ] ]
Section plural (controversial) determine the initial list type:
» [groceries]
  name: milk
« [ 'groceries' => [ [ 'name' => 'milk' ] ] ]
» [grocery]
  name: milk
« [ 'grocery' => [ 'name' => 'milk' ] ]
Multiline is started by writing a newline and indenting value!
» title: Funky
  content:
    Something along
      the lines
« [ 'title' => 'Funky', 'content' => 'Something along\n  the lines' ]
Almost equal to
- spaces before key is lost
- surrounding spaces in section names is lost
- multiline indentation is always two-spaces