# parse-entities [![Build Status][build-badge]][build-status] [![Coverage Status][coverage-badge]][coverage-status] Parse HTML character references: fast, spec-compliant, positional information. ## Installation [npm][]: ```bash npm install parse-entities ``` ## Usage ```js var decode = require('parse-entities'); decode('alpha & bravo'); //=> alpha & bravo decode('charlie ©cat; delta'); //=> charlie Β©cat; delta decode('echo © foxtrot ≠ golf 𝌆 hotel'); //=> echo Β© foxtrot β‰  golf πŒ† hotel ``` ## API ## `parseEntities(value[, options])` ###### `options` * `additional` (`string`, optional, default: `''`) β€” Additional character to accept when following an ampersand (without error) * `attribute` (`boolean`, optional, default: `false`) β€” Whether to parse `value` as an attribute value * `nonTerminated` (`boolean`, default: `true`) β€” Whether to allow non-terminated entities, such as `©cat` to `Β©cat`. This behaviour is spec-compliant but can lead to unexpected results * `warning` ([`Function`][warning], optional) β€” Error handler * `text` ([`Function`][text], optional) β€” Text handler * `reference` ([`Function`][reference], optional) β€” Reference handler * `warningContext` (`'*'`, optional) β€” Context used when invoking `warning` * `textContext` (`'*'`, optional) β€” Context used when invoking `text` * `referenceContext` (`'*'`, optional) β€” Context used when invoking `reference` * `position` (`Location` or `Position`, optional) β€” Starting `position` of `value`, useful when dealing with values nested in some sort of syntax tree. The default is: ```json { "start": { "line": 1, "column": 1, "offset": 0 }, "indent": [] } ``` ###### Returns `string` β€” Decoded `value`. ### `function warning(reason, position, code)` Error handler. ###### Context `this` refers to `warningContext` when given to `parseEntities`. ###### Parameters * `reason` (`string`) β€” Reason (human-readable) for triggering a parse error * `position` (`Position`) β€” Place at which the parse error occurred * `code` (`number`) β€” Identifier of reason for triggering a parse error The following codes are used: | Code | Example | Note | | ---- | ------------------ | --------------------------------------------- | | `1` | `foo & bar` | Missing semicolon (named) | | `2` | `foo { bar` | Missing semicolon (numeric) | | `3` | `Foo &bar baz` | Ampersand did not start a reference | | `4` | `Foo &#` | Empty reference | | `5` | `Foo &bar; baz` | Unknown entity | | `6` | `Foo € baz` | [Disallowed reference][invalid] | | `7` | `Foo � baz` | Prohibited: outside permissible unicode range | ###### `function text(value, location)` Text handler. ###### Context `this` refers to `textContext` when given to `parseEntities`. ###### Parameters * `value` (`string`) β€” String of content * `location` (`Location`) β€” Location at which `value` starts and ends ### `function reference(value, location, source)` Character reference handler. ###### Context `this` refers to `referenceContext` when given to `parseEntities`. ###### Parameters * `value` (`string`) β€” Encoded character reference * `location` (`Location`) β€” Location at which `value` starts and ends * `source` (`Location`) β€” Source of character reference ## License [MIT][license] Β© [Titus Wormer][author] [build-badge]: https://img.shields.io/travis/wooorm/parse-entities.svg [build-status]: https://travis-ci.org/wooorm/parse-entities [coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/parse-entities.svg [coverage-status]: https://codecov.io/github/wooorm/parse-entities [npm]: https://docs.npmjs.com/cli/install [license]: LICENSE [author]: http://wooorm.com [warning]: #function-warningreason-position-code [text]: #function-textvalue-location [reference]: #function-referencevalue-location-source [invalid]: https://github.com/wooorm/character-reference-invalid