mindoc/static/highlight/languages/stylus.js

461 lines
8.6 KiB
Go

/*
Language: Stylus
Author: Bryant Williams <b.n.williams@gmail.com>
Description: Stylus (https://github.com/LearnBoost/stylus/)
Category: css
*/
function(hljs) {
var VARIABLE = {
className: 'variable',
begin: '\\$' + hljs.IDENT_RE
};
var HEX_COLOR = {
className: 'number',
begin: '#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})'
};
var AT_KEYWORDS = [
'charset',
'css',
'debug',
'extend',
'font-face',
'for',
'import',
'include',
'media',
'mixin',
'page',
'warn',
'while'
];
var PSEUDO_SELECTORS = [
'after',
'before',
'first-letter',
'first-line',
'active',
'first-child',
'focus',
'hover',
'lang',
'link',
'visited'
];
var TAGS = [
'a',
'abbr',
'address',
'article',
'aside',
'audio',
'b',
'blockquote',
'body',
'button',
'canvas',
'caption',
'cite',
'code',
'dd',
'del',
'details',
'dfn',
'div',
'dl',
'dt',
'em',
'fieldset',
'figcaption',
'figure',
'footer',
'form',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'header',
'hgroup',
'html',
'i',
'iframe',
'img',
'input',
'ins',
'kbd',
'label',
'legend',
'li',
'mark',
'menu',
'nav',
'object',
'ol',
'p',
'q',
'quote',
'samp',
'section',
'span',
'strong',
'summary',
'sup',
'table',
'tbody',
'td',
'textarea',
'tfoot',
'th',
'thead',
'time',
'tr',
'ul',
'var',
'video'
];
var TAG_END = '[\\.\\s\\n\\[\\:,]';
var ATTRIBUTES = [
'align-content',
'align-items',
'align-self',
'animation',
'animation-delay',
'animation-direction',
'animation-duration',
'animation-fill-mode',
'animation-iteration-count',
'animation-name',
'animation-play-state',
'animation-timing-function',
'auto',
'backface-visibility',
'background',
'background-attachment',
'background-clip',
'background-color',
'background-image',
'background-origin',
'background-position',
'background-repeat',
'background-size',
'border',
'border-bottom',
'border-bottom-color',
'border-bottom-left-radius',
'border-bottom-right-radius',
'border-bottom-style',
'border-bottom-width',
'border-collapse',
'border-color',
'border-image',
'border-image-outset',
'border-image-repeat',
'border-image-slice',
'border-image-source',
'border-image-width',
'border-left',
'border-left-color',
'border-left-style',
'border-left-width',
'border-radius',
'border-right',
'border-right-color',
'border-right-style',
'border-right-width',
'border-spacing',
'border-style',
'border-top',
'border-top-color',
'border-top-left-radius',
'border-top-right-radius',
'border-top-style',
'border-top-width',
'border-width',
'bottom',
'box-decoration-break',
'box-shadow',
'box-sizing',
'break-after',
'break-before',
'break-inside',
'caption-side',
'clear',
'clip',
'clip-path',
'color',
'column-count',
'column-fill',
'column-gap',
'column-rule',
'column-rule-color',
'column-rule-style',
'column-rule-width',
'column-span',
'column-width',
'columns',
'content',
'counter-increment',
'counter-reset',
'cursor',
'direction',
'display',
'empty-cells',
'filter',
'flex',
'flex-basis',
'flex-direction',
'flex-flow',
'flex-grow',
'flex-shrink',
'flex-wrap',
'float',
'font',
'font-family',
'font-feature-settings',
'font-kerning',
'font-language-override',
'font-size',
'font-size-adjust',
'font-stretch',
'font-style',
'font-variant',
'font-variant-ligatures',
'font-weight',
'height',
'hyphens',
'icon',
'image-orientation',
'image-rendering',
'image-resolution',
'ime-mode',
'inherit',
'initial',
'justify-content',
'left',
'letter-spacing',
'line-height',
'list-style',
'list-style-image',
'list-style-position',
'list-style-type',
'margin',
'margin-bottom',
'margin-left',
'margin-right',
'margin-top',
'marks',
'mask',
'max-height',
'max-width',
'min-height',
'min-width',
'nav-down',
'nav-index',
'nav-left',
'nav-right',
'nav-up',
'none',
'normal',
'object-fit',
'object-position',
'opacity',
'order',
'orphans',
'outline',
'outline-color',
'outline-offset',
'outline-style',
'outline-width',
'overflow',
'overflow-wrap',
'overflow-x',
'overflow-y',
'padding',
'padding-bottom',
'padding-left',
'padding-right',
'padding-top',
'page-break-after',
'page-break-before',
'page-break-inside',
'perspective',
'perspective-origin',
'pointer-events',
'position',
'quotes',
'resize',
'right',
'tab-size',
'table-layout',
'text-align',
'text-align-last',
'text-decoration',
'text-decoration-color',
'text-decoration-line',
'text-decoration-style',
'text-indent',
'text-overflow',
'text-rendering',
'text-shadow',
'text-transform',
'text-underline-position',
'top',
'transform',
'transform-origin',
'transform-style',
'transition',
'transition-delay',
'transition-duration',
'transition-property',
'transition-timing-function',
'unicode-bidi',
'vertical-align',
'visibility',
'white-space',
'widows',
'width',
'word-break',
'word-spacing',
'word-wrap',
'z-index'
];
// illegals
var ILLEGAL = [
'\\?',
'(\\bReturn\\b)', // monkey
'(\\bEnd\\b)', // monkey
'(\\bend\\b)', // vbscript
'(\\bdef\\b)', // gradle
';', // a whole lot of languages
'#\\s', // markdown
'\\*\\s', // markdown
'===\\s', // markdown
'\\|',
'%', // prolog
];
return {
aliases: ['styl'],
case_insensitive: false,
keywords: 'if else for in',
illegal: '(' + ILLEGAL.join('|') + ')',
contains: [
// strings
hljs.QUOTE_STRING_MODE,
hljs.APOS_STRING_MODE,
// comments
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE,
// hex colors
HEX_COLOR,
// class tag
{
begin: '\\.[a-zA-Z][a-zA-Z0-9_-]*' + TAG_END,
returnBegin: true,
contains: [
{className: 'selector-class', begin: '\\.[a-zA-Z][a-zA-Z0-9_-]*'}
]
},
// id tag
{
begin: '\\#[a-zA-Z][a-zA-Z0-9_-]*' + TAG_END,
returnBegin: true,
contains: [
{className: 'selector-id', begin: '\\#[a-zA-Z][a-zA-Z0-9_-]*'}
]
},
// tags
{
begin: '\\b(' + TAGS.join('|') + ')' + TAG_END,
returnBegin: true,
contains: [
{className: 'selector-tag', begin: '\\b[a-zA-Z][a-zA-Z0-9_-]*'}
]
},
// psuedo selectors
{
begin: '&?:?:\\b(' + PSEUDO_SELECTORS.join('|') + ')' + TAG_END
},
// @ keywords
{
begin: '\@(' + AT_KEYWORDS.join('|') + ')\\b'
},
// variables
VARIABLE,
// dimension
hljs.CSS_NUMBER_MODE,
// number
hljs.NUMBER_MODE,
// functions
// - only from beginning of line + whitespace
{
className: 'function',
begin: '^[a-zA-Z][a-zA-Z0-9_\-]*\\(.*\\)',
illegal: '[\\n]',
returnBegin: true,
contains: [
{className: 'title', begin: '\\b[a-zA-Z][a-zA-Z0-9_\-]*'},
{
className: 'params',
begin: /\(/,
end: /\)/,
contains: [
HEX_COLOR,
VARIABLE,
hljs.APOS_STRING_MODE,
hljs.CSS_NUMBER_MODE,
hljs.NUMBER_MODE,
hljs.QUOTE_STRING_MODE
]
}
]
},
// attributes
// - only from beginning of line + whitespace
// - must have whitespace after it
{
className: 'attribute',
begin: '\\b(' + ATTRIBUTES.reverse().join('|') + ')\\b',
starts: {
// value container
end: /;|$/,
contains: [
HEX_COLOR,
VARIABLE,
hljs.APOS_STRING_MODE,
hljs.QUOTE_STRING_MODE,
hljs.CSS_NUMBER_MODE,
hljs.NUMBER_MODE,
hljs.C_BLOCK_COMMENT_MODE
],
illegal: /\./,
relevance: 0
}
}
]
};
}