Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Intellij Community
Commits
a5e54a2a
Commit
a5e54a2a
authored
6 years ago
by
anstarovoyt
1
Browse files
Options
Download
Email Patches
Plain Diff
js: add semantic keywords to example highlighting
parent
2de1ab60
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
platform/lang-impl/src/com/intellij/openapi/editor/richcopy/HtmlSyntaxInfoUtil.java
+57
-38
.../intellij/openapi/editor/richcopy/HtmlSyntaxInfoUtil.java
platform/lang-impl/src/com/intellij/openapi/editor/richcopy/SyntaxInfoBuilder.java
+10
-9
...m/intellij/openapi/editor/richcopy/SyntaxInfoBuilder.java
with
67 additions
and
47 deletions
+67
-47
platform/lang-impl/src/com/intellij/openapi/editor/richcopy/HtmlSyntaxInfoUtil.java
+
57
-
38
View file @
a5e54a2a
...
...
@@ -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
(
markupI
terator
,
endOffset
);
context
.
iterate
(
i
terator
,
endOffset
);
}
finally
{
markupI
terator
.
dispose
();
i
terator
.
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
)
{
}
}
}
This diff is collapsed.
Click to expand it.
platform/lang-impl/src/com/intellij/openapi/editor/richcopy/SyntaxInfoBuilder.java
+
10
-
9
View file @
a5e54a2a
...
...
@@ -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
);
}
p
rivate
interface
RangeIterator
{
p
ublic
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
;
...
...
This diff is collapsed.
Click to expand it.
小 白蛋
@baidan
mentioned in commit
70e39629
·
2 years ago
mentioned in commit
70e39629
mentioned in commit 70e396293df91c0638205495bc288499cfdb27c1
Toggle commit list
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment