package com.dmarcotte.handlebars.file;
import com.dmarcotte.handlebars.HbBundle;
import com.dmarcotte.handlebars.HbLanguage;
import com.dmarcotte.handlebars.HbTemplateHighlighter;
import com.intellij.lang.Language;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.highlighter.EditorHighlighter;
import com.intellij.openapi.fileTypes.*;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.templateLanguages.TemplateDataLanguageMappings;
import icons.HandlebarsIcons;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.nio.charset.Charset;
public class HbFileType extends LanguageFileType implements TemplateLanguageFileType {
public static final LanguageFileType INSTANCE = new HbFileType();
@NonNls
public static final String DEFAULT_EXTENSION = "handlebars;hbs;mustache";
private HbFileType() {
this(HbLanguage.INSTANCE);
}
protected HbFileType(Language lang) {
super(lang);
FileTypeEditorHighlighterProviders.INSTANCE.addExplicitExtension(this, new EditorHighlighterProvider() {
public EditorHighlighter getEditorHighlighter(@Nullable Project project,
@NotNull FileType fileType,
@Nullable VirtualFile virtualFile,
@NotNull EditorColorsScheme editorColorsScheme) {
return new HbTemplateHighlighter(project, virtualFile, editorColorsScheme);
}
});
}
@NotNull
public String getName() {
return "Handlebars/Mustache";
}
@NotNull
public String getDescription() {
return HbBundle.message("hb.files.file.type.description");
}
@NotNull
public String getDefaultExtension() {
return DEFAULT_EXTENSION;
}
public Icon getIcon() {
return HandlebarsIcons.Handlebars_icon;
}
public Charset extractCharsetFromFileContent(@Nullable final Project project,
@Nullable final VirtualFile file,
@NotNull final CharSequence content) {
LanguageFileType associatedFileType = getAssociatedFileType(file, project);
if (associatedFileType == null) {
return null;
}
return CharsetUtil.extractCharsetFromFileContent(project, file, associatedFileType, content);
}
private static LanguageFileType getAssociatedFileType(VirtualFile file, Project project) {
if (project == null) {
return null;
}
Language language = TemplateDataLanguageMappings.getInstance(project).getMapping(file);
LanguageFileType associatedFileType = null;
if (language != null) {
associatedFileType = language.getAssociatedFileType();
}
if (language == null || associatedFileType == null) {
associatedFileType = HbLanguage.getDefaultTemplateLang();
}
return associatedFileType;
}
}