ref: bc9f69e7c51bfb6910b19602e5d3b7ed9b1f254d
dir: /docs/content/extras/highlighting.md/
---
title: "Highlighting"
date: "2013-07-01"
weight: 15
menu:
  main:
    parent: 'extras'
---
Hugo provides the ability for you to highlight source code in two different
ways — either pre-processed server side from your content, or to defer the
processing to the client side, using a JavaScript library.
For the pre-processed approach, Highlighting is performed by an external
python based program called [pygments](http://pygments.org) and is triggered
via an embedded shortcode. If pygments is absent from the path, it will
silently simply pass the content along unhighlighted.
## Server Side
### Disclaimers
 * **Warning** pygments is relatively slow and our integration isn't
speed optimized. Expect much longer build times when using highlighting
 * Languages available depends on your pygments installation.
 * While pygments supports a few different output formats and options we currently
only support output=html, style=monokai, noclasses=true, and encoding=utf-8.
 * Styles are inline in order to be supported in syndicated content when references
to style sheets are not carried over.
 * We have sought to have the simplest interface possible, which consequently
limits configuration. An ambitious user is encouraged to extend the current
functionality to offer more customization.
## Usage
Highlight takes exactly one required parameter of language and requires a
closing shortcode.
## Example
{{% highlight html %}}
    {{% highlight html %}}
    <section id="main">
      <div>
       <h1 id="title">{{ .Title }}</h1>
        {{ range .Data.Pages }}
            {{ .Render "summary"}}
        {{ end }}
      </div>
    </section>
    {{% /highlight %}}
{{% /highlight %}}
## Example Output
{{% highlight html %}}
<span style="color: #f92672"><section</span> <span style="color: #a6e22e">id=</span><span style="color: #e6db74">"main"</span><span style="color: #f92672">></span>
  <span style="color: #f92672"><div></span>
   <span style="color: #f92672"><h1</span> <span style="color: #a6e22e">id=</span><span style="color: #e6db74">"title"</span><span style="color: #f92672">></span>{{ .Title }}<span style="color: #f92672"></h1></span>
    {{ range .Data.Pages }}
        {{ .Render "summary"}}
    {{ end }}
  <span style="color: #f92672"></div></span>
<span style="color: #f92672"></section></span>
{{% /highlight %}}
## Client-side
Alternatively, code highlighting can be done in client-side JavaScript.
Client-side syntax highlighting is very simple to add. You'll need to pick
a library and a corresponding theme. Some popular libraries are:
- [Rainbow]
- [Syntax Highlighter]
- [Google Prettify]
- [Highlight.js]
This example uses the popular [Highlight.js] library, hosted by [Yandex], a
popular Russian search engine.
In your `./layouts/chrome/` folder, depending on your specific theme, there
will be a snippet that will be included in every generated HTML page, such
as `header.html` or `header.includes.html`. Simply add:
{{% highlight html %}}
  <link rel="stylesheet" href="https://yandex.st/highlightjs/8.0/styles/default.min.css">
  <script src="https://yandex.st/highlightjs/8.0/highlight.min.js"></script>
{{% /highlight %}}
You can of course use your own copy of these files, typically in `./static/`.
[Rainbow]: http://craig.is/making/rainbows
[Syntax Highlighter]: http://alexgorbatchev.com/SyntaxHighlighter/
[Google Prettify]: https://code.google.com/p/google-code-prettify/
[Yandex]: http://yandex.ru/
[Highlight.js]: http://highlightjs.org/