blob: 814d0307b5d32bb10ffbbf6f7063cfcb872f4965 [file] [log] [blame]
package org.jetbrains.plugins.javaFX.fxml;
import com.intellij.lang.Language;
import com.intellij.lang.injection.MultiHostInjector;
import com.intellij.lang.injection.MultiHostRegistrar;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.patterns.XmlElementPattern;
import com.intellij.patterns.XmlPatterns;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiLanguageInjectionHost;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlText;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
public class ScriptLanguageInjector implements MultiHostInjector {
private static final XmlElementPattern.XmlTextPattern SCRIPT_PATTERN = XmlPatterns.xmlText().withParent(
XmlPatterns.xmlTag().withName(FxmlConstants.FX_SCRIPT));
public void getLanguagesToInject(@NotNull final MultiHostRegistrar registrar, @NotNull final PsiElement host) {
if (SCRIPT_PATTERN.accepts(host)) {
final List<String> registeredLanguages = JavaFxPsiUtil.parseInjectedLanguages((XmlFile)host.getContainingFile());
for (Language language : Language.getRegisteredLanguages()) {
for (String registeredLanguage : registeredLanguages) {
if (StringUtil.equalsIgnoreCase(language.getID(), registeredLanguage)) {
registrar.startInjecting(language)
.addPlace(null, null, (PsiLanguageInjectionHost) host,
TextRange.from(0, host.getTextLength() - 1))
.doneInjecting();
break;
}
}
}
}
}
@NotNull
public List<? extends Class<? extends PsiElement>> elementsToInjectIn() {
return Collections.singletonList(XmlText.class);
}
}