Esempio n. 1
0
 private void parseAttribute() throws IOException {
   int token;
   if (pushbackToken == -1) {
     token = yylex();
   } else {
     token = pushbackToken;
     pushbackToken = -1;
   }
   // Token WORD - start of an attribute
   String attributeName = text();
   skipWhiteSpace();
   if (pushbackToken == -1) {
     token = yylex();
   } else {
     token = pushbackToken;
     pushbackToken = -1;
   }
   if (token == Parser.EQUALS) {
     // Token "=" - the attribute has a value
     skipWhiteSpace();
     if (pushbackToken == -1) {
       token = yylex();
     } else {
       token = pushbackToken;
       pushbackToken = -1;
     }
     if (token == Parser.QUOTED) {
       // token QUOTED - a quoted literal as the attribute value
       parsedAttribute(attributeName, text(), true);
     } else if (token == Parser.WORD || token == Parser.SLASH) {
       // unquoted word
       attributeBuffer.clear();
       attributeBuffer.append(text());
       while (true) {
         int next;
         if (pushbackToken == -1) {
           next = yylex();
         } else {
           next = pushbackToken;
           pushbackToken = -1;
         }
         if (next == Parser.WORD || next == Parser.EQUALS || next == Parser.SLASH) {
           attributeBuffer.append(text());
         } else {
           pushBack(next);
           break;
         }
       }
       parsedAttribute(attributeName, attributeBuffer.toString(), false);
     } else if (token == Parser.SLASH || token == Parser.GT) {
       // no more attributes
       pushBack(token);
     } else if (token == 0) {
       return;
     } else {
       reportError("Illegal attribute value", line(), column());
     }
   } else if (token == Parser.SLASH || token == Parser.GT || token == Parser.WORD) {
     // it was a value-less HTML style attribute
     parsedAttribute(attributeName, null, false);
     pushBack(token);
   } else if (token == 0) {
     return;
   } else {
     reportError("Illegal attribute name", line(), column());
   }
 }