summaryrefslogtreecommitdiff
path: root/xml/impl
diff options
context:
space:
mode:
Diffstat (limited to 'xml/impl')
-rw-r--r--xml/impl/src/com/intellij/application/options/XmlAutoImportOptionsProvider.form4
-rw-r--r--xml/impl/src/com/intellij/application/options/emmet/EmmetOptions.java38
-rw-r--r--xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.form26
-rw-r--r--xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.java50
-rw-r--r--xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java2
-rw-r--r--xml/impl/src/com/intellij/codeInsight/completion/XmlNoVariantsDelegator.java4
-rw-r--r--xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/encoding/XmlEncodingReference.java77
-rw-r--r--xml/impl/src/com/intellij/codeInsight/editorActions/XmlEqTypedHandler.java26
-rw-r--r--xml/impl/src/com/intellij/codeInsight/editorActions/XmlGtTypedHandler.java17
-rw-r--r--xml/impl/src/com/intellij/codeInsight/editorActions/XmlSlashTypedHandler.java4
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewAction.java4
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java3
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewUtil.java2
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java19
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/filters/BemEmmetFilter.java12
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/filters/CommentZenCodingFilter.java8
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/filters/EscapeZenCodingFilter.java8
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/filters/SingleLineEmmetFilter.java8
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/filters/TrimZenCodingFilter.java22
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/filters/XslZenCodingFilter.java10
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/filters/ZenCodingFilter.java15
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/generators/XmlZenCodingGenerator.java7
-rw-r--r--xml/impl/src/com/intellij/ide/actions/CreateHtmlFileAction.java4
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/StartBrowserPanel.java22
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java29
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java7
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java12
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java2
-rw-r--r--xml/impl/src/com/intellij/javaee/MapExternalResourceDialog.java4
-rw-r--r--xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java2
-rw-r--r--xml/impl/src/com/intellij/xml/util/documentation/HtmlDocumentationProvider.java70
-rw-r--r--xml/impl/src/com/intellij/xml/util/documentation/XHtmlDocumentationProvider.java2
32 files changed, 285 insertions, 235 deletions
diff --git a/xml/impl/src/com/intellij/application/options/XmlAutoImportOptionsProvider.form b/xml/impl/src/com/intellij/application/options/XmlAutoImportOptionsProvider.form
index cd42e379619c..1a633fc60e83 100644
--- a/xml/impl/src/com/intellij/application/options/XmlAutoImportOptionsProvider.form
+++ b/xml/impl/src/com/intellij/application/options/XmlAutoImportOptionsProvider.form
@@ -14,17 +14,17 @@
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
- <border type="etched" title="XML"/>
<clientProperties>
<BorderFactoryClass class="java.lang.String" value="com.intellij.ui.IdeBorderFactory$PlainSmallWithIndent"/>
</clientProperties>
+ <border type="etched" title="XML"/>
<children>
<component id="5cbfc" class="javax.swing.JCheckBox" binding="myShowAutoImportPopups" default-binding="true">
<constraints>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
- <text resource-bundle="messages/ApplicationBundle" key="checkbox.show.import.popup"/>
+ <text value="Show import popup"/>
</properties>
</component>
</children>
diff --git a/xml/impl/src/com/intellij/application/options/emmet/EmmetOptions.java b/xml/impl/src/com/intellij/application/options/emmet/EmmetOptions.java
index 1cf7a7730173..6781db72e93a 100644
--- a/xml/impl/src/com/intellij/application/options/emmet/EmmetOptions.java
+++ b/xml/impl/src/com/intellij/application/options/emmet/EmmetOptions.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -15,6 +15,8 @@
*/
package com.intellij.application.options.emmet;
+import com.intellij.codeInsight.template.emmet.filters.BemEmmetFilter;
+import com.intellij.codeInsight.template.emmet.filters.ZenCodingFilter;
import com.intellij.codeInsight.template.impl.TemplateSettings;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.components.*;
@@ -26,11 +28,8 @@ import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.Map;
+import java.util.Set;
-/**
- * User: zolotov
- * Date: 2/20/13
- */
@State(
name = "EmmetOptions",
storages = {
@@ -39,24 +38,46 @@ import java.util.Map;
)}
)
public class EmmetOptions implements PersistentStateComponent<EmmetOptions>, ExportableComponent {
+ /**
+ * @deprecated delete after IDEA 14
+ */
private boolean myBemFilterEnabledByDefault = false;
private boolean myEmmetEnabled = true;
private int myEmmetExpandShortcut = TemplateSettings.TAB_CHAR;
private boolean myFuzzySearchEnabled = true;
private boolean myAutoInsertCssPrefixedEnabled = true;
private boolean myPreviewEnabled = false;
+ private Set<String> myFiltersEnabledByDefault = ContainerUtil.newHashSet();
@NotNull
private Map<String, Integer> prefixes = ContainerUtil.newHashMap();
-
+ /**
+ * @deprecated delete after IDEA 14
+ */
public boolean isBemFilterEnabledByDefault() {
return myBemFilterEnabledByDefault;
}
+ /**
+ * @deprecated delete after IDEA 14
+ */
public void setBemFilterEnabledByDefault(boolean enableBemFilterByDefault) {
myBemFilterEnabledByDefault = enableBemFilterByDefault;
}
+ @NotNull
+ public Set<String> getFiltersEnabledByDefault() {
+ return myFiltersEnabledByDefault;
+ }
+
+ public void setFiltersEnabledByDefault(@NotNull Set<String> filtersEnabledByDefault) {
+ myFiltersEnabledByDefault = filtersEnabledByDefault;
+ }
+
+ public boolean isFilterEnabledByDefault(@NotNull ZenCodingFilter filter) {
+ return myFiltersEnabledByDefault.contains(filter.getSuffix());
+ }
+
public void setEmmetExpandShortcut(int emmetExpandShortcut) {
myEmmetExpandShortcut = emmetExpandShortcut;
}
@@ -126,6 +147,11 @@ public class EmmetOptions implements PersistentStateComponent<EmmetOptions>, Exp
@Override
public void loadState(final EmmetOptions state) {
XmlSerializerUtil.copyBean(state, this);
+
+ // todo delete after IDEA 14
+ if (myFiltersEnabledByDefault.isEmpty() && myBemFilterEnabledByDefault) {
+ myFiltersEnabledByDefault.add(BemEmmetFilter.SUFFIX);
+ }
}
public static EmmetOptions getInstance() {
diff --git a/xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.form b/xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.form
index 0c8dec3afcac..ec4cafb26fd0 100644
--- a/xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.form
+++ b/xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.form
@@ -19,14 +19,6 @@
</clientProperties>
<border type="none" title="XML"/>
<children>
- <component id="9ed4c" class="com.intellij.ui.components.JBCheckBox" binding="myEnableBEMFilterJBCheckBox" default-binding="true">
- <constraints>
- <grid row="1" 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.enable.bem.filter"/>
- </properties>
- </component>
<component id="446a3" class="com.intellij.ui.components.JBCheckBox" binding="myEnableEmmetJBCheckBox" default-binding="true">
<constraints>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
@@ -37,12 +29,28 @@
</component>
<component id="c52c1" class="com.intellij.ui.components.JBCheckBox" binding="myEnablePreviewJBCheckBox">
<constraints>
- <grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
+ <grid row="1" 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.enable.preview"/>
</properties>
</component>
+ <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="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ </constraints>
+ <properties/>
+ <border type="none"/>
+ <children>
+ <component id="3282c" class="com.intellij.ui.CheckBoxList" binding="myFiltersCheckBoxList">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ </constraints>
+ <properties/>
+ </component>
+ </children>
+ </grid>
</children>
</grid>
<vspacer id="27c08">
diff --git a/xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.java b/xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.java
index babbfc1d3046..764d74f94375 100644
--- a/xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.java
+++ b/xml/impl/src/com/intellij/application/options/emmet/XmlEmmetConfigurable.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -15,34 +15,46 @@
*/
package com.intellij.application.options.emmet;
+import com.intellij.codeInsight.template.emmet.filters.ZenCodingFilter;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.UnnamedConfigurable;
+import com.intellij.ui.CheckBoxList;
+import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.components.JBCheckBox;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
+import com.intellij.xml.XmlBundle;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.util.Set;
-/**
- * User: zolotov
- * Date: 2/20/13
- */
public class XmlEmmetConfigurable implements UnnamedConfigurable, Disposable, Configurable.NoScroll {
- private JBCheckBox myEnableBEMFilterJBCheckBox;
private JPanel myPanel;
private JBCheckBox myEnableEmmetJBCheckBox;
private JBCheckBox myEnablePreviewJBCheckBox;
+ private CheckBoxList<ZenCodingFilter> myFiltersCheckBoxList;
+ private JPanel myFiltersListPanel;
public XmlEmmetConfigurable() {
myEnableEmmetJBCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean selected = myEnableEmmetJBCheckBox.isSelected();
- myEnableBEMFilterJBCheckBox.setEnabled(selected);
myEnablePreviewJBCheckBox.setEnabled(selected);
+ myFiltersCheckBoxList.setEnabled(selected);
+ }
+ });
+ myFiltersListPanel.setBorder(IdeBorderFactory.createTitledBorder(XmlBundle.message("emmet.filters.enabled.by.default"), false));
+ myFiltersCheckBoxList.setItems(ZenCodingFilter.getInstances(), new Function<ZenCodingFilter, String>() {
+ @Override
+ public String fun(ZenCodingFilter filter) {
+ return filter.getDisplayName();
}
});
}
@@ -62,29 +74,43 @@ public class XmlEmmetConfigurable implements UnnamedConfigurable, Disposable, Co
EmmetOptions emmetOptions = EmmetOptions.getInstance();
return emmetOptions.isEmmetEnabled() != myEnableEmmetJBCheckBox.isSelected() ||
emmetOptions.isPreviewEnabled() != myEnablePreviewJBCheckBox.isSelected() ||
- emmetOptions.isBemFilterEnabledByDefault() != myEnableBEMFilterJBCheckBox.isSelected();
+ !emmetOptions.getFiltersEnabledByDefault().equals(enabledFilters());
}
-
@Override
public void apply() throws ConfigurationException {
EmmetOptions emmetOptions = EmmetOptions.getInstance();
emmetOptions.setEmmetEnabled(myEnableEmmetJBCheckBox.isSelected());
- emmetOptions.setBemFilterEnabledByDefault(myEnableBEMFilterJBCheckBox.isSelected());
emmetOptions.setPreviewEnabled(myEnablePreviewJBCheckBox.isSelected());
+ emmetOptions.setFiltersEnabledByDefault(enabledFilters());
}
+
@Override
public void reset() {
EmmetOptions emmetOptions = EmmetOptions.getInstance();
myEnableEmmetJBCheckBox.setSelected(emmetOptions.isEmmetEnabled());
- myEnableBEMFilterJBCheckBox.setEnabled(emmetOptions.isEmmetEnabled());
- myEnableBEMFilterJBCheckBox.setSelected(emmetOptions.isBemFilterEnabledByDefault());
myEnablePreviewJBCheckBox.setEnabled(emmetOptions.isEmmetEnabled());
myEnablePreviewJBCheckBox.setSelected(emmetOptions.isPreviewEnabled());
+
+ Set<String> enabledByDefault = emmetOptions.getFiltersEnabledByDefault();
+ for (ZenCodingFilter filter : ZenCodingFilter.getInstances()) {
+ myFiltersCheckBoxList.setItemSelected(filter, enabledByDefault.contains(filter.getSuffix()));
+ }
}
@Override
public void disposeUIResources() {
}
+
+ @NotNull
+ private Set<String> enabledFilters() {
+ Set<String> result = ContainerUtil.newHashSet();
+ for (ZenCodingFilter filter : ZenCodingFilter.getInstances()) {
+ if (myFiltersCheckBoxList.isItemSelected(filter)) {
+ result.add(filter.getSuffix());
+ }
+ }
+ return result;
+ }
}
diff --git a/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java b/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java
index 86a2155124dd..cc066a921447 100644
--- a/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java
+++ b/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java
@@ -122,7 +122,7 @@ public class XmlCompletionContributor extends CompletionContributor {
}
@Override
- public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) {
+ public void fillCompletionVariants(@NotNull final CompletionParameters parameters, @NotNull final CompletionResultSet result) {
super.fillCompletionVariants(parameters, result);
if (result.isStopped()) {
return;
diff --git a/xml/impl/src/com/intellij/codeInsight/completion/XmlNoVariantsDelegator.java b/xml/impl/src/com/intellij/codeInsight/completion/XmlNoVariantsDelegator.java
index 9166b67ab532..da991ac048f3 100644
--- a/xml/impl/src/com/intellij/codeInsight/completion/XmlNoVariantsDelegator.java
+++ b/xml/impl/src/com/intellij/codeInsight/completion/XmlNoVariantsDelegator.java
@@ -15,6 +15,8 @@
*/
package com.intellij.codeInsight.completion;
+import org.jetbrains.annotations.NotNull;
+
/**
* @author Dmitry Avdeev
* Date: 12/19/11
@@ -22,7 +24,7 @@ package com.intellij.codeInsight.completion;
public class XmlNoVariantsDelegator extends CompletionContributor {
@Override
- public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) {
+ public void fillCompletionVariants(@NotNull final CompletionParameters parameters, @NotNull final CompletionResultSet result) {
final boolean empty = result.runRemainingContributors(parameters, true).isEmpty();
if (!empty && parameters.getInvocationCount() == 0) {
diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/encoding/XmlEncodingReference.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/encoding/XmlEncodingReference.java
index d6ab939090fe..3515297f31de 100644
--- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/encoding/XmlEncodingReference.java
+++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/encoding/XmlEncodingReference.java
@@ -17,58 +17,22 @@ package com.intellij.codeInsight.daemon.impl.analysis.encoding;
import com.intellij.codeInsight.daemon.EmptyResolveMessageProvider;
import com.intellij.codeInsight.daemon.XmlErrorMessages;
-import com.intellij.codeInsight.lookup.LookupElement;
-import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.openapi.util.TextRange;
-import com.intellij.openapi.vfs.CharsetToolkit;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiReference;
import com.intellij.psi.xml.XmlAttributeValue;
-import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
/**
* @author cdr
*/
-public class XmlEncodingReference implements PsiReference, EmptyResolveMessageProvider, Comparable<XmlEncodingReference> {
- private final XmlAttributeValue myValue;
-
- private final String myCharsetName;
- private final TextRange myRangeInElement;
+public class XmlEncodingReference extends EncodingReference implements EmptyResolveMessageProvider, Comparable<XmlEncodingReference> {
private final int myPriority;
public XmlEncodingReference(XmlAttributeValue value, final String charsetName, final TextRange rangeInElement, int priority) {
- myValue = value;
- myCharsetName = charsetName;
- myRangeInElement = rangeInElement;
+ super(value, charsetName, rangeInElement);
myPriority = priority;
}
@Override
- public PsiElement getElement() {
- return myValue;
- }
-
- @Override
- public TextRange getRangeInElement() {
- return myRangeInElement;
- }
-
- @Override
- @Nullable
- public PsiElement resolve() {
- return CharsetToolkit.forName(myCharsetName) == null ? null : myValue;
- //if (ApplicationManager.getApplication().isUnitTestMode()) return myValue; // tests do not have full JDK
- //String fqn = charset.getClass().getName();
- //return myValue.getManager().findClass(fqn, GlobalSearchScope.allScope(myValue.getProject()));
- }
-
- @Override
@NotNull
public String getUnresolvedMessagePattern() {
//noinspection UnresolvedPropertyKey
@@ -76,43 +40,6 @@ public class XmlEncodingReference implements PsiReference, EmptyResolveMessagePr
}
@Override
- @NotNull
- public String getCanonicalText() {
- return myCharsetName;
- }
-
- @Override
- public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException {
- return null;
- }
-
- @Override
- public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException {
- return null;
- }
-
- @Override
- public boolean isReferenceTo(PsiElement element) {
- return false;
- }
-
- @Override
- @NotNull
- public Object[] getVariants() {
- Charset[] charsets = CharsetToolkit.getAvailableCharsets();
- List<LookupElement> suggestions = new ArrayList<LookupElement>(charsets.length);
- for (Charset charset : charsets) {
- suggestions.add(LookupElementBuilder.create(charset.name()).withCaseSensitivity(false));
- }
- return suggestions.toArray(new LookupElement[suggestions.size()]);
- }
-
- @Override
- public boolean isSoft() {
- return false;
- }
-
- @Override
public int compareTo(@NotNull XmlEncodingReference ref) {
return myPriority - ref.myPriority;
}
diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlEqTypedHandler.java b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlEqTypedHandler.java
index 43084679f455..656a061b9b4a 100644
--- a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlEqTypedHandler.java
+++ b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlEqTypedHandler.java
@@ -18,20 +18,16 @@ package com.intellij.codeInsight.editorActions;
import com.intellij.application.options.editor.WebEditorOptions;
import com.intellij.codeInsight.AutoPopupController;
import com.intellij.lang.xml.XMLLanguage;
-import com.intellij.openapi.editor.Caret;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.xml.XmlAttribute;
-import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
-import java.util.List;
-
public class XmlEqTypedHandler extends TypedHandlerDelegate {
- private final List<Caret> caretsForInsertingQuotes = ContainerUtil.newSmartList();
+ private boolean needToInsertQuotes = false;
@Override
public Result beforeCharTyped(char c, Project project, Editor editor, PsiFile file, FileType fileType) {
@@ -39,12 +35,10 @@ public class XmlEqTypedHandler extends TypedHandlerDelegate {
if (WebEditorOptions.getInstance().isInsertQuotesForAttributeValue()) {
boolean inXml = file.getLanguage() instanceof XMLLanguage || file.getViewProvider().getBaseLanguage() instanceof XMLLanguage;
if (c == '=' && inXml) {
- for(Caret caret : editor.getCaretModel().getAllCarets()) {
- PsiElement at = file.findElementAt(caret.getOffset() - 1);
- PsiElement atParent = at != null ? at.getParent() : null;
- if(atParent instanceof XmlAttribute && ((XmlAttribute)atParent).getValueElement() == null) {
- caretsForInsertingQuotes.add(caret);
- }
+ PsiElement at = file.findElementAt(editor.getCaretModel().getOffset() - 1);
+ PsiElement atParent = at != null ? at.getParent() : null;
+ if(atParent instanceof XmlAttribute && ((XmlAttribute)atParent).getValueElement() == null) {
+ needToInsertQuotes = atParent instanceof XmlAttribute && ((XmlAttribute)atParent).getValueElement() == null;
}
}
}
@@ -54,15 +48,13 @@ public class XmlEqTypedHandler extends TypedHandlerDelegate {
@Override
public Result charTyped(char c, Project project, @NotNull Editor editor, @NotNull PsiFile file) {
- for (Caret caret : caretsForInsertingQuotes) {
- int offset = caret.getOffset();
+ if (needToInsertQuotes) {
+ int offset = editor.getCaretModel().getOffset();
editor.getDocument().insertString(offset, "\"\"");
- caret.moveToOffset(offset + 1);
- }
- if (editor.getCaretModel().getAllCarets().size() == caretsForInsertingQuotes.size()) {
+ editor.getCaretModel().moveToOffset(offset + 1);
AutoPopupController.getInstance(project).scheduleAutoPopup(editor);
}
- caretsForInsertingQuotes.clear();
+ needToInsertQuotes = false;
return super.charTyped(c, project, editor, file);
}
}
diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlGtTypedHandler.java b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlGtTypedHandler.java
index 2c0143ebeda6..bde429676d2a 100644
--- a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlGtTypedHandler.java
+++ b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlGtTypedHandler.java
@@ -20,7 +20,6 @@ import com.intellij.codeInsight.highlighting.BraceMatchingUtil;
import com.intellij.lang.ASTNode;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Caret;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorModificationUtil;
import com.intellij.openapi.editor.ScrollType;
@@ -94,7 +93,7 @@ public class XmlGtTypedHandler extends TypedHandlerDelegate {
if (tokenType == XmlTokenType.XML_TAG_END ||
tokenType == XmlTokenType.XML_EMPTY_ELEMENT_END && element.getTextOffset() == offset - 1) {
- EditorModificationUtil.moveAllCaretsRelatively(editor, 1);
+ EditorModificationUtil.moveCaretRelatively(editor, 1);
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
return Result.STOP;
}
@@ -155,7 +154,7 @@ public class XmlGtTypedHandler extends TypedHandlerDelegate {
element.getPrevSibling() !=null &&
element.getPrevSibling().getText().equals("<")) {
// tag is started and there is another text in the end
- EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor, "</" + element.getText() + ">", false, 0);
+ EditorModificationUtil.insertStringAtCaret(editor, "</" + element.getText() + ">", false, 0);
}
return Result.CONTINUE;
}
@@ -205,7 +204,7 @@ public class XmlGtTypedHandler extends TypedHandlerDelegate {
Collection<TextRange> cdataReformatRanges = null;
final XmlElementDescriptor descriptor = tag.getDescriptor();
- EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor, "</" + name + ">", false, 0);
+ EditorModificationUtil.insertStringAtCaret(editor, "</" + name + ">", false, 0);
if (descriptor instanceof XmlElementDescriptorWithCDataContent) {
final XmlElementDescriptorWithCDataContent cDataContainer = (XmlElementDescriptorWithCDataContent)descriptor;
@@ -214,12 +213,10 @@ public class XmlGtTypedHandler extends TypedHandlerDelegate {
if (cDataContainer.requiresCdataBracesInContext(tag)) {
@NonNls final String cDataStart = "><![CDATA[";
final String inserted = cDataStart + "\n]]>";
- EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor, inserted, false, cDataStart.length());
- for (Caret caret : editor.getCaretModel().getAllCarets()) {
- int caretOffset = caret.getOffset();
- if (caretOffset >= cDataStart.length()) {
- cdataReformatRanges.add(TextRange.from(caretOffset - cDataStart.length(), inserted.length() + 1));
- }
+ EditorModificationUtil.insertStringAtCaret(editor, inserted, false, cDataStart.length());
+ int caretOffset = editor.getCaretModel().getOffset();
+ if (caretOffset >= cDataStart.length()) {
+ cdataReformatRanges.add(TextRange.from(caretOffset - cDataStart.length(), inserted.length() + 1));
}
}
}
diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlSlashTypedHandler.java b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlSlashTypedHandler.java
index fbfc6df08044..c5e0ff307a94 100644
--- a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlSlashTypedHandler.java
+++ b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlSlashTypedHandler.java
@@ -106,7 +106,7 @@ public class XmlSlashTypedHandler extends TypedHandlerDelegate {
}
}
}
- EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor, tag.getName() + ">", false);
+ EditorModificationUtil.insertStringAtCaret(editor, tag.getName() + ">", false);
return Result.STOP;
}
}
@@ -133,7 +133,7 @@ public class XmlSlashTypedHandler extends TypedHandlerDelegate {
if (XmlUtil.getTokenOfType(tag, XmlTokenType.XML_EMPTY_ELEMENT_END) != null) return Result.CONTINUE;
if (PsiTreeUtil.getParentOfType(element, XmlAttributeValue.class) != null) return Result.CONTINUE;
- EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(editor, ">", false);
+ EditorModificationUtil.insertStringAtCaret(editor, ">", false);
return Result.STOP;
}
return Result.CONTINUE;
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewAction.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewAction.java
index f7f5fe50d58d..2bfb6fad8a7a 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewAction.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewAction.java
@@ -55,10 +55,10 @@ public class EmmetPreviewAction extends BaseCodeInsightAction implements DumbAwa
@Override
protected boolean isValidForFile(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
- int offset = editor.getCaretModel().getOffset();
return super.isValidForFile(project, editor, file) &&
file instanceof XmlFile &&
- ZenCodingTemplate.findApplicableDefaultGenerator(CustomTemplateCallback.getContext(file, offset), false) != null;
+ ZenCodingTemplate.findApplicableDefaultGenerator(CustomTemplateCallback.getContext(file, CustomTemplateCallback.getOffset(editor)),
+ false) != null;
}
@Override
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java
index 8d07047fc4d6..edde5a83a6d6 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java
@@ -65,7 +65,7 @@ public class EmmetPreviewHint extends LightweightHint implements Disposable {
@Override
public void editorReleased(@NotNull EditorFactoryEvent event) {
if (event.getEditor() == myParentEditor || event.getEditor() == myEditor || event.getEditor() == topLevelEditor) {
- hide();
+ Disposer.dispose(EmmetPreviewHint.this);
}
}
}, this);
@@ -176,6 +176,7 @@ public class EmmetPreviewHint extends LightweightHint implements Disposable {
maxHeight > contentSize.getHeight() ? (int)size.getHeight() : maxHeight);
}
+ @NotNull
@Override
public Insets getInsets() {
return new Insets(1, 2, 0, 0);
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewUtil.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewUtil.java
index 948739d57b96..af106929bcea 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewUtil.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewUtil.java
@@ -61,7 +61,7 @@ public class EmmetPreviewUtil {
if (generator != null && generator instanceof XmlZenCodingGenerator) {
final String templatePrefix = new ZenCodingTemplate().computeTemplateKeyWithoutContextChecking(callback);
if (templatePrefix != null) {
- ZenCodingTemplate.expand(templatePrefix, callback, null, generator, Collections.<ZenCodingFilter>emptyList(), expandPrimitiveAbbreviations, 0);
+ ZenCodingTemplate.expand(templatePrefix, callback, generator, Collections.<ZenCodingFilter>emptyList(), expandPrimitiveAbbreviations, 0);
TemplateImpl template = generatedTemplate.get();
String templateText = template != null ? template.getTemplateText() : null;
if (!StringUtil.isEmpty(templateText)) {
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java
index 46d5a5640f53..b0d623683912 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java
@@ -124,7 +124,7 @@ public class ZenCodingTemplate extends CustomLiveTemplateBase {
public void expand(@NotNull String key, @NotNull CustomTemplateCallback callback) {
ZenCodingGenerator defaultGenerator = findApplicableDefaultGenerator(callback.getContext(), false);
assert defaultGenerator != null;
- expand(key, callback, null, defaultGenerator, Collections.<ZenCodingFilter>emptyList(), true, Registry.intValue("emmet.segments.limit"));
+ expand(key, callback, defaultGenerator, Collections.<ZenCodingFilter>emptyList(), true, Registry.intValue("emmet.segments.limit"));
}
@Nullable
@@ -179,15 +179,15 @@ public class ZenCodingTemplate extends CustomLiveTemplateBase {
}
- public static void expand(@NotNull String key, @NotNull CustomTemplateCallback callback, @Nullable String surroundedText,
+ public static void expand(@NotNull String key, @NotNull CustomTemplateCallback callback,
@NotNull ZenCodingGenerator defaultGenerator,
@NotNull Collection<? extends ZenCodingFilter> extraFilters,
boolean expandPrimitiveAbbreviations, int segmentsLimit) {
- final ZenCodingNode node = parse(key, callback, defaultGenerator, surroundedText);
+ final ZenCodingNode node = parse(key, callback, defaultGenerator, null);
if (node == null) {
return;
}
- if (surroundedText == null && node instanceof TemplateNode) {
+ if (node instanceof TemplateNode) {
if (key.equals(((TemplateNode)node).getTemplateToken().getKey()) && callback.findApplicableTemplates(key).size() > 1) {
TemplateManagerImpl templateManager = (TemplateManagerImpl)callback.getTemplateManager();
Map<TemplateImpl, String> template2Argument = templateManager.findMatchingTemplates(callback.getFile(), callback.getEditor(), null, TemplateSettings.getInstance());
@@ -204,13 +204,8 @@ public class ZenCodingTemplate extends CustomLiveTemplateBase {
List<ZenCodingFilter> filters = getFilters(node, context);
filters.addAll(extraFilters);
-
- if (surroundedText == null) {
- callback.deleteTemplateKey(key);
- // commit is required. otherwise injections placed after caret will be broken
- PsiDocumentManager.getInstance(callback.getProject()).commitDocument(callback.getEditor().getDocument());
- }
- expand(node, generator, filters, surroundedText, callback, expandPrimitiveAbbreviations, segmentsLimit);
+ callback.deleteTemplateKey(key);
+ expand(node, generator, filters, null, callback, expandPrimitiveAbbreviations, segmentsLimit);
}
private static void expand(ZenCodingNode node,
@@ -514,7 +509,7 @@ public class ZenCodingTemplate extends CustomLiveTemplateBase {
if (!regularTemplateWithSamePrefixExists) {
// exclude perfect matches with existing templates because LiveTemplateCompletionContributor handles it
final Collection<SingleLineEmmetFilter> extraFilters = ContainerUtil.newLinkedList(new SingleLineEmmetFilter());
- expand(templatePrefix, callback, null, generator, extraFilters, false, 0);
+ expand(templatePrefix, callback, generator, extraFilters, false, 0);
if (!generatedTemplate.isNull()) {
final TemplateImpl template = generatedTemplate.get();
template.setKey(templatePrefix);
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/BemEmmetFilter.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/BemEmmetFilter.java
index 64d097d54777..e9de53d23d2e 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/BemEmmetFilter.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/BemEmmetFilter.java
@@ -20,7 +20,6 @@ import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableSet;
-import com.intellij.application.options.emmet.EmmetOptions;
import com.intellij.codeInsight.template.emmet.nodes.GenerationNode;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.util.Couple;
@@ -51,6 +50,8 @@ import static com.google.common.collect.Lists.newLinkedList;
* And documentation here: http://docs.emmet.io/filters/bem/
*/
public class BemEmmetFilter extends ZenCodingFilter {
+ public static final String SUFFIX = "bem";
+
private static final Key<BemState> BEM_STATE = Key.create("BEM_STATE");
private static final String ELEMENT_SEPARATOR = "__";
@@ -95,13 +96,14 @@ public class BemEmmetFilter extends ZenCodingFilter {
@NotNull
@Override
- public String getSuffix() {
- return "bem";
+ public String getDisplayName() {
+ return "BEM";
}
+ @NotNull
@Override
- public boolean isAppliedByDefault(@NotNull PsiElement context) {
- return EmmetOptions.getInstance().isBemFilterEnabledByDefault();
+ public String getSuffix() {
+ return SUFFIX;
}
@Override
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/CommentZenCodingFilter.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/CommentZenCodingFilter.java
index 82b6235a53c9..d2a7662dcbcb 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/CommentZenCodingFilter.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/CommentZenCodingFilter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -68,4 +68,10 @@ public class CommentZenCodingFilter extends ZenCodingFilter {
public boolean isMyContext(@NotNull PsiElement context) {
return context.getLanguage() instanceof XMLLanguage;
}
+
+ @NotNull
+ @Override
+ public String getDisplayName() {
+ return "Comment tags";
+ }
}
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/EscapeZenCodingFilter.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/EscapeZenCodingFilter.java
index 3249b5a156e4..d07654699e34 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/EscapeZenCodingFilter.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/EscapeZenCodingFilter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2014 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,4 +43,10 @@ public class EscapeZenCodingFilter extends ZenCodingFilter {
public boolean isMyContext(@NotNull PsiElement context) {
return context.getLanguage() instanceof XMLLanguage;
}
+
+ @NotNull
+ @Override
+ public String getDisplayName() {
+ return "Escape";
+ }
}
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/SingleLineEmmetFilter.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/SingleLineEmmetFilter.java
index acd047a26d1f..443db5edd88a 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/SingleLineEmmetFilter.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/SingleLineEmmetFilter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -57,4 +57,10 @@ public class SingleLineEmmetFilter extends ZenCodingFilter {
public boolean isMyContext(@NotNull PsiElement context) {
return context.getLanguage() instanceof XMLLanguage;
}
+
+ @NotNull
+ @Override
+ public String getDisplayName() {
+ return "Single line";
+ }
}
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/TrimZenCodingFilter.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/TrimZenCodingFilter.java
index 1c6369244074..ceb0d1dd61b9 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/TrimZenCodingFilter.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/TrimZenCodingFilter.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.intellij.codeInsight.template.emmet.filters;
import com.intellij.codeInsight.template.emmet.nodes.GenerationNode;
@@ -31,6 +46,12 @@ public class TrimZenCodingFilter extends ZenCodingFilter {
@NotNull
@Override
+ public String getDisplayName() {
+ return "Trim line markers";
+ }
+
+ @NotNull
+ @Override
public String filterText(@NotNull String text, @NotNull TemplateToken token) {
XmlDocument document = token.getFile().getDocument();
if (document != null) {
@@ -65,7 +86,6 @@ public class TrimZenCodingFilter extends ZenCodingFilter {
final String surroundedText = node.getSurroundedText();
if (surroundedText != null) {
node.setSurroundedText(PATTERN.matcher(surroundedText).replaceAll(""));
- } else if(node.getTemplateToken() == TemplateToken.EMPTY_TEMPLATE_TOKEN) {
}
for (GenerationNode child : node.getChildren()) {
doFilter(child);
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/XslZenCodingFilter.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/XslZenCodingFilter.java
index 685497f7bcd9..e97b72ed662b 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/XslZenCodingFilter.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/XslZenCodingFilter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -90,6 +90,12 @@ public class XslZenCodingFilter extends ZenCodingFilter {
@Override
public boolean isAppliedByDefault(@NotNull PsiElement context) {
- return XslTextContextType.isXslOrXsltFile(context.getContainingFile());
+ return XslTextContextType.isXslOrXsltFile(context.getContainingFile()) || super.isAppliedByDefault(context);
+ }
+
+ @NotNull
+ @Override
+ public String getDisplayName() {
+ return "XSL tuning";
}
}
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/ZenCodingFilter.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/ZenCodingFilter.java
index f5057f3e6d9c..1e4ffa713009 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/ZenCodingFilter.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/filters/ZenCodingFilter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -15,6 +15,7 @@
*/
package com.intellij.codeInsight.template.emmet.filters;
+import com.intellij.application.options.emmet.EmmetOptions;
import com.intellij.codeInsight.template.emmet.nodes.GenerationNode;
import com.intellij.codeInsight.template.emmet.tokens.TemplateToken;
import com.intellij.openapi.extensions.ExtensionPointName;
@@ -29,10 +30,9 @@ import java.util.List;
* @author Eugene.Kudelevsky
*/
public abstract class ZenCodingFilter {
- public static final ExtensionPointName<ZenCodingFilter> EP_NAME =
- new ExtensionPointName<ZenCodingFilter>("com.intellij.xml.zenCodingFilter");
+ public static final ExtensionPointName<ZenCodingFilter> EP_NAME = new ExtensionPointName<ZenCodingFilter>("com.intellij.xml.zenCodingFilter");
- private static final ZenCodingFilter[] ourStandartFilters = new ZenCodingFilter[]{
+ private static final ZenCodingFilter[] OUR_STANDARD_FILTERS = new ZenCodingFilter[]{
new XslZenCodingFilter(),
new CommentZenCodingFilter(),
new EscapeZenCodingFilter(),
@@ -57,12 +57,15 @@ public abstract class ZenCodingFilter {
public abstract boolean isMyContext(@NotNull PsiElement context);
public boolean isAppliedByDefault(@NotNull PsiElement context) {
- return false;
+ return EmmetOptions.getInstance().isFilterEnabledByDefault(this);
}
+
+ @NotNull
+ public abstract String getDisplayName();
public static List<ZenCodingFilter> getInstances() {
List<ZenCodingFilter> generators = new ArrayList<ZenCodingFilter>();
- Collections.addAll(generators, ourStandartFilters);
+ Collections.addAll(generators, OUR_STANDARD_FILTERS);
Collections.addAll(generators, EP_NAME.getExtensions());
return generators;
}
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/XmlZenCodingGenerator.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/XmlZenCodingGenerator.java
index 62e752312126..ef57f5ed4e49 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/XmlZenCodingGenerator.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/XmlZenCodingGenerator.java
@@ -24,6 +24,7 @@ import com.intellij.openapi.util.Couple;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
+import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlDocument;
import com.intellij.psi.xml.XmlFile;
@@ -92,8 +93,7 @@ public abstract class XmlZenCodingGenerator extends ZenCodingGenerator {
public String computeTemplateKey(@NotNull CustomTemplateCallback callback) {
Editor editor = callback.getEditor();
int currentOffset = editor.getCaretModel().getOffset();
- int startOffset = editor.getDocument().getLineStartOffset(editor.getCaretModel().getLogicalPosition().line);
-
+ int startOffset = Math.min(editor.getDocument().getLineStartOffset(editor.getDocument().getLineNumber(currentOffset)), currentOffset);
CharSequence documentText = editor.getDocument().getCharsSequence();
PsiElement prevVisibleLeaf = callback.getContext();
while (prevVisibleLeaf != null) {
@@ -101,7 +101,8 @@ public abstract class XmlZenCodingGenerator extends ZenCodingGenerator {
if (textRange.getEndOffset() <= startOffset) {
break;
}
- if (prevVisibleLeaf.getNode().getElementType() == XmlTokenType.XML_TAG_END) {
+ IElementType prevType = prevVisibleLeaf.getNode().getElementType();
+ if (prevType == XmlTokenType.XML_TAG_END || prevType == XmlTokenType.XML_EMPTY_ELEMENT_END) {
startOffset = textRange.getEndOffset();
break;
}
diff --git a/xml/impl/src/com/intellij/ide/actions/CreateHtmlFileAction.java b/xml/impl/src/com/intellij/ide/actions/CreateHtmlFileAction.java
index cbf690cf4ceb..5ac605b5d450 100644
--- a/xml/impl/src/com/intellij/ide/actions/CreateHtmlFileAction.java
+++ b/xml/impl/src/com/intellij/ide/actions/CreateHtmlFileAction.java
@@ -43,8 +43,8 @@ public class CreateHtmlFileAction extends CreateFileFromTemplateAction implement
protected void buildDialog(Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
builder
.setTitle(XmlBundle.message("new.html.file.action"))
- .addKind("HTML file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_HTML5_TEMPLATE_NAME)
- .addKind("HTML4 file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_HTML_TEMPLATE_NAME)
+ .addKind("HTML 5 file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_HTML5_TEMPLATE_NAME)
+ .addKind("HTML 4 file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_HTML_TEMPLATE_NAME)
.addKind("XHTML file", StdFileTypes.XHTML.getIcon(), FileTemplateManager.INTERNAL_XHTML_TEMPLATE_NAME);
}
diff --git a/xml/impl/src/com/intellij/ide/browsers/StartBrowserPanel.java b/xml/impl/src/com/intellij/ide/browsers/StartBrowserPanel.java
index 342a274c0b30..603746bb3c60 100644
--- a/xml/impl/src/com/intellij/ide/browsers/StartBrowserPanel.java
+++ b/xml/impl/src/com/intellij/ide/browsers/StartBrowserPanel.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.intellij.ide.browsers;
import com.intellij.ide.DataManager;
@@ -141,6 +156,13 @@ public class StartBrowserPanel {
return browserSettings;
}
+ public void setFromSettings(StartBrowserSettings settings) {
+ setSelected(settings.isSelected());
+ setUrl(settings.getUrl());
+ myStartJavaScriptDebuggerCheckBox.setSelected(settings.isStartJavaScriptDebugger());
+ myBrowserSelector.setSelected(settings.getBrowser());
+ }
+
public static void setupUrlField(@NotNull TextFieldWithBrowseButton field, @NotNull final Project project) {
FileChooserDescriptor descriptor = new FileChooserDescriptor(true, false, false, false, false, false) {
@Override
diff --git a/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java b/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java
index 7800d8821778..a2d78ccb898b 100644
--- a/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java
+++ b/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -17,10 +17,7 @@ package com.intellij.ide.browsers;
import com.intellij.openapi.components.*;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.util.Condition;
-import com.intellij.openapi.util.Conditions;
-import com.intellij.openapi.util.JDOMUtil;
-import com.intellij.openapi.util.ModificationTracker;
+import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.SmartList;
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
@@ -29,13 +26,10 @@ import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
@State(name = "WebBrowsersConfiguration", storages = {@Storage(file = StoragePathMacros.APP_CONFIG + "/web-browsers.xml")})
-public class WebBrowserManager implements PersistentStateComponent<Element>, ModificationTracker {
+public class WebBrowserManager extends SimpleModificationTracker implements PersistentStateComponent<Element> {
private static final Logger LOG = Logger.getInstance(WebBrowserManager.class);
// default standard browser ID must be constant across all IDE versions on all machines for all users
@@ -48,8 +42,6 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
private List<ConfigurableWebBrowser> browsers;
- private long modificationCount;
-
DefaultBrowser defaultBrowser = DefaultBrowser.SYSTEM;
public WebBrowserManager() {
@@ -87,7 +79,7 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
public Element getState() {
Element state = new Element("state");
if (defaultBrowser != DefaultBrowser.SYSTEM) {
- state.setAttribute("default", defaultBrowser.name().toLowerCase());
+ state.setAttribute("default", defaultBrowser.name().toLowerCase(Locale.ENGLISH));
}
for (ConfigurableWebBrowser browser : browsers) {
@@ -185,7 +177,7 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
String defaultValue = element.getAttributeValue("default");
if (!StringUtil.isEmpty(defaultValue)) {
try {
- defaultBrowser = DefaultBrowser.valueOf(defaultValue.toUpperCase());
+ defaultBrowser = DefaultBrowser.valueOf(defaultValue.toUpperCase(Locale.ENGLISH));
}
catch (IllegalArgumentException e) {
LOG.warn(e);
@@ -245,7 +237,7 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
void setList(@NotNull List<ConfigurableWebBrowser> value) {
browsers = value;
- modificationCount++;
+ incModificationCount();
}
@NotNull
@@ -286,7 +278,7 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
final BrowserSpecificSettings specificSettings) {
final ConfigurableWebBrowser browser = new ConfigurableWebBrowser(id, family, name, path, active, specificSettings);
browsers.add(browser);
- modificationCount++;
+ incModificationCount();
return browser;
}
@@ -371,9 +363,4 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
}
return null;
}
-
- @Override
- public long getModificationCount() {
- return modificationCount;
- }
} \ No newline at end of file
diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java
index b01bcdfd9b52..8ec2a2e55b67 100644
--- a/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java
+++ b/xml/impl/src/com/intellij/ide/browsers/actions/BaseOpenInBrowserAction.java
@@ -84,12 +84,11 @@ public abstract class BaseOpenInBrowserAction extends DumbAwareAction {
StringBuilder builder = new StringBuilder(description);
builder.append(" (");
Shortcut[] shortcuts = KeymapManager.getInstance().getActiveKeymap().getShortcuts("WebOpenInAction");
- if (shortcuts.length > 0) {
- builder.append(KeymapUtil.getShortcutText(shortcuts[0]));
- }
+ boolean exists = shortcuts.length > 0;
+ if (exists) builder.append(KeymapUtil.getShortcutText(shortcuts[0]));
if (HtmlUtil.isHtmlFile(result.first.getFile())) {
- builder.append(", hold Shift to open URL of local file");
+ builder.append(exists ? ", " : "").append("hold Shift to open URL of local file");
}
builder.append(')');
description = builder.toString();
diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java
index 2d5409fd6974..5dd70c03ec77 100644
--- a/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java
+++ b/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java
@@ -18,9 +18,7 @@ package com.intellij.ide.browsers.actions;
import com.intellij.icons.AllIcons;
import com.intellij.ide.browsers.WebBrowser;
import com.intellij.ide.browsers.WebBrowserManager;
-import com.intellij.openapi.actionSystem.ActionManager;
-import com.intellij.openapi.actionSystem.AnAction;
-import com.intellij.openapi.actionSystem.ComputableActionGroup;
+import com.intellij.openapi.actionSystem.*;
import com.intellij.psi.util.CachedValueProvider;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -32,6 +30,10 @@ public abstract class OpenInBrowserBaseGroupAction extends ComputableActionGroup
protected OpenInBrowserBaseGroupAction(boolean popup) {
super(popup);
+ Presentation p = getTemplatePresentation();
+ p.setText("Open in _Browser");
+ p.setDescription("Open selected file in browser");
+ p.setIcon(AllIcons.Nodes.PpWeb);
}
@NotNull
@@ -75,4 +77,8 @@ public abstract class OpenInBrowserBaseGroupAction extends ComputableActionGroup
super(false);
}
}
+
+ public void update(@NotNull AnActionEvent e) {
+ e.getPresentation().setVisible(!ActionGroupUtil.isGroupEmpty(this, e));
+ }
} \ No newline at end of file
diff --git a/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java b/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java
index 5647e69af22c..5cd056f869d9 100644
--- a/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java
+++ b/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java
@@ -62,7 +62,7 @@ public class WebBrowserServiceImpl extends WebBrowserService {
}
}
}
- return virtualFile instanceof LightVirtualFile ? Collections.<Url>emptySet() : Collections.singleton(Urls.newFromVirtualFile(virtualFile));
+ return virtualFile instanceof LightVirtualFile || !request.getFile().getViewProvider().isPhysical() ? Collections.<Url>emptySet() : Collections.singleton(Urls.newFromVirtualFile(virtualFile));
}
@Nullable
diff --git a/xml/impl/src/com/intellij/javaee/MapExternalResourceDialog.java b/xml/impl/src/com/intellij/javaee/MapExternalResourceDialog.java
index e09101ab5cbe..62196a18e0bf 100644
--- a/xml/impl/src/com/intellij/javaee/MapExternalResourceDialog.java
+++ b/xml/impl/src/com/intellij/javaee/MapExternalResourceDialog.java
@@ -26,6 +26,7 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
+import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
@@ -105,7 +106,7 @@ public class MapExternalResourceDialog extends DialogWrapper {
ColoredTreeCellRenderer renderer = new ColoredTreeCellRenderer() {
@Override
- public void customizeCellRenderer(JTree tree,
+ public void customizeCellRenderer(@NotNull JTree tree,
Object value,
boolean selected,
boolean expanded,
@@ -142,6 +143,7 @@ public class MapExternalResourceDialog extends DialogWrapper {
});
myExplorer = new FileSystemTreeImpl(project, new FileChooserDescriptor(true, false, false, false, true, false));
+ Disposer.register(getDisposable(), myExplorer);
myExplorer.addListener(new FileSystemTree.Listener() {
@Override
diff --git a/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java b/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java
index 7e5977abf9dc..e2267f53b770 100644
--- a/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java
+++ b/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java
@@ -39,7 +39,7 @@ import static com.intellij.patterns.XmlPatterns.*;
*/
public class XmlReferenceContributor extends PsiReferenceContributor {
@Override
- public void registerReferenceProviders(final PsiReferenceRegistrar registrar) {
+ public void registerReferenceProviders(@NotNull final PsiReferenceRegistrar registrar) {
final IdReferenceProvider idReferenceProvider = new IdReferenceProvider();
diff --git a/xml/impl/src/com/intellij/xml/util/documentation/HtmlDocumentationProvider.java b/xml/impl/src/com/intellij/xml/util/documentation/HtmlDocumentationProvider.java
index 11fb4a784c42..271fd5b6ff3d 100644
--- a/xml/impl/src/com/intellij/xml/util/documentation/HtmlDocumentationProvider.java
+++ b/xml/impl/src/com/intellij/xml/util/documentation/HtmlDocumentationProvider.java
@@ -15,8 +15,11 @@
*/
package com.intellij.xml.util.documentation;
+import com.intellij.lang.Language;
+import com.intellij.lang.LanguageDocumentation;
import com.intellij.lang.documentation.DocumentationProvider;
import com.intellij.lang.documentation.DocumentationUtil;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiWhiteSpace;
@@ -36,22 +39,19 @@ import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.List;
+import java.util.Locale;
/**
* @author maxim
*/
public class HtmlDocumentationProvider implements DocumentationProvider {
- private static DocumentationProvider ourStyleProvider;
+ private DocumentationProvider myStyleProvider = null;
private static DocumentationProvider ourScriptProvider;
@NonNls public static final String ELEMENT_ELEMENT_NAME = "element";
@NonNls public static final String NBSP = ":&nbsp;";
@NonNls public static final String BR = "<br>";
- public static void registerStyleDocumentationProvider(DocumentationProvider documentationProvider) {
- ourStyleProvider = documentationProvider;
- }
-
@Override
@Nullable
public String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) {
@@ -63,10 +63,10 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
@Override
public List<String> getUrlFor(PsiElement element, PsiElement originalElement) {
- String result = getUrlForHtml(element, PsiTreeUtil.getParentOfType(originalElement,XmlTag.class,false));
-
- if (result == null && ourStyleProvider !=null) {
- return ourStyleProvider.getUrlFor(element, originalElement);
+ String result = getUrlForHtml(element, PsiTreeUtil.getParentOfType(originalElement, XmlTag.class, false));
+ DocumentationProvider styleProvider = getStyleProvider();
+ if (result == null && styleProvider != null) {
+ return styleProvider.getUrlFor(element, originalElement);
}
return result != null ? Collections.singletonList(result) : null;
@@ -126,7 +126,7 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
key = nameElement.getText();
}
- key = (key != null)?key.toLowerCase():"";
+ key = StringUtil.notNullize(key).toLowerCase(Locale.US);
int dotIndex = key.indexOf('.');
if (dotIndex > 0) {
@@ -155,8 +155,9 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
final XmlTag tag = PsiTreeUtil.getParentOfType(originalElement, XmlTag.class, false);
String result = generateDocForHtml(element, false, tag, originalElement);
- if (result == null && ourStyleProvider !=null) {
- result = ourStyleProvider.generateDoc(element, originalElement);
+ DocumentationProvider styleProvider = getStyleProvider();
+ if (result == null && styleProvider !=null) {
+ result = styleProvider.generateDoc(element, originalElement);
}
if (result == null && ourScriptProvider !=null) {
@@ -170,15 +171,11 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
return result;
}
- public String generateDocForHtml(PsiElement element) {
- return generateDocForHtml(element,true, null, null);
- }
-
- protected String generateDocForHtml(PsiElement element, boolean ommitHtmlSpecifics, XmlTag context, PsiElement originalElement) {
+ protected String generateDocForHtml(PsiElement element, boolean omitHtmlSpecifics, XmlTag context, PsiElement originalElement) {
final EntityDescriptor descriptor = findDocumentationDescriptor(element,context);
if (descriptor!=null) {
- return generateJavaDoc(descriptor, ommitHtmlSpecifics, originalElement);
+ return generateJavaDoc(descriptor, omitHtmlSpecifics, originalElement);
}
if (element instanceof XmlEntityDecl) {
final XmlEntityDecl entityDecl = (XmlEntityDecl)element;
@@ -188,11 +185,11 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
return null;
}
- private static String generateJavaDoc(EntityDescriptor descriptor, boolean ommitHtmlSpecifics, PsiElement element) {
+ private static String generateJavaDoc(EntityDescriptor descriptor, boolean omitHtmlSpecifics, PsiElement element) {
StringBuilder buf = new StringBuilder();
- final boolean istag = descriptor instanceof HtmlTagDescriptor;
+ final boolean isTag = descriptor instanceof HtmlTagDescriptor;
- if (istag) {
+ if (isTag) {
DocumentationUtil.formatEntityName(XmlBundle.message("xml.javadoc.tag.name.message"),descriptor.getName(),buf);
} else {
DocumentationUtil.formatEntityName(XmlBundle.message("xml.javadoc.attribute.name.message"),descriptor.getName(),buf);
@@ -200,10 +197,10 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
buf.append(XmlBundle.message("xml.javadoc.description.message")).append(NBSP).append(descriptor.getDescription()).append(BR);
- if (istag) {
+ if (isTag) {
final HtmlTagDescriptor tagDescriptor = (HtmlTagDescriptor)descriptor;
- if (!ommitHtmlSpecifics) {
+ if (!omitHtmlSpecifics) {
boolean hasStartTag = tagDescriptor.isHasStartTag();
if (!hasStartTag) {
buf.append(XmlBundle.message("xml.javadoc.start.tag.could.be.omitted.message")).append(BR);
@@ -227,7 +224,7 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
char dtdId = descriptor.getDtd();
boolean deprecated = dtdId == EntityDescriptor.LOOSE_DTD;
if (deprecated) {
- buf.append(XmlBundle.message("xml.javadoc.deprecated.message", deprecated)).append(BR);
+ buf.append(XmlBundle.message("xml.javadoc.deprecated.message", true)).append(BR);
}
if (dtdId == EntityDescriptor.LOOSE_DTD) {
@@ -240,7 +237,7 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
buf.append(XmlBundle.message("xml.javadoc.defined.in.any.dtd.message"));
}
- if (!istag) {
+ if (!isTag) {
ColorSampleLookupValue.addColorPreviewAndCodeToLookup(element,buf);
}
@@ -255,8 +252,9 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
public PsiElement getDocumentationElementForLookupItem(PsiManager psiManager, Object object, PsiElement element) {
PsiElement result = createNavigationElementHTML(psiManager, object.toString(),element);
- if (result== null && ourStyleProvider !=null) {
- result = ourStyleProvider.getDocumentationElementForLookupItem(psiManager, object, element);
+ DocumentationProvider styleProvider = getStyleProvider();
+ if (result== null && styleProvider !=null) {
+ result = styleProvider.getDocumentationElementForLookupItem(psiManager, object, element);
}
if (result== null && ourScriptProvider !=null) {
result = ourScriptProvider.getDocumentationElementForLookupItem(psiManager, object, element);
@@ -271,8 +269,9 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
public PsiElement getDocumentationElementForLink(PsiManager psiManager, String link, PsiElement context) {
PsiElement result = createNavigationElementHTML(psiManager, link, context);
- if (result== null && ourStyleProvider !=null) {
- result = ourStyleProvider.getDocumentationElementForLink(psiManager, link,context);
+ DocumentationProvider styleProvider = getStyleProvider();
+ if (result== null && styleProvider !=null) {
+ result = styleProvider.getDocumentationElementForLink(psiManager, link, context);
}
if (result== null && ourScriptProvider !=null) {
result = ourScriptProvider.getDocumentationElementForLink(psiManager, link,context);
@@ -281,7 +280,7 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
}
public PsiElement createNavigationElementHTML(PsiManager psiManager, String text, PsiElement context) {
- String key = text.toLowerCase();
+ String key = text.toLowerCase(Locale.US);
final HtmlTagDescriptor descriptor = HtmlDescriptorsTable.getTagDescriptor(key);
if (descriptor != null && !isAttributeContext(context) ) {
@@ -332,4 +331,15 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
public static void registerScriptDocumentationProvider(final DocumentationProvider provider) {
ourScriptProvider = provider;
}
+
+ @Nullable
+ private DocumentationProvider getStyleProvider() {
+ if (myStyleProvider == null) {
+ Language cssLanguage = Language.findLanguageByID("CSS");
+ if (cssLanguage != null) {
+ myStyleProvider = LanguageDocumentation.INSTANCE.forLanguage(cssLanguage);
+ }
+ }
+ return myStyleProvider;
+ }
}
diff --git a/xml/impl/src/com/intellij/xml/util/documentation/XHtmlDocumentationProvider.java b/xml/impl/src/com/intellij/xml/util/documentation/XHtmlDocumentationProvider.java
index 70ee74f59850..613f588c37f9 100644
--- a/xml/impl/src/com/intellij/xml/util/documentation/XHtmlDocumentationProvider.java
+++ b/xml/impl/src/com/intellij/xml/util/documentation/XHtmlDocumentationProvider.java
@@ -26,7 +26,7 @@ import com.intellij.psi.xml.XmlText;
public class XHtmlDocumentationProvider extends HtmlDocumentationProvider {
@Override
- protected String generateDocForHtml(PsiElement element, boolean ommitHtmlSpecifics, XmlTag context, PsiElement originalElement) {
+ protected String generateDocForHtml(PsiElement element, boolean omitHtmlSpecifics, XmlTag context, PsiElement originalElement) {
return super.generateDocForHtml(element, true, context, originalElement);
}