"" "
pygments.lexers.typst
~~~~~~~~~~~~~~~~~~~~~
Lexers
for Typst language.
:copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE
for details.
"" "
from pygments.lexer
import RegexLexer, words, bygroups, include
from pygments.token
import Comment, Keyword, Name, String, Punctuation, \
Whitespace, Generic, Operator, Number, Text
__all__ = [
'TypstLexer' ]
class TypstLexer(RegexLexer):
"" "
For Typst code.
"" "
name =
'Typst'
aliases = [
'typst' ]
filenames = [
'*.typ' ]
mimetypes = [
'text/x-typst' ]
url =
'https://typst.app '
version_added =
'2.18'
tokens = {
'root' : [
include(
'markup' ),
],
'common' : [
(r
'[ \t]+' , Whitespace),
(r
'((?!=[*_$`\-+0-9/<@\\#\[]|https?://).)+', Text),
],
'markup' : [
include(
'comment' ),
(r
'^\s*=+.*$' , Generic.Heading),
(r
'[*][^*]*[*]' , Generic.Strong),
(r
'_[^_]*_' , Generic.Emph),
(r
'\$' , Punctuation,
'maths' ),
(r
'`[^`]*`' , String.Backtick),
# inline code
(r
'^\s*-' , Punctuation),
# unnumbered list
(r
'^\s*\+' , Punctuation),
# numbered list
(r
'^\s*[0-9.]+' , Punctuation),
# numbered list variant
(r
'^(\s*/\s+)([^:]+)(:)' , bygroups(Punctuation, Name.Variable, Punctuation)),
# definitions
(r
'<[a-zA-Z_][a-zA-Z0-9_-]*>' , Name.Label),
# label
(r
'@[a-zA-Z_][a-zA-Z0-9_-]*' , Name.Label),
# reference
(r
'\\#', Text), # escaped
(words((
'#let', '#set', '#show'), suffix=r'\b'), Keyword.Declaration, 'inline_code'),
(r
'(#[a-zA-Z_][a-zA-Z0-9_]*)(\[)', bygroups(Name.Function, Punctuation), 'markup'),
(r
'(#[a-zA-Z_][a-zA-Z0-9_]*)(\()', bygroups(Name.Function, Punctuation), 'inline_code'),
(r
'#[a-zA-Z_][a-zA-Z0-9_]*', Name.Variable),
(r
'```(?:.|\n)*?```' , String.Backtick),
# code block
(r
'https?://[0-9a-zA-Z~/%#&=\',;.+?]*', Generic.Emph), # links
(words((r
'---' , r
'\\' , r
'~' , r
'--' , r
'...' ), suffix=r
'\b' ), Punctuation),
# special chars shorthand
(r
'\\\[' , Punctuation),
# escaped
(r
'\\\]' , Punctuation),
# escaped
(r
'\[' , Punctuation,
'#push'),
(r
'\]' , Punctuation,
'#pop'),
include(
'common' ),
],
'maths' : [
include(
'comment' ),
(words((
'_' ,
'^' ,
'+' ,
'-' ,
'/' ,
'*' ,
'->' ,
'<-' ,
'!=' ,
'==' ),
suffix=r
'\b' ), Operator),
(words((r
'\\' ,
'$=' ), suffix=r
'\b' ), Operator),
# maths markup operators
(r
'\\\$' , Punctuation),
# escaped
(r
'\$' , Punctuation,
'#pop'), # end of math mode
include(
'code' ),
],
'comment' : [
(r
'//.*$' , Comment.Single),
(r
'/[*](.|\n)*?[*]/' , Comment.Multiline),
],
'code' : [
include(
'comment' ),
(r
'\[' , Punctuation,
'markup' ),
(r
'\(|\{' , Punctuation,
'code' ),
(r
'\)|\}' , Punctuation,
'#pop'),
(r
'"[^"]*"' , String.Double),
(r
'[=,]' , Operator),
(words((
'and' ,
'or' ,
'not' ), suffix=r
'\b' ), Operator.Word),
(r
'=>|<=|==|!=|>|<|-=|\+=|\*=|/=|\+|-|\\|\*' , Operator),
# comparisons
(r
'([a-zA-Z_][a-zA-Z0-9_]*)(:)' , bygroups(Name.Variable, Punctuation),
'#push'),
(r
'([a-zA-Z_][a-zA-Z0-9_]*)(\()' , bygroups(Name.Function, Punctuation),
'#push'),
(words((
'as' ,
'break' ,
'export' ,
'continue' ,
'else' ,
'for' ,
'if' ,
'import' ,
'in' ,
'include' ,
'return' ,
'while' ), suffix=r
'\b' ),
Keyword.Reserved),
(words((
'auto' ,
'none' ,
'true' ,
'false' ), suffix=r
'\b' ), Keyword.Constant),
(r
'([0-9.]+)(mm|pt|cm|in|em|fr|%)' , bygroups(Number, Keyword.Reserved)),
(words((
'let' ,
'set' ,
'show' ), suffix=r
'\b' ), Keyword.Declaration),
# FIXME: make this work
## (r'(import|include)( *)(")([^"])(")',
## bygroups(Keyword.Reserved, Text, Punctuation, String.Double, Punctuation)),
include(
'common' ),
],
'inline_code' : [
(r
';$' , Punctuation,
'#pop'),
include(
'code' ),
],
}
Messung V0.5 C=88 H=81 G=84
¤ Dauer der Verarbeitung: 0.2 Sekunden
¤
*© Formatika GbR, Deutschland