question: String parseAttributeValue ( boolean lower ) throws IOException { int delim = - 1 ; switch ( ch ) { case '\'' : case '"' : delim = ch ; ch = readCh ( ) ; break ; } while ( true ) { int c = ch ; switch ( c ) { case '\n' : ln ++ ; ch = readCh ( ) ; lfCount ++ ; if ( delim < 0 ) { return getString ( 0 ) ; } break ; case '\r' : ln ++ ; if ( ( ch = readCh ( ) ) == '\n' ) { ch = readCh ( ) ; crlfCount ++ ; } else { crCount ++ ; } if ( delim < 0 ) { return getString ( 0 ) ; } break ; case '\t' : if ( delim < 0 ) c = ' ' ; case ' ' : ch = readCh ( ) ; if ( delim < 0 ) { return getString ( 0 ) ; } break ; case '>' : case '<' : if ( delim < 0 ) { return getString ( 0 ) ; } ch = readCh ( ) ; break ; case '\'' : case '"' : ch = readCh ( ) ; if ( c == delim ) { return getString ( 0 ) ; } else if ( delim == - 1 ) { error ( "attvalerr" ) ; if ( strict || ch == ' ' ) { return getString ( 0 ) ; } else { continue ; } } break ; case '=' : if ( delim < 0 ) { error ( "attvalerr" ) ; if ( strict ) { return getString ( 0 ) ; } } ch = readCh ( ) ; break ; case '&' : if ( strict && delim < 0 ) { ch = readCh ( ) ; break ; } char data [ ] = parseEntityReference ( ) ; for ( int i = 0 ; i < data . length ; i ++ ) { c = data [ i ] ; addString ( ( lower && ( c >= 'A' ) && ( c <= 'Z' ) ) ? 'a' + c - 'A' : c ) ; } continue ; case - 1 : return getString ( 0 ) ; default : if ( lower && ( c >= 'A' ) && ( c <= 'Z' ) ) { c = 'a' + c - 'A' ; } ch = readCh ( ) ; break ; } addString ( c ) ; } }
target:  Parse attribute value. [33] 331:1