UNPKG

@mapbox/jsxtreme-markdown

Version:
59 lines (47 loc) 1.32 kB
'use strict'; var xtend = require('xtend'); var entities = require('parse-entities'); module.exports = factory; // Factory to create an entity decoder. function factory(ctx) { decoder.raw = decodeRaw; return decoder; // Normalize `position` to add an `indent`. function normalize(position) { var offsets = ctx.offset; var line = position.line; var result = []; while (++line) { if (!(line in offsets)) { break; } result.push((offsets[line] || 0) + 1); } return { start: position, indent: result }; } // Decode `value` (at `position`) into text-nodes. function decoder(value, position, handler) { entities(value, { position: normalize(position), warning: handleWarning, text: handler, reference: handler, textContext: ctx, referenceContext: ctx, }); } // Decode `value` (at `position`) into a string. function decodeRaw(value, position, options) { return entities( value, xtend(options, { position: normalize(position), warning: handleWarning }) ); } // Handle a warning. // See <https://github.com/wooorm/parse-entities> for the warnings. function handleWarning(reason, position, code) { if (code !== 3) { ctx.file.message(reason, position); } } }