| 'use strict' |
| |
| var whitespace = require('is-whitespace-character') |
| var locate = require('../locate/delete') |
| |
| module.exports = strikethrough |
| strikethrough.locator = locate |
| |
| var tilde = '~' |
| var fence = '~~' |
| |
| function strikethrough(eat, value, silent) { |
| var self = this |
| var character = '' |
| var previous = '' |
| var preceding = '' |
| var subvalue = '' |
| var index |
| var length |
| var now |
| |
| if ( |
| !self.options.gfm || |
| value.charAt(0) !== tilde || |
| value.charAt(1) !== tilde || |
| whitespace(value.charAt(2)) |
| ) { |
| return |
| } |
| |
| index = 1 |
| length = value.length |
| now = eat.now() |
| now.column += 2 |
| now.offset += 2 |
| |
| while (++index < length) { |
| character = value.charAt(index) |
| |
| if ( |
| character === tilde && |
| previous === tilde && |
| (!preceding || !whitespace(preceding)) |
| ) { |
| /* istanbul ignore if - never used (yet) */ |
| if (silent) { |
| return true |
| } |
| |
| return eat(fence + subvalue + fence)({ |
| type: 'delete', |
| children: self.tokenizeInline(subvalue, now) |
| }) |
| } |
| |
| subvalue += previous |
| preceding = previous |
| previous = character |
| } |
| } |