# Building Highlight.js for Gerrit

Highlight JS needs to be built with specific language support. Here are the
steps to build the minified file that appears here.

NOTE: If you are adding support for a language to Highlight.js make sure to add
it to the list of languages in the build command below.

## Prerequisites

You will need:

* nodejs
* closure-compiler
* git

## Steps to Create the Pack File

The packed version of Highlight.js is an un-minified JS file with all of the
languages included. Build it with the following:

    $>  # start in some temp directory
    $>  git clone https://github.com/isagalaev/highlight.js.git
    $>  cd highlight.js
    $>  node tools/build.js -n \
          bash \
          cpp \
          cs \
          clojure \
          css \
          d \
          dart \
          go \
          haskell \
          java \
          javascript \
          json \
          lisp \
          lua \
          markdown \
          objectivec \
          ocaml \
          perl \
          protobuf \
          python \
          ruby \
          rust \
          scala \
          sql \
          swift \
          typescript \
          xml \
          yaml

The resulting JS file will appear in the "build" directory of the Highlight.js
repo under the name "highlight.pack.js".

## Minification

Minify the file using closure-compiler using the command below. (Modify
`/path/to` with the path to your compiler jar.)

    $>  java -jar /path/to/closure-compiler.jar \
            --js build/highlight.pack.js \
            --js_output_file build/highlight.min.js

Copy the header comment that appears on the first line of
build/highlight.pack.js and add it to the start of build/highlight.min.js.

## Finish

Copy the resulting build/highlight.min.js file to lib/highlightjs
