'use strict' var markdownLineEnding = require('../character/markdown-line-ending.js') var markdownSpace = require('../character/markdown-space.js') var factorySpace = require('./factory-space.js') var thematicBreak = { name: 'thematicBreak', tokenize: tokenizeThematicBreak } function tokenizeThematicBreak(effects, ok, nok) { var size = 0 var marker return start function start(code) { effects.enter('thematicBreak') marker = code return atBreak(code) } function atBreak(code) { if (code === marker) { effects.enter('thematicBreakSequence') return sequence(code) } if (markdownSpace(code)) { return factorySpace(effects, atBreak, 'whitespace')(code) } if (size < 3 || (code !== null && !markdownLineEnding(code))) { return nok(code) } effects.exit('thematicBreak') return ok(code) } function sequence(code) { if (code === marker) { effects.consume(code) size++ return sequence } effects.exit('thematicBreakSequence') return atBreak(code) } } module.exports = thematicBreak