@@ -65,7 +65,7 @@ public function parse($value)
65
65
}
66
66
67
67
$ isRef = $ isInPlace = $ isProcessed = false ;
68
- if (preg_match ('#^\-(\s+(?P<value>.+?))?\s*$# ' , $ this ->currentLine , $ values ))
68
+ if (preg_match ('#^\-((?P<leadspaces> \s+) (?P<value>.+?))?\s*$# ' , $ this ->currentLine , $ values ))
69
69
{
70
70
if (isset ($ values ['value ' ]) && preg_match ('#^&(?P<ref>[^ ]+) *(?P<value>.*)# ' , $ values ['value ' ], $ matches ))
71
71
{
@@ -87,13 +87,30 @@ public function parse($value)
87
87
{
88
88
$ data [] = array ($ matches [1 ] => Inline::load ($ matches [2 ]));
89
89
}
90
+ elseif (isset ($ values ['leadspaces ' ])
91
+ && ' ' == $ values ['leadspaces ' ]
92
+ && preg_match ('#^(?P<key> ' .Inline::REGEX_QUOTED_STRING .'|[^ \'"\{].*?) *\:(\s+(?P<value>.+?))?\s*$# ' , $ values ['value ' ], $ matches ))
93
+ {
94
+ // this is a compact notation element, add to next block and parse
95
+ $ c = $ this ->getRealCurrentLineNb ();
96
+ $ parser = new Parser ($ c );
97
+ $ parser ->refs =& $ this ->refs ;
98
+
99
+ $ block = $ values ['value ' ];
100
+ if (!$ this ->isNextLineIndented ())
101
+ {
102
+ $ block .= "\n" .$ this ->getNextEmbedBlock ();
103
+ }
104
+
105
+ $ data [] = $ parser ->parse ($ block );
106
+ }
90
107
else
91
108
{
92
109
$ data [] = $ this ->parseValue ($ values ['value ' ]);
93
110
}
94
111
}
95
112
}
96
- else if (preg_match ('#^(?P<key> ' .Inline::REGEX_QUOTED_STRING .'|[^ ].*?) *\:(\s+(?P<value>.+?))?\s*$# ' , $ this ->currentLine , $ values ))
113
+ else if (preg_match ('#^(?P<key> ' .Inline::REGEX_QUOTED_STRING .'|[^ \' " ].*?) *\:(\s+(?P<value>.+?))?\s*$# ' , $ this ->currentLine , $ values ))
97
114
{
98
115
$ key = Inline::parseScalar ($ values ['key ' ]);
99
116
@@ -544,10 +561,18 @@ protected function cleanup($value)
544
561
$ value = rtrim ($ value , "\n" );
545
562
546
563
// strip YAML header
547
- preg_replace ('#^\%YAML[: ][\d\.]+.*\n#s ' , '' , $ value );
564
+ $ count = 0 ;
565
+ $ value = preg_replace ('#^\%YAML[: ][\d\.]+.*\n#s ' , '' , $ value , -1 , $ count );
566
+ $ this ->offset += $ count ;
548
567
549
- // remove ---
550
- $ value = preg_replace ('#^\-\-\-.*?\n#s ' , '' , $ value );
568
+ // remove leading comments and/or ---
569
+ $ trimmedValue = preg_replace ('#^((\#.*?\n)|(\-\-\-.*?\n))*#s ' , '' , $ value , -1 , $ count );
570
+ if ($ count == 1 )
571
+ {
572
+ // items have been removed, update the offset
573
+ $ this ->offset += substr_count ($ value , "\n" ) - substr_count ($ trimmedValue , "\n" );
574
+ $ value = $ trimmedValue ;
575
+ }
551
576
552
577
return $ value ;
553
578
}
0 commit comments