package com.siberika.idea.pascal.lang.lexer; import com.intellij.lexer.FlexLexer; import com.intellij.lexer.Lexer; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.ex.util.LexerEditorHighlighter; import com.intellij.openapi.fileTypes.SyntaxHighlighter; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Author: George Bakhtadze * Date: 28/08/2013 */ public class PascalLexerEditorHighlighter extends LexerEditorHighlighter { @Nullable private Project project; @Nullable private VirtualFile virtualFile; public PascalLexerEditorHighlighter(@NotNull SyntaxHighlighter highlighter, @NotNull EditorColorsScheme scheme, @Nullable Project project, @Nullable VirtualFile virtualFile) { super(highlighter, scheme); this.project = project; this.virtualFile = virtualFile; initPascalFlexLexer(); } @Override public synchronized void documentChanged(DocumentEvent e) { super.documentChanged(e); if (getDocument() != null) { initPascalFlexLexer(); } } private void initPascalFlexLexer() { Lexer lexer = getLexer(); if (lexer instanceof PascalLexer) { FlexLexer flexLexer = ((PascalLexer) lexer).getFlexLexer(); if (flexLexer instanceof PascalFlexLexerImpl) { PascalFlexLexerImpl pascalFlexLexer = (PascalFlexLexerImpl) flexLexer; pascalFlexLexer.setProject(project); pascalFlexLexer.setVirtualFile(virtualFile); } } } }