html-inline.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 EXPRESSION_HTML_LINK_OPEN = /^<a /i;
  8. var EXPRESSION_HTML_LINK_CLOSE = /^<\/a>/i;
  9. function inlineHTML(eat, value, silent) {
  10. var self = this;
  11. var length = value.length;
  12. var character;
  13. var subvalue;
  14. if (value.charAt(0) !== '<' || length < 3) {
  15. return;
  16. }
  17. character = value.charAt(1);
  18. if (
  19. !alphabetical(character) &&
  20. character !== '?' &&
  21. character !== '!' &&
  22. character !== '/'
  23. ) {
  24. return;
  25. }
  26. subvalue = value.match(tag);
  27. if (!subvalue) {
  28. return;
  29. }
  30. /* istanbul ignore if - not used yet. */
  31. if (silent) {
  32. return true;
  33. }
  34. subvalue = subvalue[0];
  35. if (!self.inLink && EXPRESSION_HTML_LINK_OPEN.test(subvalue)) {
  36. self.inLink = true;
  37. } else if (self.inLink && EXPRESSION_HTML_LINK_CLOSE.test(subvalue)) {
  38. self.inLink = false;
  39. }
  40. return eat(subvalue)({type: 'html', value: subvalue});
  41. }