mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-30 02:09:59 +07:00
[html] WEB-68929 Convert HtmlFileHighlighter to Kotlin
GitOrigin-RevId: c6be81dc9df223d10dda1aa13957f02c897417a5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
104154a5dd
commit
8f7604a6d5
@@ -1,76 +1,101 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.ide.highlighter;
|
||||
package com.intellij.ide.highlighter
|
||||
|
||||
import com.intellij.lexer.HtmlLexer;
|
||||
import com.intellij.lexer.Lexer;
|
||||
import com.intellij.openapi.editor.HighlighterColors;
|
||||
import com.intellij.openapi.editor.XmlHighlighterColors;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
|
||||
import com.intellij.openapi.progress.Cancellation;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import com.intellij.ide.highlighter.XmlFileHighlighter.Companion.EMBEDDED_HIGHLIGHTERS
|
||||
import com.intellij.ide.highlighter.XmlFileHighlighter.Companion.registerAdditionalHighlighters
|
||||
import com.intellij.ide.highlighter.XmlFileHighlighter.EmbeddedTokenHighlighterExtensionPointListener
|
||||
import com.intellij.lexer.HtmlLexer
|
||||
import com.intellij.lexer.Lexer
|
||||
import com.intellij.openapi.editor.HighlighterColors
|
||||
import com.intellij.openapi.editor.XmlHighlighterColors
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase
|
||||
import com.intellij.openapi.progress.Cancellation
|
||||
import com.intellij.psi.tree.IElementType
|
||||
import com.intellij.psi.xml.XmlTokenType.TAG_WHITE_SPACE
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_ATTRIBUTE_VALUE_END_DELIMITER
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_ATTRIBUTE_VALUE_START_DELIMITER
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_ATTRIBUTE_VALUE_TOKEN
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_BAD_CHARACTER
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_CHAR_ENTITY_REF
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_COMMENT_CHARACTERS
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_COMMENT_END
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_COMMENT_START
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_CONDITIONAL_COMMENT_END
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_CONDITIONAL_COMMENT_END_START
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_CONDITIONAL_COMMENT_START
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_CONDITIONAL_COMMENT_START_END
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_DOCTYPE_END
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_DOCTYPE_PUBLIC
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_DOCTYPE_START
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_EMPTY_ELEMENT_END
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_END_TAG_START
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_ENTITY_REF_TOKEN
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_EQ
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_NAME
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_PI_END
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_PI_START
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_PI_TARGET
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_START_TAG_START
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_TAG_CHARACTERS
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_TAG_END
|
||||
import com.intellij.psi.xml.XmlTokenType.XML_TAG_NAME
|
||||
import com.intellij.util.containers.MultiMap
|
||||
|
||||
import java.util.Arrays;
|
||||
open class HtmlFileHighlighter :
|
||||
SyntaxHighlighterBase() {
|
||||
|
||||
import static com.intellij.ide.highlighter.XmlFileHighlighter.EMBEDDED_HIGHLIGHTERS;
|
||||
import static com.intellij.ide.highlighter.XmlFileHighlighter.registerAdditionalHighlighters;
|
||||
import static com.intellij.psi.xml.XmlTokenType.*;
|
||||
|
||||
public class HtmlFileHighlighter extends SyntaxHighlighterBase {
|
||||
private static final MultiMap<IElementType, TextAttributesKey> ourMap = MultiMap.create();
|
||||
|
||||
static {
|
||||
ourMap.putValue(XML_TAG_CHARACTERS, XmlHighlighterColors.HTML_TAG);
|
||||
|
||||
for (IElementType type : ContainerUtil.ar(XML_COMMENT_START, XML_COMMENT_END, XML_COMMENT_CHARACTERS,
|
||||
XML_CONDITIONAL_COMMENT_END, XML_CONDITIONAL_COMMENT_END_START,
|
||||
XML_CONDITIONAL_COMMENT_START, XML_CONDITIONAL_COMMENT_START_END)) {
|
||||
ourMap.putValue(type, XmlHighlighterColors.HTML_COMMENT);
|
||||
}
|
||||
|
||||
for (IElementType type : ContainerUtil.ar(XML_START_TAG_START, XML_END_TAG_START, XML_TAG_END, XML_EMPTY_ELEMENT_END, TAG_WHITE_SPACE)) {
|
||||
ourMap.putValue(type, XmlHighlighterColors.HTML_TAG);
|
||||
}
|
||||
|
||||
ourMap.putValues(XML_TAG_NAME, Arrays.asList(XmlHighlighterColors.HTML_TAG, XmlHighlighterColors.HTML_TAG_NAME));
|
||||
ourMap.putValues(XML_NAME, Arrays.asList(XmlHighlighterColors.HTML_TAG, XmlHighlighterColors.HTML_ATTRIBUTE_NAME));
|
||||
for (IElementType type : ContainerUtil.ar(XML_EQ,
|
||||
XML_ATTRIBUTE_VALUE_TOKEN, XML_ATTRIBUTE_VALUE_START_DELIMITER, XML_ATTRIBUTE_VALUE_END_DELIMITER)) {
|
||||
ourMap.putValues(type, Arrays.asList(XmlHighlighterColors.HTML_TAG, XmlHighlighterColors.HTML_ATTRIBUTE_VALUE));
|
||||
}
|
||||
|
||||
for (IElementType type : ContainerUtil.ar(XML_PI_START, XML_PI_END, XML_DOCTYPE_START, XML_DOCTYPE_END, XML_DOCTYPE_PUBLIC)) {
|
||||
ourMap.putValue(type, XmlHighlighterColors.HTML_TAG);
|
||||
}
|
||||
|
||||
ourMap.putValues(XML_PI_TARGET, Arrays.asList(XmlHighlighterColors.HTML_TAG, XmlHighlighterColors.HTML_TAG_NAME));
|
||||
|
||||
ourMap.putValue(XML_CHAR_ENTITY_REF, XmlHighlighterColors.HTML_ENTITY_REFERENCE);
|
||||
ourMap.putValue(XML_ENTITY_REF_TOKEN, XmlHighlighterColors.HTML_ENTITY_REFERENCE);
|
||||
|
||||
ourMap.putValue(XML_BAD_CHARACTER, HighlighterColors.BAD_CHARACTER);
|
||||
|
||||
Cancellation.computeInNonCancelableSection(() -> {
|
||||
// PCE in static initializer breaks class initialization
|
||||
registerAdditionalHighlighters(ourMap);
|
||||
EMBEDDED_HIGHLIGHTERS.addExtensionPointListener(new XmlFileHighlighter.EmbeddedTokenHighlighterExtensionPointListener(ourMap), null);
|
||||
return null;
|
||||
});
|
||||
override fun getHighlightingLexer(): Lexer {
|
||||
return HtmlLexer(true)
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Lexer getHighlightingLexer() {
|
||||
return new HtmlLexer(true);
|
||||
override fun getTokenHighlights(tokenType: IElementType): Array<out TextAttributesKey> {
|
||||
synchronized(javaClass) {
|
||||
return pack(XmlHighlighterColors.HTML_CODE, ourMap[tokenType].toTypedArray())
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextAttributesKey @NotNull [] getTokenHighlights(IElementType tokenType) {
|
||||
//noinspection SynchronizationOnGetClass,SynchronizeOnThis
|
||||
synchronized (getClass()) {
|
||||
return SyntaxHighlighterBase.pack(XmlHighlighterColors.HTML_CODE, ourMap.get(tokenType).toArray(TextAttributesKey.EMPTY_ARRAY));
|
||||
private companion object {
|
||||
private val ourMap = MultiMap.create<IElementType, TextAttributesKey>()
|
||||
|
||||
init {
|
||||
ourMap.putValue(XML_TAG_CHARACTERS, XmlHighlighterColors.HTML_TAG)
|
||||
|
||||
for (type in sequenceOf(XML_COMMENT_START, XML_COMMENT_END, XML_COMMENT_CHARACTERS,
|
||||
XML_CONDITIONAL_COMMENT_END, XML_CONDITIONAL_COMMENT_END_START,
|
||||
XML_CONDITIONAL_COMMENT_START, XML_CONDITIONAL_COMMENT_START_END)) {
|
||||
ourMap.putValue(type, XmlHighlighterColors.HTML_COMMENT)
|
||||
}
|
||||
|
||||
for (type in sequenceOf(XML_START_TAG_START, XML_END_TAG_START, XML_TAG_END, XML_EMPTY_ELEMENT_END,
|
||||
TAG_WHITE_SPACE)) {
|
||||
ourMap.putValue(type, XmlHighlighterColors.HTML_TAG)
|
||||
}
|
||||
|
||||
ourMap.putValues(XML_TAG_NAME, listOf(XmlHighlighterColors.HTML_TAG, XmlHighlighterColors.HTML_TAG_NAME))
|
||||
ourMap.putValues(XML_NAME, listOf(XmlHighlighterColors.HTML_TAG, XmlHighlighterColors.HTML_ATTRIBUTE_NAME))
|
||||
for (type in sequenceOf(XML_EQ,
|
||||
XML_ATTRIBUTE_VALUE_TOKEN, XML_ATTRIBUTE_VALUE_START_DELIMITER,
|
||||
XML_ATTRIBUTE_VALUE_END_DELIMITER)) {
|
||||
ourMap.putValues(type, listOf(XmlHighlighterColors.HTML_TAG, XmlHighlighterColors.HTML_ATTRIBUTE_VALUE))
|
||||
}
|
||||
|
||||
for (type in sequenceOf(XML_PI_START, XML_PI_END, XML_DOCTYPE_START, XML_DOCTYPE_END, XML_DOCTYPE_PUBLIC)) {
|
||||
ourMap.putValue(type, XmlHighlighterColors.HTML_TAG)
|
||||
}
|
||||
|
||||
ourMap.putValues(XML_PI_TARGET, listOf(XmlHighlighterColors.HTML_TAG, XmlHighlighterColors.HTML_TAG_NAME))
|
||||
|
||||
ourMap.putValue(XML_CHAR_ENTITY_REF, XmlHighlighterColors.HTML_ENTITY_REFERENCE)
|
||||
ourMap.putValue(XML_ENTITY_REF_TOKEN, XmlHighlighterColors.HTML_ENTITY_REFERENCE)
|
||||
|
||||
ourMap.putValue(XML_BAD_CHARACTER, HighlighterColors.BAD_CHARACTER)
|
||||
|
||||
Cancellation.computeInNonCancelableSection<Unit, Nothing> {
|
||||
// PCE in static initializer breaks class initialization
|
||||
registerAdditionalHighlighters(ourMap)
|
||||
EMBEDDED_HIGHLIGHTERS.addExtensionPointListener(EmbeddedTokenHighlighterExtensionPointListener(ourMap), null)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user