/** * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT * @module remark:parse:decode * @fileoverview Decode entities. */ 'use strict'; 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 }; } /* Handle a warning. * See https://github.com/wooorm/parse-entities * for the warnings. */ function handleWarning(reason, position, code) { if (code === 3) { return; } ctx.file.message(reason, position); } /* 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) { return entities(value, { position: normalize(position), warning: handleWarning }); } }