mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
WEB-28886 Unclosed p tag wreaks havoc
GitOrigin-RevId: 9b05040dc393fbb8706629c15086aa6268dbb4ef
This commit is contained in:
committed by
intellij-monorepo-bot
parent
da8fff0771
commit
7bb460c319
@@ -101,4 +101,11 @@ public class HtmlParsingTest extends XmlParsingTest {
|
||||
"<textarea>this {{text}} {area} <is></cool></textarea>");
|
||||
}
|
||||
|
||||
public void testPAutoClose() throws Exception {
|
||||
doTestHtml("<div>\n" +
|
||||
"<p><br/><div><span><p></p></span></div>\n" +
|
||||
"<P><table></table>\n" +
|
||||
"</div>\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
58
xml/tests/testData/psi/html/testPAutoClose.txt
Normal file
58
xml/tests/testData/psi/html/testPAutoClose.txt
Normal file
@@ -0,0 +1,58 @@
|
||||
HtmlFile:test.html
|
||||
PsiElement(HTML_DOCUMENT)
|
||||
PsiElement(XML_PROLOG)
|
||||
<empty list>
|
||||
HtmlTag:div
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('div')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:p
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('p')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:br
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('br')
|
||||
XmlToken:XML_EMPTY_ELEMENT_END('/>')
|
||||
HtmlTag:div
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('div')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:span
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('span')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:p
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('p')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('p')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('span')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('div')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:P
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('P')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:table
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('table')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('table')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('div')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
PsiWhiteSpace('\n')
|
||||
@@ -30,213 +30,213 @@ HtmlFile:test.html
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:CENTER
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('CENTER')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
HtmlTag:CENTER
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:FORM
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('FORM')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('onSubmit')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_START_DELIMITER('"')
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_END_DELIMITER('"')
|
||||
XmlToken:XML_NAME('CENTER')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:FONT
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('FONT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('COLOR')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('DARKBLUE')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('SIZE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('4')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
XmlToken:XML_DATA_CHARACTERS('Enter')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_DATA_CHARACTERS('the')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_DATA_CHARACTERS('User')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_DATA_CHARACTERS('Name')
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:INPUT
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('INPUT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('TYPE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('text')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('NAME')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('whichUser')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('MAXLENGTH')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('30')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:INPUT
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('INPUT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('TYPE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('SUBMIT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('VALUE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_START_DELIMITER('"')
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('Submit')
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_END_DELIMITER('"')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
HtmlTag:TABLE
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('TABLE')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('BORDER')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('1')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('BGCOLOR')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('BLACK')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
HtmlTag:TD
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('TD')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:FONT
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('FONT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('COLOR')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('RED')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('SIZE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('4')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:B
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('B')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiErrorElement:Element B is not closed
|
||||
<empty list>
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('TD')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('TABLE')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
PsiErrorElement:Element FONT is not closed
|
||||
<empty list>
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('FORM')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
PsiErrorElement:Element CENTER is not closed
|
||||
<empty list>
|
||||
HtmlTag:FORM
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('FORM')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('onSubmit')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_START_DELIMITER('"')
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_END_DELIMITER('"')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
PsiErrorElement:Element CENTER is not closed
|
||||
<empty list>
|
||||
HtmlTag:FONT
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('FONT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('COLOR')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('DARKBLUE')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('SIZE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('4')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
XmlToken:XML_DATA_CHARACTERS('Enter')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_DATA_CHARACTERS('the')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_DATA_CHARACTERS('User')
|
||||
PsiWhiteSpace(' ')
|
||||
XmlToken:XML_DATA_CHARACTERS('Name')
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:INPUT
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('INPUT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('TYPE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('text')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('NAME')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('whichUser')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('MAXLENGTH')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('30')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
HtmlTag:INPUT
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('INPUT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('TYPE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('SUBMIT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('VALUE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_START_DELIMITER('"')
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('Submit')
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_END_DELIMITER('"')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:BR
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('BR')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
HtmlTag:TABLE
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('TABLE')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('BORDER')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('1')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('BGCOLOR')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('BLACK')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
HtmlTag:TD
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('TD')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:FONT
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('FONT')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('COLOR')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('RED')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(XML_ATTRIBUTE)
|
||||
XmlToken:XML_NAME('SIZE')
|
||||
XmlToken:XML_EQ('=')
|
||||
PsiElement(XML_ATTRIBUTE_VALUE)
|
||||
XmlToken:XML_ATTRIBUTE_VALUE_TOKEN('4')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
HtmlTag:B
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('B')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiErrorElement:Element B is not closed
|
||||
<empty list>
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('TD')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n ')
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('TABLE')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
PsiErrorElement:Element FONT is not closed
|
||||
<empty list>
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('FORM')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
PsiWhiteSpace('\n')
|
||||
PsiErrorElement:Closing tag matches nothing
|
||||
XmlToken:XML_END_TAG_START('</')
|
||||
XmlToken:XML_NAME('P')
|
||||
|
||||
@@ -39,7 +39,7 @@ HtmlFile:test.html
|
||||
XmlToken:XML_START_TAG_START('<')
|
||||
XmlToken:XML_NAME('TITLE')
|
||||
XmlToken:XML_TAG_END('>')
|
||||
XmlText
|
||||
HtmlRawText
|
||||
PsiWhiteSpace('\n')
|
||||
XmlToken:XML_DATA_CHARACTERS('Index')
|
||||
PsiWhiteSpace(' ')
|
||||
|
||||
@@ -159,6 +159,9 @@ public class HtmlParsing {
|
||||
String tagName = StringUtil.toLowerCase(originalTagName);
|
||||
while (childTerminatesParentInStack(tagName)) {
|
||||
IElementType tagElementType = getHtmlTagElementType();
|
||||
if (!HtmlUtil.isOptionalEndForHtmlTagL(myTagNamesStack.peek())) {
|
||||
tag.precede().errorBefore(XmlPsiBundle.message("xml.parsing.named.element.is.not.closed", myOriginalTagNamesStack.peek()), tag);
|
||||
}
|
||||
PsiBuilder.Marker top = closeTag();
|
||||
top.doneBefore(tagElementType, tag);
|
||||
}
|
||||
|
||||
@@ -58,12 +58,12 @@ public final class HTMLControls {
|
||||
ArrayList<Control> controls = new ArrayList<>();
|
||||
for (Element child : element.getChildren()) {
|
||||
if ("control".equals(child.getName())) {
|
||||
Control control = new Control();
|
||||
control.name = child.getAttributeValue("name");
|
||||
control.startTag = TagState.valueOf(StringUtil.toUpperCase(child.getAttributeValue("startTag")));
|
||||
control.endTag = TagState.valueOf(StringUtil.toUpperCase(child.getAttributeValue("endTag")));
|
||||
control.emptyAllowed = "true".equalsIgnoreCase(child.getAttributeValue("emptyAllowed"));
|
||||
control.autoClosedBy = autoClosed(child.getAttributeValue("autoClosedBy"));
|
||||
Control control = new Control(
|
||||
child.getAttributeValue("name"),
|
||||
TagState.valueOf(StringUtil.toUpperCase(child.getAttributeValue("startTag"))),
|
||||
TagState.valueOf(StringUtil.toUpperCase(child.getAttributeValue("endTag"))),
|
||||
"true".equalsIgnoreCase(child.getAttributeValue("emptyAllowed")),
|
||||
autoClosed(child.getAttributeValue("autoClosedBy")));
|
||||
controls.add(control);
|
||||
}
|
||||
}
|
||||
@@ -79,13 +79,21 @@ public final class HTMLControls {
|
||||
return result;
|
||||
}
|
||||
|
||||
public enum TagState { REQUIRED, OPTIONAL, FORBIDDEN }
|
||||
public enum TagState {REQUIRED, OPTIONAL, FORBIDDEN}
|
||||
|
||||
public static class Control {
|
||||
public String name;
|
||||
public TagState startTag;
|
||||
public TagState endTag;
|
||||
public boolean emptyAllowed;
|
||||
public Set<String> autoClosedBy = Collections.emptySet();
|
||||
public final String name;
|
||||
public final TagState startTag;
|
||||
public final TagState endTag;
|
||||
public final boolean emptyAllowed;
|
||||
public final Set<String> autoClosedBy;
|
||||
|
||||
public Control(String name, TagState startTag, TagState endTag, boolean emptyAllowed, Set<String> autoClosedBy) {
|
||||
this.name = name;
|
||||
this.endTag = endTag;
|
||||
this.startTag = startTag;
|
||||
this.emptyAllowed = emptyAllowed;
|
||||
this.autoClosedBy = autoClosedBy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<htmlControls namespace="System.Web.UI.HtmlControls">
|
||||
<control name="A" type="HtmlAnchor" startTag="required" endTag="Required" emptyAllowed="false">
|
||||
<attribute name="href" type="%URL" />
|
||||
@@ -25,14 +25,14 @@
|
||||
<control name="body" type="HtmlGenericControl" startTag="optional" endTag="optional" emptyAllowed="false" onlyOnce="true" />
|
||||
<control name="br" type="HtmlGenericControl" startTag="required" endTag="forbidden" emptyAllowed="true"/>
|
||||
<control name="button" type="HtmlButton" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
|
||||
|
||||
<control name="Caption" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="center" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="cite" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="code" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="col" type="HtmlGenericControl" startTag="required" endTag="forbidden" emptyAllowed="true"/>
|
||||
<control name="colGroup" type="HtmlGenericControl" startTag="required" endTag="optional" emptyAllowed="false" autoClosedBy="colGroup,thead,tbody,tfoot"/>
|
||||
|
||||
|
||||
<control name="DD" type="HtmlGenericControl" startTag="required" endTag="optional" emptyAllowed="false" autoClosedBy="dt, dd"/>
|
||||
<control name="del" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false">
|
||||
<attribute name="cite" type="%URL" />
|
||||
@@ -42,7 +42,7 @@
|
||||
<control name="div" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="dl" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="dt" type="HtmlGenericControl" startTag="required" endTag="optional" emptyAllowed="false" autoClosedBy="dt, dd"/>
|
||||
|
||||
|
||||
<control name="EM" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="embed" type="HtmlGenericControl" startTag="required" endTag="forbidden" emptyAllowed="true" />
|
||||
<control name="FieldSet" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
@@ -54,19 +54,19 @@
|
||||
<attribute name="src" type="%URL" />
|
||||
</control>
|
||||
<control name="frameSet" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
|
||||
|
||||
<control name="H1" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="H2" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="H3" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="H4" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="H5" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="H6" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="H6" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="head" type="HtmlHead" startTag="optional" endTag="optional" emptyAllowed="false" onlyOnce="true" autoClosedBy="body">
|
||||
<attribute name="profile" type="%URL" />
|
||||
</control>
|
||||
<control name="hr" type="HtmlGenericControl" startTag="required" endTag="forbidden" emptyAllowed="true"/>
|
||||
<control name="html" type="HtmlGenericControl" startTag="optional" endTag="optional" emptyAllowed="false" onlyOnce="true" />
|
||||
|
||||
|
||||
<control name="I" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="IFrame" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false">
|
||||
<attribute name="src" type="%URL" />
|
||||
@@ -88,9 +88,9 @@
|
||||
<attribute name="cite" type="%URL" />
|
||||
</control>
|
||||
<control name="isIndex" type="HtmlGenericControl" startTag="required" endTag="forbidden" emptyAllowed="true"/>
|
||||
|
||||
|
||||
<control name="KBD" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
|
||||
|
||||
<control name="Label" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="legend" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="li" type="HtmlGenericControl" startTag="required" endTag="optional" emptyAllowed="false" autoClosedBy="li"/>
|
||||
@@ -106,7 +106,7 @@
|
||||
<control name="NoFrames" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="noScript" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="nobr" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
|
||||
|
||||
<control name="Object" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false">
|
||||
<attribute name="classid" type="%URL" />
|
||||
<attribute name="codebase" type="%URL" />
|
||||
@@ -116,11 +116,12 @@
|
||||
</control>
|
||||
<control name="ol" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="option" type="HtmlGenericControl" startTag="required" endTag="optional" emptyAllowed="false" autoClosedBy="option,optgroup"/>
|
||||
|
||||
<control name="P" type="HtmlGenericControl" startTag="required" endTag="optional" emptyAllowed="false" autoClosedBy="p"/>
|
||||
|
||||
<control name="P" type="HtmlGenericControl" startTag="required" endTag="optional" emptyAllowed="false"
|
||||
autoClosedBy="address,article,aside,blockquote,details,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,main,menu,nav,ol,p,pre,section,table,ul"/>
|
||||
<control name="param" type="HtmlGenericControl" startTag="required" endTag="forbidden" emptyAllowed="true"/>
|
||||
<control name="pre" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
|
||||
|
||||
<control name="Q" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false">
|
||||
<attribute name="cite" type="%URL" />
|
||||
</control>
|
||||
@@ -139,7 +140,7 @@
|
||||
<control name="style" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="sub" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="sup" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
|
||||
|
||||
<control name="Table" type="HtmlTable" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="tbody" type="HtmlGenericControl" startTag="optional" endTag="optional" emptyAllowed="false" autoClosedBy="tfoot, thead, tbody"/>
|
||||
<control name="td" type="HtmlTableCell" startTag="required" endTag="optional" emptyAllowed="false" autoClosedBy="td, th"/>
|
||||
@@ -151,10 +152,10 @@
|
||||
<control name="tr" type="HtmlTableRow" startTag="required" endTag="optional" emptyAllowed="false" autoClosedBy="tr"/>
|
||||
<control name="track" type="HtmlGenericControl" startTag="required" endTag="forbidden" emptyAllowed="true" />
|
||||
<control name="tt" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
|
||||
|
||||
<control name="U" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="UL" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
|
||||
|
||||
<control name="VAR" type="HtmlGenericControl" startTag="required" endTag="required" emptyAllowed="false"/>
|
||||
<control name="wbr" type="HtmlGenericControl" startTag="required" endTag="forbidden" emptyAllowed="true"/>
|
||||
</htmlControls>
|
||||
Reference in New Issue
Block a user