author | Georg Lukas <georg@op-co.de> | 2009-11-19 11:14:45 (UTC) |
---|---|---|
committer | Georg Lukas <georg@op-co.de> | 2009-11-19 11:14:45 (UTC) |
commit | 56522ebe1387721d10196e835346257e7494abad (patch) (unidiff) | |
tree | 75e2d2c2148bf9aad54b361286957b033f13293e | |
parent | e633ccf714eb423c4522924c3b611dac2e176c5e (diff) | |
download | cgit-56522ebe1387721d10196e835346257e7494abad.zip cgit-56522ebe1387721d10196e835346257e7494abad.tar.gz cgit-56522ebe1387721d10196e835346257e7494abad.tar.bz2 |
syntax highlighting for all formats supported by "highlight"
The highlight tool can be given any of the supported file extensions
as its -S parameter. This patch replaces the case-switch by extracting
the extension from the supplied file name and passing it to highlight.
However, this requires a shell supporting the ${var##pattern} syntax,
like dash or bash.
Unknown extensions cause a fall-back to plain text using the --force
switch. Error messages are redirected to /dev/null.
A special case maps Makefile and Makefile.* to the "mk" extension.
The total overhead is reduced by calling "exec highlight". No forks are
needed during script execution.
Signed-off-by: Georg Lukas <georg@op-co.de>
-rwxr-xr-x | filters/syntax-highlighting.sh | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/filters/syntax-highlighting.sh b/filters/syntax-highlighting.sh index 999ad0c..6b1c576 100755 --- a/filters/syntax-highlighting.sh +++ b/filters/syntax-highlighting.sh | |||
@@ -1,39 +1,34 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | # This script can be used to implement syntax highlighting in the cgit | 2 | # This script can be used to implement syntax highlighting in the cgit |
3 | # tree-view by refering to this file with the source-filter or repo.source- | 3 | # tree-view by refering to this file with the source-filter or repo.source- |
4 | # filter options in cgitrc. | 4 | # filter options in cgitrc. |
5 | # | 5 | # |
6 | # This script requires a shell supporting the ${var##pattern} syntax. | ||
7 | # It is supported by at least dash and bash, however busybox environments | ||
8 | # might have to use an external call to sed instead. | ||
9 | # | ||
6 | # Note: the highlight command (http://www.andre-simon.de/) uses css for syntax | 10 | # Note: the highlight command (http://www.andre-simon.de/) uses css for syntax |
7 | # highlighting, so you'll probably want something like the following included | 11 | # highlighting, so you'll probably want something like the following included |
8 | # in your css file (generated by highlight 2.4.8 and adapted for cgit): | 12 | # in your css file (generated by highlight 2.4.8 and adapted for cgit): |
9 | # | 13 | # |
10 | # table.blob .num { color:#2928ff; } | 14 | # table.blob .num { color:#2928ff; } |
11 | # table.blob .esc { color:#ff00ff; } | 15 | # table.blob .esc { color:#ff00ff; } |
12 | # table.blob .str { color:#ff0000; } | 16 | # table.blob .str { color:#ff0000; } |
13 | # table.blob .dstr { color:#818100; } | 17 | # table.blob .dstr { color:#818100; } |
14 | # table.blob .slc { color:#838183; font-style:italic; } | 18 | # table.blob .slc { color:#838183; font-style:italic; } |
15 | # table.blob .com { color:#838183; font-style:italic; } | 19 | # table.blob .com { color:#838183; font-style:italic; } |
16 | # table.blob .dir { color:#008200; } | 20 | # table.blob .dir { color:#008200; } |
17 | # table.blob .sym { color:#000000; } | 21 | # table.blob .sym { color:#000000; } |
18 | # table.blob .kwa { color:#000000; font-weight:bold; } | 22 | # table.blob .kwa { color:#000000; font-weight:bold; } |
19 | # table.blob .kwb { color:#830000; } | 23 | # table.blob .kwb { color:#830000; } |
20 | # table.blob .kwc { color:#000000; font-weight:bold; } | 24 | # table.blob .kwc { color:#000000; font-weight:bold; } |
21 | # table.blob .kwd { color:#010181; } | 25 | # table.blob .kwd { color:#010181; } |
22 | 26 | ||
23 | case "$1" in | 27 | # store filename and extension in local vars |
24 | *.c) | 28 | BASENAME="$1" |
25 | highlight -f -I -X -S c | 29 | EXTENSION="${BASENAME##*.}" |
26 | ;; | 30 | |
27 | *.h) | 31 | # map Makefile and Makefile.* to .mk |
28 | highlight -f -I -X -S c | 32 | [ "${BASENAME%%.*}" == "Makefile" ] && EXTENSION=mk |
29 | ;; | 33 | |
30 | *.sh) | 34 | exec highlight --force -f -I -X -S $EXTENSION 2>/dev/null |
31 | highlight -f -I -X -S sh | ||
32 | ;; | ||
33 | *.css) | ||
34 | highlight -f -I -X -S css | ||
35 | ;; | ||
36 | *) | ||
37 | highlight -f -I -X -S txt | ||
38 | ;; | ||
39 | esac | ||