summaryrefslogtreecommitdiff
path: root/cgit/filters/syntax-highlighting.sh
diff options
context:
space:
mode:
Diffstat (limited to 'cgit/filters/syntax-highlighting.sh')
-rw-r--r--cgit/filters/syntax-highlighting.sh36
1 files changed, 36 insertions, 0 deletions
diff --git a/cgit/filters/syntax-highlighting.sh b/cgit/filters/syntax-highlighting.sh
new file mode 100644
index 0000000..44cd310
--- /dev/null
+++ b/cgit/filters/syntax-highlighting.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# This script can be used to implement syntax highlighting in the cgit
+# tree-view by referring to this file with the source-filter or repo.source-
+# filter options in cgitrc.
+
+# Depends: cmark highlight
+
+# 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 )
+
+# store filename and extension in local vars
+BASENAME="$1"
+EXTENSION="${BASENAME##*.}"
+
+[ "${BASENAME}" = "${EXTENSION}" ] && EXTENSION=txt
+[ -z "${EXTENSION}" ] && EXTENSION=txt
+
+# map Makefile and Makefile.* to .mk
+[ "${BASENAME%%.*}" = "Makefile" ] && EXTENSION=mk
+
+# map less common markdown extensions to .md
+case "$(printf '%s' "$EXTENSION" | tr '[:upper:]' '[:lower:]')" in
+ markdown|mdown|mkd|mdwn) EXTENSION=md;;
+esac
+
+case "$EXTENSION" in
+ md) exec cmark --safe;;
+ *) exec highlight --force -f -I -O xhtml -S "$EXTENSION" --ordered-list --line-number-ref=n 2>/dev/null;;
+esac