Fix Pico::parseFileMeta() for non-YAML 1-liners

\Symfony\Component\Yaml\Parser::parse() returns the unchanged value when a 1-liner string which is no valid YAML is passed. Assume this string to be the page title. Thus the following page will work now:

```
---
This is the title
---

# Example page

{{ meta.title }} is going to be "This is the title" - or "%meta.title%" == "This is the title".
```
This commit is contained in:
Daniel Rudolf 2016-07-15 03:13:58 +02:00
parent bf1663cc1c
commit fb4bdfe1fc
No known key found for this signature in database
GPG key ID: A061F02CD8DE4538
2 changed files with 9 additions and 1 deletions

View file

@ -6,6 +6,7 @@ Released: -
```
* [New] Add Pico's social icons to default theme
* [Fixed] Fix handling of non-YAML 1-line front matters
```
### Version 1.0.3

View file

@ -777,7 +777,14 @@ class Pico
if (preg_match($pattern, $rawContent, $rawMetaMatches) && isset($rawMetaMatches[3])) {
$yamlParser = new \Symfony\Component\Yaml\Parser();
$meta = $yamlParser->parse($rawMetaMatches[3]);
$meta = ($meta !== null) ? array_change_key_case($meta, CASE_LOWER) : array();
if ($meta !== null) {
// the parser may return a string for non-YAML 1-liners
// assume that this string is the page title
$meta = is_array($meta) ? array_change_key_case($meta, CASE_LOWER) : array('title' => $meta);
} else {
$meta = array();
}
foreach ($headers as $fieldId => $fieldName) {
$fieldName = strtolower($fieldName);