diff --git a/demo/formulaire-contact-sfyaml.yaml b/demo/formulaire-contact-sfyaml.yaml
deleted file mode 100644
index 6a728cf..0000000
--- a/demo/formulaire-contact-sfyaml.yaml
+++ /dev/null
@@ -1,95 +0,0 @@
-id_formulaire: '1'
-identifiant: contact_sfyaml
-titre: 'Contact form'
-descriptif: ''
-css: ''
-message_retour: '[en]Thank you for contacting us![fr]Merci de nous avoir contactés !'
-saisies:
- -
- options: { label: '[en]Your Name[fr]Votre nom', placeholder: '[en]First Last[fr]Prénom Nom', type: text, info_obligatoire: '*', size: '40', autocomplete: defaut, obligatoire: on, nom: input_1 }
- identifiant: '@57ced83ce37ea'
- saisie: input
- -
- options: { label: '[en]Job Function[fr]Fonction', type: text, info_obligatoire: '*', size: '40', autocomplete: defaut, obligatoire: on, nom: input_2 }
- identifiant: '@57ced8cf52849'
- saisie: input
- -
- options: { label: '[en]Company[fr]Société', type: text, info_obligatoire: '*', size: '40', autocomplete: defaut, obligatoire: on, nom: input_4 }
- identifiant: '@57cf3f816910f'
- saisie: input
- -
- options: { label: '[en]Address[fr]Adresse', rows: '5', cols: '40', nom: textarea_2 }
- identifiant: '@57cfc1acd01ac'
- saisie: textarea
- -
- options: { label: '[en]City[fr]Ville', type: text, info_obligatoire: '*', size: '40', autocomplete: defaut, obligatoire: on, nom: input_6 }
- identifiant: '@57cf4126e26f0'
- saisie: input
- -
- options: { label: '[en]Zip code[fr]Code Postal', type: text, info_obligatoire: '*', size: '40', autocomplete: defaut, obligatoire: on, nom: input_7 }
- verifier: { type: code_postal, options: { } }
- identifiant: '@57cf42039c1c0'
- saisie: input
- -
- options: { label: '[en]Country[fr]Pays', datas: "|Please Select...\r\nAfganistan|Afghanistan\r\nAlbania|Albania\r\nAlgeria|Algeria\r\nAmerican Samoa|American Samoa\r\nAndorra|Andorra\r\nAngola|Angola\r\nAnguilla|Anguilla\r\nAntigua & Barbuda|Antigua & Barbuda\r\nArgentina|Argentina\r\nArmenia|Armenia\r\nAruba|Aruba\r\nAustralia|Australia\r\nAustria|Austria\r\nAzerbaijan|Azerbaijan\r\nBahamas|Bahamas\r\nBahrain|Bahrain\r\nBangladesh|Bangladesh\r\nBarbados|Barbados\r\nBelarus|Belarus\r\nBelgium|Belgium\r\nBelize|Belize\r\nBenin|Benin\r\nBermuda|Bermuda\r\nBhutan|Bhutan\r\nBolivia|Bolivia\r\nBonaire|Bonaire\r\nBosnia & Herzegovina|Bosnia & Herzegovina\r\nBotswana|Botswana\r\nBrazil|Brazil\r\nBritish Indian Ocean Ter|British Indian Ocean Ter\r\nBrunei|Brunei\r\nBulgaria|Bulgaria\r\nBurkina Faso|Burkina Faso\r\nBurundi|Burundi\r\nCambodia|Cambodia\r\nCameroon|Cameroon\r\nCanada|Canada\r\nCanary Islands|Canary Islands\r\nCape Verde|Cape Verde\r\nCayman Islands|Cayman Islands\r\nCentral African Republic|Central African Republic\r\nChad|Chad\r\nChannel Islands|Channel Islands\r\nChile|Chile\r\nChina|China\r\nChristmas Island|Christmas Island\r\nCocos Island|Cocos Island\r\nColombia|Colombia\r\nComoros|Comoros\r\nCongo|Congo\r\nCook Islands|Cook Islands\r\nCosta Rica|Costa Rica\r\nCote DIvoire|Cote D'Ivoire\r\nCroatia|Croatia\r\nCuba|Cuba\r\nCuraco|Curacao\r\nCyprus|Cyprus\r\nCzech Republic|Czech Republic\r\nDenmark|Denmark\r\nDjibouti|Djibouti\r\nDominica|Dominica\r\nDominican Republic|Dominican Republic\r\nEast Timor|East Timor\r\nEcuador|Ecuador\r\nEgypt|Egypt\r\nEl Salvador|El Salvador\r\nEquatorial Guinea|Equatorial Guinea\r\nEritrea|Eritrea\r\nEstonia|Estonia\r\nEthiopia|Ethiopia\r\nFalkland Islands|Falkland Islands\r\nFaroe Islands|Faroe Islands\r\nFiji|Fiji\r\nFinland|Finland\r\nFrance|France\r\nFrench Guiana|French Guiana\r\nFrench Polynesia|French Polynesia\r\nFrench Southern Ter|French Southern Ter\r\nGabon|Gabon\r\nGambia|Gambia\r\nGeorgia|Georgia\r\nGermany|Germany\r\nGhana|Ghana\r\nGibraltar|Gibraltar\r\nGreat Britain|Great Britain\r\nGreece|Greece\r\nGreenland|Greenland\r\nGrenada|Grenada\r\nGuadeloupe|Guadeloupe\r\nGuam|Guam\r\nGuatemala|Guatemala\r\nGuinea|Guinea\r\nGuyana|Guyana\r\nHaiti|Haiti\r\nHawaii|Hawaii\r\nHonduras|Honduras\r\nHong Kong|Hong Kong\r\nHungary|Hungary\r\nIceland|Iceland\r\nIndia|India\r\nIndonesia|Indonesia\r\nIran|Iran\r\nIraq|Iraq\r\nIreland|Ireland\r\nIsle of Man|Isle of Man\r\nIsrael|Israel\r\nItaly|Italy\r\nJamaica|Jamaica\r\nJapan|Japan\r\nJordan|Jordan\r\nKazakhstan|Kazakhstan\r\nKenya|Kenya\r\nKiribati|Kiribati\r\nKorea North|Korea North\r\nKorea Sout|Korea South\r\nKuwait|Kuwait\r\nKyrgyzstan|Kyrgyzstan\r\nLaos|Laos\r\nLatvia|Latvia\r\nLebanon|Lebanon\r\nLesotho|Lesotho\r\nLiberia|Liberia\r\nLibya|Libya\r\nLiechtenstein|Liechtenstein\r\nLithuania|Lithuania\r\nLuxembourg|Luxembourg\r\nMacau|Macau\r\nMacedonia|Macedonia\r\nMadagascar|Madagascar\r\nMalaysia|Malaysia\r\nMalawi|Malawi\r\nMaldives|Maldives\r\nMali|Mali\r\nMalta|Malta\r\nMarshall Islands|Marshall Islands\r\nMartinique|Martinique\r\nMauritania|Mauritania\r\nMauritius|Mauritius\r\nMayotte|Mayotte\r\nMexico|Mexico\r\nMidway Islands|Midway Islands\r\nMoldova|Moldova\r\nMonaco|Monaco\r\nMongolia|Mongolia\r\nMontserrat|Montserrat\r\nMorocco|Morocco\r\nMozambique|Mozambique\r\nMyanmar|Myanmar\r\nNambia|Nambia\r\nNauru|Nauru\r\nNepal|Nepal\r\nNetherland Antilles|Netherland Antilles\r\nNetherlands|Netherlands (Holland, Europe)\r\nNevis|Nevis\r\nNew Caledonia|New Caledonia\r\nNew Zealand|New Zealand\r\nNicaragua|Nicaragua\r\nNiger|Niger\r\nNigeria|Nigeria\r\nNiue|Niue\r\nNorfolk Island|Norfolk Island\r\nNorway|Norway\r\nOman|Oman\r\nPakistan|Pakistan\r\nPalau Island|Palau Island\r\nPalestine|Palestine\r\nPanama|Panama\r\nPapua New Guinea|Papua New Guinea\r\nParaguay|Paraguay\r\nPeru|Peru\r\nPhillipines|Philippines\r\nPitcairn Island|Pitcairn Island\r\nPoland|Poland\r\nPortugal|Portugal\r\nPuerto Rico|Puerto Rico\r\nQatar|Qatar\r\nRepublic of Montenegro|Republic of Montenegro\r\nRepublic of Serbia|Republic of Serbia\r\nReunion|Reunion\r\nRomania|Romania\r\nRussia|Russia\r\nRwanda|Rwanda\r\nSt Barthelemy|St Barthelemy\r\nSt Eustatius|St Eustatius\r\nSt Helena|St Helena\r\nSt Kitts-Nevis|St Kitts-Nevis\r\nSt Lucia|St Lucia\r\nSt Maarten|St Maarten\r\nSt Pierre & Miquelon|St Pierre & Miquelon\r\nSt Vincent & Grenadines|St Vincent & Grenadines\r\nSaipan|Saipan\r\nSamoa|Samoa\r\nSamoa American|Samoa American\r\nSan Marino|San Marino\r\nSao Tome & Principe|Sao Tome & Principe\r\nSaudi Arabia|Saudi Arabia\r\nSenegal|Senegal\r\nSeychelles|Seychelles\r\nSierra Leone|Sierra Leone\r\nSingapore|Singapore\r\nSlovakia|Slovakia\r\nSlovenia|Slovenia\r\nSolomon Islands|Solomon Islands\r\nSomalia|Somalia\r\nSouth Africa|South Africa\r\nSpain|Spain\r\nSri Lanka|Sri Lanka\r\nSudan|Sudan\r\nSuriname|Suriname\r\nSwaziland|Swaziland\r\nSweden|Sweden\r\nSwitzerland|Switzerland\r\nSyria|Syria\r\nTahiti|Tahiti\r\nTaiwan|Taiwan\r\nTajikistan|Tajikistan\r\nTanzania|Tanzania\r\nThailand|Thailand\r\nTogo|Togo\r\nTokelau|Tokelau\r\nTonga|Tonga\r\nTrinidad & Tobago|Trinidad & Tobago\r\nTunisia|Tunisia\r\nTurkey|Turkey\r\nTurkmenistan|Turkmenistan\r\nTurks & Caicos Is|Turks & Caicos Is\r\nTuvalu|Tuvalu\r\nUganda|Uganda\r\nUkraine|Ukraine\r\nUnited Arab Erimates|United Arab Emirates\r\nUnited Kingdom|United Kingdom\r\nUnited States of America|United States of America\r\nUraguay|Uruguay\r\nUzbekistan|Uzbekistan\r\nVanuatu|Vanuatu\r\nVatican City State|Vatican City State\r\nVenezuela|Venezuela\r\nVietnam|Vietnam\r\nVirgin Islands (Brit)|Virgin Islands (Brit)\r\nVirgin Islands (USA)|Virgin Islands (USA)\r\nWake Island|Wake Island\r\nWallis & Futana Is|Wallis & Futana Is\r\nYemen|Yemen\r\nZaire|Zaire\r\nZambia|Zambia\r\nZimbabwe|Zimbabwe", info_obligatoire: '*', obligatoire: on, nom: selection_1 }
- identifiant: '@57ceda5356004'
- saisie: selection
- -
- options: { label: '[en]Email address[fr]Adresse Mail', defaut: '@', type: text, info_obligatoire: '*', size: '40', autocomplete: defaut, obligatoire: on, nom: input_3 }
- identifiant: '@57cedae3b025d'
- saisie: input
- -
- options: { label: '[en]Telephone[fr]Téléphone', type: text, info_obligatoire: '*', size: '40', autocomplete: defaut, obligatoire: on, nom: input_8 }
- verifier: { type: telephone, options: '' }
- identifiant: '@57cf42c3eae9c'
- saisie: input
- -
- options: { label: '[en]Interested by[fr]Intérêt', explication: '[en]Check the items of interest[fr]Indiquez les choix qui vous intéressent', datas: "IPs|[en]Intellectual Property blocks[fr]Blocs IP\r\nTrainings|[en]Training Courses[fr]Formations\r\nDesign|[en]Design Services[fr]Services de Conception\r\nBoards|[en]Board & Kits[fr]Cartes et Kits\r\nLicensing|[en]IP Licensing[fr]Licence IP\r\nIP_Eval|[en]IP Evaluation[fr]Evaluation IP\r\nOther|[en]Other (specify below)[fr]Autres (préciser ci-dessous)", choix_alternatif_label: 'Autre choix', nom: checkbox_1 }
- identifiant: '@57cedbb1d7557'
- saisie: checkbox
- -
- options: { label: '[en]Your message[fr]Votre message', rows: '5', cols: '40', nom: textarea_1 }
- identifiant: '@57cedb444e085'
- saisie: textarea
-traitements:
- email:
- champ_sujet: ''
- champ_sujet_valeurs_brutes: ''
- exclure_champs_email: ''
- pj: ''
- masquer_liens: ''
- activer_ip: on
- champ_destinataires: ''
- destinataires_plus: jojo@toto.net
- destinataires_selon_champ: ''
- champ_courriel_destinataire_form: ''
- champ_courriel: input_3
- activer_vrai_envoyeur: on
- champ_nom: '@input_1@'
- activer_accuse: on
- sujet_accuse: ''
- courriel_envoyeur_accuse: ''
- nom_envoyeur_accuse: ''
- enregistrement:
- resume_reponse: ''
- multiple: on
- modifiable: ''
- identification: cookie
- anonymiser: ''
- anonymiser_variable: ''
- ip: on
- moderation: posteriori
- analyse_exclure_champs: ''
- effacement: ''
- effacement_delai: ''
- invalider: ''
-public: non
-apres: valeurs
-unicite: ''
-message_erreur_unicite: ''
-url_redirect: ''
-statut: publie
-date_creation: '2016-09-06 17:10:15'
-maj: '2018-06-13 20:43:20'
-composition: ''
-composition_lock: '0'
diff --git a/demo/test_sfyaml.yaml b/demo/test_sfyaml.yaml
deleted file mode 100644
index 605551d..0000000
--- a/demo/test_sfyaml.yaml
+++ /dev/null
@@ -1,222 +0,0 @@
-#
-# S P Y C
-# a simple php yaml class
-#
-# authors: [vlad andersen (vlad.andersen@gmail.com), chris wanstrath (chris@ozmm.org)]
-# websites: [http://www.yaml.org, http://spyc.sourceforge.net/]
-# license: [MIT License, http://www.opensource.org/licenses/mit-license.php]
-# copyright: (c) 2005-2006 Chris Wanstrath, 2006-2014 Vlad Andersen
-#
-# spyc.yaml - A file containing the YAML that Spyc understands.
-#
-# ----------------------------------------------------------------------------------------
-# Tests pour la librairie sfyaml : les cas qui ne fonctionnent pas sont mis en commentaire
-
-#---
-
-# Mappings - with proper types
-String: Anyone's name, really.
-Int: 13
-BadHex: f0xf3
-Hex: 0xf3
-True: true
-False: false
-Zero: 0
-Null: NULL
-NotNull: 'null'
-NotTrue: 'y'
-NotBoolTrue: 'true'
-NotInt: '5'
-Float: 5.34
-Negative: -90
-SmallFloat: 0.7
-NewLine: \n
-QuotedNewLine: "\n"
-
-# A sequence
-- PHP Class
-- Basic YAML Loader
-- Very Basic YAML Dumper
-
-# A sequence of a sequence
--
- - YAML is so easy to learn.
- - Your config files will never be the same.
-
-# Sequence of mappings
--
- cpu: 1.5ghz
- ram: 1 gig
- os : os x 10.4.1
-
-# Mapped sequence
-domains:
- - yaml.org
- - php.net
-
-# A sequence like this.
-- program: Adium
- platform: OS X
- type: Chat Client
-
-# A folded block as a mapped value
-no time: >
- There isn't any time
- for your tricks!
-
- Do you understand?
-
-# A literal block as a mapped value
-some time: |
- There is nothing but time
- for your tricks.
-
-# Crazy combinations
-databases:
- - name: spartan
- notes:
- - Needs to be backed up
- - Needs to be normalized
- type: mysql
-
-# You can be a bit tricky
-"if: you'd": like
-
-# Inline sequences
-- [One, Two, Three, Four]
-
-# Nested Inline Sequences
-- [One, [Two, And, Three], Four, Five]
-
-# Nested Nested Inline Sequences
-- [This, [Is, Getting, [Ridiculous, Guys]], Seriously, [Show, Mercy]]
-
-# Inline mappings
-- {name: chris, age: young, brand: lucky strike}
-
-# Nested inline mappings
-- {name: mark, age: older than chris, brand: [marlboro, lucky strike]}
-
-# References -- they're shaky, but functional
-dynamic languages: &DLANGS
- - Perl
- - Python
- - PHP
- - Ruby
-compiled languages: &CLANGS
- - C/C++
- - Java
-all languages:
- - *DLANGS
- - *CLANGS
-
-# Added in .2.2: Escaped quotes
-- you know, this shouldn't work. but it does.
-- 'that''s my value.'
-- 'again, that\'s my value.'
-- "here's to \"quotes\", boss."
-
-# added in .2.3
-- {name: "Foo, Bar's", age: 20}
-
-# Added in .2.4: bug [ 1418193 ] Quote Values in Nested Arrays
-- [a, ['1', "2"], b]
-
-# Add in .5.2: Quoted new line values.
-- "First line\nSecond line\nThird line"
-
-# Added in .2.4: malformed YAML
-#all
-# javascripts: [dom1.js, dom.js]
-
-# Added in .2
-1040: Ooo, a numeric key! # And working comments? Wow! Colons in comments: a menace (0.3).
-
-hash_1: Hash #and a comment
-hash_2: "Hash #and a comment"
-"hash#3": "Hash (#) can appear in key too"
-
-float_test: 1.0
-float_test_with_quotes: '1.0'
-float_inverse_test: 001
-
-a_really_large_number: 115792089237316195423570985008687907853269984665640564039457584007913129639936 # 2^256
-
-int array: [ 1, 2, 3 ]
-
-#array on several lines:
-# [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-# 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ]
-
-morelesskey: ""
-
-array_of_zero: [0]
-sophisticated_array_of_zero: {rx: {tx: [0]} }
-
-switches:
- - { row: 0, col: 0, func: {tx: [0, 1]} }
-
-empty_sequence: [ ]
-empty_hash: { }
-
-special_characters: "[{]]{{]]"
-
-asterisks: "*"
-
-#empty_key:
-# :
-# key: value
-
-trailing_colon: "foo:"
-
-#multiline_items:
-# - type: SomeItem
-# values: [blah, blah, blah,
-# blah]
-# ints: [2, 54, 12,
-# 2143]
-
-many_lines: |
- A quick
- fox
-
-
- jumped
- over
-
-
-
-
-
- a lazy
-
-
-
- dog
-
-
-werte:
- 1: nummer 1
- 0: Stunde 0
-
-noindent_records:
-- record1: value1
-- record2: value2
-
-"a:1": [1000]
-"a:2":
- - 2000
-a:3: [3000]
-
-complex_unquoted_key:
- a:b:''test': value
-
-array with commas:
- ["0","1"]
-
-invoice: ["Something", "", '', "Something else"]
-quotes: ['Something', "Nothing", 'Anything', "Thing"]
-
-# [Endloop]
-endloop: |
- Does this line in the end indeed make Spyc go to an infinite loop?
diff --git a/demo/yaml.html b/demo/yaml.html
index 107f44a..b89f8d8 100644
--- a/demo/yaml.html
+++ b/demo/yaml.html
@@ -34,7 +34,6 @@
}
#SET{menu_librairies,
#ARRAY{
- sfyaml, Symfony YAML v1,
symfony, Symfony YAML v4,
spyc, Spyc
}
diff --git a/demo/yaml_fonctions.php b/demo/yaml_fonctions.php
index 1ac87ee..a8fe886 100644
--- a/demo/yaml_fonctions.php
+++ b/demo/yaml_fonctions.php
@@ -25,7 +25,7 @@ function decoder_fichier_yaml($filename, $options = []) {
$duree = ($timestamp_fin - $timestamp_debut) * 1000;
return [
- 'lib' => sinon($options['library'], 'sfyaml'),
+ 'lib' => sinon($options['library'], 'symfony'),
'fichier' => $file,
'duree' => $duree . ' ms',
'yaml' => $parsed,
diff --git a/inc/sfyaml.php b/inc/sfyaml.php
deleted file mode 100644
index fd11abb..0000000
--- a/inc/sfyaml.php
+++ /dev/null
@@ -1,81 +0,0 @@
-dump($structure, $options['inline']);
-}
-
-
-/**
- * Décode une chaîne YAML en une structure de données PHP adaptée.
- * Utilise pour cela la librairie symfony/yaml (branche v1) qui n'est plus maintenue mais
- * conservée par souci de compatibilité.
- *
- * @param string $input
- * La chaîne YAML à décoder.
- * @param array $options
- * Tableau associatif des options du parsing. Cette librairie accepte:
- * - 'show_error' : indicateur d'affichage des erreurs de parsing, false par défaut.
- * @param bool $show_error
- * Indicateur d'affichage des erreurs de parsing.
- *
- * @return bool|mixed
- * Structure PHP produite par le parsing de la chaîne YAML.
- */
-function sfyaml_yaml_decode($input, $options = []) {
-
- require_once _DIR_PLUGIN_YAML . 'sfyaml/sfYaml.php';
- require_once _DIR_PLUGIN_YAML . 'sfyaml/sfYamlParser.php';
-
- // On crée l'objet de parsing.
- $yaml = new sfYamlParser();
-
- $parsed = false;
- try {
- $parsed = $yaml->parse($input);
- } catch (Exception $exception) {
- // On garde la compatibilité ascendante avec l'ancien argument $show_error qui a été remplacé par $options
- // mais on inverse la valeur par défaut.
- if ((is_bool($options) and $options) or (!empty($options['show_error']))) {
- throw new InvalidArgumentException(sprintf('Unable to parse string: %s', $exception->getMessage()));
- }
-
- // Pour compenser l'absence par défaut d'erreurs, on loge l'erreur dans les logs SPIP.
- spip_log("Erreur d'analyse YAML : " . $exception->getMessage(), 'yaml' . _LOG_ERREUR);
- }
-
- return $parsed;
-}
diff --git a/inc/yaml.php b/inc/yaml.php
index d8389b6..62b5b08 100644
--- a/inc/yaml.php
+++ b/inc/yaml.php
@@ -4,20 +4,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
-# textwheel fournit yaml_decode() aussi...
-# include_spip('inc/yaml-mini');
-
-# wrapper de la class sfYAML pour SPIP
-#
-# fournit deux fonctions pour YAML,
-# analogues a json_encode() et json_decode
-#
-# Regle de dev: ne pas se rendre dependant de la lib sous-jacente
-
if (!defined('_LIB_YAML')) {
/**
* Les valeurs possibles sont :
- * - 'sfyaml' pour l'ancienne librairie symfony v1 (compatibilité ascendante, par défaut)
* - 'symfony' pour le composant YAML le plus récent de Symfony
* - 'spyc' pour la librairie YAML spyc la plus récente
* - 'libyaml' pour le composant PECL basé sur la librairie libYAML écrite en C.
diff --git a/sfyaml/sfYaml.php b/sfyaml/sfYaml.php
deleted file mode 100755
index 58e73d8..0000000
--- a/sfyaml/sfYaml.php
+++ /dev/null
@@ -1,137 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-/**
- * sfYaml offers convenience methods to load and dump YAML.
- *
- * @package symfony
- * @subpackage yaml
- * @author Fabien Potencier
- * @version SVN: $Id: sfYaml.class.php 8988 2008-05-15 20:24:26Z fabien $
- * version 1.0.6 - plus maintenue
- */
-class sfYaml
-{
- static protected $spec = '1.2';
-
- /**
- * Sets the YAML specification version to use.
- *
- * @param string $version The YAML specification version
- */
- public static function setSpecVersion($version) {
- if (!in_array($version, ['1.1', '1.2'])) {
- throw new InvalidArgumentException(sprintf('Version %s of the YAML specifications is not supported', $version));
- }
-
- self::$spec = $version;
- }
-
- /**
- * Gets the YAML specification version to use.
- *
- * @return string The YAML specification version
- */
- public static function getSpecVersion() {
- return self::$spec;
- }
-
- /**
- * Loads YAML into a PHP array.
- *
- * The load method, when supplied with a YAML stream (string or file),
- * will do its best to convert YAML in a file into a PHP array.
- *
- * Usage:
- *
- * $array = sfYaml::load('config.yml');
- * print_r($array);
- *
- *
- * @param string $input Path of YAML file or string containing YAML
- *
- * @return array The YAML converted to a PHP array
- *
- * @throws InvalidArgumentException If the YAML is not valid
- */
- public static function load($input) {
- $file = '';
-
- // if input is a file, load it
- if (strpos($input, "\n") === false && is_file($input)) {
- $file = $input;
-
- $content = $yaml = file_get_contents($input);
-
- // if the file contains valid PHP, process it
- if (
- strpos($content, '<' . '?') !== false
- and !(defined('_YAML_EVAL_PHP') and !_YAML_EVAL_PHP)
- ) {
- ob_start();
- $retval = eval('?' . '>' . $yaml);
- $content = ob_get_clean();
- // syntax error?
- if ($retval === false) {
- $content = $yaml;
- }
- }
-
- // if an array is returned by the config file assume it's in plain php form else in YAML
- $input = is_array($retval) ? $retval : $content;
- }
-
- // if an array is returned by the config file assume it's in plain php form else in YAML
- if (is_array($input)) {
- return $input;
- }
-
- require_once dirname(__FILE__) . '/sfYamlParser.php';
-
- $yaml = new sfYamlParser();
-
- try {
- $ret = $yaml->parse($input);
- }
- catch (Exception $e) {
- throw new InvalidArgumentException(sprintf('Unable to parse %s: %s', $file ? sprintf('file "%s"', $file) : 'string', $e->getMessage()));
- }
-
- return $ret;
- }
-
- /**
- * Dumps a PHP array to a YAML string.
- *
- * The dump method, when supplied with an array, will do its best
- * to convert the array into friendly YAML.
- *
- * @param array $array PHP array
- * @param integer $inline The level where you switch to inline YAML
- *
- * @return string A YAML string representing the original PHP array
- */
- public static function dump($array, $inline = 2, $indent = 2) {
- require_once dirname(__FILE__) . '/sfYamlDumper.php';
-
- $yaml = new sfYamlDumper($indent);
-
- return $yaml->dump($array, $inline, 0);
- }
-}
-
-/**
- * Wraps echo to automatically provide a newline.
- *
- * @param string $string The string to echo with new line
- */
-function echoln($string) {
- echo $string . "\n";
-}
diff --git a/sfyaml/sfYamlDumper.php b/sfyaml/sfYamlDumper.php
deleted file mode 100755
index c540962..0000000
--- a/sfyaml/sfYamlDumper.php
+++ /dev/null
@@ -1,74 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-require_once(dirname(__FILE__) . '/sfYamlInline.php');
-
-/**
- * sfYamlDumper dumps PHP variables to YAML strings.
- *
- * @package symfony
- * @subpackage yaml
- * @author Fabien Potencier
- * @version SVN: $Id: sfYamlDumper.class.php 10575 2008-08-01 13:08:42Z nicolas $
- */
-class sfYamlDumper
-{
- protected $indentation;
-
- /**
- * Set indentation on creation.
- * @fork correction pour coincider avec le fonctionnement de symfony v4
- * pas de risque car cette librairie n'évoluera plus
- *
- * @param integer $indent The amount of spaces to use for indentation of nested nodes.
- */
- public function __construct($indentation = 2) {
- if ($indentation < 1) {
- $this->indentation = 2;
- } else {
- $this->indentation = $indentation;
- }
- }
-
- /**
- * Dumps a PHP value to YAML.
- *
- * @param mixed $input The PHP value
- * @param integer $inline The level where you switch to inline YAML
- * @param integer $indent The level o indentation (used internally)
- *
- * @return string The YAML representation of the PHP value
- */
- public function dump($input, $inline = 0, $indent = 0) {
- $output = '';
- $prefix = $indent ? str_repeat(' ', $indent) : '';
-
- if ($inline <= 0 || !is_array($input) || empty($input)) {
- $output .= $prefix . sfYamlInline::dump($input);
- }
- else {
- $isAHash = array_keys($input) !== range(0, count($input) - 1);
-
- foreach ($input as $key => $value) {
- $willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value);
-
- $output .= sprintf(
- '%s%s%s%s',
- $prefix,
- $isAHash ? sfYamlInline::dump($key) . ':' : '-',
- $willBeInlined ? ' ' : "\n",
- $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation)
- ) . ($willBeInlined ? "\n" : '');
- }
- }
-
- return $output;
- }
-}
diff --git a/sfyaml/sfYamlInline.php b/sfyaml/sfYamlInline.php
deleted file mode 100755
index 23415a7..0000000
--- a/sfyaml/sfYamlInline.php
+++ /dev/null
@@ -1,409 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-require_once dirname(__FILE__) . '/sfYaml.php';
-
-/**
- * sfYamlInline implements a YAML parser/dumper for the YAML inline syntax.
- *
- * @package symfony
- * @subpackage yaml
- * @author Fabien Potencier
- * @version SVN: $Id: sfYamlInline.class.php 16177 2009-03-11 08:32:48Z fabien $
- */
-class sfYamlInline
-{
- const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\']*(?:\'\'[^\']*)*)\')';
-
- /**
- * Convert a YAML string to a PHP array.
- *
- * @param string $value A YAML string
- *
- * @return array A PHP array representing the YAML string
- */
- public static function load($value) {
- $value = trim($value);
-
- if (0 == strlen($value)) {
- return '';
- }
-
- if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
- $mbEncoding = mb_internal_encoding();
- mb_internal_encoding('ASCII');
- }
-
- switch ($value[0]) {
- case '[':
- $result = self::parseSequence($value);
- break;
- case '{':
- $result = self::parseMapping($value);
- break;
- default:
- $result = self::parseScalar($value);
- }
-
- if (isset($mbEncoding)) {
- mb_internal_encoding($mbEncoding);
- }
-
- return $result;
- }
-
- /**
- * Dumps a given PHP variable to a YAML string.
- *
- * @param mixed $value The PHP variable to convert
- *
- * @return string The YAML string representing the PHP array
- */
- public static function dump($value) {
- if ('1.1' === sfYaml::getSpecVersion()) {
- $trueValues = ['true', 'on', '+', 'yes', 'y'];
- $falseValues = ['false', 'off', '-', 'no', 'n'];
- }
- else {
- $trueValues = ['true'];
- $falseValues = ['false'];
- }
-
- switch (true) {
- case is_resource($value):
- throw new InvalidArgumentException('Unable to dump PHP resources in a YAML file.');
- case is_object($value):
- return '!!php/object:' . serialize($value);
- case is_array($value):
- return self::dumpArray($value);
- case null === $value:
- return 'null';
- case true === $value:
- return 'true';
- case false === $value:
- return 'false';
- case ctype_digit($value):
- return is_string($value) ? "'$value'" : (int) $value;
- case is_numeric($value):
- return is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : (is_string($value) ? "'$value'" : $value);
- case false !== strpos($value, "\n") || false !== strpos($value, "\r"):
- return sprintf('"%s"', str_replace(['"', "\n", "\r"], ['\\"', '\n', '\r'], $value));
- case preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ - ? | < > = ! % @ ` ]/x', $value):
- return sprintf("'%s'", str_replace('\'', '\'\'', $value));
- case '' == $value:
- return "''";
- case preg_match(self::getTimestampRegex(), $value):
- return "'$value'";
- case in_array(strtolower($value), $trueValues):
- return "'$value'";
- case in_array(strtolower($value), $falseValues):
- return "'$value'";
- case in_array(strtolower($value), ['null', '~']):
- return "'$value'";
- default:
- return $value;
- }
- }
-
- /**
- * Dumps a PHP array to a YAML string.
- *
- * @param array $value The PHP array to dump
- *
- * @return string The YAML string representing the PHP array
- */
- protected static function dumpArray($value) {
- // array
- $keys = array_keys($value);
- if (
- (1 == count($keys) && '0' == $keys[0])
- ||
- (count($keys) > 1 && array_reduce($keys, function ($v, $w) {
- return (int) $v + (int) $w;
- }, 0) == count($keys) * (count($keys) - 1) / 2)
- ) {
- $output = [];
- foreach ($value as $val) {
- $output[] = self::dump($val);
- }
-
- return sprintf('[%s]', implode(', ', $output));
- }
-
- // mapping
- $output = [];
- foreach ($value as $key => $val) {
- $output[] = sprintf('%s: %s', self::dump($key), self::dump($val));
- }
-
- return sprintf('{ %s }', implode(', ', $output));
- }
-
- /**
- * Parses a scalar to a YAML string.
- *
- * @param scalar $scalar
- * @param string $delimiters
- * @param array $stringDelimiter
- * @param integer $i
- * @param boolean $evaluate
- *
- * @return string A YAML string
- */
- public static function parseScalar($scalar, $delimiters = null, $stringDelimiters = ['"', "'"], &$i = 0, $evaluate = true) {
- if (in_array($scalar[$i], $stringDelimiters)) {
- // quoted scalar
- $output = self::parseQuotedScalar($scalar, $i);
- }
- else {
- // "normal" string
- if (!$delimiters) {
- $output = substr($scalar, $i);
- $i += strlen($output);
-
- // remove comments
- if (false !== $strpos = strpos($output, ' #')) {
- $output = rtrim(substr($output, 0, $strpos));
- }
- }
- elseif (preg_match('/^(.+?)(' . implode('|', $delimiters) . ')/', substr($scalar, $i), $match)) {
- $output = $match[1];
- $i += strlen($output);
- }
- else {
- throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', $scalar));
- }
-
- $output = $evaluate ? self::evaluateScalar($output) : $output;
- }
-
- return $output;
- }
-
- /**
- * Parses a quoted scalar to YAML.
- *
- * @param string $scalar
- * @param integer $i
- *
- * @return string A YAML string
- */
- protected static function parseQuotedScalar($scalar, &$i) {
- if (!preg_match('/' . self::REGEX_QUOTED_STRING . '/Au', substr($scalar, $i), $match)) {
- throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', substr($scalar, $i)));
- }
-
- $output = substr($match[0], 1, strlen($match[0]) - 2);
-
- if ('"' == $scalar[$i]) {
- // evaluate the string
- $output = str_replace(['\\"', '\\n', '\\r'], ['"', "\n", "\r"], $output);
- if (strpos($output, '\\x') !== false) {
- $output = preg_replace_callback(',\\\\x([0-9a-f]+),', function ($m) {
-return chr(hexdec($m[1]));
- }, $output);
- }
- }
- else {
- // unescape '
- $output = str_replace('\'\'', '\'', $output);
- }
-
- $i += strlen($match[0]);
-
- return $output;
- }
-
- /**
- * Parses a sequence to a YAML string.
- *
- * @param string $sequence
- * @param integer $i
- *
- * @return string A YAML string
- */
- protected static function parseSequence($sequence, &$i = 0) {
- $output = [];
- $len = strlen($sequence);
- $i += 1;
-
- // [foo, bar, ...]
- while ($i < $len) {
- switch ($sequence[$i]) {
- case '[':
- // nested sequence
- $output[] = self::parseSequence($sequence, $i);
- break;
- case '{':
- // nested mapping
- $output[] = self::parseMapping($sequence, $i);
- break;
- case ']':
- return $output;
- case ',':
- case ' ':
- break;
- default:
- $isQuoted = in_array($sequence[$i], ['"', "'"]);
- $value = self::parseScalar($sequence, [',', ']'], ['"', "'"], $i);
-
- if (!$isQuoted && false !== strpos($value, ': ')) {
- // embedded mapping?
- try {
- $value = self::parseMapping('{' . $value . '}');
- }
- catch (InvalidArgumentException $e) {
- // no, it's not
- }
- }
-
- $output[] = $value;
-
- --$i;
- }
-
- ++$i;
- }
-
- throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $sequence));
- }
-
- /**
- * Parses a mapping to a YAML string.
- *
- * @param string $mapping
- * @param integer $i
- *
- * @return string A YAML string
- */
- protected static function parseMapping($mapping, &$i = 0) {
- $output = [];
- $len = strlen($mapping);
- $i += 1;
-
- // {foo: bar, bar:foo, ...}
- while ($i < $len) {
- switch ($mapping[$i]) {
- case ' ':
- case ',':
- ++$i;
- continue 2;
- case '}':
- return $output;
- }
-
- // key
- $key = self::parseScalar($mapping, [':', ' '], ['"', "'"], $i, false);
-
- // value
- $done = false;
- while ($i < $len) {
- switch ($mapping[$i]) {
- case '[':
- // nested sequence
- $output[$key] = self::parseSequence($mapping, $i);
- $done = true;
- break;
- case '{':
- // nested mapping
- $output[$key] = self::parseMapping($mapping, $i);
- $done = true;
- break;
- case ':':
- case ' ':
- break;
- default:
- $output[$key] = self::parseScalar($mapping, [',', '}'], ['"', "'"], $i);
- $done = true;
- --$i;
- }
-
- ++$i;
-
- if ($done) {
- continue 2;
- }
- }
- }
-
- throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $mapping));
- }
-
- /**
- * Evaluates scalars and replaces magic values.
- *
- * @param string $scalar
- *
- * @return string A YAML string
- */
- protected static function evaluateScalar($scalar) {
- $scalar = trim($scalar);
-
- if ('1.1' === sfYaml::getSpecVersion()) {
- $trueValues = ['true', 'on', '+', 'yes', 'y'];
- $falseValues = ['false', 'off', '-', 'no', 'n'];
- }
- else {
- $trueValues = ['true'];
- $falseValues = ['false'];
- }
-
- switch (true) {
- case 'null' == strtolower($scalar):
- case '' == $scalar:
- case '~' == $scalar:
- return null;
- case 0 === strpos($scalar, '!str'):
- return (string) substr($scalar, 5);
- case 0 === strpos($scalar, '! '):
- return intval(self::parseScalar(substr($scalar, 2)));
- case 0 === strpos($scalar, '!!php/object:'):
- return unserialize(substr($scalar, 13));
- case ctype_digit($scalar):
- $raw = $scalar;
- $cast = intval($scalar);
- return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
- case in_array(strtolower($scalar), $trueValues):
- return true;
- case in_array(strtolower($scalar), $falseValues):
- return false;
- case is_numeric($scalar):
- return '0x' == $scalar[0] . $scalar[1] ? hexdec($scalar) : floatval($scalar);
- case 0 == strcasecmp($scalar, '.inf'):
- case 0 == strcasecmp($scalar, '.NaN'):
- return -log(0);
- case 0 == strcasecmp($scalar, '-.inf'):
- return log(0);
- case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar):
- return floatval(str_replace(',', '', $scalar));
- case preg_match(self::getTimestampRegex(), $scalar):
- return strtotime($scalar);
- default:
- return (string) $scalar;
- }
- }
-
- protected static function getTimestampRegex() {
- return <<[0-9][0-9][0-9][0-9])
- -(?P[0-9][0-9]?)
- -(?P[0-9][0-9]?)
- (?:(?:[Tt]|[ \t]+)
- (?P[0-9][0-9]?)
- :(?P[0-9][0-9])
- :(?P[0-9][0-9])
- (?:\.(?P[0-9]*))?
- (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?)
- (?::(?P[0-9][0-9]))?))?)?
- $~x
-EOF;
- }
-}
diff --git a/sfyaml/sfYamlParser.php b/sfyaml/sfYamlParser.php
deleted file mode 100755
index d338179..0000000
--- a/sfyaml/sfYamlParser.php
+++ /dev/null
@@ -1,536 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-require_once(dirname(__FILE__) . '/sfYamlInline.php');
-
-if (!defined('PREG_BAD_UTF8_OFFSET_ERROR')) {
- define('PREG_BAD_UTF8_OFFSET_ERROR', 5);
-}
-
-/**
- * sfYamlParser parses YAML strings to convert them to PHP arrays.
- *
- * @package symfony
- * @subpackage yaml
- * @author Fabien Potencier
- * @version SVN: $Id: sfYamlParser.class.php 10832 2008-08-13 07:46:08Z fabien $
- */
-class sfYamlParser
-{
- protected
- $offset = 0,
- $lines = [],
- $currentLineNb = -1,
- $currentLine = '',
- $refs = [];
-
- /**
- * Constructor
- *
- * @param integer $offset The offset of YAML document (used for line numbers in error messages)
- */
- public function __construct($offset = 0) {
- $this->offset = $offset;
- }
-
- /**
- * Parses a YAML string to a PHP value.
- *
- * @param string $value A YAML string
- *
- * @return mixed A PHP value
- *
- * @throws InvalidArgumentException If the YAML is not valid
- */
- public function parse($value) {
- $this->currentLineNb = -1;
- $this->currentLine = '';
- $this->lines = explode("\n", $this->cleanup($value));
-
- if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
- $mbEncoding = mb_internal_encoding();
- mb_internal_encoding('UTF-8');
- }
-
- $data = [];
- while ($this->moveToNextLine()) {
- if ($this->isCurrentLineEmpty()) {
- continue;
- }
-
- // tab?
- if (preg_match('#^\t+#', $this->currentLine)) {
- throw new InvalidArgumentException(sprintf('A YAML file cannot contain tabs as indentation at line %d (%s).', $this->getRealCurrentLineNb() + 1, $this->currentLine));
- }
-
- $isRef = $isInPlace = $isProcessed = false;
- if (preg_match('#^\-((?P\s+)(?P.+?))?\s*$#u', $this->currentLine, $values)) {
- if (isset($values['value']) && preg_match('#^&(?P[[^ ]+) *(?P.*)#u', $values['value'], $matches)) {
- $isRef = $matches['ref'];
- $values['value'] = $matches['value'];
- }
-
- // array
- if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
- $c = $this->getRealCurrentLineNb() + 1;
- $parser = new sfYamlParser($c);
- $parser->refs =& $this->refs;
- $data[] = $parser->parse($this->getNextEmbedBlock());
- }
- else {
- if (
- isset($values['leadspaces'])
- && ' ' == $values['leadspaces']
- && preg_match('#^(?P' . sfYamlInline::REGEX_QUOTED_STRING . '|[^ \'"\{].*?) *\:(\s+(?P.+?))?\s*$#u', $values['value'], $matches)
- ) {
- // this is a compact notation element, add to next block and parse
- $c = $this->getRealCurrentLineNb();
- $parser = new sfYamlParser($c);
- $parser->refs =& $this->refs;
-
- $block = $values['value'];
- if (!$this->isNextLineIndented()) {
- $block .= "\n" . $this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2);
- }
-
- $data[] = $parser->parse($block);
- }
- else {
- $data[] = $this->parseValue($values['value']);
- }
- }
- }
- elseif (preg_match('#^(?P' . sfYamlInline::REGEX_QUOTED_STRING . '|[^ \'"].*?) *\:(\s+(?P.+?))?\s*$#u', $this->currentLine, $values)) {
- $key = sfYamlInline::parseScalar($values['key']);
-
- if ('<<' === $key) {
- if (isset($values['value']) && '*' === substr($values['value'], 0, 1)) {
- $isInPlace = substr($values['value'], 1);
- if (!array_key_exists($isInPlace, $this->refs)) {
- throw new InvalidArgumentException(sprintf('Reference "%s" does not exist at line %s (%s).', $isInPlace, $this->getRealCurrentLineNb() + 1, $this->currentLine));
- }
- }
- else {
- if (isset($values['value']) && $values['value'] !== '') {
- $value = $values['value'];
- }
- else {
- $value = $this->getNextEmbedBlock();
- }
- $c = $this->getRealCurrentLineNb() + 1;
- $parser = new sfYamlParser($c);
- $parser->refs =& $this->refs;
- $parsed = $parser->parse($value);
-
- $merged = [];
- if (!is_array($parsed)) {
- throw new InvalidArgumentException(sprintf('YAML merge keys used with a scalar value instead of an array at line %s (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
- }
- elseif (isset($parsed[0])) {
- // Numeric array, merge individual elements
- foreach (array_reverse($parsed) as $parsedItem) {
- if (!is_array($parsedItem)) {
- throw new InvalidArgumentException(sprintf('Merge items must be arrays at line %s (%s).', $this->getRealCurrentLineNb() + 1, $parsedItem));
- }
- $merged = array_merge($parsedItem, $merged);
- }
- }
- else {
- // Associative array, merge
- $merged = array_merge($merged, $parsed);
- }
-
- $isProcessed = $merged;
- }
- }
- elseif (isset($values['value']) && preg_match('#^&(?P][[^ ]+) *(?P.*)#u', $values['value'], $matches)) {
- $isRef = $matches['ref'];
- $values['value'] = $matches['value'];
- }
-
- if ($isProcessed) {
- // Merge keys
- $data = $isProcessed;
- }
- // hash
- elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
- // if next line is less indented or equal, then it means that the current value is null
- if ($this->isNextLineIndented()) {
- $data[$key] = null;
- }
- else {
- $c = $this->getRealCurrentLineNb() + 1;
- $parser = new sfYamlParser($c);
- $parser->refs =& $this->refs;
- $data[$key] = $parser->parse($this->getNextEmbedBlock());
- }
- }
- else {
- if ($isInPlace) {
- $data = $this->refs[$isInPlace];
- }
- else {
- $data[$key] = $this->parseValue($values['value']);
- }
- }
- }
- else {
- // 1-liner followed by newline
- if (2 == count($this->lines) && empty($this->lines[1])) {
- $value = sfYamlInline::load($this->lines[0]);
- if (is_array($value)) {
- $first = reset($value);
- if ('*' === substr($first, 0, 1)) {
- $data = [];
- foreach ($value as $alias) {
- $data[] = $this->refs[substr($alias, 1)];
- }
- $value = $data;
- }
- }
-
- if (isset($mbEncoding)) {
- mb_internal_encoding($mbEncoding);
- }
-
- return $value;
- }
-
- switch (preg_last_error()) {
- case PREG_INTERNAL_ERROR:
- $error = 'Internal PCRE error on line';
- break;
- case PREG_BACKTRACK_LIMIT_ERROR:
- $error = 'pcre.backtrack_limit reached on line';
- break;
- case PREG_RECURSION_LIMIT_ERROR:
- $error = 'pcre.recursion_limit reached on line';
- break;
- case PREG_BAD_UTF8_ERROR:
- $error = 'Malformed UTF-8 data on line';
- break;
- case PREG_BAD_UTF8_OFFSET_ERROR:
- $error = 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point on line';
- break;
- default:
- $error = 'Unable to parse line';
- }
-
- throw new InvalidArgumentException(sprintf('%s %d (%s).', $error, $this->getRealCurrentLineNb() + 1, $this->currentLine));
- }
-
- if ($isRef) {
- $this->refs[$isRef] = end($data);
- }
- }
-
- if (isset($mbEncoding)) {
- mb_internal_encoding($mbEncoding);
- }
-
- return empty($data) ? null : $data;
- }
-
- /**
- * Returns the current line number (takes the offset into account).
- *
- * @return integer The current line number
- */
- protected function getRealCurrentLineNb() {
- return $this->currentLineNb + $this->offset;
- }
-
- /**
- * Returns the current line indentation.
- *
- * @return integer The current line indentation
- */
- protected function getCurrentLineIndentation() {
- return strlen($this->currentLine) - strlen(ltrim($this->currentLine, ' '));
- }
-
- /**
- * Returns the next embed block of YAML.
- *
- * @param integer $indentation The indent level at which the block is to be read, or null for default
- *
- * @return string A YAML string
- */
- protected function getNextEmbedBlock($indentation = null) {
- $this->moveToNextLine();
-
- if (null === $indentation) {
- $newIndent = $this->getCurrentLineIndentation();
-
- if (!$this->isCurrentLineEmpty() && 0 == $newIndent) {
- throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
- }
- }
- else {
- $newIndent = $indentation;
- }
-
- $data = [substr($this->currentLine, $newIndent)];
-
- while ($this->moveToNextLine()) {
- if ($this->isCurrentLineEmpty()) {
- if ($this->isCurrentLineBlank()) {
- $data[] = substr($this->currentLine, $newIndent);
- }
-
- continue;
- }
-
- $indent = $this->getCurrentLineIndentation();
-
- if (preg_match('#^(?P *)$#', $this->currentLine, $match)) {
- // empty line
- $data[] = $match['text'];
- }
- elseif ($indent >= $newIndent) {
- $data[] = substr($this->currentLine, $newIndent);
- }
- elseif (0 == $indent) {
- $this->moveToPreviousLine();
-
- break;
- }
- else {
- throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
- }
- }
-
- return implode("\n", $data);
- }
-
- /**
- * Moves the parser to the next line.
- */
- protected function moveToNextLine() {
- if ($this->currentLineNb >= count($this->lines) - 1) {
- return false;
- }
-
- $this->currentLine = $this->lines[++$this->currentLineNb];
-
- return true;
- }
-
- /**
- * Moves the parser to the previous line.
- */
- protected function moveToPreviousLine() {
- $this->currentLine = $this->lines[--$this->currentLineNb];
- }
-
- /**
- * Parses a YAML value.
- *
- * @param string $value A YAML value
- *
- * @return mixed A PHP value
- */
- protected function parseValue($value) {
- if ('*' === substr($value, 0, 1)) {
- if (false !== $pos = strpos($value, '#')) {
- $value = substr($value, 1, $pos - 2);
- }
- else {
- $value = substr($value, 1);
- }
-
- if (!array_key_exists($value, $this->refs)) {
- throw new InvalidArgumentException(sprintf('Reference "%s" does not exist (%s).', $value, $this->currentLine));
- }
- return $this->refs[$value];
- }
-
- if (preg_match('/^(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?$/', $value, $matches)) {
- $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';
-
- return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers)));
- }
- else {
- return sfYamlInline::load($value);
- }
- }
-
- /**
- * Parses a folded scalar.
- *
- * @param string $separator The separator that was used to begin this folded scalar (| or >)
- * @param string $indicator The indicator that was used to begin this folded scalar (+ or -)
- * @param integer $indentation The indentation that was used to begin this folded scalar
- *
- * @return string The text value
- */
- protected function parseFoldedScalar($separator, $indicator = '', $indentation = 0) {
- $separator = '|' == $separator ? "\n" : ' ';
- $text = '';
-
- $notEOF = $this->moveToNextLine();
-
- while ($notEOF && $this->isCurrentLineBlank()) {
- $text .= "\n";
-
- $notEOF = $this->moveToNextLine();
- }
-
- if (!$notEOF) {
- return '';
- }
-
- if (!preg_match('#^(?P' . ($indentation ? str_repeat(' ', $indentation) : ' +') . ')(?P.*)$#u', $this->currentLine, $matches)) {
- $this->moveToPreviousLine();
-
- return '';
- }
-
- $textIndent = $matches['indent'];
- $previousIndent = 0;
-
- $text .= $matches['text'] . $separator;
- while ($this->currentLineNb + 1 < count($this->lines)) {
- $this->moveToNextLine();
-
- if (preg_match('#^(?P {' . strlen($textIndent) . ',})(?P.+)$#u', $this->currentLine, $matches)) {
- if (' ' == $separator && $previousIndent != $matches['indent']) {
- $text = substr($text, 0, -1) . "\n";
- }
- $previousIndent = $matches['indent'];
-
- $text .= str_repeat(' ', $diff = strlen($matches['indent']) - strlen($textIndent)) . $matches['text'] . ($diff ? "\n" : $separator);
- }
- elseif (preg_match('#^(?P *)$#', $this->currentLine, $matches)) {
- $text .= preg_replace('#^ {1,' . strlen($textIndent) . '}#', '', $matches['text']) . "\n";
- }
- else {
- $this->moveToPreviousLine();
-
- break;
- }
- }
-
- if (' ' == $separator) {
- // replace last separator by a newline
- $text = preg_replace('/ (\n*)$/', "\n$1", $text);
- }
-
- switch ($indicator) {
- case '':
- $text = preg_replace('#\n+$#s', "\n", $text);
- break;
- case '+':
- break;
- case '-':
- $text = preg_replace('#\n+$#s', '', $text);
- break;
- }
-
- return $text;
- }
-
- /**
- * Returns true if the next line is indented.
- *
- * @return Boolean Returns true if the next line is indented, false otherwise
- */
- protected function isNextLineIndented() {
- $currentIndentation = $this->getCurrentLineIndentation();
- $notEOF = $this->moveToNextLine();
-
- while ($notEOF && $this->isCurrentLineEmpty()) {
- $notEOF = $this->moveToNextLine();
- }
-
- if (false === $notEOF) {
- return false;
- }
-
- $ret = false;
- if ($this->getCurrentLineIndentation() <= $currentIndentation) {
- $ret = true;
- }
-
- $this->moveToPreviousLine();
-
- return $ret;
- }
-
- /**
- * Returns true if the current line is blank or if it is a comment line.
- *
- * @return Boolean Returns true if the current line is empty or if it is a comment line, false otherwise
- */
- protected function isCurrentLineEmpty() {
- return $this->isCurrentLineBlank() || $this->isCurrentLineComment();
- }
-
- /**
- * Returns true if the current line is blank.
- *
- * @return Boolean Returns true if the current line is blank, false otherwise
- */
- protected function isCurrentLineBlank() {
- return '' == trim($this->currentLine, ' ');
- }
-
- /**
- * Returns true if the current line is a comment line.
- *
- * @return Boolean Returns true if the current line is a comment line, false otherwise
- */
- protected function isCurrentLineComment() {
- //checking explicitly the first char of the trim is faster than loops or strpos
- $ltrimmedLine = ltrim($this->currentLine, ' ');
- return $ltrimmedLine[0] === '#';
- }
-
- /**
- * Cleanups a YAML string to be parsed.
- *
- * @param string $value The input YAML string
- *
- * @return string A cleaned up YAML string
- */
- protected function cleanup($value) {
- $value = str_replace(["\r\n", "\r"], "\n", $value);
-
- if (!preg_match("#\n$#", $value)) {
- $value .= "\n";
- }
-
- // strip YAML header
- $count = 0;
- $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#su', '', $value, -1, $count);
- $this->offset += $count;
-
- // remove leading comments
- $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count);
- if ($count == 1) {
- // items have been removed, update the offset
- $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
- $value = $trimmedValue;
- }
-
- // remove start of the document marker (---)
- $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count);
- if ($count == 1) {
- // items have been removed, update the offset
- $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
- $value = $trimmedValue;
-
- // remove end of the document marker (...)
- $value = preg_replace('#\.\.\.\s*$#s', '', $value);
- }
-
- return $value;
- }
-}
]