# markdown-table [![Build][build-badge]][build] [![Coverage][coverage-badge]][coverage] [![Downloads][downloads-badge]][downloads] [![Size][size-badge]][size] Generate fancy [Markdown][fancy]/ASCII tables. ## Installation [npm][]: ```bash npm install markdown-table ``` ## Usage Normal usage (defaults to left-alignment): ```javascript var table = require('markdown-table') table([ ['Branch', 'Commit'], ['master', '0123456789abcdef'], ['staging', 'fedcba9876543210'] ]) ``` Yields: ```markdown | Branch | Commit | | ------- | ---------------- | | master | 0123456789abcdef | | staging | fedcba9876543210 | ``` With alignment: ```javascript table( [ ['Beep', 'No.', 'Boop'], ['beep', '1024', 'xyz'], ['boop', '3388450', 'tuv'], ['foo', '10106', 'qrstuv'], ['bar', '45', 'lmno'] ], { align: ['l', 'c', 'r'] } ) ``` Yields: ```markdown | Beep | No. | Boop | | :--- | :-----: | -----: | | beep | 1024 | xyz | | boop | 3388450 | tuv | | foo | 10106 | qrstuv | | bar | 45 | lmno | ``` Alignment on dots: ```javascript table([['No.'], ['0.1.2'], ['11.22.33'], ['5.6.'], ['1.22222']], { align: '.' }) ``` Yields: ```markdown | No. | | :---------: | | 0.1.2 | | 11.22.33 | | 5.6. | | 1.22222 | ``` ## API ### `markdownTable(table[, options])` Turns a given matrix of strings (an array of arrays of strings) into a table. ##### `options` ###### `options.align` One style for all columns, or styles for their respective columns (`string` or `Array.`). Each style is either `'l'` (left), `'r'` (right), `'c'` (centre), or `'.'` (dot). Other values are treated as `''`, which doesn’t place the colon but does left align. _Only the lowercased first character is used, so `Right` is fine._ ###### `options.delimiter` Value to insert between cells (`string`, default: `' | '`). Careful, setting this to a non-pipe breaks GitHub Flavoured Markdown. ###### `options.start` Value to insert at the beginning of every row (`string`, default: `'| '`). ###### `options.end` Value to insert at the end of every row (`string`, default: `' |'`). ###### `options.rule` Whether to display a rule between the header and the body of the table (`boolean`, default: `true`). Careful, will break GitHub Flavoured Markdown when `false`. ###### `options.stringLength` Method to detect the length of a cell (`Function`, default: `s => s.length`). ANSI-sequences mess up tables on terminals. To fix this, you have to pass in a `stringLength` option to detect the “visible” length of a cell. ```javascript var strip = require('strip-ansi') function stringLength(cell) { return strip(cell).length } ``` ###### `options.pad` Whether to pad the markdown for table cells to make them the same width (`boolean`, default: `true`). Setting this to false will cause the table rows to remain staggered. ## Inspiration The original idea and basic implementation was inspired by James Halliday’s [text-table][] library. ## License [MIT][license] © [Titus Wormer][author] [build-badge]: https://img.shields.io/travis/wooorm/markdown-table.svg [build]: https://travis-ci.org/wooorm/markdown-table [coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/markdown-table.svg [coverage]: https://codecov.io/github/wooorm/markdown-table [downloads-badge]: https://img.shields.io/npm/dm/markdown-table.svg [downloads]: https://www.npmjs.com/package/markdown-table [size-badge]: https://img.shields.io/bundlephobia/minzip/markdown-table.svg [size]: https://bundlephobia.com/result?p=markdown-table [npm]: https://docs.npmjs.com/cli/install [license]: license [author]: https://wooorm.com [fancy]: https://help.github.com/articles/github-flavored-markdown/#tables [text-table]: https://github.com/substack/text-table