]> git.armaanb.net Git - stagit.git/blob - highlight.py
eb146e7849033bd475f2eff7bd46fbbd0b8dbfb1
[stagit.git] / highlight.py
1 #!/usr/bin/env python3
2
3 import pygments
4 from pygments import highlight
5 from pygments.formatters import HtmlFormatter
6 import pygments.lexers
7 from markdown import markdown
8
9 from sys import stdin, stderr
10
11 filename = stdin.readline().strip()
12 contents = stdin.read()
13 lexer = None
14
15 try:
16     lexer = pygments.lexers.guess_lexer_for_filename(filename, contents)
17 except pygments.util.ClassNotFound:
18     try:
19         lexer = pygments.lexers.guess_lexer(contents)
20     except pygments.util.ClassNotFound:
21         pass
22
23 if lexer is None:
24     lexer = pygments.lexers.special.TextLexer
25
26 rendered = (
27     markdown(
28         contents,
29         extensions=[
30             "codehilite",
31             "extra",
32             "sane_lists",
33             "smarty",
34             "pymdownx.tasklist",
35         ],
36     )
37     if lexer.__class__ is pygments.lexers.MarkdownLexer
38     else None
39 )
40
41 formatter = HtmlFormatter(
42     style="monokai",
43     cssclass="highlight",
44     linenos="table",
45     lineanchors="loc",
46     anchorlinenos=True,
47 )
48
49 if rendered:
50     print('<article class="markup markdown">')
51     print(rendered)
52     print("</article>")
53 print('<div id="blob">')
54 print(highlight(contents, lexer, formatter))
55 print("</div>")
56 print('<link rel="stylesheet" href="/syntax.css"')
57
58 print(f"Filename: {filename}; Lexer: {lexer}.", file=stderr)
59
60 if rendered:
61     print("Markdown was rendered in addition.", file=stderr)