daylerees/kurenai

View on GitHub
README.md

Summary

Maintainability
Test Coverage
[![Kurenai](kurenai.png)](https://github.com/daylerees/kurenai)

# Kurenai

[![Build Status](https://travis-ci.org/daylerees/kurenai.svg?branch=master)](https://travis-ci.org/daylerees/kurenai)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/daylerees/kurenai/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/daylerees/kurenai/?branch=master)
[![Code Coverage](https://scrutinizer-ci.com/g/daylerees/kurenai/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/daylerees/kurenai/?branch=master)
[![Code Climate](https://codeclimate.com/github/daylerees/kurenai/badges/gpa.svg)](https://codeclimate.com/github/daylerees/kurenai)
[![HHVM Tested](https://img.shields.io/hhvm/daylerees/kurenai.svg)](https://travis-ci.org/daylerees/kurenai)

[![Packagist Version](https://img.shields.io/packagist/v/daylerees/kurenai.svg)](https://packagist.org/packages/daylerees/kurenai)
[![Packagist](https://img.shields.io/packagist/dt/daylerees/kurenai.svg)](https://packagist.org/packages/daylerees/kurenai)

Kurenai is a document with metadata parsing library for PHP. It supports a variety of different document content and metadata parsers.

---

## Installation

Kurenai is available on [Packagist](https://packagist.org/packages/daylerees/kurenai) for [Composer](https://getcomposer.org/).

    composer require daylerees/kurenai
    
## Usage

Kurenai documents look like this:

```
Some form of metadata here.
===
Some form of content here.
```

A metadata section, and a content section seperated by three equals `===` signs or more.

Here's an example using JSON for metadata, and Markdown for content.

```
{
    "title": "Hello world!"
}
===
# Hello World

Well hello there, world!
```

Formats for metadata and content are interchangable using classes called parsers. First, let's create our parser instance.

```php
$kurenai = new \Kurenai\Parser(
    new \Kurenai\Parsers\Metadata\JsonParser,
    new \Kurenai\Parsers\Content\MarkdownParser
);
```

In the above example, we're using a JSON metadata parser, and a Markdown content parser. We can now parse a document.

```php
$document = $kurenai->parse('path/to/document.md');
```

Our documents can have any filename or extension. You can also pass the `parse()` function the content of a document directly.

The document instance has a few useful methods.

```php
$document->getRaw();
```

This will fetch the raw document content. Before Kurenai parsed it.

```php
$document->getMetadata();
```

This will fetch the metadata, parsed into an array.

```php
$document->getContent();
```

This will get the content of the document, rendered using the provided content parser.

```php
$document->get('foo.bar');
```

The `get()` method uses dot-notation to return a metadata value. For example, the above example would be equivalent to fetching `$metadata['foo']['bar']`.

If the subject can't be found, `null` will be returned. You can supply a default value as a second parameter to the method.

## Metadata Parsers

| Format | Install Package | Class                                |
|--------|-----------------|--------------------------------------|
| JSON   | N/A             | `Kurenai\Parsers\Metdata\JsonParser` |
| YAML   | `symfony/yaml`  | `Kurenai\Parsers\Metdata\YamlParser` |
| INI    | N/A             | `Kurenai\Parsers\Metdata\IniParser`  |

## Content Parsers

| Format                      | Install Package        | Class                                         |
|-----------------------------|------------------------|-----------------------------------------------|
| Plaintext (no parsing)      | N/A                    | `Kurenai\Parsers\Content\PlainTextParser`     |
| CommonMark                  | `league/commonmark`    | `Kurenai\Parsers\Content\CommonMarkParser`
| Markdown                    | `michelf/php-markdown` | `Kurenai\Parsers\Content\MarkdownParser`      |
| Markdown Extra              | `michelf/php-markdown` | `Kurenai\Parsers\Content\MarkdownExtraParser` |
| Parsedown (Github Markdown) | `erusev/parsedown`     | `Kurenai\Parsers\Content\ParsedownParser`     |
| Textile                     | `netcarver/textile`    | `Kurenai\Parsers\Content\TextileParser`       |

Enjoy using Kurenai!