terminal-highlight.js 6.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. 'use strict';
  2. exports.__esModule = true;
  3. var _chalk = require('chalk');
  4. var _chalk2 = _interopRequireDefault(_chalk);
  5. var _tokenize = require('./tokenize');
  6. var _tokenize2 = _interopRequireDefault(_tokenize);
  7. var _input = require('./input');
  8. var _input2 = _interopRequireDefault(_input);
  9. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10. var colors = new _chalk2.default.constructor({ enabled: true });
  11. var HIGHLIGHT_THEME = {
  12. 'brackets': colors.cyan,
  13. 'at-word': colors.cyan,
  14. 'call': colors.cyan,
  15. 'comment': colors.gray,
  16. 'string': colors.green,
  17. 'class': colors.yellow,
  18. 'hash': colors.magenta,
  19. '(': colors.cyan,
  20. ')': colors.cyan,
  21. '{': colors.yellow,
  22. '}': colors.yellow,
  23. '[': colors.yellow,
  24. ']': colors.yellow,
  25. ':': colors.yellow,
  26. ';': colors.yellow
  27. };
  28. function getTokenType(_ref, index, tokens) {
  29. var type = _ref[0],
  30. value = _ref[1];
  31. if (type === 'word') {
  32. if (value[0] === '.') {
  33. return 'class';
  34. }
  35. if (value[0] === '#') {
  36. return 'hash';
  37. }
  38. }
  39. var nextToken = tokens[index + 1];
  40. if (nextToken && (nextToken[0] === 'brackets' || nextToken[0] === '(')) {
  41. return 'call';
  42. }
  43. return type;
  44. }
  45. function terminalHighlight(css) {
  46. var tokens = (0, _tokenize2.default)(new _input2.default(css), { ignoreErrors: true });
  47. return tokens.map(function (token, index) {
  48. var color = HIGHLIGHT_THEME[getTokenType(token, index, tokens)];
  49. if (color) {
  50. return token[1].split(/\r?\n/).map(function (i) {
  51. return color(i);
  52. }).join('\n');
  53. } else {
  54. return token[1];
  55. }
  56. }).join('');
  57. }
  58. exports.default = terminalHighlight;
  59. module.exports = exports['default'];
  60. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9saWIvdGVybWluYWwtaGlnaGxpZ2h0LmVzNiJdLCJuYW1lcyI6WyJjb2xvcnMiLCJjb25zdHJ1Y3RvciIsImVuYWJsZWQiLCJISUdITElHSFRfVEhFTUUiLCJjeWFuIiwiZ3JheSIsImdyZWVuIiwieWVsbG93IiwibWFnZW50YSIsImdldFRva2VuVHlwZSIsImluZGV4IiwidG9rZW5zIiwidHlwZSIsInZhbHVlIiwibmV4dFRva2VuIiwidGVybWluYWxIaWdobGlnaHQiLCJjc3MiLCJpZ25vcmVFcnJvcnMiLCJtYXAiLCJ0b2tlbiIsImNvbG9yIiwic3BsaXQiLCJpIiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0FBRUE7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBSUEsU0FBUyxJQUFJLGdCQUFNQyxXQUFWLENBQXNCLEVBQUVDLFNBQVMsSUFBWCxFQUF0QixDQUFiOztBQUVBLElBQU1DLGtCQUFrQjtBQUNwQixnQkFBWUgsT0FBT0ksSUFEQztBQUVwQixlQUFZSixPQUFPSSxJQUZDO0FBR3BCLFlBQVlKLE9BQU9JLElBSEM7QUFJcEIsZUFBWUosT0FBT0ssSUFKQztBQUtwQixjQUFZTCxPQUFPTSxLQUxDO0FBTXBCLGFBQVlOLE9BQU9PLE1BTkM7QUFPcEIsWUFBWVAsT0FBT1EsT0FQQztBQVFwQixTQUFZUixPQUFPSSxJQVJDO0FBU3BCLFNBQVlKLE9BQU9JLElBVEM7QUFVcEIsU0FBWUosT0FBT08sTUFWQztBQVdwQixTQUFZUCxPQUFPTyxNQVhDO0FBWXBCLFNBQVlQLE9BQU9PLE1BWkM7QUFhcEIsU0FBWVAsT0FBT08sTUFiQztBQWNwQixTQUFZUCxPQUFPTyxNQWRDO0FBZXBCLFNBQVlQLE9BQU9PO0FBZkMsQ0FBeEI7O0FBa0JBLFNBQVNFLFlBQVQsT0FBcUNDLEtBQXJDLEVBQTRDQyxNQUE1QyxFQUFvRDtBQUFBLFFBQTdCQyxJQUE2QjtBQUFBLFFBQXZCQyxLQUF1Qjs7QUFDaEQsUUFBSUQsU0FBUyxNQUFiLEVBQXFCO0FBQ2pCLFlBQUlDLE1BQU0sQ0FBTixNQUFhLEdBQWpCLEVBQXNCO0FBQ2xCLG1CQUFPLE9BQVA7QUFDSDtBQUNELFlBQUlBLE1BQU0sQ0FBTixNQUFhLEdBQWpCLEVBQXNCO0FBQ2xCLG1CQUFPLE1BQVA7QUFDSDtBQUNKOztBQUVELFFBQUlDLFlBQVlILE9BQU9ELFFBQVEsQ0FBZixDQUFoQjtBQUNBLFFBQUlJLGNBQWNBLFVBQVUsQ0FBVixNQUFpQixVQUFqQixJQUErQkEsVUFBVSxDQUFWLE1BQWlCLEdBQTlELENBQUosRUFBd0U7QUFDcEUsZUFBTyxNQUFQO0FBQ0g7O0FBRUQsV0FBT0YsSUFBUDtBQUNIOztBQUVELFNBQVNHLGlCQUFULENBQTJCQyxHQUEzQixFQUFnQztBQUM1QixRQUFJTCxTQUFTLHdCQUFTLG9CQUFVSyxHQUFWLENBQVQsRUFBeUIsRUFBRUMsY0FBYyxJQUFoQixFQUF6QixDQUFiO0FBQ0EsV0FBT04sT0FBT08sR0FBUCxDQUFXLFVBQUNDLEtBQUQsRUFBUVQsS0FBUixFQUFrQjtBQUNoQyxZQUFJVSxRQUFRakIsZ0JBQWdCTSxhQUFhVSxLQUFiLEVBQW9CVCxLQUFwQixFQUEyQkMsTUFBM0IsQ0FBaEIsQ0FBWjtBQUNBLFlBQUtTLEtBQUwsRUFBYTtBQUNULG1CQUFPRCxNQUFNLENBQU4sRUFBU0UsS0FBVCxDQUFlLE9BQWYsRUFDSkgsR0FESSxDQUNDO0FBQUEsdUJBQUtFLE1BQU1FLENBQU4sQ0FBTDtBQUFBLGFBREQsRUFFSkMsSUFGSSxDQUVDLElBRkQsQ0FBUDtBQUdILFNBSkQsTUFJTztBQUNILG1CQUFPSixNQUFNLENBQU4sQ0FBUDtBQUNIO0FBQ0osS0FUTSxFQVNKSSxJQVRJLENBU0MsRUFURCxDQUFQO0FBVUg7O2tCQUVjUixpQiIsImZpbGUiOiJ0ZXJtaW5hbC1oaWdobGlnaHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5pbXBvcnQgdG9rZW5pemUgZnJvbSAnLi90b2tlbml6ZSc7XG5pbXBvcnQgSW5wdXQgICAgZnJvbSAnLi9pbnB1dCc7XG5cbmxldCBjb2xvcnMgPSBuZXcgY2hhbGsuY29uc3RydWN0b3IoeyBlbmFibGVkOiB0cnVlIH0pO1xuXG5jb25zdCBISUdITElHSFRfVEhFTUUgPSB7XG4gICAgJ2JyYWNrZXRzJzogY29sb3JzLmN5YW4sXG4gICAgJ2F0LXdvcmQnOiAgY29sb3JzLmN5YW4sXG4gICAgJ2NhbGwnOiAgICAgY29sb3JzLmN5YW4sXG4gICAgJ2NvbW1lbnQnOiAgY29sb3JzLmdyYXksXG4gICAgJ3N0cmluZyc6ICAgY29sb3JzLmdyZWVuLFxuICAgICdjbGFzcyc6ICAgIGNvbG9ycy55ZWxsb3csXG4gICAgJ2hhc2gnOiAgICAgY29sb3JzLm1hZ2VudGEsXG4gICAgJygnOiAgICAgICAgY29sb3JzLmN5YW4sXG4gICAgJyknOiAgICAgICAgY29sb3JzLmN5YW4sXG4gICAgJ3snOiAgICAgICAgY29sb3JzLnllbGxvdyxcbiAgICAnfSc6ICAgICAgICBjb2xvcnMueWVsbG93LFxuICAgICdbJzogICAgICAgIGNvbG9ycy55ZWxsb3csXG4gICAgJ10nOiAgICAgICAgY29sb3JzLnllbGxvdyxcbiAgICAnOic6ICAgICAgICBjb2xvcnMueWVsbG93LFxuICAgICc7JzogICAgICAgIGNvbG9ycy55ZWxsb3dcbn07XG5cbmZ1bmN0aW9uIGdldFRva2VuVHlwZShbdHlwZSwgdmFsdWVdLCBpbmRleCwgdG9rZW5zKSB7XG4gICAgaWYgKHR5cGUgPT09ICd3b3JkJykge1xuICAgICAgICBpZiAodmFsdWVbMF0gPT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuICdjbGFzcyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlWzBdID09PSAnIycpIHtcbiAgICAgICAgICAgIHJldHVybiAnaGFzaCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV4dFRva2VuID0gdG9rZW5zW2luZGV4ICsgMV07XG4gICAgaWYgKG5leHRUb2tlbiAmJiAobmV4dFRva2VuWzBdID09PSAnYnJhY2tldHMnIHx8IG5leHRUb2tlblswXSA9PT0gJygnKSkge1xuICAgICAgICByZXR1cm4gJ2NhbGwnO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xufVxuXG5mdW5jdGlvbiB0ZXJtaW5hbEhpZ2hsaWdodChjc3MpIHtcbiAgICBsZXQgdG9rZW5zID0gdG9rZW5pemUobmV3IElucHV0KGNzcyksIHsgaWdub3JlRXJyb3JzOiB0cnVlIH0pO1xuICAgIHJldHVybiB0b2tlbnMubWFwKCh0b2tlbiwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGNvbG9yID0gSElHSExJR0hUX1RIRU1FW2dldFRva2VuVHlwZSh0b2tlbiwgaW5kZXgsIHRva2VucyldO1xuICAgICAgICBpZiAoIGNvbG9yICkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuWzFdLnNwbGl0KC9cXHI/XFxuLylcbiAgICAgICAgICAgICAgLm1hcCggaSA9PiBjb2xvcihpKSApXG4gICAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlblsxXTtcbiAgICAgICAgfVxuICAgIH0pLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZXJtaW5hbEhpZ2hsaWdodDtcbiJdfQ==