bundles/org.apache.jasper.glassfish/src/org/apache/jasper/compiler/Parser.java
private String parseAttributeValue(String watch) throws JasperException {
	Mark start = reader.mark();
	Mark stop = reader.skipUntilIgnoreEsc(watch);
	if (stop == null) {
	    err.jspError(start, "jsp.error.attribute.unterminated", watch);
	}

	String ret = parseQuoted(reader.getText(start, stop));
	if (watch.length() == 1)	// quote
	    return ret;

	// putback delimiter '<%=' and '%>', since they are needed if the
	// attribute does not allow RTexpression.
	return "<%=" + ret + "%>";
    }
private String parseAttributeValue(String watch) throws JasperException {
	Mark start = reader.mark();
	Mark stop = reader.skipUntilIgnoreEsc(watch);
	if (stop == null) {
	    err.jspError(start, "jsp.error.attribute.unterminated", watch);
	}

	String ret = parseQuoted(reader.getText(start, stop));
	if (watch.length() == 1)	// quote
	    return ret;

	// putback delimiter '<%=' and '%>', since they are needed if the
	// attribute does not allow RTexpression.
	return "<%=" + ret + "%>";
    }
private String parseAttributeValue ( String watch ) throws JasperException { Mark start = reader . mark ( ) ; Mark stop = reader . skipUntilIgnoreEsc ( watch ) ; if ( stop == null ) { err . jspError ( start , "jsp.error.attribute.unterminated" , watch ) ; } String ret = parseQuoted ( reader . getText ( start , stop ) ) ; if ( watch . length ( ) == 1 ) // quote return ret ; // putback delimiter '<%=' and '%>', since they are needed if the // attribute does not allow RTexpression. return "<%=" + ret + "%>" ; }
AttributeValueDouble ::= (QuotedChar - '"')*
('"' | <TRANSLATION_ERROR>)
RTAttributeValueDouble ::= ((QuotedChar - '"')* - ((QuotedChar-'"')'%>"')
('%>"' | TRANSLATION_ERROR)
AttributeValueDouble :: = ( QuotedChar - ) * ( | <TRANSLATION_ERROR > ) RTAttributeValueDouble :: = (( QuotedChar - ) * - (( QuotedChar - ) % > ) ( % > | TRANSLATION_ERROR )