zen-coding: default DIV tag support in HTML/XHTML files; tests
authorEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>
Thu, 22 Apr 2010 17:50:34 +0000 (21:50 +0400)
committerEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>
Thu, 22 Apr 2010 17:50:34 +0000 (21:50 +0400)
xml/impl/src/com/intellij/codeInsight/template/zencoding/XmlZenCodingTemplate.java
xml/impl/src/com/intellij/codeInsight/template/zencoding/ZenCodingTemplate.java

index 7f6b294d6b8a726a55c305ae007b6a2beb50192e..ab40993e31d78cd35a9f1a5032eaca528e042f17 100644 (file)
@@ -46,6 +46,7 @@ public class XmlZenCodingTemplate extends ZenCodingTemplate {
   private static final String SELECTORS = ".#[";
   private static final String ID = "id";
   private static final String CLASS = "class";
+  private static final String DEFAULT_TAG = "div";
 
   private static String getPrefix(@NotNull String templateKey) {
     for (int i = 0, n = templateKey.length(); i < n; i++) {
@@ -160,10 +161,26 @@ public class XmlZenCodingTemplate extends ZenCodingTemplate {
     return type == StdFileTypes.XHTML || type == StdFileTypes.JSPX || type == StdFileTypes.XML;
   }
 
+  private static boolean isHtml(CustomTemplateCallback callback) {
+    FileType type = callback.getFileType();
+    return type == StdFileTypes.HTML || type == StdFileTypes.XHTML;
+  }
+
   @Override
   @Nullable
   protected TemplateToken parseTemplateKey(String key, CustomTemplateCallback callback) {
     String prefix = getPrefix(key);
+    boolean useDefaultTag = false;
+    if (prefix.length() == 0) {
+      if (!isHtml(callback)) {
+        return null;
+      }
+      else {
+        useDefaultTag = true;
+        prefix = DEFAULT_TAG;
+        key = prefix + key;
+      }
+    }
     TemplateImpl template = callback.findApplicableTemplate(prefix);
     if (template == null && !isXML11ValidQName(prefix)) {
       return null;
@@ -172,6 +189,9 @@ public class XmlZenCodingTemplate extends ZenCodingTemplate {
     if (token == null) {
       return null;
     }
+    if (useDefaultTag && token.myAttribute2Value.size() == 0) {
+      return null;
+    }
     if (template != null && (token.myAttribute2Value.size() > 0 || isTrueXml(callback))) {
       assert prefix.equals(token.myKey);
       token.myTemplate = template;
index d156b1f54f612d44e1d57bf878e3a1a956b3e2d0..9f0257f01e25c78cb1afa5e6c70aba9b3647ed99 100644 (file)
@@ -68,9 +68,6 @@ public abstract class ZenCodingTemplate implements CustomLiveTemplate {
           result.add(new NumberToken(num));
         }
         else {
-          if (key.length() == 0) {
-            return null;
-          }
           TemplateToken token = parseTemplateKey(key, callback);
           if (token == null) return null;
           result.add(token);