| 'use strict' |
| |
| var repeat = require('repeat-string') |
| |
| module.exports = heading |
| |
| var lineFeed = '\n' |
| var space = ' ' |
| var numberSign = '#' |
| var dash = '-' |
| var equalsTo = '=' |
| |
| // Stringify a heading. |
| // |
| // In `setext: true` mode and when `depth` is smaller than three, creates a |
| // setext header: |
| // |
| // ```markdown |
| // Foo |
| // === |
| // ``` |
| // |
| // Otherwise, an ATX header is generated: |
| // |
| // ```markdown |
| // ### Foo |
| // ``` |
| // |
| // In `closeAtx: true` mode, the header is closed with hashes: |
| // |
| // ```markdown |
| // ### Foo ### |
| // ``` |
| function heading(node) { |
| var self = this |
| var depth = node.depth |
| var setext = self.options.setext |
| var closeAtx = self.options.closeAtx |
| var content = self.all(node).join('') |
| var prefix |
| |
| if (setext && depth < 3) { |
| return ( |
| content + lineFeed + repeat(depth === 1 ? equalsTo : dash, content.length) |
| ) |
| } |
| |
| prefix = repeat(numberSign, node.depth) |
| |
| return prefix + space + content + (closeAtx ? space + prefix : '') |
| } |