docs: public String scanPseudoAttribute(boolean scanningTextDecl, 
                                        XMLString value) 
                  throws IOException, JspCoreException {
  
          String name = scanName();
          if (name == null) {
              throw new JspCoreException("jsp.error.xml.pseudoAttrNameExpected");
              //err.jspError("jsp.error.xml.pseudoAttrNameExpected");
          }
          skipSpaces();
          if (!skipChar('=')) {
              reportFatalError(scanningTextDecl ?
  			     "jsp.error.xml.eqRequiredInTextDecl"
                               : "jsp.error.xml.eqRequiredInXMLDecl",
  			     name);
          }
          skipSpaces();
          int quote = peekChar();
          if (quote != '\'' && quote != '"') {
              reportFatalError(scanningTextDecl ?
  			     "jsp.error.xml.quoteRequiredInTextDecl"
                               : "jsp.error.xml.quoteRequiredInXMLDecl" ,
  			     name);
          }
          scanChar();
          int c = scanLiteral(quote, value);
          if (c != quote) {
              fStringBuffer2.clear();
              do {
                  fStringBuffer2.append(value);
                  if (c != -1) {
                      if (c == '&' || c == '%' || c == '<' || c == ']') {
                          fStringBuffer2.append((char)scanChar());
                      }
                      else if (XMLChar.isHighSurrogate(c)) {
                          scanSurrogates(fStringBuffer2);
                      }
                      else if (XMLChar.isInvalid(c)) {
                          String key = scanningTextDecl
                              ? "jsp.error.xml.invalidCharInTextDecl"
  			    : "jsp.error.xml.invalidCharInXMLDecl";
                          reportFatalError(key, Integer.toString(c, 16));
                          scanChar();
                      }
                  }
                  c = scanLiteral(quote, value);
              } while (c != quote);
              fStringBuffer2.append(value);
              value.setValues(fStringBuffer2);
          }
          if (!skipChar(quote)) {
              reportFatalError(scanningTextDecl ?
  			     "jsp.error.xml.closeQuoteMissingInTextDecl"
                               : "jsp.error.xml.closeQuoteMissingInXMLDecl",
  			     name);
          }
  
          // return
          return name;
  
      }