html-inline.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. 'use strict'
  2. var alphabetical = require('is-alphabetical')
  3. var locate = require('../locate/tag')
  4. var tag = require('../util/html').tag
  5. module.exports = inlineHTML
  6. inlineHTML.locator = locate
  7. var lessThan = '<'
  8. var questionMark = '?'
  9. var exclamationMark = '!'
  10. var slash = '/'
  11. var htmlLinkOpenExpression = /^<a /i
  12. var htmlLinkCloseExpression = /^<\/a>/i
  13. function inlineHTML(eat, value, silent) {
  14. var self = this
  15. var length = value.length
  16. var character
  17. var subvalue
  18. if (value.charAt(0) !== lessThan || length < 3) {
  19. return
  20. }
  21. character = value.charAt(1)
  22. if (
  23. !alphabetical(character) &&
  24. character !== questionMark &&
  25. character !== exclamationMark &&
  26. character !== slash
  27. ) {
  28. return
  29. }
  30. subvalue = value.match(tag)
  31. if (!subvalue) {
  32. return
  33. }
  34. /* istanbul ignore if - not used yet. */
  35. if (silent) {
  36. return true
  37. }
  38. subvalue = subvalue[0]
  39. if (!self.inLink && htmlLinkOpenExpression.test(subvalue)) {
  40. self.inLink = true
  41. } else if (self.inLink && htmlLinkCloseExpression.test(subvalue)) {
  42. self.inLink = false
  43. }
  44. return eat(subvalue)({type: 'html', value: subvalue})
  45. }