50 lines
897 B
Plaintext
50 lines
897 B
Plaintext
|
#!/usr/bin/env bash
|
||
|
|
||
|
_highlight() {
|
||
|
declare -n syn=$1
|
||
|
|
||
|
if [[ "$syn" ]]; then
|
||
|
exec highlight --force --inline-css -f -I -O xhtml -S "$syn" 2>/dev/null
|
||
|
else
|
||
|
# echo " :cgit: No syntax type provided."
|
||
|
exec cat
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
file_name=$1
|
||
|
file_extension="${file_name##*.}"
|
||
|
|
||
|
if ! [[ "$file_name" == "$file_extension" ]]; then
|
||
|
case "$file_extension" in
|
||
|
(md) exec cmark;;
|
||
|
(bash|zsh) syntax='sh';;
|
||
|
(*) syntax=$file_extension;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
case "$file_name" in
|
||
|
(Makefile) syntax='makefile';;
|
||
|
(PKGBUILD) syntax='sh';;
|
||
|
esac
|
||
|
|
||
|
# Read and output the first line
|
||
|
read -r
|
||
|
|
||
|
# Set syntax if the first line is a shebang
|
||
|
if [[ "$REPLY" =~ ^'#!' ]]; then
|
||
|
case "$REPLY" in
|
||
|
(*sh) syntax='sh';;
|
||
|
(*ruby*) syntax='ruby';;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
{
|
||
|
# Print the first line
|
||
|
printf '%s\n' "$REPLY"
|
||
|
|
||
|
# Read and output everything
|
||
|
while read -r; do
|
||
|
printf '%s\n' "$REPLY"
|
||
|
done
|
||
|
} | _highlight syntax
|