/** internal * class Core * * Top-level rules executor. Glues block/inline parsers and does intermediate * transformations. **/ import Ruler from './ruler.mjs' import StateCore from './rules_core/state_core.mjs' import r_normalize from './rules_core/normalize.mjs' import r_block from './rules_core/block.mjs' import r_inline from './rules_core/inline.mjs' import r_linkify from './rules_core/linkify.mjs' import r_replacements from './rules_core/replacements.mjs' import r_smartquotes from './rules_core/smartquotes.mjs' import r_text_join from './rules_core/text_join.mjs' const _rules = [ [ 'normalize', r_normalize ], [ 'block', r_block ], [ 'inline', r_inline ], [ 'linkify', r_linkify ], [ 'replacements', r_replacements ], [ 'smartquotes', r_smartquotes ], // `text_join` finds `text_special` tokens (for escape sequences) // and joins them with the rest of the text [ 'text_join', r_text_join ] ] /** * new Core() **/ function Core() { /** * Core#ruler -> Ruler * * [[Ruler]] instance. Keep configuration of core rules. **/ this.ruler = new Ruler() for (let i = 0; i < _rules.length; i++) { this.ruler.push(_rules[i][0], _rules[i][1]) } } /** * Core.process(state) * * Executes core chain rules. **/ Core.prototype.process = function (state) { const rules = this.ruler.getRules('') for (let i = 0, l = rules.length; i < l; i++) { rules[i](state) } } Core.prototype.State = StateCore export default Core