util.js 6.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const ATTR_VALUE_REGEX_TEST = /[\xA0"&]/;
  2. const ATTR_VALUE_REGEX_REPLACE = new RegExp(ATTR_VALUE_REGEX_TEST.source, 'g');
  3. const TEXT_REGEX_TEST = /[\xA0&<>]/;
  4. const TEXT_REGEX_REPLACE = new RegExp(TEXT_REGEX_TEST.source, 'g');
  5. function attrValueReplacer(char) {
  6. switch (char.charCodeAt(0)) {
  7. case 160
  8. /* NBSP */
  9. :
  10. return '&nbsp;';
  11. case 34
  12. /* QUOT */
  13. :
  14. return '&quot;';
  15. case 38
  16. /* AMP */
  17. :
  18. return '&amp;';
  19. default:
  20. return char;
  21. }
  22. }
  23. function textReplacer(char) {
  24. switch (char.charCodeAt(0)) {
  25. case 160
  26. /* NBSP */
  27. :
  28. return '&nbsp;';
  29. case 38
  30. /* AMP */
  31. :
  32. return '&amp;';
  33. case 60
  34. /* LT */
  35. :
  36. return '&lt;';
  37. case 62
  38. /* GT */
  39. :
  40. return '&gt;';
  41. default:
  42. return char;
  43. }
  44. }
  45. export function escapeAttrValue(attrValue) {
  46. if (ATTR_VALUE_REGEX_TEST.test(attrValue)) {
  47. return attrValue.replace(ATTR_VALUE_REGEX_REPLACE, attrValueReplacer);
  48. }
  49. return attrValue;
  50. }
  51. export function escapeText(text) {
  52. if (TEXT_REGEX_TEST.test(text)) {
  53. return text.replace(TEXT_REGEX_REPLACE, textReplacer);
  54. }
  55. return text;
  56. }
  57. export function sortByLoc(a, b) {
  58. // If either is invisible, don't try to order them
  59. if (a.loc.isInvisible || b.loc.isInvisible) {
  60. return 0;
  61. }
  62. if (a.loc.startPosition.line < b.loc.startPosition.line) {
  63. return -1;
  64. }
  65. if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column < b.loc.startPosition.column) {
  66. return -1;
  67. }
  68. if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column === b.loc.startPosition.column) {
  69. return 0;
  70. }
  71. return 1;
  72. }
  73. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvZ2VuZXJhdGlvbi91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE1BQU0scUJBQXFCLEdBQUcsVUFBOUI7QUFDQSxNQUFNLHdCQUF3QixHQUFHLElBQUksTUFBSixDQUFXLHFCQUFxQixDQUFDLE1BQWpDLEVBQXlDLEdBQXpDLENBQWpDO0FBRUEsTUFBTSxlQUFlLEdBQUcsV0FBeEI7QUFDQSxNQUFNLGtCQUFrQixHQUFHLElBQUksTUFBSixDQUFXLGVBQWUsQ0FBQyxNQUEzQixFQUFtQyxHQUFuQyxDQUEzQjs7QUFFQSxTQUFTLGlCQUFULENBQTJCLElBQTNCLEVBQXVDO0FBQ3JDLFVBQVEsSUFBSSxDQUFDLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FBUjtBQUNFLFNBQUE7QUFBQTtBQUFBO0FBQ0UsYUFBTyxRQUFQOztBQUNGLFNBQUE7QUFBQTtBQUFBO0FBQ0UsYUFBTyxRQUFQOztBQUNGLFNBQUE7QUFBQTtBQUFBO0FBQ0UsYUFBTyxPQUFQOztBQUNGO0FBQ0UsYUFBTyxJQUFQO0FBUko7QUFVRDs7QUFFRCxTQUFTLFlBQVQsQ0FBc0IsSUFBdEIsRUFBa0M7QUFDaEMsVUFBUSxJQUFJLENBQUMsVUFBTCxDQUFnQixDQUFoQixDQUFSO0FBQ0UsU0FBQTtBQUFBO0FBQUE7QUFDRSxhQUFPLFFBQVA7O0FBQ0YsU0FBQTtBQUFBO0FBQUE7QUFDRSxhQUFPLE9BQVA7O0FBQ0YsU0FBQTtBQUFBO0FBQUE7QUFDRSxhQUFPLE1BQVA7O0FBQ0YsU0FBQTtBQUFBO0FBQUE7QUFDRSxhQUFPLE1BQVA7O0FBQ0Y7QUFDRSxhQUFPLElBQVA7QUFWSjtBQVlEOztBQUVELE9BQU0sU0FBVSxlQUFWLENBQTBCLFNBQTFCLEVBQTJDO0FBQy9DLE1BQUkscUJBQXFCLENBQUMsSUFBdEIsQ0FBMkIsU0FBM0IsQ0FBSixFQUEyQztBQUN6QyxXQUFPLFNBQVMsQ0FBQyxPQUFWLENBQWtCLHdCQUFsQixFQUE0QyxpQkFBNUMsQ0FBUDtBQUNEOztBQUNELFNBQU8sU0FBUDtBQUNEO0FBRUQsT0FBTSxTQUFVLFVBQVYsQ0FBcUIsSUFBckIsRUFBaUM7QUFDckMsTUFBSSxlQUFlLENBQUMsSUFBaEIsQ0FBcUIsSUFBckIsQ0FBSixFQUFnQztBQUM5QixXQUFPLElBQUksQ0FBQyxPQUFMLENBQWEsa0JBQWIsRUFBaUMsWUFBakMsQ0FBUDtBQUNEOztBQUNELFNBQU8sSUFBUDtBQUNEO0FBRUQsT0FBTSxTQUFVLFNBQVYsQ0FBb0IsQ0FBcEIsRUFBbUMsQ0FBbkMsRUFBZ0Q7QUFDcEQ7QUFDQSxNQUFJLENBQUMsQ0FBQyxHQUFGLENBQU0sV0FBTixJQUFxQixDQUFDLENBQUMsR0FBRixDQUFNLFdBQS9CLEVBQTRDO0FBQzFDLFdBQU8sQ0FBUDtBQUNEOztBQUVELE1BQUksQ0FBQyxDQUFDLEdBQUYsQ0FBTSxhQUFOLENBQW9CLElBQXBCLEdBQTJCLENBQUMsQ0FBQyxHQUFGLENBQU0sYUFBTixDQUFvQixJQUFuRCxFQUF5RDtBQUN2RCxXQUFPLENBQUMsQ0FBUjtBQUNEOztBQUVELE1BQ0UsQ0FBQyxDQUFDLEdBQUYsQ0FBTSxhQUFOLENBQW9CLElBQXBCLEtBQTZCLENBQUMsQ0FBQyxHQUFGLENBQU0sYUFBTixDQUFvQixJQUFqRCxJQUNBLENBQUMsQ0FBQyxHQUFGLENBQU0sYUFBTixDQUFvQixNQUFwQixHQUE2QixDQUFDLENBQUMsR0FBRixDQUFNLGFBQU4sQ0FBb0IsTUFGbkQsRUFHRTtBQUNBLFdBQU8sQ0FBQyxDQUFSO0FBQ0Q7O0FBRUQsTUFDRSxDQUFDLENBQUMsR0FBRixDQUFNLGFBQU4sQ0FBb0IsSUFBcEIsS0FBNkIsQ0FBQyxDQUFDLEdBQUYsQ0FBTSxhQUFOLENBQW9CLElBQWpELElBQ0EsQ0FBQyxDQUFDLEdBQUYsQ0FBTSxhQUFOLENBQW9CLE1BQXBCLEtBQStCLENBQUMsQ0FBQyxHQUFGLENBQU0sYUFBTixDQUFvQixNQUZyRCxFQUdFO0FBQ0EsV0FBTyxDQUFQO0FBQ0Q7O0FBRUQsU0FBTyxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBU1R2MSBmcm9tICcuLi92MS9hcGknO1xuXG5jb25zdCBlbnVtIENoYXIge1xuICBOQlNQID0gMHhhMCxcbiAgUVVPVCA9IDB4MjIsXG4gIExUID0gMHgzYyxcbiAgR1QgPSAweDNlLFxuICBBTVAgPSAweDI2LFxufVxuXG5jb25zdCBBVFRSX1ZBTFVFX1JFR0VYX1RFU1QgPSAvW1xceEEwXCImXS87XG5jb25zdCBBVFRSX1ZBTFVFX1JFR0VYX1JFUExBQ0UgPSBuZXcgUmVnRXhwKEFUVFJfVkFMVUVfUkVHRVhfVEVTVC5zb3VyY2UsICdnJyk7XG5cbmNvbnN0IFRFWFRfUkVHRVhfVEVTVCA9IC9bXFx4QTAmPD5dLztcbmNvbnN0IFRFWFRfUkVHRVhfUkVQTEFDRSA9IG5ldyBSZWdFeHAoVEVYVF9SRUdFWF9URVNULnNvdXJjZSwgJ2cnKTtcblxuZnVuY3Rpb24gYXR0clZhbHVlUmVwbGFjZXIoY2hhcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoIChjaGFyLmNoYXJDb2RlQXQoMCkpIHtcbiAgICBjYXNlIENoYXIuTkJTUDpcbiAgICAgIHJldHVybiAnJm5ic3A7JztcbiAgICBjYXNlIENoYXIuUVVPVDpcbiAgICAgIHJldHVybiAnJnF1b3Q7JztcbiAgICBjYXNlIENoYXIuQU1QOlxuICAgICAgcmV0dXJuICcmYW1wOyc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjaGFyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRleHRSZXBsYWNlcihjaGFyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGNoYXIuY2hhckNvZGVBdCgwKSkge1xuICAgIGNhc2UgQ2hhci5OQlNQOlxuICAgICAgcmV0dXJuICcmbmJzcDsnO1xuICAgIGNhc2UgQ2hhci5BTVA6XG4gICAgICByZXR1cm4gJyZhbXA7JztcbiAgICBjYXNlIENoYXIuTFQ6XG4gICAgICByZXR1cm4gJyZsdDsnO1xuICAgIGNhc2UgQ2hhci5HVDpcbiAgICAgIHJldHVybiAnJmd0Oyc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjaGFyO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVBdHRyVmFsdWUoYXR0clZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoQVRUUl9WQUxVRV9SRUdFWF9URVNULnRlc3QoYXR0clZhbHVlKSkge1xuICAgIHJldHVybiBhdHRyVmFsdWUucmVwbGFjZShBVFRSX1ZBTFVFX1JFR0VYX1JFUExBQ0UsIGF0dHJWYWx1ZVJlcGxhY2VyKTtcbiAgfVxuICByZXR1cm4gYXR0clZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoVEVYVF9SRUdFWF9URVNULnRlc3QodGV4dCkpIHtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKFRFWFRfUkVHRVhfUkVQTEFDRSwgdGV4dFJlcGxhY2VyKTtcbiAgfVxuICByZXR1cm4gdGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeUxvYyhhOiBBU1R2MS5Ob2RlLCBiOiBBU1R2MS5Ob2RlKTogLTEgfCAwIHwgMSB7XG4gIC8vIElmIGVpdGhlciBpcyBpbnZpc2libGUsIGRvbid0IHRyeSB0byBvcmRlciB0aGVtXG4gIGlmIChhLmxvYy5pc0ludmlzaWJsZSB8fCBiLmxvYy5pc0ludmlzaWJsZSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGEubG9jLnN0YXJ0UG9zaXRpb24ubGluZSA8IGIubG9jLnN0YXJ0UG9zaXRpb24ubGluZSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGlmIChcbiAgICBhLmxvYy5zdGFydFBvc2l0aW9uLmxpbmUgPT09IGIubG9jLnN0YXJ0UG9zaXRpb24ubGluZSAmJlxuICAgIGEubG9jLnN0YXJ0UG9zaXRpb24uY29sdW1uIDwgYi5sb2Muc3RhcnRQb3NpdGlvbi5jb2x1bW5cbiAgKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgaWYgKFxuICAgIGEubG9jLnN0YXJ0UG9zaXRpb24ubGluZSA9PT0gYi5sb2Muc3RhcnRQb3NpdGlvbi5saW5lICYmXG4gICAgYS5sb2Muc3RhcnRQb3NpdGlvbi5jb2x1bW4gPT09IGIubG9jLnN0YXJ0UG9zaXRpb24uY29sdW1uXG4gICkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIDE7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9