Search in sources :

Example 6 with ZenCodingGenerator

use of com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator in project intellij-community by JetBrains.

the class ZenCodingTemplate method isApplicable.

@Override
public boolean isApplicable(PsiFile file, int offset, boolean wrapping) {
    if (file == null) {
        return false;
    }
    PsiElement element = CustomTemplateCallback.getContext(file, offset);
    final ZenCodingGenerator applicableGenerator = findApplicableDefaultGenerator(element, wrapping);
    return applicableGenerator != null && applicableGenerator.isEnabled();
}
Also used : XmlZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.XmlZenCodingGenerator) ZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator) PsiElement(com.intellij.psi.PsiElement)

Example 7 with ZenCodingGenerator

use of com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator in project intellij-community by JetBrains.

the class ZenCodingTemplate method addCompletions.

@Override
public void addCompletions(CompletionParameters parameters, CompletionResultSet result) {
    if (!parameters.isAutoPopup()) {
        return;
    }
    PsiFile file = parameters.getPosition().getContainingFile();
    int offset = parameters.getOffset();
    Editor editor = parameters.getEditor();
    ZenCodingGenerator generator = findApplicableDefaultGenerator(CustomTemplateCallback.getContext(file, offset), false);
    if (generator != null && generator.hasCompletionItem()) {
        final CollectCustomTemplateCallback callback = new CollectCustomTemplateCallback(editor, file);
        final String templatePrefix = computeTemplateKeyWithoutContextChecking(callback);
        if (templatePrefix != null) {
            List<TemplateImpl> regularTemplates = TemplateManagerImpl.listApplicableTemplates(file, offset, false);
            boolean regularTemplateWithSamePrefixExists = !ContainerUtil.filter(regularTemplates, template -> templatePrefix.equals(template.getKey())).isEmpty();
            result = result.withPrefixMatcher(result.getPrefixMatcher().cloneWithPrefix(templatePrefix));
            result.restartCompletionOnPrefixChange(StandardPatterns.string().startsWith(templatePrefix));
            if (!regularTemplateWithSamePrefixExists) {
                // exclude perfect matches with existing templates because LiveTemplateCompletionContributor handles it
                final Collection<SingleLineEmmetFilter> extraFilters = ContainerUtil.newLinkedList(new SingleLineEmmetFilter());
                try {
                    expand(templatePrefix, callback, generator, extraFilters, false, 0);
                } catch (EmmetException ignore) {
                }
                final TemplateImpl template = callback.getGeneratedTemplate();
                if (template != null) {
                    template.setKey(templatePrefix);
                    template.setDescription(template.getTemplateText());
                    final CustomLiveTemplateLookupElement lookupElement = new CustomLiveTemplateLookupElement(this, template.getKey(), template.getKey(), template.getDescription(), !LiveTemplateCompletionContributor.shouldShowAllTemplates(), true) {

                        @Override
                        public void renderElement(LookupElementPresentation presentation) {
                            super.renderElement(presentation);
                            presentation.setTailText("\t Emmet abbreviation", true);
                        }
                    };
                    result.addElement(lookupElement);
                }
            }
        } else if (result.getPrefixMatcher().getPrefix().isEmpty()) {
            result.restartCompletionOnPrefixChange(StandardPatterns.string().longerThan(0));
        }
    }
}
Also used : SingleLineEmmetFilter(com.intellij.codeInsight.template.emmet.filters.SingleLineEmmetFilter) LookupElementPresentation(com.intellij.codeInsight.lookup.LookupElementPresentation) PsiFile(com.intellij.psi.PsiFile) XmlZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.XmlZenCodingGenerator) ZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator) Editor(com.intellij.openapi.editor.Editor)

Example 8 with ZenCodingGenerator

use of com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator in project intellij-community by JetBrains.

the class ZenCodingTemplate method findApplicableGenerator.

@Nullable
private static ZenCodingGenerator findApplicableGenerator(ZenCodingNode node, PsiElement context, boolean wrapping) {
    ZenCodingGenerator defaultGenerator = null;
    ZenCodingGenerator[] generators = ZenCodingGenerator.getInstances();
    for (ZenCodingGenerator generator : generators) {
        if (generator.isMyContext(context, wrapping) && generator.isAppliedByDefault(context)) {
            defaultGenerator = generator;
            break;
        }
    }
    while (node instanceof FilterNode) {
        FilterNode filterNode = (FilterNode) node;
        String suffix = filterNode.getFilter();
        for (ZenCodingGenerator generator : generators) {
            if (generator.isMyContext(context, wrapping)) {
                if (suffix != null && suffix.equals(generator.getSuffix())) {
                    return generator;
                }
            }
        }
        node = filterNode.getNode();
    }
    return defaultGenerator;
}
Also used : XmlZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.XmlZenCodingGenerator) ZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator) Nullable(org.jetbrains.annotations.Nullable)

Example 9 with ZenCodingGenerator

use of com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator in project intellij-community by JetBrains.

the class ZenCodingTemplate method checkTemplateKey.

public static boolean checkTemplateKey(String inputString, CustomTemplateCallback callback) {
    ZenCodingGenerator generator = findApplicableDefaultGenerator(callback.getContext(), true);
    if (generator == null) {
        int offset = callback.getEditor().getCaretModel().getOffset();
        LOG.error("Emmet is disabled for context for file " + callback.getFileType().getName() + " in offset: " + offset, AttachmentFactory.createAttachment(callback.getEditor().getDocument()));
        return false;
    }
    return checkTemplateKey(inputString, callback, generator);
}
Also used : XmlZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.XmlZenCodingGenerator) ZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator)

Example 10 with ZenCodingGenerator

use of com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator in project intellij-community by JetBrains.

the class ZenCodingTemplate method hasCompletionItem.

@Override
public boolean hasCompletionItem(@NotNull PsiFile file, int offset) {
    PsiElement element = CustomTemplateCallback.getContext(file, offset);
    final ZenCodingGenerator applicableGenerator = findApplicableDefaultGenerator(element, false);
    return applicableGenerator != null && applicableGenerator.isEnabled() && applicableGenerator.hasCompletionItem();
}
Also used : XmlZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.XmlZenCodingGenerator) ZenCodingGenerator(com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator) PsiElement(com.intellij.psi.PsiElement)

Aggregations

ZenCodingGenerator (com.intellij.codeInsight.template.emmet.generators.ZenCodingGenerator)10 XmlZenCodingGenerator (com.intellij.codeInsight.template.emmet.generators.XmlZenCodingGenerator)9 PsiElement (com.intellij.psi.PsiElement)6 TemplateImpl (com.intellij.codeInsight.template.impl.TemplateImpl)2 PsiFile (com.intellij.psi.PsiFile)2 Nullable (org.jetbrains.annotations.Nullable)2 EmmetCompositeConfigurable (com.intellij.application.options.emmet.EmmetCompositeConfigurable)1 XmlEmmetConfigurable (com.intellij.application.options.emmet.XmlEmmetConfigurable)1 LookupElementAction (com.intellij.codeInsight.lookup.LookupElementAction)1 LookupElementPresentation (com.intellij.codeInsight.lookup.LookupElementPresentation)1 ZenCodingTemplate (com.intellij.codeInsight.template.emmet.ZenCodingTemplate)1 SingleLineEmmetFilter (com.intellij.codeInsight.template.emmet.filters.SingleLineEmmetFilter)1 ZenCodingFilter (com.intellij.codeInsight.template.emmet.filters.ZenCodingFilter)1 CustomLiveTemplateLookupElement (com.intellij.codeInsight.template.impl.CustomLiveTemplateLookupElement)1 Caret (com.intellij.openapi.editor.Caret)1 CaretAction (com.intellij.openapi.editor.CaretAction)1 Editor (com.intellij.openapi.editor.Editor)1 Configurable (com.intellij.openapi.options.Configurable)1 Project (com.intellij.openapi.project.Project)1 PsiFileFactory (com.intellij.psi.PsiFileFactory)1