module.exports = code var repeat = require('repeat-string') var streak = require('longest-streak') var formatCodeAsIndented = require('../util/format-code-as-indented') var checkFence = require('../util/check-fence') var indentLines = require('../util/indent-lines') var safe = require('../util/safe') function code(node, _, context) { var marker = checkFence(context) var raw = node.value || '' var suffix = marker === '`' ? 'GraveAccent' : 'Tilde' var value var sequence var exit var subexit if (formatCodeAsIndented(node, context)) { exit = context.enter('codeIndented') value = indentLines(raw, map) } else { sequence = repeat(marker, Math.max(streak(raw, marker) + 1, 3)) exit = context.enter('codeFenced') value = sequence if (node.lang) { subexit = context.enter('codeFencedLang' + suffix) value += safe(context, node.lang, { before: '`', after: ' ', encode: ['`'] }) subexit() } if (node.lang && node.meta) { subexit = context.enter('codeFencedMeta' + suffix) value += ' ' + safe(context, node.meta, { before: ' ', after: '\n', encode: ['`'] }) subexit() } value += '\n' if (raw) { value += raw + '\n' } value += sequence } exit() return value } function map(line, _, blank) { return (blank ? '' : ' ') + line }