-
Notifications
You must be signed in to change notification settings - Fork 44
/
SyntaxHighlighting.scala
104 lines (91 loc) · 3.09 KB
/
SyntaxHighlighting.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package laika.config
import cats.data.NonEmptyList
import laika.api.bundle.{ BundleOrigin, ExtensionBundle, ParserBundle, SyntaxHighlighter }
import laika.parse.code.languages.*
/** Extension that registers all code syntax highlighters provided out of the box.
*
* The extension can be added to a transformer like any other extension:
*
* {{{
* val transformer = Transformer
* .from(Markdown)
* .to(HTML)
* .using(GitHubFlavor)
* .using(SyntaxHighlighting)
* .build
* }}}
*
* @author Jens Halm
*/
case object SyntaxHighlighting extends ExtensionBundle { self =>
override val origin: BundleOrigin = BundleOrigin.Library
val description: String = "Default Syntax Highlighters for Code"
override def parsers: ParserBundle = new ParserBundle(
syntaxHighlighters = Seq(
ScalaSyntax,
ScalaSyntax.Scala3,
JavaSyntax,
PythonSyntax,
TypeScriptSyntax,
TypeScriptSyntax.TSX,
JavaScriptSyntax,
JavaScriptSyntax.JSX,
DartSyntax,
AlloySyntax,
HaskellSyntax,
HTMLSyntax,
CSSSyntax,
JSONSyntax,
HOCONSyntax,
XMLSyntax,
YAMLSyntax,
ShellSyntax,
DiffSyntax,
DhallSyntax,
SQLSyntax,
EBNFSyntax,
MarkdownSyntax,
ReStructuredTextSyntax,
LaikaExtensionSyntax.forMarkdown,
LaikaExtensionSyntax.forRst,
LaikaExtensionSyntax.forHTML,
LaikaASTSyntax
)
)
/** Creates a new extension bundle that contains the built-in
* syntax highlighters as well as the specified list of custom highlighters.
*/
def withSyntax(syntax: SyntaxHighlighter*): ExtensionBundle = new ExtensionBundle {
override val origin: BundleOrigin = BundleOrigin.User
val description: String = "Customized collection of Syntax Highlighters for Code"
override def parsers: ParserBundle = new ParserBundle(
syntaxHighlighters = self.parsers.syntaxHighlighters ++ syntax
)
}
/** Creates a new extension bundle that contains the built-in
* syntax highlighters as well as the specified highlighter, binding it to the given language string
* instead of those declared in the instance itself.
* Can be used to create an alias for an existing syntax, e.g. binding `dotty` to `scala` instead.
*/
def withSyntaxBinding(binding: String, syntax: SyntaxHighlighter): ExtensionBundle = withSyntax {
new SyntaxHighlighter {
def language = NonEmptyList.of(binding)
def spanParsers = syntax.spanParsers
}
}
}