css.js 2.7 KB

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