WEB-6827 Emmet "Surround with Live Template" creating wrong element

This commit is contained in:
Alexander Zolotov
2013-02-26 17:58:28 +04:00
parent a456f77736
commit 9f77f11db0
3 changed files with 14 additions and 8 deletions
@@ -75,10 +75,13 @@ public class XmlEmmetParser extends EmmetParser {
public XmlEmmetParser(List<ZenCodingToken> tokens,
CustomTemplateCallback callback,
ZenCodingGenerator generator) {
ZenCodingGenerator generator, boolean surroundWithTemplate) {
super(tokens, callback, generator);
PsiElement context = callback.getContext();
XmlTag parentTag = PsiTreeUtil.getParentOfType(context, XmlTag.class);
if (surroundWithTemplate && parentTag != null) {
parentTag = PsiTreeUtil.getParentOfType(parentTag, XmlTag.class);
}
if (parentTag != null) {
hasTagContext = true;
tagLevel.push(parentTag.getName());
@@ -67,7 +67,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate {
@Nullable
private static ZenCodingNode parse(@NotNull String text,
@NotNull CustomTemplateCallback callback,
@NotNull ZenCodingGenerator generator) {
@NotNull ZenCodingGenerator generator, @Nullable String surroundedText) {
List<ZenCodingToken> tokens = new EmmetLexer().lex(text);
if (tokens == null) {
return null;
@@ -75,7 +75,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate {
if (!validate(tokens, generator)) {
return null;
}
EmmetParser parser = generator.createParser(tokens, callback, generator);
EmmetParser parser = generator.createParser(tokens, callback, generator, surroundedText != null);
ZenCodingNode node = parser.parse();
if (parser.getIndex() != tokens.size() || node instanceof TextNode) {
return null;
@@ -93,7 +93,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate {
}
public static boolean checkTemplateKey(@NotNull String key, CustomTemplateCallback callback, @NotNull ZenCodingGenerator generator) {
return parse(key, callback, generator) != null;
return parse(key, callback, generator, null) != null;
}
public void expand(String key, @NotNull CustomTemplateCallback callback) {
@@ -158,7 +158,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate {
@NotNull CustomTemplateCallback callback,
String surroundedText,
@NotNull ZenCodingGenerator defaultGenerator) {
ZenCodingNode node = parse(key, callback, defaultGenerator);
ZenCodingNode node = parse(key, callback, defaultGenerator, surroundedText);
assert node != null;
if (surroundedText == null) {
if (node instanceof TemplateNode) {
@@ -298,7 +298,7 @@ public class ZenCodingTemplate implements CustomLiveTemplate {
CommandProcessor.getInstance().executeCommand(callback.getProject(), new Runnable() {
public void run() {
callback.fixInitialState(true);
ZenCodingNode node = parse(abbreviation, callback, defaultGenerator);
ZenCodingNode node = parse(abbreviation, callback, defaultGenerator, selection);
assert node != null;
PsiElement context = callback.getContext();
ZenCodingGenerator generator = findApplicableGenerator(node, context, true);
@@ -159,7 +159,10 @@ public abstract class ZenCodingGenerator {
}
@NotNull
public EmmetParser createParser(List<ZenCodingToken> tokens, CustomTemplateCallback callback, ZenCodingGenerator generator) {
return new XmlEmmetParser(tokens, callback, generator);
public EmmetParser createParser(List<ZenCodingToken> tokens,
CustomTemplateCallback callback,
ZenCodingGenerator generator,
boolean surroundWithTemplate) {
return new XmlEmmetParser(tokens, callback, generator, surroundWithTemplate);
}
}