71 lines
1.2 KiB
JavaScript
71 lines
1.2 KiB
JavaScript
'use strict'
|
|
|
|
module.exports = thematicBreak
|
|
|
|
var tab = '\t'
|
|
var lineFeed = '\n'
|
|
var space = ' '
|
|
var asterisk = '*'
|
|
var dash = '-'
|
|
var underscore = '_'
|
|
|
|
var maxCount = 3
|
|
|
|
function thematicBreak(eat, value, silent) {
|
|
var index = -1
|
|
var length = value.length + 1
|
|
var subvalue = ''
|
|
var character
|
|
var marker
|
|
var markerCount
|
|
var queue
|
|
|
|
while (++index < length) {
|
|
character = value.charAt(index)
|
|
|
|
if (character !== tab && character !== space) {
|
|
break
|
|
}
|
|
|
|
subvalue += character
|
|
}
|
|
|
|
if (
|
|
character !== asterisk &&
|
|
character !== dash &&
|
|
character !== underscore
|
|
) {
|
|
return
|
|
}
|
|
|
|
marker = character
|
|
subvalue += character
|
|
markerCount = 1
|
|
queue = ''
|
|
|
|
while (++index < length) {
|
|
character = value.charAt(index)
|
|
|
|
if (character === marker) {
|
|
markerCount++
|
|
subvalue += queue + marker
|
|
queue = ''
|
|
} else if (character === space) {
|
|
queue += character
|
|
} else if (
|
|
markerCount >= maxCount &&
|
|
(!character || character === lineFeed)
|
|
) {
|
|
subvalue += queue
|
|
|
|
if (silent) {
|
|
return true
|
|
}
|
|
|
|
return eat(subvalue)({type: 'thematicBreak'})
|
|
} else {
|
|
return
|
|
}
|
|
}
|
|
}
|