Merge branch 'master' of git@git.labs.intellij.net:idea/community

This commit is contained in:
Denis Zhdanov
2010-05-20 15:15:44 +04:00
2 changed files with 59 additions and 18 deletions
@@ -222,6 +222,35 @@ public class CustomTemplateCallback {
myBuilder.insertText(offset, text);
}
public void insertNewLine() {
myBuilder.insertText(myOffset, "\n");
myOffset++;
}
public boolean newLineBefore() {
int i = myOffset - 1;
CharSequence text = myBuilder.getText();
while (i >= 0 && Character.isWhitespace(text.charAt(i))) {
if (text.charAt(i) == '\n') {
return true;
}
i--;
}
return i < 0;
}
public boolean newLineAfter() {
int i = myOffset;
CharSequence text = myBuilder.getText();
while (i < text.length() && Character.isWhitespace(text.charAt(i))) {
if (text.charAt(i) == '\n') {
return true;
}
i++;
}
return i == text.length();
}
public void deleteTemplateKey(String key) {
int caretAt = myEditor.getCaretModel().getOffset();
myEditor.getDocument().deleteString(caretAt - key.length(), caretAt);
@@ -29,6 +29,7 @@ import com.intellij.psi.xml.XmlTokenType;
import com.intellij.util.containers.HashMap;
import com.intellij.util.containers.HashSet;
import com.intellij.util.containers.IntArrayList;
import com.intellij.xml.util.HtmlUtil;
import org.jetbrains.annotations.Nullable;
import java.util.*;
@@ -310,27 +311,38 @@ class XmlZenCodingInterpreter {
if (token instanceof XmlTemplateToken && token.getTemplate() != null) {
XmlTemplateToken xmlTemplateToken = (XmlTemplateToken)token;
List<Pair<String, String>> attr2value = new ArrayList<Pair<String, String>>(xmlTemplateToken.getAttribute2Value());
if (attr2value.size() > 0 || XmlZenCodingTemplate.isTrueXml(callback)) {
TemplateImpl modifiedTemplate = token.getTemplate().copy();
XmlTag tag = xmlTemplateToken.getTag();
if (tag != null) {
for (Iterator<Pair<String, String>> iterator = attr2value.iterator(); iterator.hasNext();) {
Pair<String, String> pair = iterator.next();
if (tag.getAttribute(pair.first) != null) {
tag.setAttribute(pair.first, ZenCodingUtil.getValue(pair, numberInIteration));
iterator.remove();
}
TemplateImpl modifiedTemplate = token.getTemplate().copy();
XmlTag tag = xmlTemplateToken.getTag();
if (tag != null) {
for (Iterator<Pair<String, String>> iterator = attr2value.iterator(); iterator.hasNext();) {
Pair<String, String> pair = iterator.next();
if (tag.getAttribute(pair.first) != null) {
tag.setAttribute(pair.first, ZenCodingUtil.getValue(pair, numberInIteration));
iterator.remove();
}
String s = filterXml(tag, callback, filter);
assert s != null;
modifiedTemplate.setString(s);
removeVariablesWhichHasNoSegment(modifiedTemplate);
Map<String, String> predefinedValues = buildPredefinedValues(attr2value, numberInIteration, callback);
callback.expandTemplate(modifiedTemplate, predefinedValues);
return;
}
String s = filterXml(tag, callback, filter);
assert s != null;
if (HtmlUtil.isHtmlBlockTagL(tag.getName())) {
boolean newLineBefore = callback.newLineBefore();
boolean newLineAfter = callback.newLineAfter();
if (!newLineBefore || !newLineAfter) {
StringBuilder builder = new StringBuilder();
if (!newLineBefore) {
builder.append('\n');
}
builder.append(s);
if (!newLineAfter) {
builder.append('\n');
}
s = builder.toString();
}
}
modifiedTemplate.setString(s);
removeVariablesWhichHasNoSegment(modifiedTemplate);
Map<String, String> predefinedValues = buildPredefinedValues(attr2value, numberInIteration, callback);
callback.expandTemplate(modifiedTemplate, predefinedValues);
}
callback.expandTemplate(token.getTemplate(), null);
}
else {
// for CSS