Commit a5e54a2a authored by anstarovoyt's avatar anstarovoyt
Browse files

js: add semantic keywords to example highlighting

parent 2de1ab60
Showing with 67 additions and 47 deletions
+67 -47
......@@ -2,60 +2,79 @@
package com.intellij.openapi.editor.richcopy;
import com.intellij.ide.highlighter.HighlighterFactory;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.highlighter.EditorHighlighter;
import com.intellij.openapi.editor.impl.DocumentMarkupModel;
import com.intellij.openapi.editor.markup.MarkupModel;
import com.intellij.openapi.editor.richcopy.model.SyntaxInfo;
import com.intellij.openapi.editor.richcopy.view.HtmlSyntaxInfoReader;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public final class HtmlSyntaxInfoUtil {
@NotNull
public static HtmlSyntaxInfoReader createHtmlReader(@NotNull PsiFile file,
@NotNull Document document,
@NotNull EditorColorsScheme schemeToUse,
int startOffset,
int endOffset) {
MarkupModel markupModel = DocumentMarkupModel.forDocument(document, file.getProject(), true);
CharSequence text = document.getText();
SyntaxInfoBuilder.Context context = new SyntaxInfoBuilder.Context(text, schemeToUse, 0);
EditorHighlighter highlighter = HighlighterFactory.createHighlighter(file.getViewProvider().getVirtualFile(),
schemeToUse, file.getProject());
public static HtmlSyntaxInfoReader createHighlighterHtmlReader(@NotNull PsiFile file,
@NotNull CharSequence text,
@Nullable SyntaxInfoBuilder.RangeIterator ownRangeIterator,
@NotNull EditorColorsScheme schemeToUse,
int startOffset,
int endOffset) {
EditorHighlighter highlighter =
HighlighterFactory.createHighlighter(file.getViewProvider().getVirtualFile(), schemeToUse, file.getProject());
highlighter.setText(text);
SyntaxInfoBuilder.MyMarkupIterator
markupIterator = SyntaxInfoBuilder.createMarkupIterator(highlighter, text, schemeToUse, markupModel, startOffset, endOffset);
SyntaxInfoBuilder.HighlighterRangeIterator highlighterRangeIterator =
new SyntaxInfoBuilder.HighlighterRangeIterator(highlighter, startOffset, endOffset);
ownRangeIterator = ownRangeIterator == null
? highlighterRangeIterator
: new SyntaxInfoBuilder.CompositeRangeIterator(schemeToUse, highlighterRangeIterator, ownRangeIterator);
return createHighlighterHtmlReader(text, ownRangeIterator, schemeToUse, endOffset);
}
private static HtmlSyntaxInfoReader createHighlighterHtmlReader(@NotNull CharSequence text,
@NotNull SyntaxInfoBuilder.RangeIterator ownRangeIterator,
@NotNull EditorColorsScheme schemeToUse,
int endOffset) {
SyntaxInfoBuilder.Context context = new SyntaxInfoBuilder.Context(text, schemeToUse, 0);
SyntaxInfoBuilder.MyMarkupIterator iterator = new SyntaxInfoBuilder.MyMarkupIterator(text, ownRangeIterator, schemeToUse);
try {
context.iterate(markupIterator, endOffset);
context.iterate(iterator, endOffset);
}
finally {
markupIterator.dispose();
iterator.dispose();
}
SyntaxInfo info = context.finish();
HtmlSyntaxInfoReader data = new HtmlSyntaxInfoReader(info, 2) {
@Override
protected void appendCloseTags() {
myResultBuffer.append("</pre>");
}
@Override
protected void appendStartTags() {
myResultBuffer.append("<pre>");
}
@Override
protected void defineBackground(int id, @NotNull StringBuilder styleBuffer) {
}
@Override
protected void appendFontFamilyRule(@NotNull StringBuilder styleBuffer, int fontFamilyId) {
}
};
HtmlSyntaxInfoReader data = new SimpleHtmlSyntaxInfoReader(info);
data.setRawText(text.toString());
return data;
}
private static class SimpleHtmlSyntaxInfoReader extends HtmlSyntaxInfoReader {
public SimpleHtmlSyntaxInfoReader(SyntaxInfo info) {
super(info, 2);
}
@Override
protected void appendCloseTags() {
}
@Override
protected void appendStartTags() {
}
@Override
protected void defineBackground(int id, @NotNull StringBuilder styleBuffer) {
}
@Override
protected void appendFontFamilyRule(@NotNull StringBuilder styleBuffer, int fontFamilyId) {
}
}
}
......@@ -28,7 +28,7 @@ import java.awt.*;
import java.util.Arrays;
import java.util.Comparator;
final class SyntaxInfoBuilder {
public final class SyntaxInfoBuilder {
private SyntaxInfoBuilder() { }
@NotNull
......@@ -38,7 +38,8 @@ final class SyntaxInfoBuilder {
@NotNull MarkupModel markupModel,
int startOffsetToUse,
int endOffset) {
CompositeRangeIterator iterator = new CompositeRangeIterator(
CompositeRangeIterator iterator = new CompositeRangeIterator(
schemeToUse,
new HighlighterRangeIterator(highlighter, startOffsetToUse, endOffset),
new MarkupModelRangeIterator(markupModel, schemeToUse, startOffsetToUse, endOffset)
......@@ -47,7 +48,7 @@ final class SyntaxInfoBuilder {
return new MyMarkupIterator(text, iterator, schemeToUse);
}
private interface RangeIterator {
public interface RangeIterator {
boolean atEnd();
void advance();
......@@ -60,7 +61,7 @@ final class SyntaxInfoBuilder {
void dispose();
}
static class MyMarkupIterator {
private final SegmentIterator mySegmentIterator;
private final RangeIterator myRangeIterator;
......@@ -68,9 +69,9 @@ final class SyntaxInfoBuilder {
private Color myCurrentForegroundColor;
private Color myCurrentBackgroundColor;
private MyMarkupIterator(@NotNull CharSequence charSequence,
@NotNull RangeIterator rangeIterator,
@NotNull EditorColorsScheme colorsScheme) {
MyMarkupIterator(@NotNull CharSequence charSequence,
@NotNull RangeIterator rangeIterator,
@NotNull EditorColorsScheme colorsScheme) {
myRangeIterator = rangeIterator;
mySegmentIterator = new SegmentIterator(charSequence, colorsScheme.getFontPreferences());
}
......@@ -123,7 +124,7 @@ final class SyntaxInfoBuilder {
}
}
private static class CompositeRangeIterator implements RangeIterator {
static class CompositeRangeIterator implements RangeIterator {
private final @NotNull Color myDefaultForeground;
private final @NotNull Color myDefaultBackground;
private final IteratorWrapper[] myIterators;
......@@ -403,7 +404,7 @@ final class SyntaxInfoBuilder {
}
}
private static class HighlighterRangeIterator implements RangeIterator {
static class HighlighterRangeIterator implements RangeIterator {
private static final TextAttributes EMPTY_ATTRIBUTES = new TextAttributes();
private final HighlighterIterator myIterator;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment