芝麻web文件管理V1.00
编辑当前文件:/home/qrafawbu/kwesioben.com/accufy/docs/assets/vendor/highlight.js/lib/modes.js
import { inherit } from './utils'; import * as regex from './regex'; // Common regexps export const IDENT_RE = '[a-zA-Z]\\w*'; export const UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\w*'; export const NUMBER_RE = '\\b\\d+(\\.\\d+)?'; export const C_NUMBER_RE = '(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float export const BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b... export const RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~'; export const SHEBANG = (opts = {}) => { const beginShebang = /^#![ ]*\//; if (opts.binary) { opts.begin = regex.concat( beginShebang, /.*\b/, opts.binary, /\b.*/); } return inherit({ className: 'meta', begin: beginShebang, end: /$/, relevance: 0, "on:begin": (m, resp) => { if (m.index !== 0) resp.ignoreMatch(); } }, opts); }; // Common modes export const BACKSLASH_ESCAPE = { begin: '\\\\[\\s\\S]', relevance: 0 }; export const APOS_STRING_MODE = { className: 'string', begin: '\'', end: '\'', illegal: '\\n', contains: [BACKSLASH_ESCAPE] }; export const QUOTE_STRING_MODE = { className: 'string', begin: '"', end: '"', illegal: '\\n', contains: [BACKSLASH_ESCAPE] }; export const PHRASAL_WORDS_MODE = { begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ }; export const COMMENT = function(begin, end, inherits) { var mode = inherit( { className: 'comment', begin: begin, end: end, contains: [] }, inherits || {} ); mode.contains.push(PHRASAL_WORDS_MODE); mode.contains.push({ className: 'doctag', begin: '(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):', relevance: 0 }); return mode; }; export const C_LINE_COMMENT_MODE = COMMENT('//', '$'); export const C_BLOCK_COMMENT_MODE = COMMENT('/\\*', '\\*/'); export const HASH_COMMENT_MODE = COMMENT('#', '$'); export const NUMBER_MODE = { className: 'number', begin: NUMBER_RE, relevance: 0 }; export const C_NUMBER_MODE = { className: 'number', begin: C_NUMBER_RE, relevance: 0 }; export const BINARY_NUMBER_MODE = { className: 'number', begin: BINARY_NUMBER_RE, relevance: 0 }; export const CSS_NUMBER_MODE = { className: 'number', begin: NUMBER_RE + '(' + '%|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' + ')?', relevance: 0 }; export const REGEXP_MODE = { // this outer rule makes sure we actually have a WHOLE regex and not simply // an expression such as: // // 3 / something // // (which will then blow up when regex's `illegal` sees the newline) begin: /(?=\/[^/\n]*\/)/, contains: [{ className: 'regexp', begin: /\//, end: /\/[gimuy]*/, illegal: /\n/, contains: [ BACKSLASH_ESCAPE, { begin: /\[/, end: /\]/, relevance: 0, contains: [BACKSLASH_ESCAPE] } ] }] }; export const TITLE_MODE = { className: 'title', begin: IDENT_RE, relevance: 0 }; export const UNDERSCORE_TITLE_MODE = { className: 'title', begin: UNDERSCORE_IDENT_RE, relevance: 0 }; export const METHOD_GUARD = { // excludes method names from keyword processing begin: '\\.\\s*' + UNDERSCORE_IDENT_RE, relevance: 0 }; export const END_SAME_AS_BEGIN = function(mode) { return Object.assign(mode, { 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; }, 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch() } }); };