UNPKG

grunt-markdown

Version:

Compile markdown to html. GFM and code highlighting support!

182 lines (149 loc) 5.9 kB
# grunt-markdown [![Build Status](https://travis-ci.org/treasonx/grunt-markdown.png?branch=master)](https://travis-ci.org/treasonx/grunt-markdown) This grunt task takes a set of markdown files and converts them to HTML. It supports [GFM](http://github.github.com/github-flavored-markdown/) with code highlighting. The code highlighting is done using [highlight.js](http://softwaremaniacs.org/soft/highlight/en/). ## Getting Started Install this grunt plugin next to your project's [grunt.js gruntfile](http://gruntjs.com/getting-started) with: ```bash npm install grunt-markdown --save-dev ``` Then add this line to your gruntfile: ```javascript grunt.loadNpmTasks('grunt-markdown'); ``` ## Documentation Creating a markdown task is simple. For the basic functionality add the following config in your gruntfile: ```javascript grunt.initConfig({ markdown: { all: { files: [ { expand: true, src: 'docs/src/*.md', dest: 'docs/html/', ext: '.html' } ] } } }); ``` Here is an example config using all of the options: ```javascript grunt.initConfig({ markdown: { all: { files: [ { expand: true, src: 'docs/src/*.md', dest: 'docs/html/', ext: '.html' } ], options: { template: 'myTemplate.jst', preCompile: function(src, context) {}, postCompile: function(src, context) {}, templateContext: {}, contextBinder: false, contextBinderMark: '@@@', autoTemplate: true, autoTemplateFormat: 'jst', markdownOptions: { gfm: true, highlight: 'manual', codeLines: { before: '<span>', after: '</span>' } } } } } }); ``` These are the properties that the `markdown` task accepts: * `files`: This plugin supports use of the [files API](http://gruntjs.com/configuring-tasks#files) introduced in Grunt 0.4.0. Files may be specified using any one of the [Compact Format](http://gruntjs.com/configuring-tasks#compact-format), [Files Objects Format](http://gruntjs.com/configuring-tasks#files-object-format), or [Files Array Format](http://gruntjs.com/configuring-tasks#files-array-format) (as in the above example). * `options`: options to be passed to the markdown parser * `template`: If you wish to specify your own html template, use the `template` option. Include the following line: `<%=content%>` where you want the compiled markdown inserted in your template * `markdownOptions`: Options passed directly to the markdown parser. * `preCompile`: is run before the markdown is compiled * `postCompile`: is run after the markdown has been compiled * `templateContext`: the default context for template expansion * `contextBinder`: this option is useful when we want to bind some parameters directly from markdown files. All data is stored in `templateContext` object. * `contextBinderMark`: with this option we can pass any marker between which we can grab your special parameters from markdown templates. * `autoTemplate`: if this option is set to true, script will search for template automatically. Template must be placed in this same catalog where markdown files are. * `autoTemplateFormat`: the template format when `autoTemplate` is `true`. ### modifying content with preCompile and postCompile Sometimes there is a need to modify the markdown content prior to compilation. This is most commonly used to augment the template context with meta data before expanding the html template. #### preCompile This function is run prior to the compilation of md to html. It has the following format: ```javascript function(src, context) { //do stuff to src and context //optionally return the modified src } ``` #### postCompile This function is run after the md has been converted to html. It has the following format: ```javascript function(src, context) { //do stuff to src and context //optionally return the modified src } ``` ### templateContext This object is used to expand your html template. Any data added to this object will be available in the template using the template syntax `<%=myAttr%>`. This can also be a function which is expected to return a context object. ### markdownOptions Most markdown options are passed as-is to the [marked](https://github.com/chjj/marked) markdown parser. The only option that is processed prior to compiling the markdown is the `highlight` option. If you specify 'auto' or 'manual' the task will handle highlighting code blocks for you using highlight.js. If you pass a custom function as the highlight option it will be used to highlight the code. * `auto`: Will try to detect the language * `manual`: will pass the language name from markdown to the highlight function * `codeLines`: specify text that should wrap code lines ### contextBinder Below you can see example how to use this option. ```javascript markdown: { all: { files: [ { expand: true, src: 'docs/src/*.md', dest: 'docs/html/', ext: '.html' } ], options: { template: 'myTemplate.jst', preCompile: function(src, context) {}, postCompile: function(src, context) {}, templateContext: {}, contextBinder: true, contextBinderMark: '@@@', markdownOptions: { gfm: true, highlight: 'manual', codeLines: { before: '<span>', after: '</span>' } } } } } ``` Then inside markdown file we have to put: `<!-- @@@key:value@@@ -->` and it will be equal to: ```javascript templateContext: { key: 'value' } ``` ## License Copyright (c) 2012-2013 James Morrin Licensed under the MIT license.