X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fparser%2FparserTest.inc;h=55e93e2112f846236f1821e89a9bc1b09dcb7c04;hb=be7ee7d714b63f8bf5c07944b7eab9f6af2d9a1d;hp=39fa09e24d23ef59b26a96359b571a90b57569e5;hpb=ecb50a2269fdcce2aba975f824803b6eaf8051fb;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/parser/parserTest.inc b/tests/parser/parserTest.inc index 39fa09e24d..55e93e2112 100644 --- a/tests/parser/parserTest.inc +++ b/tests/parser/parserTest.inc @@ -642,48 +642,65 @@ class ParserTest { // foo="bar baz" // foo=[[bar baz]] // foo=bar,"baz quux" - $regex = '/\b - ([\w-]+) # Key - \b - (?:\s* - = # First sub-value - \s* - ( - " - [^"]* # Quoted val - " + // foo={...json...} + $defs = '(?(DEFINE) + (? # Quoted string + " + (?:[^\\\\"] | \\\\.)* + " + ) + (? + \{ # Open bracket + (?: + [^"{}] | # Not a quoted string or object, or + (?&qstr) | # A quoted string, or + (?&json) # A json object (recursively) + )* + \} # Close bracket + ) + (? + (?: + (?&qstr) # Quoted val | \[\[ [^]]* # Link target \]\] | [\w-]+ # Plain word + | + (?&json) # JSON object + ) + ) + )'; + $regex = '/'.$defs.'\b + (?[\w-]+) # Key + \b + (?:\s* + = # First sub-value + \s* + (? + (?&value) + (?:\s* + , # Sub-vals 1..N + \s* + (?&value) + )* ) - (?:\s* - , # Sub-vals 1..N - \s* - ( - "[^"]*" # Quoted val - | - \[\[[^]]*\]\] # Link target - | - [\w-]+ # Plain word - ) - )* )? /x'; + $valueregex = '/'.$defs.'(?&value)/x'; if ( preg_match_all( $regex, $instring, $matches, PREG_SET_ORDER ) ) { foreach ( $matches as $bits ) { - array_shift( $bits ); - $key = strtolower( array_shift( $bits ) ); - if ( count( $bits ) == 0 ) { + $key = strtolower( $bits[ 'k' ] ); + if ( !isset( $bits[ 'v' ] ) ) { $opts[$key] = true; - } elseif ( count( $bits ) == 1 ) { - $opts[$key] = $this->cleanupOption( array_shift( $bits ) ); } else { - // Array! - $opts[$key] = array_map( array( $this, 'cleanupOption' ), $bits ); + preg_match_all( $valueregex, $bits[ 'v' ], $vmatches ); + $opts[$key] = array_map( array( $this, 'cleanupOption' ), $vmatches[0] ); + if ( count( $opts[$key] ) == 1 ) { + $opts[$key] = $opts[$key][0]; + } } } } @@ -692,12 +709,16 @@ class ParserTest { private function cleanupOption( $opt ) { if ( substr( $opt, 0, 1 ) == '"' ) { - return substr( $opt, 1, -1 ); + return stripcslashes( substr( $opt, 1, -1 ) ); } if ( substr( $opt, 0, 2 ) == '[[' ) { return substr( $opt, 2, -2 ); } + + if ( substr( $opt, 0, 1 ) == '{' ) { + return FormatJson::decode( $opt, true ); + } return $opt; }