annotate vendor/behat/mink/src/Selector/Xpath/Escaper.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Mink package.
Chris@0 5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
Chris@0 6 *
Chris@0 7 * For the full copyright and license information, please view the LICENSE
Chris@0 8 * file that was distributed with this source code.
Chris@0 9 */
Chris@0 10
Chris@0 11 namespace Behat\Mink\Selector\Xpath;
Chris@0 12
Chris@0 13 /**
Chris@0 14 * XPath escaper.
Chris@0 15 *
Chris@0 16 * @author Konstantin Kudryashov <ever.zet@gmail.com>
Chris@0 17 */
Chris@0 18 class Escaper
Chris@0 19 {
Chris@0 20 /**
Chris@0 21 * Escapes the string as a XPath literal.
Chris@0 22 *
Chris@0 23 * @param string $s
Chris@0 24 *
Chris@0 25 * @return string
Chris@0 26 */
Chris@0 27 public function escapeLiteral($s)
Chris@0 28 {
Chris@0 29 if (false === strpos($s, "'")) {
Chris@0 30 return sprintf("'%s'", $s);
Chris@0 31 }
Chris@0 32
Chris@0 33 if (false === strpos($s, '"')) {
Chris@0 34 return sprintf('"%s"', $s);
Chris@0 35 }
Chris@0 36
Chris@0 37 $string = $s;
Chris@0 38 $parts = array();
Chris@0 39 while (true) {
Chris@0 40 if (false !== $pos = strpos($string, "'")) {
Chris@0 41 $parts[] = sprintf("'%s'", substr($string, 0, $pos));
Chris@0 42 $parts[] = "\"'\"";
Chris@0 43 $string = substr($string, $pos + 1);
Chris@0 44 } else {
Chris@0 45 $parts[] = "'$string'";
Chris@0 46 break;
Chris@0 47 }
Chris@0 48 }
Chris@0 49
Chris@0 50 return sprintf('concat(%s)', implode($parts, ','));
Chris@0 51 }
Chris@0 52 }