WEB-13515 Emmet: add settings for placing $END$ at the end of template text

This commit is contained in:
Alexander Zolotov
2015-09-09 19:08:31 +03:00
parent 38f57b0d09
commit 87dbe29beb
7 changed files with 55 additions and 24 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -40,17 +40,19 @@ public class LiveTemplateBuilder {
private final List<VarOccurence> myVariableOccurrences = new ArrayList<VarOccurence>();
private final List<Marker> myMarkers = new ArrayList<Marker>();
private final int mySegmentLimit;
private final boolean myAddEndVariableAtTheEndOfTemplate;
private String myLastEndVarName;
private boolean myIsToReformat = false;
@SuppressWarnings("UnusedDeclaration")
public LiveTemplateBuilder() {
this(Registry.intValue("emmet.segments.limit"));
this(false, Registry.intValue("emmet.segments.limit"));
}
public LiveTemplateBuilder(int segmentLimit) {
public LiveTemplateBuilder(boolean addEndVariableAtTheEndOfTemplate, int segmentLimit) {
mySegmentLimit = segmentLimit;
myAddEndVariableAtTheEndOfTemplate = addEndVariableAtTheEndOfTemplate;
}
public void setIsToReformat(boolean isToReformat) {
@@ -98,22 +100,29 @@ public class LiveTemplateBuilder {
}
if (myLastEndVarName != null) {
int endOffset = -1;
Iterator<VarOccurence> it = myVariableOccurrences.iterator();
while (it.hasNext()) {
VarOccurence occurence = it.next();
if (occurence.myName.equals(myLastEndVarName)) {
endOffset = occurence.myOffset;
break;
if (myAddEndVariableAtTheEndOfTemplate) {
endOffset = myText.length();
}
else {
Iterator<VarOccurence> it = myVariableOccurrences.iterator();
while (it.hasNext()) {
VarOccurence occurence = it.next();
if (occurence.myName.equals(myLastEndVarName)) {
endOffset = occurence.myOffset;
break;
}
}
if (endOffset >= 0) {
for (Iterator<Variable> it1 = variables.iterator(); it1.hasNext(); ) {
Variable variable = it1.next();
if (myLastEndVarName.equals(variable.getName()) && variable.isAlwaysStopAt()) {
it.remove();
it1.remove();
}
}
}
}
if (endOffset >= 0) {
for (Iterator<Variable> it1 = variables.iterator(); it1.hasNext(); ) {
Variable variable = it1.next();
if (myLastEndVarName.equals(variable.getName()) && variable.isAlwaysStopAt()) {
it.remove();
it1.remove();
}
}
myVariableOccurrences.add(new VarOccurence(TemplateImpl.END, endOffset));
}
}
@@ -232,6 +232,7 @@ emmet.filters.enabled.by.default=Filters enabled by default
emmet.enable.preview=Enable &abbreviation preview
emmet.expand.abbreviation.with=Expand &abbreviation with
emmet.href.autodetect=Enable automatic &URL recognition while wrapping text with <a> tag
emmet.add.edit.point.at.the.end.of.template=Add edit &point at the end of template
title.cannot.create.html.file=Cannot create HTML file
new.html.file.action=HTML File
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,6 +35,7 @@ public class EmmetOptions implements PersistentStateComponent<EmmetOptions> {
private boolean myPreviewEnabled = false;
private Set<String> myFiltersEnabledByDefault = ContainerUtil.newHashSet();
private boolean myHrefAutoDetectEnabled = true;
private boolean myAddEditPointAtTheEndOfTemplate = false;
@NotNull
public Set<String> getFiltersEnabledByDefault() {
@@ -81,6 +82,14 @@ public class EmmetOptions implements PersistentStateComponent<EmmetOptions> {
return myHrefAutoDetectEnabled;
}
public boolean isAddEditPointAtTheEndOfTemplate() {
return myAddEditPointAtTheEndOfTemplate;
}
public void setAddEditPointAtTheEndOfTemplate(boolean addEditPointAtTheEndOfTemplate) {
myAddEditPointAtTheEndOfTemplate = addEditPointAtTheEndOfTemplate;
}
@Nullable
@Override
public EmmetOptions getState() {
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.application.options.emmet.XmlEmmetConfigurable">
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="4" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="5" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="999" height="135"/>
<xy x="20" y="20" width="999" height="140"/>
</constraints>
<properties/>
<border type="none"/>
@@ -27,7 +27,7 @@
<grid id="cdbb7" binding="myFiltersListPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
<grid row="4" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="none"/>
@@ -41,6 +41,14 @@
<text resource-bundle="messages/XmlBundle" key="emmet.href.autodetect"/>
</properties>
</component>
<component id="8349b" class="com.intellij.ui.components.JBCheckBox" binding="myAddEditPointAtTheEndOfTemplateJBCheckBox">
<constraints>
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text resource-bundle="messages/XmlBundle" key="emmet.add.edit.point.at.the.end.of.template"/>
</properties>
</component>
</children>
</grid>
</form>
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -43,6 +43,7 @@ public class XmlEmmetConfigurable implements SearchableConfigurable, Disposable,
private JBCheckBox myEnablePreviewJBCheckBox;
private JPanel myFiltersListPanel;
private JBCheckBox myEnableHrefAutodetectJBCheckBox;
private JBCheckBox myAddEditPointAtTheEndOfTemplateJBCheckBox;
private Map<String, JBCheckBox> myFilterCheckboxes = ContainerUtil.newHashMap();
@@ -97,6 +98,7 @@ public class XmlEmmetConfigurable implements SearchableConfigurable, Disposable,
return emmetOptions.isEmmetEnabled() != myEnableEmmetJBCheckBox.isSelected() ||
emmetOptions.isPreviewEnabled() != myEnablePreviewJBCheckBox.isSelected() ||
emmetOptions.isHrefAutoDetectEnabled() != myEnableHrefAutodetectJBCheckBox.isSelected() ||
emmetOptions.isAddEditPointAtTheEndOfTemplate() != myAddEditPointAtTheEndOfTemplateJBCheckBox.isSelected() ||
!emmetOptions.getFiltersEnabledByDefault().equals(enabledFilters());
}
@@ -106,6 +108,7 @@ public class XmlEmmetConfigurable implements SearchableConfigurable, Disposable,
emmetOptions.setEmmetEnabled(myEnableEmmetJBCheckBox.isSelected());
emmetOptions.setPreviewEnabled(myEnablePreviewJBCheckBox.isSelected());
emmetOptions.setHrefAutoDetectEnabled(myEnableHrefAutodetectJBCheckBox.isSelected());
emmetOptions.setAddEditPointAtTheEndOfTemplate(myAddEditPointAtTheEndOfTemplateJBCheckBox.isSelected());
emmetOptions.setFiltersEnabledByDefault(enabledFilters());
}
@@ -118,6 +121,7 @@ public class XmlEmmetConfigurable implements SearchableConfigurable, Disposable,
myEnablePreviewJBCheckBox.setSelected(emmetOptions.isPreviewEnabled());
myEnableHrefAutodetectJBCheckBox.setEnabled(emmetOptions.isEmmetEnabled());
myEnableHrefAutodetectJBCheckBox.setSelected(emmetOptions.isHrefAutoDetectEnabled());
myAddEditPointAtTheEndOfTemplateJBCheckBox.setSelected(emmetOptions.isAddEditPointAtTheEndOfTemplate());
Set<String> enabledByDefault = emmetOptions.getFiltersEnabledByDefault();
for (ZenCodingFilter filter : ZenCodingFilter.getInstances()) {
@@ -229,7 +229,7 @@ public class ZenCodingTemplate extends CustomLiveTemplateBase {
}
List<GenerationNode> genNodes = fakeParentNode.getChildren();
LiveTemplateBuilder builder = new LiveTemplateBuilder(segmentsLimit);
LiveTemplateBuilder builder = new LiveTemplateBuilder(EmmetOptions.getInstance().isAddEditPointAtTheEndOfTemplate(), segmentsLimit);
int end = -1;
for (int i = 0, genNodesSize = genNodes.size(); i < genNodesSize; i++) {
GenerationNode genNode = genNodes.get(i);
@@ -189,7 +189,7 @@ public class GenerationNode extends UserDataHolderBase {
indentStr = StringUtil.repeatSymbol(' ', tabSize);
}
LiveTemplateBuilder builder = new LiveTemplateBuilder(segmentsLimit);
LiveTemplateBuilder builder = new LiveTemplateBuilder(EmmetOptions.getInstance().isAddEditPointAtTheEndOfTemplate(), segmentsLimit);
int end = -1;
boolean hasChildren = myChildren.size() > 0;
@@ -348,7 +348,7 @@ public class GenerationNode extends UserDataHolderBase {
Map<String, String> predefinedVarValues,
String surroundedText,
int segmentsLimit) {
LiveTemplateBuilder builder = new LiveTemplateBuilder(segmentsLimit);
LiveTemplateBuilder builder = new LiveTemplateBuilder(EmmetOptions.getInstance().isAddEditPointAtTheEndOfTemplate(), segmentsLimit);
if (predefinedVarValues == null && surroundedText == null) {
return template;
}