import com.intellij.psi.xml.XmlTokenType;
import com.intellij.util.containers.HashMap;
import com.intellij.util.containers.HashSet;
+import com.sun.org.apache.xml.internal.utils.XML11Char;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
}
}
- private static boolean isTemplateKeyPart(char c) {
- return !Character.isWhitespace(c) && OPERATIONS.indexOf(c) < 0;
- }
-
private static int parseNonNegativeInt(@NotNull String s) {
try {
return Integer.parseInt(s);
List<MyToken> result = new ArrayList<MyToken>();
for (int i = 0, n = text.length(); i < n; i++) {
char c = text.charAt(i);
- if (i == n - 1 || OPERATIONS.indexOf(c) >= 0) {
+ if (i == n - 1 || (i < n - 2 && OPERATIONS.indexOf(c) >= 0)) {
String key = templateKeyBuilder.toString();
templateKeyBuilder = new StringBuilder();
int num = parseNonNegativeInt(key);
return null;
}
String prefix = getPrefix(key);
- if (!callback.isLiveTemplateApplicable(prefix) && prefix.indexOf('<') >= 0) {
+ if (!callback.isLiveTemplateApplicable(prefix) && !XML11Char.isXML11ValidQName(prefix)) {
return null;
}
MyTemplateToken token = parseSelectors(key);
}
result.add(i < n - 1 ? new MyOperationToken(c) : new MyMarkerToken());
}
- else if (isTemplateKeyPart(c)) {
+ else if (!Character.isWhitespace(c)) {
templateKeyBuilder.append(c);
}
else {