wiki:TracSyntaxColoring

Version 3 (modified by trac, at 2013-10-31T20:26:57Z) (diff)

--

Syntax Coloring of Source Code

Trac supports language-specific syntax highlighting of source code within wiki formatted text in wiki processors blocks and in the repository browser.

To do this, Trac uses external libraries with support for a great number of programming languages.

Currently Trac supports syntax coloring using one or more of the following packages:

  • Pygments, by far the preferred system, as it covers a wide range of programming languages and other structured texts and is actively supported
  • GNU Enscript, commonly available on Unix but somewhat unsupported on Windows
  • SilverCity, legacy system, some versions can be problematic

To activate syntax coloring, simply install either one (or more) of these packages (see #ExtraSoftware section below). If none of these packages is available, Trac will display the data as plain text.

About Pygments

Starting with trac 0.11 pygments will be the new default highlighter. It's a highlighting library implemented in pure python, very fast, easy to extend and well documented.

The Pygments default style can specified in the mime-viewer section of trac.ini. The default style can be overridden by setting a Style preference on the preferences page.

It's very likely that the list below is outdated because the list of supported pygments lexers is growing weekly. Just have a look at the page of supported lexers on the pygments webpage.

Syntax Coloring Support

Known MIME Types

MIME TypesWikiProcessors
application/atom+xmlxml
application/jsonjson
application/kalkal
application/ld+jsonjson-ld jsonld
application/msworddoc dot
application/pdfpdf
application/postscriptpostscr postscript ps
application/rss+xmlrss
application/rtfrtf
application/sparql-querysparql
application/vnd.wolfram.cdfmathematica mma nb
application/x-awkawk gawk mawk nawk
application/x-befungebefunge
application/x-brainfuckbf brainfuck
application/x-chaiscriptchai chaiscript
application/x-clojureclj clojure
application/x-clojurescriptcljs clojurescript
application/x-coldfusioncfm
application/x-cshcsh tcsh
application/x-cythoncython pyrex pyx
application/x-dos-batchbat batch cmd dos dosbatch winbatch
application/x-eclecl
application/x-elispelisp emacs emacs-lisp
application/x-evoqueevoque
application/x-fantomfan
application/x-fishfish fishshell
application/x-gooddata-maqlmaql
application/x-httpd-lasso[89]html+lasso
application/x-httpd-php5html+php
application/x-hyhylang
application/x-hybrishy hybris
application/x-jinjadjango jinja
application/x-jspjsp
application/x-juliajl julia
application/x-kidgenshi kid xml+genshi xml+kid
application/x-lualua
application/x-makomako
application/x-masonmason
application/x-moonscriptmoon moonscript
application/x-myghtymyghty
application/x-newlispnewlisp
application/x-openedgeabl openedge progress
application/x-perlperl pl
application/x-perl6perl6 pl6
application/x-pygments-tokensraw
application/x-pypylogpypy pypylog
application/x-pythonpy python sage
application/x-python3py3 python3
application/x-qt.qbs+qmlqbs qml
application/x-racketracket rkt
application/x-rubyduby rb ruby
application/x-ruby-templatingerb
application/x-schemescheme scm
application/x-sh-sessionconsole shell-session
application/x-shellscriptbash ksh sh shell
application/x-shenshen
application/x-smartysmarty
application/x-spitfirecheetah spitfire
application/x-sspssp
application/x-standardmlsml
application/x-tcltcl
application/x-terraformterraform tf
application/x-thriftthrift
application/x-troffroff troff
application/x-turtleturtle
application/x-twigtwig
application/x-urbiscripturbiscript
application/x-yamlyml
application/xhtml+xmlhtml
application/xml+evoquexml+evoque
application/xml+jinjaxml+django xml+jinja
application/xml+lassoxml+lasso
application/xml+makoxml+mako
application/xml+myghtyxml+myghty
application/xml+phpxml+php
application/xml+rubyxml+erb xml+ruby
application/xml+smartyxml+smarty
application/xml+spitfirexml+cheetah xml+spitfire
application/xml+velocityxml+velocity
application/xml-dtddtd
application/xqueryxq xql xqm xquery xqy
application/xsl+xmlxsl
application/xslt+xmlxslt
image/svg+xmlsvg
image/x-iconico
model/vrmlvrml wrl
text/actionscriptactionscript as
text/actionscript3actionscript3 as3
text/basicbasic qbasic
text/coffeescriptcoffee coffee-script coffeescript
text/csscss
text/css+genshicss+genshi css+genshitext
text/css+jinjacss+django css+jinja
text/css+lassocss+lasso
text/css+makocss+mako
text/css+myghtycss+myghty
text/css+phpcss+php
text/css+rubycss+erb css+ruby
text/css+smartycss+smarty
text/gettextpo pot
text/htmlhtm
text/html+evoquehtml+evoque
text/html+genshihtml+genshi html+kid
text/html+jinjahtml+django html+jinja htmldjango
text/html+makohtml+mako
text/html+myghtyhtml+myghty
text/html+rubyhtml+erb html+ruby rhtml
text/html+smartyhtml+smarty
text/html+spitfirehtml+cheetah html+spitfire htmlcheetah
text/html+twightml+twig
text/html+velocityhtml+velocity
text/idlidl
text/infcfg dosini ini
text/ipfigor igorpro
text/javascriptjavascript js
text/javascript+genshijavascript+genshi javascript+genshitext js+genshi js+genshitext
text/javascript+jinjajavascript+django javascript+jinja js+django js+jinja
text/javascript+lassojavascript+lasso js+lasso
text/javascript+makojavascript+mako js+mako
text/javascript+mygthyjavascript+myghty js+myghty
text/javascript+phpjavascript+php js+php
text/javascript+rubyjavascript+erb javascript+ruby js+erb js+ruby
text/javascript+smartyjavascript+smarty js+smarty
text/javascript+spitfirejavascript+cheetah javascript+spitfire js+cheetah js+spitfire
text/limbolimbo
text/livescriptlive-script livescript
text/matlabmatlab
text/octaveoctave
text/odinodin
text/plainAUTHORS COPYING ChangeLog INSTALL README RELEASE TXT text txt
text/prs.fallenstein.rstrest restructuredtext rst
text/rslrsl
text/rustrust
text/scilabscilab
text/smalismali
text/supercollidersc supercollider
text/swigswig
text/troffgroff man nroff
text/x-abapabap
text/x-abnfabnf
text/x-adaada ada2005 ada95
text/x-agdaagda
text/x-alloyalloy
text/x-ambienttalkambienttalk ambienttalk/2 at
text/x-apacheconfaconf apache apacheconf
text/x-arduinoarduino
text/x-aspasp
text/x-aspectjaspectj
text/x-asymptoteasy asymptote
text/x-autohotkeyahk autohotkey
text/x-autoitautoit
text/x-bbb3d blitzbasic bplus
text/x-bbcodebbcode
text/x-bmxblitzmax bmax
text/x-bnfbnf
text/x-booboo
text/x-c++hdrH HH c++hdr hh hpp
text/x-c++srcC C++ CC c++ c++src cc cpp
text/x-c-objdumpc-objdump
text/x-ceylonceylon
text/x-chdrchdr h
text/x-cirrucirru
text/x-clayclay
text/x-cmakecmake
text/x-cobolcobol
text/x-common-lispcl common-lisp lisp
text/x-component-pascalcomponentpascal cp
text/x-coqcoq
text/x-cpp-objdumpc++-objdumb cpp-objdump cxx-objdump
text/x-crocsrccroc
text/x-cryptolcry cryptol
text/x-csharpC# c# cs csharp
text/x-csrcc csrc xs
text/x-cudacu cuda
text/x-d-objdumpd-objdump
text/x-darcspatchdarcs.patch darcs.txt darcspatch darcspatch.txt dpatch dpatch.txt
text/x-dartdart
text/x-dgdg
text/x-diffpatch
text/x-dockerfile-configdocker dockerfile
text/x-dsrcd
text/x-dylandylan
text/x-dylan-consoledylan-console dylan-repl
text/x-dylan-liddylan-lid lid
text/x-earl-greyearl-grey earlgrey eg
text/x-easytrieveeasytrieve
text/x-ebnfebnf
text/x-ecsrcec
text/x-eiffele eiffel
text/x-elispel
text/x-elixirelixir ex exs
text/x-elixir-shellsessioniex
text/x-elmelm
text/x-erl-shellsessionerl
text/x-erlangerlang
text/x-ezhilezhil
text/x-factorfactor
text/x-fancysrcfancy fy
text/x-felixfelix flx
text/x-fortranf fortran
text/x-fsharpfsharp
text/x-gasasm gas
text/x-genshigenshitext
text/x-gherkincucumber gherkin
text/x-glslsrcglsl
text/x-gnuplotgnuplot
text/x-gooddata-clgooddata-cl
text/x-gosrcgo
text/x-gosugosu
text/x-gosu-templategst
text/x-groovygroovy
text/x-hamlhaml
text/x-handlebars-templatehtml+handlebars
text/x-haskellhaskell hs
text/x-hxhaxe hx hxsl
text/x-idrisidr idris
text/x-infinf
text/x-iokesrcik ioke
text/x-iosrcio
text/x-irclogirc
text/x-isabelleisabelle
text/x-jj
text/x-jadejade
text/x-javajava
text/x-java-propertiesjproperties properties
text/x-jbstduel jbst jsonml+bst
text/x-jcljcl
text/x-kconfigkconfig kernel-config linux-config menuconfig
text/x-kokakoka
text/x-kotlinkotlin
text/x-lassolasso lassoscript
text/x-latexlatex tex
text/x-leanlean
text/x-less-cssless
text/x-lighttpd-conflighttpd lighty
text/x-literate-agdalagda literate-agda
text/x-literate-cryptollcry lcryptol literate-cryptol
text/x-literate-haskelllhaskell lhs literate-haskell
text/x-literate-idrislidr lidris literate-idris
text/x-llvmllvm
text/x-logoslogos
text/x-logtalklogtalk
text/x-lsllsl
text/x-m4m4
text/x-mailmail
text/x-makefileGNUMakefile Makefile bsdmake make makefile mf mk
text/x-maskmask
text/x-minidsrcminid
text/x-modelicamodelica
text/x-modula2m2 modula2
text/x-monkeymonkey
text/x-moocodemoo moocode
text/x-mqlmq4 mq5 mql mql4 mql5
text/x-mysqlmysql
text/x-nasmnasm
text/x-nasm-objdumpobjdump-nasm
text/x-nemerlenemerle
text/x-nescsrcnesc
text/x-newspeaknewspeak
text/x-nginx-confnginx nginx-conf
text/x-nimrodnim nimrod
text/x-nixnix nixos
text/x-nsisnsh nsi nsis
text/x-objcm mm
text/x-objdumpobjdump
text/x-objective-cobj-c objc objective-c objectivec
text/x-objective-c++obj-c++ objc++ objective-c++ objectivec++
text/x-objective-jobj-j objective-j objectivej objj
text/x-ocamlml mli ocaml
text/x-oocooc
text/x-opaopa
text/x-parasailparasail
text/x-pascaldelphi objectpascal pas pascal
text/x-patchdiff udiff
text/x-pawnpawn
text/x-perlPL pm
text/x-phpphp php3 php4 php5
text/x-pigpig
text/x-pikepike
text/x-plpgsqlplpgsql
text/x-postgresqlpostgres postgresql
text/x-postgresql-psqlpostgres-console postgresql-console psql
text/x-povraypov
text/x-powershellposh powershell ps1 psm1
text/x-prologprolog
text/x-psppsp
text/x-python-doctestpycon python-doctest
text/x-python-tracebackpytb
text/x-python3-tracebackpy3tb
text/x-r-docrd
text/x-r-profiler s splus
text/x-rebolrebol
text/x-red-systemred red/system
text/x-rexxarexx rexx
text/x-rfcrfc
text/x-robotframeworkrobotframework
text/x-rpm-specspec
text/x-rqlrql
text/x-ruby-shellsessionirb rbcon
text/x-sasssass
text/x-scalascala
text/x-scamlscaml
text/x-scssscss
text/x-slimslim
text/x-slssalt sls yaml+jinja
text/x-smalltalksmalltalk squeak st
text/x-snobolsnobol
text/x-sourcepawnsp
text/x-sqlsql
text/x-sqlite3-consolesqlite3
text/x-squidconfsquid squid.conf squidconf
text/x-swiftswift
text/x-systemverilogsv systemverilog
text/x-teatea
text/x-textiletextile txtl
text/x-todotodotxt
text/x-trac-wikimoin trac-wiki
text/x-typescriptts typescript
text/x-valavala vapi
text/x-vbabas vb vb.net vba vbnet
text/x-verilogv verilog
text/x-vhdlvhd vhdl
text/x-vimvim
text/x-windows-registryregistry
text/x-x10x10 xten
text/x-xtendxtend
text/x-yamlyaml
text/x-zshzsh

Note that the rich content may be directly rendered instead of syntax highlighted. This usually depends on which auxiliary packages are installed and on which components are activated in your setup. For example a text/x-rst document will be rendered via docutils if it is installed and the trac.mimeview.rst.ReStructuredTextRenderer is not disabled, and will be syntax highlighted otherwise.

In a similar way, a document with the mimetype text/x-trac-wiki is rendered using the Trac wiki formatter, unless the trac.mimeview.api.WikiTextRenderer component is disabled.

HTML documents are directly rendered only if the render_unsafe_html settings are enabled in the TracIni (those settings are present in multiple sections, as there are different security concerns depending where the document comes from). If you want to ensure that an HTML document gets syntax highlighted and not rendered, use the text/xml mimetype.

If mimetype such as 'svn:mime-type' is set to 'text/plain', there is no coloring even if file is known type like 'java'.

List of Languages Supported, by Highlighter

This list is only indicative.

SilverCity Enscript Pygments
Ada
Asm
Apache Conf
ASP
C
C# (1)
C++
CMake ? ?
Java (2)
Awk
Boo
CSS
Python Doctests
Diff
Eiffel
Elisp
Fortran (1)
Haskell
Genshi
HTML
IDL
INI
Javascript
Lua
m4
Makefile
Mako
Matlab (3)
Mygthy
Objective-C
OCaml
Pascal
Perl
PHP
PSP
Pyrex
Python
Ruby (1)
Scheme
Shell
Smarty
SQL
Troff
TCL
Tex
Verilog (2)
VHDL
Visual Basic
VRML
XML

(1) Not included in the Enscript distribution. Additional highlighting rules can be obtained for Ruby, C#, Fortran 90x/2003

(2) since Silvercity 0.9.7 released on 2006-11-23

(3) By default .m files are considered Objective-C files. In order to treat .m files as MATLAB files, add "text/matlab:m" to the "mime_map" setting in the [mimeviewer] section of trac.ini.

Extra Software


See also: WikiProcessors, WikiFormatting, TracWiki, TracBrowser