summaryrefslogtreecommitdiffstats
path: root/syntax-highlighting.py
diff options
context:
space:
mode:
authorArman Soltani <arman (at) rustymanta (dot) xyz> 2026-07-11 16:45:33 +0200
committerArman Soltani <arman (at) rustymanta (dot) xyz> 2026-07-11 16:45:33 +0200
commitf60122c368f03eec5a6388b4b2ff536917326997 (patch)
treeb69820e73f1b06784dfa1129824ff20c381c33b7 /syntax-highlighting.py
parent692c1b4ff506cadf14cab802ac4d002b90c08598 (diff)
downloadgit_serve-f60122c368f03eec5a6388b4b2ff536917326997.tar.gz
git_serve-f60122c368f03eec5a6388b4b2ff536917326997.zip
catppuccin styling
Diffstat (limited to 'syntax-highlighting.py')
-rw-r--r--syntax-highlighting.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/syntax-highlighting.py b/syntax-highlighting.py
new file mode 100644
index 0000000..9efb838
--- /dev/null
+++ b/syntax-highlighting.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+
+# /usr/lib/cgit/filters/syntax-highlighting.py
+# make sure to also install catppuccin[pygments] with pip
+
+# This script uses Pygments and Python3. You must have both installed
+# for this to work.
+#
+# http://pygments.org/
+# http://python.org/
+#
+# It may be used with the source-filter or repo.source-filter settings
+# in cgitrc.
+#
+# The following environment variables can be used to retrieve the
+# configuration of the repository for which this script is called:
+# CGIT_REPO_URL ( = repo.url setting )
+# CGIT_REPO_NAME ( = repo.name setting )
+# CGIT_REPO_PATH ( = repo.path setting )
+# CGIT_REPO_OWNER ( = repo.owner setting )
+# CGIT_REPO_DEFBRANCH ( = repo.defbranch setting )
+# CGIT_REPO_SECTION ( = section setting )
+# CGIT_REPO_CLONE_URL ( = repo.clone-url setting )
+
+
+import sys
+import io
+from pygments import highlight
+from pygments.util import ClassNotFound
+from pygments.lexers import TextLexer
+from pygments.lexers import guess_lexer
+from pygments.lexers import guess_lexer_for_filename
+from pygments.formatters import HtmlFormatter
+from catppuccin.extras.pygments import FrappeStyle
+
+sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding="utf-8", errors="replace")
+sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
+data = sys.stdin.read()
+filename = sys.argv[1]
+formatter = HtmlFormatter(style=FrappeStyle, nobackground=True)
+
+try:
+ lexer = guess_lexer_for_filename(filename, data)
+except ClassNotFound:
+ # check if there is any shebang
+ if data[0:2] == "#!":
+ try:
+ lexer = guess_lexer(data)
+ except ClassNotFound:
+ lexer = TextLexer()
+ else:
+ lexer = TextLexer()
+except TypeError:
+ lexer = TextLexer()
+
+# highlight! :-)
+# printout pygments' css definitions as well
+sys.stdout.write("<style>")
+sys.stdout.write(formatter.get_style_defs(".highlight"))
+sys.stdout.write("</style>")
+sys.stdout.write(highlight(data, lexer, formatter, outfile=None))