'use strict' var codes = require('../character/codes.js') var markdownSpace = require('../character/markdown-space.js') var constants = require('../constant/constants.js') var types = require('../constant/types.js') var factorySpace = require('./factory-space.js') var blockQuote = { name: 'blockQuote', tokenize: tokenizeBlockQuoteStart, continuation: {tokenize: tokenizeBlockQuoteContinuation}, exit: exit } function tokenizeBlockQuoteStart(effects, ok, nok) { var self = this return start function start(code) { if (code === codes.greaterThan) { if (!self.containerState.open) { effects.enter(types.blockQuote, {_container: true}) self.containerState.open = true } effects.enter(types.blockQuotePrefix) effects.enter(types.blockQuoteMarker) effects.consume(code) effects.exit(types.blockQuoteMarker) return after } return nok(code) } function after(code) { if (markdownSpace(code)) { effects.enter(types.blockQuotePrefixWhitespace) effects.consume(code) effects.exit(types.blockQuotePrefixWhitespace) effects.exit(types.blockQuotePrefix) return ok } effects.exit(types.blockQuotePrefix) return ok(code) } } function tokenizeBlockQuoteContinuation(effects, ok, nok) { return factorySpace( effects, effects.attempt(blockQuote, ok, nok), types.linePrefix, this.parser.constructs.disable.null.indexOf('codeIndented') > -1 ? undefined : constants.tabSize ) } function exit(effects) { effects.exit(types.blockQuote) } module.exports = blockQuote