You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.2 KiB
48 lines
1.2 KiB
module.exports = heading |
|
|
|
var repeat = require('repeat-string') |
|
var formatHeadingAsSetext = require('../util/format-heading-as-setext') |
|
var phrasing = require('../util/container-phrasing') |
|
|
|
function heading(node, _, context) { |
|
var rank = Math.max(Math.min(6, node.depth || 1), 1) |
|
var exit |
|
var subexit |
|
var value |
|
var sequence |
|
|
|
if (formatHeadingAsSetext(node, context)) { |
|
exit = context.enter('headingSetext') |
|
subexit = context.enter('phrasing') |
|
value = phrasing(node, context, {before: '\n', after: '\n'}) |
|
subexit() |
|
exit() |
|
|
|
return ( |
|
value + |
|
'\n' + |
|
repeat( |
|
rank === 1 ? '=' : '-', |
|
// The whole size… |
|
value.length - |
|
// Minus the position of the character after the last EOL (or |
|
// 0 if there is none)… |
|
(Math.max(value.lastIndexOf('\r'), value.lastIndexOf('\n')) + 1) |
|
) |
|
) |
|
} |
|
|
|
sequence = repeat('#', rank) |
|
exit = context.enter('headingAtx') |
|
subexit = context.enter('phrasing') |
|
value = phrasing(node, context, {before: '# ', after: '\n'}) |
|
value = value ? sequence + ' ' + value : sequence |
|
if (context.options.closeAtx) { |
|
value += ' ' + sequence |
|
} |
|
|
|
subexit() |
|
exit() |
|
|
|
return value |
|
}
|
|
|