]> git.armaanb.net Git - stagit.git/blob - highlight.py
Use /usr/local/share
[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 outp = ""
50 if rendered:
51     outp += '<article class="markup markdown">'
52     outp += rendered
53     outp += "</article>"
54 outp += f'<div id="blob">{highlight(contents, lexer, formatter)}</div>"'
55 outp += '<link rel="stylesheet" href="/syntax.css"'
56
57 print(outp)
58
59 print(f"Filename: {filename}; Lexer: {lexer}.", file=stderr)
60
61 if rendered:
62     print("Markdown was rendered in addition.", file=stderr)