You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.1 KiB
53 lines
1.1 KiB
'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
|
|
|