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);
}
}

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 ) ; } }
parse attribute value . [ 33 ] 331 : 1
