diff --git a/README.md b/README.md index 332f767..335719c 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ by github or other sites via a command line flag. - [Installation](#installation) - [Usage](#usage) - [Adding toc to all files in a directory and sub directories](#adding-toc-to-all-files-in-a-directory-and-sub-directories) + - [Ignoring individual files](#ignoring-individual-files) - [Update existing doctoc TOCs effortlessly](#update-existing-doctoc-tocs-effortlessly) - [Adding toc to individual files](#adding-toc-to-individual-files) - [Examples](#examples) @@ -17,14 +18,15 @@ by github or other sites via a command line flag. - [Example](#example) - [Specifying location of toc](#specifying-location-of-toc) - [Specifying a custom TOC title](#specifying-a-custom-toc-title) + - [Specifying a minimum heading level for TOC entries](#specifying-a-minimum-heading-level-for-toc-entries) - [Specifying a maximum heading level for TOC entries](#specifying-a-maximum-heading-level-for-toc-entries) - [Printing to stdout](#printing-to-stdout) + - [Only update existing ToC](#only-update-existing-toc) - [Usage as a `git` hook](#usage-as-a-git-hook) - [Docker image](#docker-image) - ## Installation npm install -g doctoc @@ -49,6 +51,7 @@ by the markdown parser. Doctoc defaults to using the GitHub parser, but other specified](#using-doctoc-to-generate-links-compatible-with-other-sites). ### Ignoring individual files + In order to ignore a specific file when running `doctoc` on an entire directory, just add `` to the top of the file you wish to ignore. ### Update existing doctoc TOCs effortlessly diff --git a/lib/transform.js b/lib/transform.js index 19cb8dc..3a29f60 100644 --- a/lib/transform.js +++ b/lib/transform.js @@ -9,7 +9,7 @@ var _ = require('underscore') var start = '\n' + '' , end = '' - , skipTag = ''; + , skipTag = '\n'; function matchesStart(line) { @@ -109,7 +109,8 @@ function determineTitle(title, notitle, lines, info) { } exports = module.exports = function transform(content, mode, maxHeaderLevel, minHeaderLevel, title, notitle, entryPrefix, processAll, updateOnly) { - if (content.indexOf(skipTag) !== -1) return { transformed: false }; + var index = content.indexOf(skipTag); + if (index === 0 || (index >= 0 && content[index-1] === '\n')) return { transformed: false }; mode = mode || 'github.com'; entryPrefix = entryPrefix || '-'; @@ -119,7 +120,7 @@ exports = module.exports = function transform(content, mode, maxHeaderLevel, min var maxHeaderLevelHtml = maxHeaderLevel || 4; var lines = content.split('\n') - , info = updateSection.parse(lines, matchesStart, matchesEnd) + , info = updateSection.parse(lines, matchesStart, matchesEnd); if (!info.hasStart && updateOnly) { return { transformed: false }; diff --git a/test/fixtures/readme-with-firstline-skipTag.md b/test/fixtures/readme-with-firstline-skipTag.md new file mode 100644 index 0000000..9454a22 --- /dev/null +++ b/test/fixtures/readme-with-firstline-skipTag.md @@ -0,0 +1,8 @@ + +# Hello, world! + +README to test doctoc with skipTag. + +## Installation +## API +## License diff --git a/test/fixtures/readme-with-invalidskipTag.md b/test/fixtures/readme-with-invalidskipTag.md new file mode 100644 index 0000000..077f3a1 --- /dev/null +++ b/test/fixtures/readme-with-invalidskipTag.md @@ -0,0 +1,9 @@ +# Hello, world! + +README to test doctoc with skipTag. + +` + +## Installation +## API +## License diff --git a/test/transform-skipTag.js b/test/transform-skipTag.js index 2517473..a609996 100644 --- a/test/transform-skipTag.js +++ b/test/transform-skipTag.js @@ -4,7 +4,7 @@ var test = require('tap').test , transform = require('../lib/transform'); -test('\nskip file transform', function (t) { +test('\nskip tag non first line transform', function (t) { var content = require('fs').readFileSync(__dirname + '/fixtures/readme-with-skipTag.md', 'utf8'); var transformedContent = transform(content); @@ -15,3 +15,27 @@ test('\nskip file transform', function (t) { ) t.end() }); + +test('\nskip tag first line transform', function (t) { + var content = require('fs').readFileSync(__dirname + '/fixtures/readme-with-firstline-skipTag.md', 'utf8'); + var transformedContent = transform(content); + + t.deepEqual( + transformedContent.toc + , undefined + , 'skip correct file' + ) + t.end() +}); + +test('\nskip tag invalid nested transform', function (t) { + var content = require('fs').readFileSync(__dirname + '/fixtures/readme-with-invalidskipTag.md', 'utf8'); + var transformedContent = transform(content); + + t.deepEqual( + transformedContent.transformed + , true + , 'don\'t skip file as skipTag is invalid' + ) + t.end() +});