@@ -44,12 +44,13 @@ public function __construct($offset = 0)
44
44
* @param string $value A YAML string
45
45
* @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
46
46
* @param Boolean $objectSupport true if object support is enabled, false otherwise
47
+ * @param Boolean $objectForMap true if maps should return a stdClass instead of array()
47
48
*
48
49
* @return mixed A PHP value
49
50
*
50
51
* @throws ParseException If the YAML is not valid
51
52
*/
52
- public function parse ($ value , $ exceptionOnInvalidType = false , $ objectSupport = false )
53
+ public function parse ($ value , $ exceptionOnInvalidType = false , $ objectSupport = false , $ objectForMap = false )
53
54
{
54
55
$ this ->currentLineNb = -1 ;
55
56
$ this ->currentLine = '' ;
@@ -93,7 +94,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
93
94
$ c = $ this ->getRealCurrentLineNb () + 1 ;
94
95
$ parser = new Parser ($ c );
95
96
$ parser ->refs =& $ this ->refs ;
96
- $ data [] = $ parser ->parse ($ this ->getNextEmbedBlock (), $ exceptionOnInvalidType , $ objectSupport );
97
+ $ data [] = $ parser ->parse ($ this ->getNextEmbedBlock (), $ exceptionOnInvalidType , $ objectSupport, $ objectForMap );
97
98
} else {
98
99
if (isset ($ values ['leadspaces ' ])
99
100
&& ' ' == $ values ['leadspaces ' ]
@@ -109,9 +110,9 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
109
110
$ block .= "\n" .$ this ->getNextEmbedBlock ($ this ->getCurrentLineIndentation () + 2 );
110
111
}
111
112
112
- $ data [] = $ parser ->parse ($ block , $ exceptionOnInvalidType , $ objectSupport );
113
+ $ data [] = $ parser ->parse ($ block , $ exceptionOnInvalidType , $ objectSupport, $ objectForMap );
113
114
} else {
114
- $ data [] = $ this ->parseValue ($ values ['value ' ], $ exceptionOnInvalidType , $ objectSupport );
115
+ $ data [] = $ this ->parseValue ($ values ['value ' ], $ exceptionOnInvalidType , $ objectSupport, $ objectForMap );
115
116
}
116
117
}
117
118
} elseif (preg_match ('#^(?P<key> ' .Inline::REGEX_QUOTED_STRING .'|[^ \'"\[\{].*?) *\:(\s+(?P<value>.+?))?\s*$#u ' , $ this ->currentLine , $ values ) && false === strpos ($ values ['key ' ],' # ' )) {
@@ -121,7 +122,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
121
122
$ context = 'mapping ' ;
122
123
123
124
// force correct settings
124
- Inline::parse (null , $ exceptionOnInvalidType , $ objectSupport );
125
+ Inline::parse (null , $ exceptionOnInvalidType , $ objectSupport, $ objectForMap );
125
126
try {
126
127
$ key = Inline::parseScalar ($ values ['key ' ]);
127
128
} catch (ParseException $ e ) {
@@ -146,7 +147,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
146
147
$ c = $ this ->getRealCurrentLineNb () + 1 ;
147
148
$ parser = new Parser ($ c );
148
149
$ parser ->refs =& $ this ->refs ;
149
- $ parsed = $ parser ->parse ($ value , $ exceptionOnInvalidType , $ objectSupport );
150
+ $ parsed = $ parser ->parse ($ value , $ exceptionOnInvalidType , $ objectSupport, $ objectForMap );
150
151
151
152
$ merged = array ();
152
153
if (!is_array ($ parsed )) {
@@ -183,21 +184,21 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport =
183
184
$ c = $ this ->getRealCurrentLineNb () + 1 ;
184
185
$ parser = new Parser ($ c );
185
186
$ parser ->refs =& $ this ->refs ;
186
- $ data [$ key ] = $ parser ->parse ($ this ->getNextEmbedBlock (), $ exceptionOnInvalidType , $ objectSupport );
187
+ $ data [$ key ] = $ parser ->parse ($ this ->getNextEmbedBlock (), $ exceptionOnInvalidType , $ objectSupport, $ objectForMap );
187
188
}
188
189
} else {
189
190
if ($ isInPlace ) {
190
191
$ data = $ this ->refs [$ isInPlace ];
191
192
} else {
192
- $ data [$ key ] = $ this ->parseValue ($ values ['value ' ], $ exceptionOnInvalidType , $ objectSupport );
193
+ $ data [$ key ] = $ this ->parseValue ($ values ['value ' ], $ exceptionOnInvalidType , $ objectSupport, $ objectForMap );
193
194
}
194
195
}
195
196
} else {
196
197
// 1-liner optionally followed by newline
197
198
$ lineCount = count ($ this ->lines );
198
199
if (1 === $ lineCount || (2 === $ lineCount && empty ($ this ->lines [1 ]))) {
199
200
try {
200
- $ value = Inline::parse ($ this ->lines [0 ], $ exceptionOnInvalidType , $ objectSupport );
201
+ $ value = Inline::parse ($ this ->lines [0 ], $ exceptionOnInvalidType , $ objectSupport, $ objectForMap );
201
202
} catch (ParseException $ e ) {
202
203
$ e ->setParsedLine ($ this ->getRealCurrentLineNb () + 1 );
203
204
$ e ->setSnippet ($ this ->currentLine );
@@ -376,12 +377,13 @@ private function moveToPreviousLine()
376
377
* @param string $value A YAML value
377
378
* @param Boolean $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise
378
379
* @param Boolean $objectSupport True if object support is enabled, false otherwise
380
+ * @param Boolean $objectForMap true if maps should return a stdClass instead of array()
379
381
*
380
382
* @return mixed A PHP value
381
383
*
382
384
* @throws ParseException When reference does not exist
383
385
*/
384
- private function parseValue ($ value , $ exceptionOnInvalidType , $ objectSupport )
386
+ private function parseValue ($ value , $ exceptionOnInvalidType , $ objectSupport, $ objectForMap )
385
387
{
386
388
if (0 === strpos ($ value , '* ' )) {
387
389
if (false !== $ pos = strpos ($ value , '# ' )) {
@@ -404,7 +406,7 @@ private function parseValue($value, $exceptionOnInvalidType, $objectSupport)
404
406
}
405
407
406
408
try
1241
{
407
- return Inline::parse ($ value , $ exceptionOnInvalidType , $ objectSupport );
409
+ return Inline::parse ($ value , $ exceptionOnInvalidType , $ objectSupport, $ objectForMap );
408
410
} catch (ParseException $ e ) {
409
411
$ e ->setParsedLine ($ this ->getRealCurrentLineNb () + 1 );
410
412
$ e ->setSnippet ($ this ->currentLine );
0 commit comments