]> git.armaanb.net Git - stagit.git/blobdiff - highlight
Link index.html to log.html, being the default page.
[stagit.git] / highlight
index c67e70319b31a8f834597897aa9cea7fd1a56ec6..61f554fa2b7e92d13dbbfdfee1922c0efb20a072 100755 (executable)
--- a/highlight
+++ b/highlight
@@ -1,29 +1,58 @@
-#!/usr/bin/env ruby
+#!/usr/bin/env python3
 
-require 'linguist'
-require 'pygments'
+import pygments
+from pygments import highlight
+from pygments.formatters import HtmlFormatter
+from pygments.lexers import guess_lexer, guess_lexer_for_filename
 
-stdin = ARGF.file
+from sys import stdin, stderr
 
-filename = stdin.readline.strip  # Read first line (filename).
-contents = stdin.read            # Read rest (code).
+filename = stdin.readline().strip()
+contents = stdin.read()
 
-detected = Linguist::FileBlob.new(filename).language
+lexer=None
 
-# Debugging
-#puts "File #{filename}"
-#puts "Code:
-#{contents}"
-#print "Language: "
-#pp detected
+try:
+    lexer = guess_lexer_for_filename(filename, contents)
+except pygments.util.ClassNotFound:
+    try:
+        lexer = guess_lexer(contents)
+    except pygments.util.ClassNotFound:
+        pass
 
-html = Pygments.highlight(contents,
-  :lexer => detected.name,
-  :formatter => 'html',
-  :options => {
-    :encoding => 'utf-8',
-    :linenos => 'table',
-    :lineanchors => 'loc',
-    :anchorlinenos => true})
+if lexer is None:
+    from pygments.lexers import TextLexer
+    lexer = TextLexer()
 
-puts html
+rendered = None
+if lexer.__class__ is pygments.lexers.MarkdownLexer:
+    from markdown import markdown
+    rendered = markdown(contents, extensions=[
+        'codehilite',
+        'extra',
+        'sane_lists',
+        'smarty',
+        'pymdownx.tasklist'
+    ])
+
+FORMAT = HtmlFormatter(
+    style='murphy',
+    cssclass='highlight',
+    linenos='table',
+    lineanchors='loc',
+    anchorlinenos=True)
+
+if rendered:
+    print('<article class="markup markdown">')
+    print(rendered)
+    print('</article>')
+print('<div id="blob">')
+print(highlight(contents, lexer, FORMAT))
+print('</div>')
+print('<style>')
+print(FORMAT.get_style_defs(''))
+print('</style>')
+
+print("Filename: {}; Lexer: {}.".format(filename, lexer), file=stderr)
+if rendered:
+    print("Markdown was rendered in addition.", file=stderr)