function tokenizeSingleQuotedString(sNext, sOption, iAt) {
		var i;

		function nextChar(bConsume) {
			var c = sNext[i];

			if (c === "%" && sNext[i + 1] === "2" && sNext[i + 2] === "7") {
				c = "'";
				if (bConsume) {
					i += 2;
				}
			}
			if (bConsume) {
				i += 1;
			}
			return c;
		}

		for (i = 1; i < sNext.length; ) {
			if (nextChar(true) === "'") {
				if (nextChar(false) !== "'") {
					return sNext.slice(0, i);
				}
				nextChar(true); // consume 2nd quote
			}
		}
		throw new SyntaxError("Unterminated string at " + iAt + ": " + sOption);
	}
/**
	 * Tokenizes a string starting and ending with a single quote (which may be %-encoded).
	 * A contained single quote is escaped by doubling it.
	 *
	 * @param {string} sNext The untokenized input starting with the opening quote
	 * @param {string} sOption The option string (for an error message)
	 * @param {number} iAt The position in the option string (for an error message)
	 * @returns {string} The unconverted string including the quotes.
	 */
Tokenizes a string starting and ending with a single quote (which may be %-encoded).
A contained single quote is escaped by doubling it.

@param {string} sNext The untokenized input starting with the opening quote
@param {string} sOption The option string (for an error message)
@param {number} iAt The position in the option string (for an error message)
@returns {string} The unconverted string including the quotes.
Tokenizes a string starting and ending with a single quote ( which may be % - encoded ) . A contained single quote is escaped by doubling it . @param { string } sNext The untokenized input starting with the opening quote @param { string } sOption The option string ( for an error message ) @param { number } iAt The position in the option string ( for an error message ) @returns { string } The unconverted string including the quotes .
function tokenizeSingleQuotedString(sNext, sOption, iAt) {
		var i;
		function nextChar(bConsume) {
			var c = sNext[i];
			if (c === "%" && sNext[i + 1] === "2" && sNext[i + 2] === "7") {
				c = "'";
				if (bConsume) {
					i += 2;
				}
			}
			if (bConsume) {
				i += 1;
			}
			return c;
		}
		for (i = 1; i < sNext.length; ) {
			if (nextChar(true) === "'") {
				if (nextChar(false) !== "'") {
					return sNext.slice(0, i);
				}
				nextChar(true); 
			}
		}
		throw new SyntaxError("Unterminated string at " + iAt + ": " + sOption);
	}
function tokenizeSingleQuotedString ( sNext , sOption , iAt ) { var i ; function nextChar ( bConsume ) { var c = sNext [ i ] ; if ( c === "%" && sNext [ i + 1 ] === "2" && sNext [ i + 2 ] === "7" ) { c = "'" ; if ( bConsume ) { i += 2 ; } } if ( bConsume ) { i += 1 ; } return c ; } for ( i = 1 ; i < sNext . length ; ) { if ( nextChar ( true ) === "'" ) { if ( nextChar ( false ) !== "'" ) { return sNext . slice ( 0 , i ) ; } nextChar ( true ) ; } } throw new SyntaxError ( "Unterminated string at " + iAt + ": " + sOption ) ; }
Tokenizes a string starting and ending with a single quote (which may be %-encoded).
Tokenizes a string starting and ending with a single quote ( which may be % - encoded ) .
// consume 2nd quote