fixes in django template formatter

This commit is contained in:
Dmitry Trofimov
2010-07-06 22:43:34 +04:00
parent ad22c7a4fd
commit 0099a2c463
@@ -16,6 +16,7 @@
package com.intellij.xml.util;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.xml.XmlTag;
import com.intellij.psi.xml.XmlToken;
@@ -58,8 +59,9 @@ public class XmlTagUtil extends XmlTagUtilBase {
if (text == null) return null;
String offensiveChars = "<>&\n";
final int textLength = text.length();
if(textLength > 0 && (Character.isWhitespace(text.charAt(0)) || Character.isWhitespace(text.charAt(textLength - 1))))
if (textLength > 0 && (Character.isWhitespace(text.charAt(0)) || Character.isWhitespace(text.charAt(textLength - 1)))) {
return "<![CDATA[" + text + "]]>";
}
for (int i = 0; i < offensiveChars.length(); i++) {
char c = offensiveChars.charAt(i);
if (text.indexOf(c) != -1) {
@@ -109,9 +111,9 @@ public class XmlTagUtil extends XmlTagUtilBase {
ASTNode current = node.getFirstChildNode();
IElementType elementType;
while(current != null
&& (elementType = current.getElementType()) != XmlTokenType.XML_NAME
&& elementType != XmlTokenType.XML_TAG_NAME){
while (current != null
&& (elementType = current.getElementType()) != XmlTokenType.XML_NAME
&& elementType != XmlTokenType.XML_TAG_NAME) {
current = current.getTreeNext();
}
return current == null ? null : (XmlToken)current.getPsi();
@@ -125,9 +127,10 @@ public class XmlTagUtil extends XmlTagUtilBase {
ASTNode current = node.getLastChildNode();
ASTNode prev = current;
while(current != null){
while (current != null) {
final IElementType elementType = prev.getElementType();
if((elementType == XmlTokenType.XML_NAME || elementType == XmlTokenType.XML_TAG_NAME) && current.getElementType() == XmlTokenType.XML_END_TAG_START) {
if ((elementType == XmlTokenType.XML_NAME || elementType == XmlTokenType.XML_TAG_NAME) &&
current.getElementType() == XmlTokenType.XML_END_TAG_START) {
return (XmlToken)prev.getPsi();
}
@@ -138,7 +141,7 @@ public class XmlTagUtil extends XmlTagUtilBase {
return null;
}
@NotNull
@NotNull
public static TextRange getTrimmedValueRange(final @NotNull XmlTag tag) {
XmlTagValue tagValue = tag.getValue();
final String text = tagValue.getText();
@@ -147,4 +150,40 @@ public class XmlTagUtil extends XmlTagUtilBase {
final int startOffset = tagValue.getTextRange().getStartOffset() - tag.getTextRange().getStartOffset() + index;
return new TextRange(startOffset, startOffset + trimmed.length());
}
@Nullable
public static TextRange getStartTagRange(@NotNull XmlTag tag) {
XmlToken tagName = getStartTagNameElement(tag);
return getTag(tagName, XmlTokenType.XML_START_TAG_START);
}
@Nullable
public static TextRange getEndTagRange(@NotNull XmlTag tag) {
XmlToken tagName = getEndTagNameElement(tag);
return getTag(tagName, XmlTokenType.XML_END_TAG_START);
}
private static TextRange getTag(XmlToken tagName, IElementType tagStart) {
if (tagName != null) {
PsiElement s = tagName.getPrevSibling();
while (s != null && s.getNode().getElementType() != tagStart) {
s = s.getPrevSibling();
}
PsiElement f = tagName.getNextSibling();
while (f != null &&
!(f.getNode().getElementType() == XmlTokenType.XML_TAG_END ||
f.getNode().getElementType() == XmlTokenType.XML_EMPTY_ELEMENT_END)) {
f = f.getNextSibling();
}
if (s != null && f != null) {
return new TextRange(s.getTextRange().getStartOffset(), f.getTextRange().getEndOffset());
}
}
return null;
}
}