css.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. module.exports = function(hljs) {
  2. var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';
  3. var RULE = {
  4. begin: /[A-Z\_\.\-]+\s*:/, returnBegin: true, end: ';', endsWithParent: true,
  5. contains: [
  6. {
  7. className: 'attribute',
  8. begin: /\S/, end: ':', excludeEnd: true,
  9. starts: {
  10. endsWithParent: true, excludeEnd: true,
  11. contains: [
  12. {
  13. begin: /[\w-]+\(/, returnBegin: true,
  14. contains: [
  15. {
  16. className: 'built_in',
  17. begin: /[\w-]+/
  18. },
  19. {
  20. begin: /\(/, end: /\)/,
  21. contains: [
  22. hljs.APOS_STRING_MODE,
  23. hljs.QUOTE_STRING_MODE
  24. ]
  25. }
  26. ]
  27. },
  28. hljs.CSS_NUMBER_MODE,
  29. hljs.QUOTE_STRING_MODE,
  30. hljs.APOS_STRING_MODE,
  31. hljs.C_BLOCK_COMMENT_MODE,
  32. {
  33. className: 'number', begin: '#[0-9A-Fa-f]+'
  34. },
  35. {
  36. className: 'meta', begin: '!important'
  37. }
  38. ]
  39. }
  40. }
  41. ]
  42. };
  43. return {
  44. case_insensitive: true,
  45. illegal: /[=\/|'\$]/,
  46. contains: [
  47. hljs.C_BLOCK_COMMENT_MODE,
  48. {
  49. className: 'selector-id', begin: /#[A-Za-z0-9_-]+/
  50. },
  51. {
  52. className: 'selector-class', begin: /\.[A-Za-z0-9_-]+/
  53. },
  54. {
  55. className: 'selector-attr',
  56. begin: /\[/, end: /\]/,
  57. illegal: '$'
  58. },
  59. {
  60. className: 'selector-pseudo',
  61. begin: /:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/
  62. },
  63. {
  64. begin: '@(font-face|page)',
  65. lexemes: '[a-z-]+',
  66. keywords: 'font-face page'
  67. },
  68. {
  69. begin: '@', end: '[{;]', // at_rule eating first "{" is a good thing
  70. // because it doesn’t let it to be parsed as
  71. // a rule set but instead drops parser into
  72. // the default mode which is how it should be.
  73. illegal: /:/, // break on Less variables @var: ...
  74. contains: [
  75. {
  76. className: 'keyword',
  77. begin: /\w+/
  78. },
  79. {
  80. begin: /\s/, endsWithParent: true, excludeEnd: true,
  81. relevance: 0,
  82. contains: [
  83. hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE,
  84. hljs.CSS_NUMBER_MODE
  85. ]
  86. }
  87. ]
  88. },
  89. {
  90. className: 'selector-tag', begin: IDENT_RE,
  91. relevance: 0
  92. },
  93. {
  94. begin: '{', end: '}',
  95. illegal: /\S/,
  96. contains: [
  97. hljs.C_BLOCK_COMMENT_MODE,
  98. RULE,
  99. ]
  100. }
  101. ]
  102. };
  103. };