1<?php
2/*************************************************************************************
3 * css.php
4 * -------
5 * Author: Nigel McNie (nigel@geshi.org), Zéfling (zefling@ikilote.net)
6 * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
7 * Release Version: 1.0.9.1
8 * Date Started: 2004/06/18
9 *
10 * CSS language file for GeSHi.
11 *
12 * CHANGES
13 * -------
14 * 2014/07/14 (1.0.8.13)
15 *  - update for current CSS3 (properties, value, expression, unites & color)
16 *  - remove pseudo class regex
17 *  - add rules regex
18 * 2008/05/23 (1.0.7.22)
19 *  -  Added description of extra language features (SF#1970248)
20 * 2004/11/27 (1.0.3)
21 *  -  Added support for multiple object splitters
22 * 2004/10/27 (1.0.2)
23 *   -  Changed regexps to catch "-" symbols
24 *   -  Added support for URLs
25 * 2004/08/05 (1.0.1)
26 *   -  Added support for symbols
27 * 2004/07/14 (1.0.0)
28 *   -  First Release
29 *
30 * TODO (updated 2004/11/27)
31 * -------------------------
32 * * Improve or drop regexps for class/id highlighting
33 * * Re-look at keywords - possibly to make several CSS language
34 *   files, all with different versions of CSS in them
35 *
36 *************************************************************************************
37 *
38 *     This file is part of GeSHi.
39 *
40 *   GeSHi is free software; you can redistribute it and/or modify
41 *   it under the terms of the GNU General Public License as published by
42 *   the Free Software Foundation; either version 2 of the License, or
43 *   (at your option) any later version.
44 *
45 *   GeSHi is distributed in the hope that it will be useful,
46 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
47 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
48 *   GNU General Public License for more details.
49 *
50 *   You should have received a copy of the GNU General Public License
51 *   along with GeSHi; if not, write to the Free Software
52 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
53 *
54 ************************************************************************************/
55
56$language_data = array(
57    'LANG_NAME' => 'CSS',
58    'COMMENT_SINGLE' => array(),
59    'COMMENT_MULTI' => array('/*' => '*/'),
60    'COMMENT_REGEXP' => array(
61        2 => "/(?<=\\()\\s*(?:(?:[a-z0-9]+?:\\/\\/)?[a-z0-9_\\-\\.\\/:]+?)?[a-z]+?\\.[a-z]+?(\\?[^\)]+?)?\\s*?(?=\\))/i"
62    ),
63    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
64    'QUOTEMARKS' => array('"', "'"),
65    'ESCAPE_CHAR' => '',
66    'ESCAPE_REGEXP' => array(
67        //Simple Single Char Escapes
68        //1 => "#\\\\[nfrtv\$\"\n\\\\]#i",
69        //Hexadecimal Char Specs
70        2 => "#\\\\[\da-fA-F]{1,6}\s?#i",
71        //Unicode Char Specs
72        //3 => "#\\\\u[\da-fA-F]{1,8}#i",
73    ),
74    'KEYWORDS' => array(
75        // properties
76        1 => array(
77            'align-content',
78            'align-items',
79            'align-self',
80            'all',
81            'animation',
82            'animation-delay',
83            'animation-direction',
84            'animation-duration',
85            'animation-fill-mode',
86            'animation-iteration-count',
87            'animation-name',
88            'animation-play-state',
89            'animation-timing-function',
90            'backface-visibility',
91            'background',
92            'background-attachment',
93            'background-blend-mode',
94            'background-clip',
95            'background-color',
96            'background-image',
97            'background-origin',
98            'background-position',
99            'background-repeat',
100            'background-size',
101            'border',
102            'border-bottom',
103            'border-bottom-color',
104            'border-bottom-left-radius',
105            'border-bottom-right-radius',
106            'border-bottom-style',
107            'border-bottom-width',
108            'border-collapse',
109            'border-color',
110            'border-image',
111            'border-image-outset',
112            'border-image-repeat',
113            'border-image-slice',
114            'border-image-source',
115            'border-image-width',
116            'border-left',
117            'border-left-color',
118            'border-left-style',
119            'border-left-width',
120            'border-radius',
121            'border-right',
122            'border-right-color',
123            'border-right-style',
124            'border-right-width',
125            'border-spacing',
126            'border-style',
127            'border-top',
128            'border-top-color',
129            'border-top-left-radius',
130            'border-top-right-radius',
131            'border-top-style',
132            'border-top-width',
133            'border-width',
134            'bottom',
135            'box-decoration-break',
136            'box-shadow',
137            'box-sizing',
138            'break-after',
139            'break-before',
140            'break-inside',
141            'caption-side',
142            'clear',
143            'clip',
144            'clip-path',
145            'color',
146            'columns',
147            'column-count',
148            'column-fill',
149            'column-gap',
150            'column-rule',
151            'column-rule-color',
152            'column-rule-style',
153            'column-rule-width',
154            'column-span',
155            'column-width',
156            'content',
157            'counter-increment',
158            'counter-reset',
159            'cursor',
160            'direction',
161            'display',
162            'empty-cells',
163            'fill',
164            'fill-rule',
165            'fill-opacity',
166            'filter',
167            'flex',
168            'flex-basis',
169            'flex-direction',
170            'flex-flow',
171            'flex-grow',
172            'flex-shrink',
173            'flex-wrap',
174            'float',
175            'font',
176            'font-family',
177            'font-feature-settings',
178            'font-kerning',
179            'font-language-override',
180            'font-size',
181            'font-size-adjust',
182            'font-stretch',
183            'font-style',
184            'font-synthesis',
185            'font-variant',
186            'font-variant-alternates',
187            'font-variant-caps',
188            'font-variant-east-asian',
189            'font-variant-ligatures',
190            'font-variant-numeric',
191            'font-variant-position',
192            'font-weight',
193            'grid',
194            'grid-area',
195            'grid-auto-columns',
196            'grid-auto-flow',
197            'grid-auto-position',
198            'grid-auto-rows',
199            'grid-column',
200            'grid-column-start',
201            'grid-column-end',
202            'grid-row',
203            'grid-row-start',
204            'grid-row-end',
205            'grid-template',
206            'grid-template-areas',
207            'grid-template-rows',
208            'grid-template-columns',
209            'height',
210            'hyphens',
211            'icon',
212            'image-rendering',
213            'image-resolution',
214            'image-orientation',
215            'ime-mode',
216            'justify-content',
217            'left',
218            'letter-spacing',
219            'line-break',
220            'line-height',
221            'list-style',
222            'list-style-image',
223            'list-style-position',
224            'list-style-type',
225            'margin',
226            'margin-bottom',
227            'margin-left',
228            'margin-right',
229            'margin-top',
230            'marks',
231            'mask',
232            'mask-type',
233            'max-height',
234            'max-width',
235            'min-height',
236            'min-width',
237            'mix-blend-mode',
238            'nav-down',
239            'nav-index',
240            'nav-left',
241            'nav-right',
242            'nav-up',
243            'object-fit',
244            'object-position',
245            'opacity',
246            'order',
247            'orphans',
248            'outline',
249            'outline-color',
250            'outline-offset',
251            'outline-style',
252            'outline-width',
253            'overflow',
254            'overflow-wrap',
255            'overflow-x',
256            'overflow-y',
257            'overflow-clip-box',
258            'padding',
259            'padding-bottom',
260            'padding-left',
261            'padding-right',
262            'padding-top',
263            'page-break-after',
264            'page-break-before',
265            'page-break-inside',
266            'perspective',
267            'perspective-origin',
268            'pointer-events',
269            'position',
270            'quotes',
271            'resize',
272            'right',
273            'shape-image-threshold',
274            'shape-margin',
275            'shape-outside',
276            'stroke',
277            'stroke-width',
278            'stroke-linecap',
279            'stroke-linejoin',
280            'stroke-miterlimit',
281            'stroke-dasharray',
282            'stroke-dashoffset',
283            'table-layout',
284            'tab-size',
285            'text-align',
286            'text-align-last',
287            'text-combine-horizontal',
288            'text-decoration',
289            'text-decoration-color',
290            'text-decoration-line',
291            'text-decoration-style',
292            'text-indent',
293            'text-orientation',
294            'text-overflow',
295            'text-rendering',
296            'text-shadow',
297            'text-transform',
298            'text-underline-position',
299            'top',
300            'touch-action',
301            'transform',
302            'transform-origin',
303            'transform-style',
304            'transition',
305            'transition-delay',
306            'transition-duration',
307            'transition-property',
308            'transition-timing-function',
309            'unicode-bidi',
310            'unicode-range',
311            'vertical-align',
312            'visibility',
313            'white-space',
314            'widows',
315            'width',
316            'will-change',
317            'word-break',
318            'word-spacing',
319            'word-wrap',
320            'writing-mode',
321            'z-index'
322        ),
323        // value
324        2 => array(
325            'absolute',
326            'activeborder',
327            'activecaption',
328            'after-white-space',
329            'ahead',
330            'alternate',
331            'always',
332            'appworkspace',
333            'armenian',
334            'auto',
335            'avoid',
336            'background',
337            'backwards',
338            'baseline',
339            'below',
340            'bevel',
341            'bidi-override',
342            'blink',
343            'block',
344            'block clear',
345            'block width',
346            'block-axis',
347            'bold',
348            'bolder',
349            'border',
350            'border-box',
351            'both',
352            'bottom',
353            'break-word',
354            'butt',
355            'button',
356            'button-bevel',
357            'buttonface',
358            'buttonhighlight',
359            'buttonshadow',
360            'buttontext',
361            'capitalize',
362            'caption',
363            'captiontext',
364            'caret',
365            'center',
366            'checkbox',
367            'circle',
368            'cjk-ideographic',
369            'clip',
370            'close-quote',
371            'collapse',
372            'compact',
373            'condensed',
374            'content',
375            'content-box',
376            'continuous',
377            'crop',
378            'cross',
379            'crosshair',
380            'currentColor',
381            'cursive',
382            'dashed',
383            'decimal',
384            'decimal-leading-zero',
385            'default',
386            'disc',
387            'discard',
388            'dot-dash',
389            'dot-dot-dash',
390            'dotted',
391            'double',
392            'down',
393            'e-resize',
394            'element',
395            'ellipsis',
396            'embed',
397            'end',
398            'evenodd',
399            'expanded',
400            'extra-condensed',
401            'extra-expanded',
402            'fantasy',
403            'fast',
404            'fixed',
405            'forwards',
406            'georgian',
407            'graytext',
408            'groove',
409            'hand',
410            'hebrew',
411            'help',
412            'hidden',
413            'hide',
414            'higher',
415            'highlight',
416            'highlighttext',
417            'hiragana',
418            'hiragana-iroha',
419            'horizontal',
420            'icon',
421            'ignore',
422            'inactiveborder',
423            'inactivecaption',
424            'inactivecaptiontext',
425            'infinite',
426            'infobackground',
427            'infotext',
428            'inherit',
429            'initial',
430            'inline',
431            'inline-axis',
432            'inline-block',
433            'inline-table',
434            'inset',
435            'inside',
436            'intrinsic',
437            'invert',
438            'italic',
439            'justify',
440            'katakana',
441            'katakana-iroha',
442            'landscape',
443            'large',
444            'larger',
445            'left',
446            'level',
447            'lighter',
448            'line-through',
449            'list-item',
450            'listbox',
451            'listitem',
452            'logical',
453            'loud',
454            'lower',
455            'lower-alpha',
456            'lower-greek',
457            'lower-latin',
458            'lower-roman',
459            'lowercase',
460            'ltr',
461            'marker',
462            'match',
463            'medium',
464            'menu',
465            'menulist',
466            'menulist-button',
467            'menulist-text',
468            'menulist-textfield',
469            'menutext',
470            'message-box',
471            'middle',
472            'min-intrinsic',
473            'miter',
474            'mix',
475            'monospace',
476            'move',
477            'multiple',
478            'n-resize',
479            'narrower',
480            'ne-resize',
481            'no-close',
482            'no-close-quote',
483            'no-open-quote',
484            'no-repeat',
485            'none',
486            'nonzero',
487            'normal',
488            'nowrap',
489            'nw-resize',
490            'oblique',
491            'once',
492            'open-quote',
493            'outset',
494            'outside',
495            'overline',
496            'padding',
497            'pointer',
498            'portrait',
499            'pre',
500            'pre-line',
501            'pre-wrap',
502            'push-button',
503            'radio',
504            'read-only',
505            'read-write',
506            'read-write-plaintext-only',
507            'relative',
508            'repeat',
509            'repeat-x',
510            'repeat-y',
511            'reverse',
512            'ridge',
513            'right',
514            'round',
515            'rtl',
516            'run-in',
517            's-resize',
518            'sans-serif',
519            'scroll',
520            'scrollbar',
521            'scrollbarbutton-down',
522            'scrollbarbutton-left',
523            'scrollbarbutton-right',
524            'scrollbarbutton-up',
525            'scrollbargripper-horizontal',
526            'scrollbargripper-vertical',
527            'scrollbarthumb-horizontal',
528            'scrollbarthumb-vertical',
529            'scrollbartrack-horizontal',
530            'scrollbartrack-vertical',
531            'se-resize',
532            'searchfield',
533            'searchfield-close',
534            'searchfield-results',
535            'semi-condensed',
536            'semi-expanded',
537            'separate',
538            'serif',
539            'show',
540            'single',
541            'skip-white-space',
542            'slide',
543            'slider-horizontal',
544            'slider-vertical',
545            'sliderthumb-horizontal',
546            'sliderthumb-vertical',
547            'slow',
548            'small',
549            'small-caps',
550            'small-caption',
551            'smaller',
552            'solid',
553            'space',
554            'square',
555            'square-button',
556            'start',
557            'static',
558            'status-bar',
559            'stretch',
560            'sub',
561            'super',
562            'sw-resize',
563            'table',
564            'table-caption',
565            'table-cell',
566            'table-column',
567            'table-column-group',
568            'table-footer-group',
569            'table-header-group',
570            'table-row',
571            'table-row-group',
572            'text',
573            'text-bottom',
574            'text-top',
575            'textfield',
576            'thick',
577            'thin',
578            'threeddarkshadow',
579            'threedface',
580            'threedhighlight',
581            'threedlightshadow',
582            'threedshadow',
583            'top',
584            'ultra-condensed',
585            'ultra-expanded',
586            'underline',
587            'unfurl',
588            'up',
589            'upper-alpha',
590            'upper-latin',
591            'upper-roman',
592            'uppercase',
593            'vertical',
594            'visible',
595            'visual',
596            'w-resize',
597            'wait',
598            'wave',
599            'wider',
600            'window',
601            'windowframe',
602            'windowtext',
603            'x-large',
604            'x-small',
605            'xx-large',
606            'xx-small'
607        ),
608        // function xxx()
609        3 => array(
610            'attr',
611            'calc',
612            'contrast',
613            'cross-fade',
614            'cubic-bezier',
615            'cycle',
616            'device-cmyk',
617            'drop-shadow',
618            'ellipse',
619            'hsl',
620            'hsla',
621            'hwb',
622            'image',
623            'matrix',
624            'matrix3d',
625            'minmax',
626            'grayscale',
627            'perspective',
628            'polygon',
629            'radial-gradient',
630            'translate',
631            'translatex',
632            'translatey',
633            'translatez',
634            'translate3d',
635            'skew',
636            'skewx',
637            'skewy',
638            'saturate',
639            'sepia',
640            'scale',
641            'scalex',
642            'scaley',
643            'scalez',
644            'scale3d',
645            'steps',
646            'rect',
647            'repeating-linear-gradient',
648            'repeating-radial-gradient',
649            'rgb',
650            'rgba',
651            'rotate',
652            'rotatex',
653            'rotatey',
654            'rotatez',
655            'rotate3d',
656            'url',
657            'var'
658        ),
659        // colors
660        4 => array(
661            'aliceblue',
662            'antiquewhite',
663            'aqua',
664            'aquamarine',
665            'azure',
666            'beige',
667            'bisque',
668            'black',
669            'blanchedalmond',
670            'blue',
671            'blueviolet',
672            'brown',
673            'burlywood',
674            'cadetblue',
675            'chartreuse',
676            'chocolate',
677            'coral',
678            'cornflowerblue',
679            'cornsilk',
680            'crimson',
681            'cyan',
682            'darkblue',
683            'darkcyan',
684            'darkgoldenrod',
685            'darkgray',
686            'darkgreen',
687            'darkgrey',
688            'darkkhaki',
689            'darkmagenta',
690            'darkolivegreen',
691            'darkorange',
692            'darkorchid',
693            'darkred',
694            'darksalmon',
695            'darkseagreen',
696            'darkslateblue',
697            'darkslategray',
698            'darkslategrey',
699            'darkturquoise',
700            'darkviolet',
701            'deeppink',
702            'deepskyblue',
703            'dimgray',
704            'dimgrey',
705            'dodgerblue',
706            'firebrick',
707            'floralwhite',
708            'forestgreen',
709            'fuchsia',
710            'gainsboro',
711            'ghostwhite',
712            'gold',
713            'goldenrod',
714            'gray',
715            'green',
716            'greenyellow',
717            'grey',
718            'honeydew',
719            'hotpink',
720            'indianred',
721            'indigo',
722            'ivory',
723            'khaki',
724            'lavender',
725            'lavenderblush',
726            'lawngreen',
727            'lemonchiffon',
728            'lightblue',
729            'lightcoral',
730            'lightcyan',
731            'lightgoldenrodyellow',
732            'lightgray',
733            'lightgreen',
734            'lightgrey',
735            'lightpink',
736            'lightsalmon',
737            'lightseagreen',
738            'lightskyblue',
739            'lightslategray',
740            'lightslategrey',
741            'lightsteelblue',
742            'lightyellow',
743            'lime',
744            'limegreen',
745            'linen',
746            'magenta',
747            'maroon',
748            'mediumaquamarine',
749            'mediumblue',
750            'mediumorchid',
751            'mediumpurple',
752            'mediumseagreen',
753            'mediumslateblue',
754            'mediumspringgreen',
755            'mediumturquoise',
756            'mediumvioletred',
757            'midnightblue',
758            'mintcream',
759            'mistyrose',
760            'moccasin',
761            'navajowhite',
762            'navy',
763            'oldlace',
764            'olive',
765            'olivedrab',
766            'orange',
767            'orangered',
768            'orchid',
769            'palegoldenrod',
770            'palegreen',
771            'paleturquoise',
772            'palevioletred',
773            'papayawhip',
774            'peachpuff',
775            'peru',
776            'pink',
777            'plum',
778            'powderblue',
779            'purple',
780            'rebeccapurple',
781            'red',
782            'rosybrown',
783            'royalblue',
784            'saddlebrown',
785            'salmon',
786            'sandybrown',
787            'seagreen',
788            'seashell',
789            'sienna',
790            'silver',
791            'skyblue',
792            'slateblue',
793            'slategray',
794            'slategrey',
795            'snow',
796            'springgreen',
797            'steelblue',
798            'tan',
799            'teal',
800            'thistle',
801            'transparent',
802            'tomato',
803            'turquoise',
804            'violet',
805            'wheat',
806            'white',
807            'whitesmoke',
808            'yellow',
809            'yellowgreen'
810        ),
811        // pseudo class
812        5 => array(
813            'active',
814            'after',
815            'before',
816            'checked',
817            'choices',
818            'dir',
819            'disabled',
820            'empty',
821            'enabled',
822            'first',
823            'first-child',
824            'first-letter',
825            'first-line',
826            'first-of-type',
827            'focus',
828            'fullscreen',
829            'hover',
830            'indeterminate',
831            'in-range',
832            'invalid',
833            'lang',
834            'last-child',
835            'last-of-type',
836            'link',
837            'not',
838            'nth-child',
839            'nth-last-child',
840            'nth-last-of-type',
841            'nth-of-type',
842            'only-child',
843            'only-of-type',
844            'optional',
845            'out-of-range',
846            'repeat-index',
847            'repeat-item',
848            'required',
849            'root',
850            'scope',
851            'selection',
852            'target',
853            'valid',
854            'value',
855            'visited'
856        )
857    ),
858    'SYMBOLS' => array(
859        '(', ')', '{', '}', ':', ';',
860        '>', '+', '*', ',', '^', '='
861    ),
862    'CASE_SENSITIVE' => array(
863        GESHI_COMMENTS => false,
864        1 => true,
865        2 => true,
866        3 => true,
867        4 => true,
868        5 => true
869    ),
870    'STYLES' => array(
871        'KEYWORDS' => array(
872            1 => 'color: #000000; font-weight: bold;',
873            2 => 'color: #993333;',
874            3 => 'color: #9932cc;',
875            4 => 'color: #dc143c;',
876            5 => 'color: #F5758F;',
877        ),
878        'COMMENTS' => array(
879            2 => 'color: #ff0000; font-style: italic;',
880            'MULTI' => 'color: #808080; font-style: italic;'
881        ),
882        'ESCAPE_CHAR' => array(
883            0 => 'color: #000099; font-weight: bold;',
884            //1 => 'color: #000099; font-weight: bold;',
885            2 => 'color: #000099; font-weight: bold;'
886            //3 => 'color: #000099; font-weight: bold;'
887        ),
888        'BRACKETS' => array(
889            0 => 'color: #00AA00;'
890        ),
891        'STRINGS' => array(
892            0 => 'color: #ff0000;'
893        ),
894        'NUMBERS' => array(
895            0 => 'color: #cc66cc;'
896        ),
897        'METHODS' => array(),
898        'SYMBOLS' => array(
899            0 => 'color: #00AA00;'
900        ),
901        'SCRIPT' => array(),
902        'REGEXPS' => array(
903            0 => 'color: #cc00cc;',
904            1 => 'color: #6666ff;',
905            2 => 'color: #3F84D9; font-weight: bold;',
906            3 => 'color: #933;',
907            4 => 'color: #444;'
908        )
909    ),
910    'URLS' => array(
911        1 => '',
912        2 => '',
913        3 => '',
914        4 => '',
915        5 => ''
916    ),
917    'OOLANG' => false,
918    'OBJECT_SPLITTERS' => array(),
919    'REGEXPS' => array(
920        //DOM Node ID
921        0 => '\#[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*',
922        //CSS classname
923        1 => '\.(?!\d)[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*\b(?=[\{\.#\s,:].|<\|)',
924        //CSS rules
925        2 => '\@(?!\d)[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*\b(?=[\{\.#\s,:].|<\|)',
926        //Measurements
927        3 => '[+\-]?(\d+|(\d*\.\d+))(em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx|%)',
928        //var
929        4 => '(--[a-zA-Z0-9\-]*)'
930    ),
931    'STRICT_MODE_APPLIES' => GESHI_NEVER,
932    'SCRIPT_DELIMITERS' => array(),
933    'HIGHLIGHT_STRICT_BLOCK' => array(),
934    'TAB_WIDTH' => 4,
935    'PARSER_CONTROL' => array(
936        'KEYWORDS' => array(
937            'DISALLOWED_AFTER' => '(?![\-a-zA-Z0-9_\|%\\-&\.])',
938            'DISALLOWED_BEFORE' => '(?<![\-a-zA-Z0-9_\|%\\~&\.])',
939            1 => array(
940                'DISALLOWED_AFTER' => '(?![\-a-zA-Z0-9_\|%\\-&\.])(?=\s*:)'
941            )
942        )
943    )
944);
945