|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 'use strict'
-
- var decodeEntity = require('parse-entities/decode-entity.js')
- var asciiAlphanumeric = require('../character/ascii-alphanumeric.js')
- var asciiDigit = require('../character/ascii-digit.js')
- var asciiHexDigit = require('../character/ascii-hex-digit.js')
-
- function _interopDefaultLegacy(e) {
- return e && typeof e === 'object' && 'default' in e ? e : {default: e}
- }
-
- var decodeEntity__default = /*#__PURE__*/ _interopDefaultLegacy(decodeEntity)
-
- var characterReference = {
- name: 'characterReference',
- tokenize: tokenizeCharacterReference
- }
-
- function tokenizeCharacterReference(effects, ok, nok) {
- var self = this
- var size = 0
- var max
- var test
- return start
-
- function start(code) {
- effects.enter('characterReference')
- effects.enter('characterReferenceMarker')
- effects.consume(code)
- effects.exit('characterReferenceMarker')
- return open
- }
-
- function open(code) {
- if (code === 35) {
- effects.enter('characterReferenceMarkerNumeric')
- effects.consume(code)
- effects.exit('characterReferenceMarkerNumeric')
- return numeric
- }
-
- effects.enter('characterReferenceValue')
- max = 31
- test = asciiAlphanumeric
- return value(code)
- }
-
- function numeric(code) {
- if (code === 88 || code === 120) {
- effects.enter('characterReferenceMarkerHexadecimal')
- effects.consume(code)
- effects.exit('characterReferenceMarkerHexadecimal')
- effects.enter('characterReferenceValue')
- max = 6
- test = asciiHexDigit
- return value
- }
-
- effects.enter('characterReferenceValue')
- max = 7
- test = asciiDigit
- return value(code)
- }
-
- function value(code) {
- var token
-
- if (code === 59 && size) {
- token = effects.exit('characterReferenceValue')
-
- if (
- test === asciiAlphanumeric &&
- !decodeEntity__default['default'](self.sliceSerialize(token))
- ) {
- return nok(code)
- }
-
- effects.enter('characterReferenceMarker')
- effects.consume(code)
- effects.exit('characterReferenceMarker')
- effects.exit('characterReference')
- return ok
- }
-
- if (test(code) && size++ < max) {
- effects.consume(code)
- return value
- }
-
- return nok(code)
- }
- }
-
- module.exports = characterReference
|