source: spip-zone/_plugins_/yaml/inc/yaml.php @ 31640

Last change on this file since 31640 was 31640, checked in by marcimat@…, 12 years ago
  • La librairie sfYaml n'arrive pas à parser un exemple du site de Yaml : http://www.yaml.org/spec/1.2/spec.html#id2559548, exemple 2.12. La librairie SPYC (http://code.google.com/p/spyc/) s'en occupe quand à elle très bien. Par contre cette librairie n'a pas de gestion d'exception en cas d'erreur. On permet de la tester (pas active par défaut) avec define('_LIB_YAML','spyc'); . Si elle convient, on la gardera.
File size: 1.3 KB
Line 
1<?php
2
3# wrapper de la class sfYAML pour SPIP
4#
5# fournit deux fonctions pour YAML,
6# analogues a json_encode() et json_decode
7#
8# Regle de dev: ne pas se rendre dependant de la lib sous-jacente
9
10// temporaire le temps de tester spyc
11define('_LIB_YAML','sfyaml'); 
12#define('_LIB_YAML','spyc');
13
14/*
15 * Encode n'importe quelle structure en yaml
16 * @param $struct
17 * @return string
18 */
19function yaml_encode($struct, $opt = array()) {
20        // test temporaire
21        if (_LIB_YAML == 'spyc') {
22                require_once _DIR_PLUGIN_YAML.'spyc/spyc.php';
23                return Spyc::YAMLDump($struct);
24        }
25        require_once _DIR_PLUGIN_YAML.'sfyaml/sfYaml.php';
26        require_once _DIR_PLUGIN_YAML.'sfyaml/sfYamlDumper.php';
27        $opt = array_merge(
28                array(
29                        'inline' => 2
30                ), $opt);
31        $yaml = new sfYamlDumper();
32        return $yaml->dump($struct, $opt['inline']);
33}
34
35/*
36 * Decode un texte yaml, renvoie la structure
37 * @param string $input
38 */
39function yaml_decode($input) {
40        // test temporaire
41        if (_LIB_YAML == 'spyc') {
42                require_once _DIR_PLUGIN_YAML.'spyc/spyc.php';
43                return Spyc::YAMLLoad($input);
44        }
45        require_once _DIR_PLUGIN_YAML.'sfyaml/sfYaml.php';
46        require_once _DIR_PLUGIN_YAML.'sfyaml/sfYamlParser.php';
47
48        $yaml = new sfYamlParser();
49
50        try
51        {
52          $ret = $yaml->parse($input);
53        }
54        catch (Exception $e)
55        {
56                throw new InvalidArgumentException(sprintf('Unable to parse string: %s', $e->getMessage()));
57        }
58
59        return $ret;
60}
61
62?>
Note: See TracBrowser for help on using the repository browser.