#!/bin/bash # uses Pygments v2.8.0 for syntax highlighting on applicable file types for path in "$@"; do # match by known filenames filename=$(basename "$path") case "$filename" in .bash_aliases|.bash_environment|.bash_login|.bash_logout|\ .bash_profile|.cshdirs|.cshrc|.kshrc|.profile|.tcshrc|.zlogin|\ .zlogout|.zprofile|bash.bashrc|csh.cshrc|csh.login|csh.logout|\ ksh.kshrc|zlogin|zlogout|zprofile) # shell lexer pygmentize -f 256 -O style="$PYGMENTIZE_STYLE" -l sh "$path" ;; .Renviron|.Rhistory|.Rprofile|.bashrc|.exrc|.gvimrc|.htaccess|.vimrc|\ .zshrc|BUCK|BUILD|BUILD.bazel|CMakeLists.txt|Dockerfile|GNUmakefile|\ Gemfile|Kconfig*|Makefile|Makefile.*|PKGBUILD|Pipfile|Pipfile.lock|\ Rakefile|SConscript|SConstruct|Singularity|WORKSPACE|apache.conf|\ apache2.conf|autodelegate|autohandler|bashrc|control|dhandler|exrc|\ external.in*|gvimrc|makefile|nginx.conf|pacman.conf|poetry.lock|\ sources.list|squid.conf|standard-modules.in|termcap|termcap.src|\ terminfo|terminfo.src|todo.txt|vimrc|xorg.conf|zshrc) # filename recognized pygmentize -f 256 -O style="$PYGMENTIZE_STYLE" "$path" ;; *) ext=$([[ "$filename" = *.* ]] && echo ".${filename##*.}" || echo '') case "$ext" in .6pl|.6pm|.ABAP|.ASM|.BAS|.C|.CBL|.COB|.CPP|.CPY|.F|.F03|.F90|\ .G|.H|.ICON|.PRG|.R|.Rd|.Rout|.S|.SAS|.VBS|.[1234567]|.abap|\ .abnf|.ada|.adb|.adl|.adlf|.adls|.adlx|.ado|.ads|.agda|.aheui|\ .ahk|.ahkl|.aj|.als|.apl|.applescript|.arexx|.arw|.as|.asax|\ .ascx|.ashx|.asm|.asmx|.aspx|.asy|.at|.au3|.aug|.aux|.awk|\ .axd|.b|.bare|.bas|.bash|.bat|.bb|.bbc|.bc|.befunge|.bf|.bib|\ .bmx|.bnf|.boa|.boo|.bpl|.bro|.bst|.bug|.bzl|.c|.c++|\ .c++-objdump|.c-objdump|.cadl|.camkes|.capnp|.cbl|.cc|.cddl|\ .cdf|.cdl|.ceylon|.cf|.cfc|.cfg|.cfm|.cfml|.chai|.chpl|.ci|\ .cirru|.cl|.clay|.clj|.cljs|.cls|.cmake|.cmd|.cob|.coffee|.cp|\ .cpp|.cpp-objdump|.cps|.cpsa|.cpy|.cr|.crmsh|.croc|.cry|.cs|\ .csd|.csh|.css|.css.in|.cu|.cuh|.cw|.cxx|.cxx-objdump|.cyp|\ .cypher|.d|.d-objdump|.darcspatch|.dart|.dasm|.dasm16|.dcl|\ .decls|.def|.dg|.di|.diff|.dmesg|.do|.docker|.dot|.dpatch|\ .dpr|.dtd|.dts|.dtsi|.duby|.duel|.dyl|.dylan|.dylan-console|\ .e|.ebnf|.ebuild|.ec|.ecl|.eclass|.edp|.eex|.eg|.eh|.el|.elm|\ .eml|.eps|.erl|.erl-sh|.es|.escript|.evoque|.ex|.exec|\ .exheres-0|.exlib|.exs|.ezt|.f|.f03|.f90|.factor|.fan|\ .fancypack|.feature|.fhtml|.fish|.flo|.flx|.flxh|.fnl|.frag|\ .frt|.fs|.fsi|.fst|.fsti|.fun|.fut|.fy|.g|.gap|.gd|.gdc|\ .gemspec|.geo|.gi|.go|.golo|.gradle|.graph|.groovy|.gs|.gsp|\ .gst|.gsx|.gv|.h|.h++|.haml|.handlebars|.hbs|.hdp|.hh|.hlsl|\ .hlsli|.hpp|.hrl|.hs|.hsail|.htm|.html|.hx|.hxml|.hxsl|.hxx|\ .hy|.hyb|.i|.i6t|.i7x|.icl|.icn|.icon|.idc|.idl4|.idr|.ijs|\ .ik|.inc|.inf|.ini|.ino|.instances|.intr|.io|.ipf|.isa|.j|\ .jade|.jag|.java|.jbst|.jcl|.jl|.js|.js.in|.jsgf|.jsm|.json|\ .jsonld|.jsp|.juttle|.jy|.kal|.kid|.kif|.kk|.kki|.kmsg|.ksh|\ .kt|.kts|.lagda|.lasso|.lasso[89]|.lcry|.lean|.less|.lgt|.lhs|\ .lid|.lidr|.liquid|.lisp|.ll|.load|.logtalk|.ls|.lsl|.lsp|\ .lua|.m|.ma|.mac|.mak|.man|.mao|.maql|.markdown|.mask|.mc|.md|\ .mhtml|.mi|.mir|.mjs|.mk|.ml|.mli|.mll|.mly|.mm|.mo|.mod|\ .monkey|.moo|.moon|.mos|.mq4|.mq5|.mqh|.ms|.msc|.mt|.mu|.mxml|\ .myt|.n|.nb|.nbp|.nc|.ncl|.ng2|.ni|.nim|.nimrod|.nit|.nix|.nl|\ .nqp|.ns2|.nsh|.nsi|.objdump|.objdump-intel|.odin|.ooc|.opa|\ .orc|.p|.p6|.p6l|.p6m|.pan|.pas|.patch|.pc|.pcmk|.peg|.perl|\ .php|.php[345]|.phtml|.pig|.pike|.pl|.pl6|.plot|.plt|.pm|.pm6|\ .pmod|.po|.pony|.pot|.pov|.pp|.praat|.prg|.pro|.proc|.prolog|\ .promql|.properties|.proto|.ps|.ps1|.psc|.psi|.psl|.psm1|\ .ptls|.pug|.pwn|.pxd|.pxi|.py|.py2tb|.py3tb|.pypylog|.pytb|\ .pyw|.pyx|.qbs|.qml|.qvto|.r|.r3|.rake|.raku|.rakudoc|\ .rakumod|.rakutest|.rb|.rbw|.rbx|.re|.reb|.red|.reds|.reg|\ .rei|.rest|.rex|.rexx|.rhtml|.ride|.rkt|.rktd|.rktl|.rl|.rnc|\ .robot|.rpf|.rq|.rql|.rs|.rs.in|.rsl|.rss|.rst|.rts|.run|.rvt|\ .rx|.s|.sage|.sarl|.sas|.sass|.sbl|.sc|.scala|.scaml|.scd|\ .scdoc|.sce|.sci|.scm|.sco|.scss|.sgf|.sh|.sh-session|\ .shell-session|.shen|.shex|.sieve|.sig|.sil|.siv|.sl|.sla|\ .slim|.sls|.smali|.sml|.smv|.snobol|.sol|.sp|.sparql|.spec|\ .spt|.sql|.sqlite3-console|.ss|.ssp|.st|.stan|.sv|.svh|.swg|\ .swift|.t|.tac|.tap|.tasm|.tcl|.tcsh|.tea|.tex|.tf|.thrift|\ .thy|.tid|.tmpl|.tnt|.toc|.todotxt|.toml|.tpl|.treetop|.ts|\ .tst|.tsx|.tt|.ttl|.twig|.txt|.typoscript|.u|.u1|.u2|.udo|\ .usd|.usda|.v|.vala|.vapi|.vark|.vb|.vbs|.vcl|.vert|.vhd|\ .vhdl|.vim|.vm|.vpr|.wdiff|.webidl|.weechatlog|.whiley|.wlua|\ .wsdl|.wsf|.x|.x10|.xhtml|.xi|.xm|.xmi|.xml|.xpl|.xq|.xql|\ .xqm|.xquery|.xqy|.xsd|.xsl|.xslt|.xtend|.xtm|.xul.in|.yaml|\ .yang|.yml|.zeek|.zep|.zig|.zsh|Config.in*) # extension recognized pygmentize -f 256 -O style="$PYGMENTIZE_STYLE" "$path" ;; *) # unrecognized filename/extension # attempt to parse the lexer from the shebang if it exists lexer=$(head -n 1 "$path" |grep "^#\!" |awk -F" " \ 'match($1, /\/(\w*)$/, a) {if (a[1]!="env") {print a[1]} else {print $2}}') case "$lexer" in node|nodejs) # workaround for lack of Node.js lexer alias pygmentize -f 256 -O style="$PYGMENTIZE_STYLE" \ -l js "$path" ;; "") # fall-back to plain text exit 1 ;; *) # use lexer alias parsed from the shebang pygmentize -f 256 -O style="$PYGMENTIZE_STYLE" \ -l "$lexer" "$path" ;; esac ;; esac ;; esac done exit 0