Linux cesa-www-main 6.1.0-49-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
Apache/2.4.68 (Debian)
Server IP : 10.218.0.2 & Your IP : 216.73.216.28
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
lib /
python3 /
dist-packages /
pygments /
lexers /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2025-05-13 15:07
__init__.py
10.86
KB
-rw-r--r--
2023-01-01 08:34
_ada_builtins.py
1.51
KB
-rw-r--r--
2023-01-01 08:34
_asy_builtins.py
26.65
KB
-rw-r--r--
2023-01-01 08:34
_cl_builtins.py
13.67
KB
-rw-r--r--
2023-01-01 08:34
_cocoa_builtins.py
102.72
KB
-rw-r--r--
2023-01-01 08:34
_csound_builtins.py
17.98
KB
-rw-r--r--
2023-01-01 08:34
_css_builtins.py
12.15
KB
-rw-r--r--
2023-01-01 08:34
_julia_builtins.py
11.6
KB
-rw-r--r--
2023-01-01 08:34
_lasso_builtins.py
131.36
KB
-rw-r--r--
2023-01-01 08:34
_lilypond_builtins.py
104.28
KB
-rw-r--r--
2023-01-01 08:34
_lua_builtins.py
7.89
KB
-rw-r--r--
2023-01-01 08:34
_mapping.py
63.46
KB
-rw-r--r--
2023-01-01 08:34
_mql_builtins.py
24.13
KB
-rw-r--r--
2023-01-01 08:34
_mysql_builtins.py
25.2
KB
-rw-r--r--
2023-01-01 08:34
_openedge_builtins.py
48.24
KB
-rw-r--r--
2023-01-01 08:34
_php_builtins.py
105.35
KB
-rw-r--r--
2023-01-01 08:34
_postgres_builtins.py
12.03
KB
-rw-r--r--
2023-01-01 08:34
_qlik_builtins.py
12.3
KB
-rw-r--r--
2023-01-01 08:34
_scheme_builtins.py
31.8
KB
-rw-r--r--
2023-01-01 08:34
_scilab_builtins.py
51.15
KB
-rw-r--r--
2023-01-01 08:34
_sourcemod_builtins.py
26.12
KB
-rw-r--r--
2023-01-01 08:34
_stan_builtins.py
13.13
KB
-rw-r--r--
2023-01-01 08:34
_stata_builtins.py
26.59
KB
-rw-r--r--
2023-01-01 08:34
_tsql_builtins.py
15.1
KB
-rw-r--r--
2023-01-01 08:34
_usd_builtins.py
1.62
KB
-rw-r--r--
2023-01-01 08:34
_vbscript_builtins.py
4.13
KB
-rw-r--r--
2023-01-01 08:34
_vim_builtins.py
55.73
KB
-rw-r--r--
2023-01-01 08:34
actionscript.py
11.4
KB
-rw-r--r--
2023-01-01 08:34
ada.py
5.2
KB
-rw-r--r--
2023-01-01 08:34
agile.py
876
B
-rw-r--r--
2023-01-01 08:34
algebra.py
9.64
KB
-rw-r--r--
2023-01-01 08:34
ambient.py
2.54
KB
-rw-r--r--
2023-01-01 08:34
amdgpu.py
1.57
KB
-rw-r--r--
2023-01-01 08:34
ampl.py
4.08
KB
-rw-r--r--
2023-01-01 08:34
apdlexer.py
26.03
KB
-rw-r--r--
2023-01-01 08:34
apl.py
3.33
KB
-rw-r--r--
2023-01-01 08:34
archetype.py
11.2
KB
-rw-r--r--
2023-01-01 08:34
arrow.py
3.48
KB
-rw-r--r--
2023-01-01 08:34
arturo.py
11.15
KB
-rw-r--r--
2023-01-01 08:34
asc.py
1.58
KB
-rw-r--r--
2023-01-01 08:34
asm.py
40.28
KB
-rw-r--r--
2023-01-01 08:34
automation.py
19.35
KB
-rw-r--r--
2023-01-01 08:34
bare.py
2.95
KB
-rw-r--r--
2023-01-01 08:34
basic.py
27.27
KB
-rw-r--r--
2023-01-01 08:34
bdd.py
1.61
KB
-rw-r--r--
2023-01-01 08:34
berry.py
3.14
KB
-rw-r--r--
2023-01-01 08:34
bibtex.py
4.61
KB
-rw-r--r--
2023-01-01 08:34
boa.py
3.82
KB
-rw-r--r--
2023-01-01 08:34
business.py
27.45
KB
-rw-r--r--
2023-01-01 08:34
c_cpp.py
17.37
KB
-rw-r--r--
2023-01-01 08:34
c_like.py
28.52
KB
-rw-r--r--
2023-01-01 08:34
capnproto.py
2.12
KB
-rw-r--r--
2023-01-01 08:34
cddl.py
5.06
KB
-rw-r--r--
2023-01-01 08:34
chapel.py
4.9
KB
-rw-r--r--
2023-01-01 08:34
clean.py
6.25
KB
-rw-r--r--
2023-01-01 08:34
comal.py
3.08
KB
-rw-r--r--
2023-01-01 08:34
compiled.py
1.37
KB
-rw-r--r--
2023-01-01 08:34
configs.py
40.84
KB
-rw-r--r--
2023-01-01 08:34
console.py
4.05
KB
-rw-r--r--
2023-01-01 08:34
cplint.py
1.36
KB
-rw-r--r--
2023-01-01 08:34
crystal.py
15.39
KB
-rw-r--r--
2023-01-01 08:34
csound.py
16.6
KB
-rw-r--r--
2023-01-01 08:34
css.py
24.72
KB
-rw-r--r--
2023-01-01 08:34
d.py
9.64
KB
-rw-r--r--
2023-01-01 08:34
dalvik.py
4.5
KB
-rw-r--r--
2023-01-01 08:34
data.py
26.31
KB
-rw-r--r--
2023-01-01 08:34
devicetree.py
3.93
KB
-rw-r--r--
2023-01-01 08:34
diff.py
5.04
KB
-rw-r--r--
2023-01-01 08:34
dotnet.py
29
KB
-rw-r--r--
2023-01-01 08:34
dsls.py
35.91
KB
-rw-r--r--
2023-01-01 08:34
dylan.py
10.14
KB
-rw-r--r--
2023-01-01 08:34
ecl.py
6.22
KB
-rw-r--r--
2023-01-01 08:34
eiffel.py
2.63
KB
-rw-r--r--
2023-01-01 08:34
elm.py
3.08
KB
-rw-r--r--
2023-01-01 08:34
elpi.py
6.22
KB
-rw-r--r--
2023-01-01 08:34
email.py
4.63
KB
-rw-r--r--
2023-01-01 08:34
erlang.py
18.72
KB
-rw-r--r--
2023-01-01 08:34
esoteric.py
10.15
KB
-rw-r--r--
2023-01-01 08:34
ezhil.py
3.2
KB
-rw-r--r--
2023-01-01 08:34
factor.py
19.07
KB
-rw-r--r--
2023-01-01 08:34
fantom.py
9.96
KB
-rw-r--r--
2023-01-01 08:34
felix.py
9.42
KB
-rw-r--r--
2023-01-01 08:34
fift.py
1.58
KB
-rw-r--r--
2023-01-01 08:34
floscript.py
2.61
KB
-rw-r--r--
2023-01-01 08:34
forth.py
7.03
KB
-rw-r--r--
2023-01-01 08:34
fortran.py
10.09
KB
-rw-r--r--
2023-01-01 08:34
foxpro.py
25.6
KB
-rw-r--r--
2023-01-01 08:34
freefem.py
26.28
KB
-rw-r--r--
2023-01-01 08:34
func.py
3.54
KB
-rw-r--r--
2023-01-01 08:34
functional.py
674
B
-rw-r--r--
2023-01-01 08:34
futhark.py
3.64
KB
-rw-r--r--
2023-01-01 08:34
gcodelexer.py
826
B
-rw-r--r--
2023-01-01 08:34
gdscript.py
7.37
KB
-rw-r--r--
2023-01-01 08:34
go.py
3.67
KB
-rw-r--r--
2023-01-01 08:34
grammar_notation.py
7.79
KB
-rw-r--r--
2023-01-01 08:34
graph.py
3.77
KB
-rw-r--r--
2023-01-01 08:34
graphics.py
38.02
KB
-rw-r--r--
2023-01-01 08:34
graphviz.py
1.89
KB
-rw-r--r--
2023-01-01 08:34
gsql.py
3.9
KB
-rw-r--r--
2023-01-01 08:34
haskell.py
32.13
KB
-rw-r--r--
2023-01-01 08:34
haxe.py
30.25
KB
-rw-r--r--
2023-01-01 08:34
hdl.py
21.99
KB
-rw-r--r--
2023-01-01 08:34
hexdump.py
3.52
KB
-rw-r--r--
2023-01-01 08:34
html.py
19.41
KB
-rw-r--r--
2023-01-01 08:34
idl.py
15.09
KB
-rw-r--r--
2023-01-01 08:34
igor.py
29.91
KB
-rw-r--r--
2023-01-01 08:34
inferno.py
3.06
KB
-rw-r--r--
2023-01-01 08:34
installers.py
12.87
KB
-rw-r--r--
2023-01-01 08:34
int_fiction.py
55.78
KB
-rw-r--r--
2023-01-01 08:34
iolang.py
1.86
KB
-rw-r--r--
2023-01-01 08:34
j.py
4.74
KB
-rw-r--r--
2023-01-01 08:34
javascript.py
61.39
KB
-rw-r--r--
2023-01-01 08:34
jmespath.py
2.01
KB
-rw-r--r--
2023-01-01 08:34
jslt.py
3.61
KB
-rw-r--r--
2023-01-01 08:34
jsonnet.py
5.5
KB
-rw-r--r--
2023-01-01 08:34
julia.py
11.37
KB
-rw-r--r--
2023-01-01 08:34
jvm.py
71.22
KB
-rw-r--r--
2023-01-01 08:34
kuin.py
11.14
KB
-rw-r--r--
2023-01-01 08:34
lilypond.py
9.52
KB
-rw-r--r--
2023-01-01 08:34
lisp.py
140.66
KB
-rw-r--r--
2023-01-01 08:34
macaulay2.py
31.17
KB
-rw-r--r--
2023-01-01 08:34
make.py
7.37
KB
-rw-r--r--
2023-01-01 08:34
markup.py
26.17
KB
-rw-r--r--
2023-01-01 08:34
math.py
676
B
-rw-r--r--
2023-01-01 08:34
matlab.py
129.74
KB
-rw-r--r--
2023-01-01 08:34
maxima.py
2.65
KB
-rw-r--r--
2023-01-01 08:34
meson.py
4.24
KB
-rw-r--r--
2023-01-01 08:34
mime.py
7.36
KB
-rw-r--r--
2023-01-01 08:34
minecraft.py
13.52
KB
-rw-r--r--
2023-01-01 08:34
mips.py
4.5
KB
-rw-r--r--
2023-01-01 08:34
ml.py
34.5
KB
-rw-r--r--
2023-01-01 08:34
modeling.py
13.21
KB
-rw-r--r--
2023-01-01 08:34
modula2.py
51.83
KB
-rw-r--r--
2023-01-01 08:34
monte.py
6.14
KB
-rw-r--r--
2023-01-01 08:34
mosel.py
8.97
KB
-rw-r--r--
2023-01-01 08:34
ncl.py
62.46
KB
-rw-r--r--
2023-01-01 08:34
nimrod.py
6.27
KB
-rw-r--r--
2023-01-01 08:34
nit.py
2.66
KB
-rw-r--r--
2023-01-01 08:34
nix.py
3.92
KB
-rw-r--r--
2023-01-01 08:34
oberon.py
4.07
KB
-rw-r--r--
2023-01-01 08:34
objective.py
22.42
KB
-rw-r--r--
2023-01-01 08:34
ooc.py
2.91
KB
-rw-r--r--
2023-01-01 08:34
other.py
1.7
KB
-rw-r--r--
2023-01-01 08:34
parasail.py
2.66
KB
-rw-r--r--
2023-01-01 08:34
parsers.py
25.3
KB
-rw-r--r--
2023-01-01 08:34
pascal.py
30.16
KB
-rw-r--r--
2023-01-01 08:34
pawn.py
7.96
KB
-rw-r--r--
2023-01-01 08:34
perl.py
38.25
KB
-rw-r--r--
2023-01-01 08:34
phix.py
22.71
KB
-rw-r--r--
2023-01-01 08:34
php.py
12.21
KB
-rw-r--r--
2023-01-01 08:34
pointless.py
1.93
KB
-rw-r--r--
2023-01-01 08:34
pony.py
3.17
KB
-rw-r--r--
2023-01-01 08:34
praat.py
12.38
KB
-rw-r--r--
2023-01-01 08:34
procfile.py
1.13
KB
-rw-r--r--
2023-01-01 08:34
prolog.py
12.06
KB
-rw-r--r--
2023-01-01 08:34
promql.py
4.6
KB
-rw-r--r--
2023-01-01 08:34
python.py
52.27
KB
-rw-r--r--
2023-01-01 08:34
q.py
6.77
KB
-rw-r--r--
2023-01-01 08:34
qlik.py
3.58
KB
-rw-r--r--
2023-01-01 08:34
qvt.py
5.93
KB
-rw-r--r--
2023-01-01 08:34
r.py
6.04
KB
-rw-r--r--
2023-01-01 08:34
rdf.py
15.42
KB
-rw-r--r--
2023-01-01 08:34
rebol.py
18.16
KB
-rw-r--r--
2023-01-01 08:34
resource.py
2.83
KB
-rw-r--r--
2023-01-01 08:34
ride.py
4.94
KB
-rw-r--r--
2023-01-01 08:34
rita.py
1.1
KB
-rw-r--r--
2023-01-01 08:34
rnc.py
1.93
KB
-rw-r--r--
2023-01-01 08:34
roboconf.py
1.92
KB
-rw-r--r--
2023-01-01 08:34
robotframework.py
18.02
KB
-rw-r--r--
2023-01-01 08:34
ruby.py
22.24
KB
-rw-r--r--
2023-01-01 08:34
rust.py
8.02
KB
-rw-r--r--
2023-01-01 08:34
sas.py
9.18
KB
-rw-r--r--
2023-01-01 08:34
savi.py
4.54
KB
-rw-r--r--
2023-01-01 08:34
scdoc.py
2.19
KB
-rw-r--r--
2023-01-01 08:34
scripting.py
68.37
KB
-rw-r--r--
2023-01-01 08:34
sgf.py
1.94
KB
-rw-r--r--
2023-01-01 08:34
shell.py
35.49
KB
-rw-r--r--
2023-01-01 08:34
sieve.py
2.38
KB
-rw-r--r--
2023-01-01 08:34
slash.py
8.28
KB
-rw-r--r--
2023-01-01 08:34
smalltalk.py
7.04
KB
-rw-r--r--
2023-01-01 08:34
smithy.py
2.6
KB
-rw-r--r--
2023-01-01 08:34
smv.py
2.71
KB
-rw-r--r--
2023-01-01 08:34
snobol.py
2.67
KB
-rw-r--r--
2023-01-01 08:34
solidity.py
3.05
KB
-rw-r--r--
2023-01-01 08:34
sophia.py
3.25
KB
-rw-r--r--
2023-01-01 08:34
special.py
3.33
KB
-rw-r--r--
2023-01-01 08:34
spice.py
2.63
KB
-rw-r--r--
2023-01-01 08:34
sql.py
33.35
KB
-rw-r--r--
2023-01-01 08:34
srcinfo.py
1.65
KB
-rw-r--r--
2023-01-01 08:34
stata.py
6.27
KB
-rw-r--r--
2023-01-01 08:34
supercollider.py
3.61
KB
-rw-r--r--
2023-01-01 08:34
tal.py
2.58
KB
-rw-r--r--
2023-01-01 08:34
tcl.py
5.38
KB
-rw-r--r--
2023-01-01 08:34
teal.py
3.44
KB
-rw-r--r--
2023-01-01 08:34
templates.py
70.99
KB
-rw-r--r--
2023-01-01 08:34
teraterm.py
9.49
KB
-rw-r--r--
2023-01-01 08:34
testing.py
10.51
KB
-rw-r--r--
2023-01-01 08:34
text.py
1
KB
-rw-r--r--
2023-01-01 08:34
textedit.py
7.43
KB
-rw-r--r--
2023-01-01 08:34
textfmts.py
14.84
KB
-rw-r--r--
2023-01-01 08:34
theorem.py
19.68
KB
-rw-r--r--
2023-01-01 08:34
thingsdb.py
4.13
KB
-rw-r--r--
2023-01-01 08:34
tlb.py
1.34
KB
-rw-r--r--
2023-01-01 08:34
tnt.py
10.21
KB
-rw-r--r--
2023-01-01 08:34
trafficscript.py
1.44
KB
-rw-r--r--
2023-01-01 08:34
typoscript.py
8.01
KB
-rw-r--r--
2023-01-01 08:34
ul4.py
8.75
KB
-rw-r--r--
2023-01-01 08:34
unicon.py
18.08
KB
-rw-r--r--
2023-01-01 08:34
urbi.py
5.9
KB
-rw-r--r--
2023-01-01 08:34
usd.py
3.43
KB
-rw-r--r--
2023-01-01 08:34
varnish.py
7.1
KB
-rw-r--r--
2023-01-01 08:34
verification.py
3.79
KB
-rw-r--r--
2023-01-01 08:34
web.py
894
B
-rw-r--r--
2023-01-01 08:34
webassembly.py
5.57
KB
-rw-r--r--
2023-01-01 08:34
webidl.py
10.27
KB
-rw-r--r--
2023-01-01 08:34
webmisc.py
39.6
KB
-rw-r--r--
2023-01-01 08:34
whiley.py
3.92
KB
-rw-r--r--
2023-01-01 08:34
wowtoc.py
3.93
KB
-rw-r--r--
2023-01-01 08:34
wren.py
3.16
KB
-rw-r--r--
2023-01-01 08:34
x10.py
1.88
KB
-rw-r--r--
2023-01-01 08:34
xorg.py
902
B
-rw-r--r--
2023-01-01 08:34
yang.py
4.39
KB
-rw-r--r--
2023-01-01 08:34
zig.py
3.86
KB
-rw-r--r--
2023-01-01 08:34
Save
Rename
""" pygments.lexers.textfmts ~~~~~~~~~~~~~~~~~~~~~~~~ Lexers for various text formats. :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. """ import re from pygments.lexers import guess_lexer, get_lexer_by_name from pygments.lexer import RegexLexer, bygroups, default, include from pygments.token import Text, Comment, Operator, Keyword, Name, String, \ Number, Generic, Literal, Punctuation from pygments.util import ClassNotFound __all__ = ['IrcLogsLexer', 'TodotxtLexer', 'HttpLexer', 'GettextLexer', 'NotmuchLexer', 'KernelLogLexer'] class IrcLogsLexer(RegexLexer): """ Lexer for IRC logs in *irssi*, *xchat* or *weechat* style. """ name = 'IRC logs' aliases = ['irc'] filenames = ['*.weechatlog'] mimetypes = ['text/x-irclog'] flags = re.VERBOSE | re.MULTILINE timestamp = r""" ( # irssi / xchat and others (?: \[|\()? # Opening bracket or paren for the timestamp (?: # Timestamp (?: (?:\d{1,4} [-/])* # Date as - or /-separated groups of digits (?:\d{1,4}) [T ])? # Date/time separator: T or space (?: \d?\d [:.])* # Time as :/.-separated groups of 1 or 2 digits (?: \d?\d) ) (?: \]|\))?\s+ # Closing bracket or paren for the timestamp | # weechat \d{4}\s\w{3}\s\d{2}\s # Date \d{2}:\d{2}:\d{2}\s+ # Time + Whitespace | # xchat \w{3}\s\d{2}\s # Date \d{2}:\d{2}:\d{2}\s+ # Time + Whitespace )? """ tokens = { 'root': [ # log start/end (r'^\*\*\*\*(.*)\*\*\*\*$', Comment), # hack ("^" + timestamp + r'(\s*<[^>]*>\s*)$', bygroups(Comment.Preproc, Name.Tag)), # normal msgs ("^" + timestamp + r""" (\s*<.*?>\s*) # Nick """, bygroups(Comment.Preproc, Name.Tag), 'msg'), # /me msgs ("^" + timestamp + r""" (\s*[*]\s+) # Star (\S+\s+.*?\n) # Nick + rest of message """, bygroups(Comment.Preproc, Keyword, Generic.Inserted)), # join/part msgs ("^" + timestamp + r""" (\s*(?:\*{3}|<?-[!@=P]?->?)\s*) # Star(s) or symbols (\S+\s+) # Nick + Space (.*?\n) # Rest of message """, bygroups(Comment.Preproc, Keyword, String, Comment)), (r"^.*?\n", Text), ], 'msg': [ (r"\S+:(?!//)", Name.Attribute), # Prefix (r".*\n", Text, '#pop'), ], } class GettextLexer(RegexLexer): """ Lexer for Gettext catalog files. .. versionadded:: 0.9 """ name = 'Gettext Catalog' aliases = ['pot', 'po'] filenames = ['*.pot', '*.po'] mimetypes = ['application/x-gettext', 'text/x-gettext', 'text/gettext'] tokens = { 'root': [ (r'^#,\s.*?$', Keyword.Type), (r'^#:\s.*?$', Keyword.Declaration), # (r'^#$', Comment), (r'^(#|#\.\s|#\|\s|#~\s|#\s).*$', Comment.Single), (r'^(")([A-Za-z-]+:)(.*")$', bygroups(String, Name.Property, String)), (r'^".*"$', String), (r'^(msgid|msgid_plural|msgstr|msgctxt)(\s+)(".*")$', bygroups(Name.Variable, Text, String)), (r'^(msgstr\[)(\d)(\])(\s+)(".*")$', bygroups(Name.Variable, Number.Integer, Name.Variable, Text, String)), ] } class HttpLexer(RegexLexer): """ Lexer for HTTP sessions. .. versionadded:: 1.5 """ name = 'HTTP' aliases = ['http'] flags = re.DOTALL def get_tokens_unprocessed(self, text, stack=('root',)): """Reset the content-type state.""" self.content_type = None return RegexLexer.get_tokens_unprocessed(self, text, stack) def header_callback(self, match): if match.group(1).lower() == 'content-type': content_type = match.group(5).strip() if ';' in content_type: content_type = content_type[:content_type.find(';')].strip() self.content_type = content_type yield match.start(1), Name.Attribute, match.group(1) yield match.start(2), Text, match.group(2) yield match.start(3), Operator, match.group(3) yield match.start(4), Text, match.group(4) yield match.start(5), Literal, match.group(5) yield match.start(6), Text, match.group(6) def continuous_header_callback(self, match): yield match.start(1), Text, match.group(1) yield match.start(2), Literal, match.group(2) yield match.start(3), Text, match.group(3) def content_callback(self, match): content_type = getattr(self, 'content_type', None) content = match.group() offset = match.start() if content_type: from pygments.lexers import get_lexer_for_mimetype possible_lexer_mimetypes = [content_type] if '+' in content_type: # application/calendar+xml can be treated as application/xml # if there's not a better match. general_type = re.sub(r'^(.*)/.*\+(.*)$', r'\1/\2', content_type) possible_lexer_mimetypes.append(general_type) for i in possible_lexer_mimetypes: try: lexer = get_lexer_for_mimetype(i) except ClassNotFound: pass else: for idx, token, value in lexer.get_tokens_unprocessed(content): yield offset + idx, token, value return yield offset, Text, content tokens = { 'root': [ (r'(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE|PATCH|CONNECT)( +)([^ ]+)( +)' r'(HTTP)(/)(1\.[01]|2(?:\.0)?|3)(\r?\n|\Z)', bygroups(Name.Function, Text, Name.Namespace, Text, Keyword.Reserved, Operator, Number, Text), 'headers'), (r'(HTTP)(/)(1\.[01]|2(?:\.0)?|3)( +)(\d{3})(?:( +)([^\r\n]*))?(\r?\n|\Z)', bygroups(Keyword.Reserved, Operator, Number, Text, Number, Text, Name.Exception, Text), 'headers'), ], 'headers': [ (r'([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|\Z)', header_callback), (r'([\t ]+)([^\r\n]+)(\r?\n|\Z)', continuous_header_callback), (r'\r?\n', Text, 'content') ], 'content': [ (r'.+', content_callback) ] } def analyse_text(text): return text.startswith(('GET /', 'POST /', 'PUT /', 'DELETE /', 'HEAD /', 'OPTIONS /', 'TRACE /', 'PATCH /', 'CONNECT ')) class TodotxtLexer(RegexLexer): """ Lexer for Todo.txt todo list format. .. versionadded:: 2.0 """ name = 'Todotxt' url = 'http://todotxt.com/' aliases = ['todotxt'] # *.todotxt is not a standard extension for Todo.txt files; including it # makes testing easier, and also makes autodetecting file type easier. filenames = ['todo.txt', '*.todotxt'] mimetypes = ['text/x-todo'] # Aliases mapping standard token types of Todo.txt format concepts CompleteTaskText = Operator # Chosen to de-emphasize complete tasks IncompleteTaskText = Text # Incomplete tasks should look like plain text # Priority should have most emphasis to indicate importance of tasks Priority = Generic.Heading # Dates should have next most emphasis because time is important Date = Generic.Subheading # Project and context should have equal weight, and be in different colors Project = Generic.Error Context = String # If tag functionality is added, it should have the same weight as Project # and Context, and a different color. Generic.Traceback would work well. # Regex patterns for building up rules; dates, priorities, projects, and # contexts are all atomic # TODO: Make date regex more ISO 8601 compliant date_regex = r'\d{4,}-\d{2}-\d{2}' priority_regex = r'\([A-Z]\)' project_regex = r'\+\S+' context_regex = r'@\S+' # Compound regex expressions complete_one_date_regex = r'(x )(' + date_regex + r')' complete_two_date_regex = (complete_one_date_regex + r'( )(' + date_regex + r')') priority_date_regex = r'(' + priority_regex + r')( )(' + date_regex + r')' tokens = { # Should parse starting at beginning of line; each line is a task 'root': [ # Complete task entry points: two total: # 1. Complete task with two dates (complete_two_date_regex, bygroups(CompleteTaskText, Date, CompleteTaskText, Date), 'complete'), # 2. Complete task with one date (complete_one_date_regex, bygroups(CompleteTaskText, Date), 'complete'), # Incomplete task entry points: six total: # 1. Priority plus date (priority_date_regex, bygroups(Priority, IncompleteTaskText, Date), 'incomplete'), # 2. Priority only (priority_regex, Priority, 'incomplete'), # 3. Leading date (date_regex, Date, 'incomplete'), # 4. Leading context (context_regex, Context, 'incomplete'), # 5. Leading project (project_regex, Project, 'incomplete'), # 6. Non-whitespace catch-all (r'\S+', IncompleteTaskText, 'incomplete'), ], # Parse a complete task 'complete': [ # Newline indicates end of task, should return to root (r'\s*\n', CompleteTaskText, '#pop'), # Tokenize contexts and projects (context_regex, Context), (project_regex, Project), # Tokenize non-whitespace text (r'\S+', CompleteTaskText), # Tokenize whitespace not containing a newline (r'\s+', CompleteTaskText), ], # Parse an incomplete task 'incomplete': [ # Newline indicates end of task, should return to root (r'\s*\n', IncompleteTaskText, '#pop'), # Tokenize contexts and projects (context_regex, Context), (project_regex, Project), # Tokenize non-whitespace text (r'\S+', IncompleteTaskText), # Tokenize whitespace not containing a newline (r'\s+', IncompleteTaskText), ], } class NotmuchLexer(RegexLexer): """ For Notmuch email text format. .. versionadded:: 2.5 Additional options accepted: `body_lexer` If given, highlight the contents of the message body with the specified lexer, else guess it according to the body content (default: ``None``). """ name = 'Notmuch' url = 'https://notmuchmail.org/' aliases = ['notmuch'] def _highlight_code(self, match): code = match.group(1) try: if self.body_lexer: lexer = get_lexer_by_name(self.body_lexer) else: lexer = guess_lexer(code.strip()) except ClassNotFound: lexer = get_lexer_by_name('text') yield from lexer.get_tokens_unprocessed(code) tokens = { 'root': [ (r'\fmessage\{\s*', Keyword, ('message', 'message-attr')), ], 'message-attr': [ (r'(\s*id:\s*)(\S+)', bygroups(Name.Attribute, String)), (r'(\s*(?:depth|match|excluded):\s*)(\d+)', bygroups(Name.Attribute, Number.Integer)), (r'(\s*filename:\s*)(.+\n)', bygroups(Name.Attribute, String)), default('#pop'), ], 'message': [ (r'\fmessage\}\n', Keyword, '#pop'), (r'\fheader\{\n', Keyword, 'header'), (r'\fbody\{\n', Keyword, 'body'), ], 'header': [ (r'\fheader\}\n', Keyword, '#pop'), (r'((?:Subject|From|To|Cc|Date):\s*)(.*\n)', bygroups(Name.Attribute, String)), (r'(.*)(\s*\(.*\))(\s*\(.*\)\n)', bygroups(Generic.Strong, Literal, Name.Tag)), ], 'body': [ (r'\fpart\{\n', Keyword, 'part'), (r'\f(part|attachment)\{\s*', Keyword, ('part', 'part-attr')), (r'\fbody\}\n', Keyword, '#pop'), ], 'part-attr': [ (r'(ID:\s*)(\d+)', bygroups(Name.Attribute, Number.Integer)), (r'(,\s*)((?:Filename|Content-id):\s*)([^,]+)', bygroups(Punctuation, Name.Attribute, String)), (r'(,\s*)(Content-type:\s*)(.+\n)', bygroups(Punctuation, Name.Attribute, String)), default('#pop'), ], 'part': [ (r'\f(?:part|attachment)\}\n', Keyword, '#pop'), (r'\f(?:part|attachment)\{\s*', Keyword, ('#push', 'part-attr')), (r'^Non-text part: .*\n', Comment), (r'(?s)(.*?(?=\f(?:part|attachment)\}\n))', _highlight_code), ], } def analyse_text(text): return 1.0 if text.startswith('\fmessage{') else 0.0 def __init__(self, **options): self.body_lexer = options.get('body_lexer', None) RegexLexer.__init__(self, **options) class KernelLogLexer(RegexLexer): """ For Linux Kernel log ("dmesg") output. .. versionadded:: 2.6 """ name = 'Kernel log' aliases = ['kmsg', 'dmesg'] filenames = ['*.kmsg', '*.dmesg'] tokens = { 'root': [ (r'^[^:]+:debug : (?=\[)', Text, 'debug'), (r'^[^:]+:info : (?=\[)', Text, 'info'), (r'^[^:]+:warn : (?=\[)', Text, 'warn'), (r'^[^:]+:notice: (?=\[)', Text, 'warn'), (r'^[^:]+:err : (?=\[)', Text, 'error'), (r'^[^:]+:crit : (?=\[)', Text, 'error'), (r'^(?=\[)', Text, 'unknown'), ], 'unknown': [ (r'^(?=.+(warning|notice|audit|deprecated))', Text, 'warn'), (r'^(?=.+(error|critical|fail|Bug))', Text, 'error'), default('info'), ], 'base': [ (r'\[[0-9. ]+\] ', Number), (r'(?<=\] ).+?:', Keyword), (r'\n', Text, '#pop'), ], 'debug': [ include('base'), (r'.+\n', Comment, '#pop') ], 'info': [ include('base'), (r'.+\n', Text, '#pop') ], 'warn': [ include('base'), (r'.+\n', Generic.Strong, '#pop') ], 'error': [ include('base'), (r'.+\n', Generic.Error, '#pop') ] }