12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- '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
|