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