diff --git a/platform/icons/src/css/pseudo-class.png b/platform/icons/src/css/pseudo-class.png new file mode 100755 index 000000000000..5d96d962ec1d Binary files /dev/null and b/platform/icons/src/css/pseudo-class.png differ diff --git a/platform/icons/src/css/pseudo-class@2x.png b/platform/icons/src/css/pseudo-class@2x.png new file mode 100644 index 000000000000..ab53f693baef Binary files /dev/null and b/platform/icons/src/css/pseudo-class@2x.png differ diff --git a/platform/icons/src/css/pseudo-element.png b/platform/icons/src/css/pseudo-element.png old mode 100755 new mode 100644 index 5d96d962ec1d..93f789d24838 Binary files a/platform/icons/src/css/pseudo-element.png and b/platform/icons/src/css/pseudo-element.png differ diff --git a/platform/icons/src/css/pseudo-element@2x.png b/platform/icons/src/css/pseudo-element@2x.png index ab53f693baef..db9608aa7216 100644 Binary files a/platform/icons/src/css/pseudo-element@2x.png and b/platform/icons/src/css/pseudo-element@2x.png differ diff --git a/platform/lang-api/src/com/intellij/codeInsight/lookup/LookupElementBuilder.java b/platform/lang-api/src/com/intellij/codeInsight/lookup/LookupElementBuilder.java index 9b980c50198c..189e6581d171 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/lookup/LookupElementBuilder.java +++ b/platform/lang-api/src/com/intellij/codeInsight/lookup/LookupElementBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 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. @@ -210,9 +210,14 @@ public final class LookupElementBuilder extends LookupElement { public LookupElementBuilder setTypeText(@Nullable String typeText, boolean grayed) { return withTypeText(typeText, grayed); } + public LookupElementBuilder withTypeText(@Nullable String typeText, boolean grayed) { + return withTypeText(typeText, null, grayed); + } + + public LookupElementBuilder withTypeText(@Nullable String typeText, @Nullable Icon typeIcon, boolean grayed) { final LookupElementPresentation presentation = copyPresentation(); - presentation.setTypeText(typeText); + presentation.setTypeText(typeText, typeIcon); presentation.setTypeGrayed(grayed); return new LookupElementBuilder(myLookupString, myObject, myInsertHandler, null, presentation, myAllLookupStrings, myCaseSensitive); diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index 142fd651655d..54306156ddc7 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -177,6 +177,7 @@ public class AllIcons { public static final Icon Atrule = IconLoader.getIcon("/css/atrule.png"); // 16x16 public static final Icon Import = IconLoader.getIcon("/css/import.png"); // 16x16 public static final Icon Property = IconLoader.getIcon("/css/property.png"); // 16x16 + public static final Icon Pseudo_class = IconLoader.getIcon("/css/pseudo-class.png"); // 16x16 public static final Icon Pseudo_element = IconLoader.getIcon("/css/pseudo-element.png"); // 16x16 public static final Icon Toolwindow = IconLoader.getIcon("/css/toolwindow.png"); // 13x13 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 = ": "; @NonNls public static final String 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 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); }