void () { final PsiBuilder.Marker attValue = mark(); if (token() == XML_ATTRIBUTE_VALUE_START_DELIMITER) { while (true) { final IElementType tt = token(); if (tt == null || tt == XML_ATTRIBUTE_VALUE_END_DELIMITER || tt == XML_END_TAG_START || tt == XML_EMPTY_ELEMENT_END || tt == XML_START_TAG_START) { break; } if (tt == XML_BAD_CHARACTER) { final PsiBuilder.Marker error = mark(); advance(); error.error(XmlPsiBundle.message("xml.parsing.unescaped.ampersand.or.nonterminated.character.entity.reference")); } else if (tt == XML_ENTITY_REF_TOKEN) { parseReference(); } else { advance(); } } if (token() == XML_ATTRIBUTE_VALUE_END_DELIMITER) { advance(); } else { error(XmlPsiBundle.message("xml.parsing.unclosed.attribute.value")); } } else { error(XmlPsiBundle.message("xml.parsing.attribute.value.expected")); } attValue.done(XML_ATTRIBUTE_VALUE); }