You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							265 lines
						
					
					
						
							6.9 KiB
						
					
					
				
			
		
		
	
	
							265 lines
						
					
					
						
							6.9 KiB
						
					
					
				"use strict"; | 
						|
var __importDefault = (this && this.__importDefault) || function (mod) { | 
						|
    return (mod && mod.__esModule) ? mod : { "default": mod }; | 
						|
}; | 
						|
Object.defineProperty(exports, "__esModule", { value: true }); | 
						|
exports.parse = exports.stringify = exports.toJson = exports.fromJson = exports.DEFAULT_THEME = exports.plain = void 0; | 
						|
var chalk_1 = __importDefault(require("chalk")); | 
						|
/** | 
						|
 * Identity function for tokens that should not be styled (returns the input string as-is). | 
						|
 * See [[Theme]] for an example. | 
						|
 */ | 
						|
var plain = function (codePart) { return codePart; }; | 
						|
exports.plain = plain; | 
						|
/** | 
						|
 * The default theme. It is possible to override just individual keys. | 
						|
 */ | 
						|
exports.DEFAULT_THEME = { | 
						|
    /** | 
						|
     * keyword in a regular Algol-style language | 
						|
     */ | 
						|
    keyword: chalk_1.default.blue, | 
						|
    /** | 
						|
     * built-in or library object (constant, class, function) | 
						|
     */ | 
						|
    built_in: chalk_1.default.cyan, | 
						|
    /** | 
						|
     * user-defined type in a language with first-class syntactically significant types, like | 
						|
     * Haskell | 
						|
     */ | 
						|
    type: chalk_1.default.cyan.dim, | 
						|
    /** | 
						|
     * special identifier for a built-in value ("true", "false", "null") | 
						|
     */ | 
						|
    literal: chalk_1.default.blue, | 
						|
    /** | 
						|
     * number, including units and modifiers, if any. | 
						|
     */ | 
						|
    number: chalk_1.default.green, | 
						|
    /** | 
						|
     * literal regular expression | 
						|
     */ | 
						|
    regexp: chalk_1.default.red, | 
						|
    /** | 
						|
     * literal string, character | 
						|
     */ | 
						|
    string: chalk_1.default.red, | 
						|
    /** | 
						|
     * parsed section inside a literal string | 
						|
     */ | 
						|
    subst: exports.plain, | 
						|
    /** | 
						|
     * symbolic constant, interned string, goto label | 
						|
     */ | 
						|
    symbol: exports.plain, | 
						|
    /** | 
						|
     * class or class-level declaration (interfaces, traits, modules, etc) | 
						|
     */ | 
						|
    class: chalk_1.default.blue, | 
						|
    /** | 
						|
     * function or method declaration | 
						|
     */ | 
						|
    function: chalk_1.default.yellow, | 
						|
    /** | 
						|
     * name of a class or a function at the place of declaration | 
						|
     */ | 
						|
    title: exports.plain, | 
						|
    /** | 
						|
     * block of function arguments (parameters) at the place of declaration | 
						|
     */ | 
						|
    params: exports.plain, | 
						|
    /** | 
						|
     * comment | 
						|
     */ | 
						|
    comment: chalk_1.default.green, | 
						|
    /** | 
						|
     * documentation markup within comments | 
						|
     */ | 
						|
    doctag: chalk_1.default.green, | 
						|
    /** | 
						|
     * flags, modifiers, annotations, processing instructions, preprocessor directive, etc | 
						|
     */ | 
						|
    meta: chalk_1.default.grey, | 
						|
    /** | 
						|
     * keyword or built-in within meta construct | 
						|
     */ | 
						|
    'meta-keyword': exports.plain, | 
						|
    /** | 
						|
     * string within meta construct | 
						|
     */ | 
						|
    'meta-string': exports.plain, | 
						|
    /** | 
						|
     * heading of a section in a config file, heading in text markup | 
						|
     */ | 
						|
    section: exports.plain, | 
						|
    /** | 
						|
     * XML/HTML tag | 
						|
     */ | 
						|
    tag: chalk_1.default.grey, | 
						|
    /** | 
						|
     * name of an XML tag, the first word in an s-expression | 
						|
     */ | 
						|
    name: chalk_1.default.blue, | 
						|
    /** | 
						|
     * s-expression name from the language standard library | 
						|
     */ | 
						|
    'builtin-name': exports.plain, | 
						|
    /** | 
						|
     * name of an attribute with no language defined semantics (keys in JSON, setting names in | 
						|
     * .ini), also sub-attribute within another highlighted object, like XML tag | 
						|
     */ | 
						|
    attr: chalk_1.default.cyan, | 
						|
    /** | 
						|
     * name of an attribute followed by a structured value part, like CSS properties | 
						|
     */ | 
						|
    attribute: exports.plain, | 
						|
    /** | 
						|
     * variable in a config or a template file, environment var expansion in a script | 
						|
     */ | 
						|
    variable: exports.plain, | 
						|
    /** | 
						|
     * list item bullet in text markup | 
						|
     */ | 
						|
    bullet: exports.plain, | 
						|
    /** | 
						|
     * code block in text markup | 
						|
     */ | 
						|
    code: exports.plain, | 
						|
    /** | 
						|
     * emphasis in text markup | 
						|
     */ | 
						|
    emphasis: chalk_1.default.italic, | 
						|
    /** | 
						|
     * strong emphasis in text markup | 
						|
     */ | 
						|
    strong: chalk_1.default.bold, | 
						|
    /** | 
						|
     * mathematical formula in text markup | 
						|
     */ | 
						|
    formula: exports.plain, | 
						|
    /** | 
						|
     * hyperlink in text markup | 
						|
     */ | 
						|
    link: chalk_1.default.underline, | 
						|
    /** | 
						|
     * quotation in text markup | 
						|
     */ | 
						|
    quote: exports.plain, | 
						|
    /** | 
						|
     * tag selector in CSS | 
						|
     */ | 
						|
    'selector-tag': exports.plain, | 
						|
    /** | 
						|
     * #id selector in CSS | 
						|
     */ | 
						|
    'selector-id': exports.plain, | 
						|
    /** | 
						|
     * .class selector in CSS | 
						|
     */ | 
						|
    'selector-class': exports.plain, | 
						|
    /** | 
						|
     * [attr] selector in CSS | 
						|
     */ | 
						|
    'selector-attr': exports.plain, | 
						|
    /** | 
						|
     * :pseudo selector in CSS | 
						|
     */ | 
						|
    'selector-pseudo': exports.plain, | 
						|
    /** | 
						|
     * tag of a template language | 
						|
     */ | 
						|
    'template-tag': exports.plain, | 
						|
    /** | 
						|
     * variable in a template language | 
						|
     */ | 
						|
    'template-variable': exports.plain, | 
						|
    /** | 
						|
     * added or changed line in a diff | 
						|
     */ | 
						|
    addition: chalk_1.default.green, | 
						|
    /** | 
						|
     * deleted line in a diff | 
						|
     */ | 
						|
    deletion: chalk_1.default.red, | 
						|
    /** | 
						|
     * things not matched by any token | 
						|
     */ | 
						|
    default: exports.plain, | 
						|
}; | 
						|
/** | 
						|
 * Converts a [[JsonTheme]] with string values to a [[Theme]] with formatter functions. Used by [[parse]]. | 
						|
 */ | 
						|
function fromJson(json) { | 
						|
    var theme = {}; | 
						|
    for (var _i = 0, _a = Object.keys(json); _i < _a.length; _i++) { | 
						|
        var key = _a[_i]; | 
						|
        var style = json[key]; | 
						|
        if (Array.isArray(style)) { | 
						|
            ; | 
						|
            theme[key] = style.reduce(function (previous, current) { return (current === 'plain' ? exports.plain : previous[current]); }, chalk_1.default); | 
						|
        } | 
						|
        else { | 
						|
            ; | 
						|
            theme[key] = chalk_1.default[style]; | 
						|
        } | 
						|
    } | 
						|
    return theme; | 
						|
} | 
						|
exports.fromJson = fromJson; | 
						|
/** | 
						|
 * Converts a [[Theme]] with formatter functions to a [[JsonTheme]] with string values. Used by [[stringify]]. | 
						|
 */ | 
						|
function toJson(theme) { | 
						|
    var jsonTheme = {}; | 
						|
    for (var _i = 0, _a = Object.keys(jsonTheme); _i < _a.length; _i++) { | 
						|
        var key = _a[_i]; | 
						|
        var style = jsonTheme[key]; | 
						|
        jsonTheme[key] = style._styles; | 
						|
    } | 
						|
    return jsonTheme; | 
						|
} | 
						|
exports.toJson = toJson; | 
						|
/** | 
						|
 * Stringifies a [[Theme]] with formatter functions to a JSON string. | 
						|
 * | 
						|
 * ```ts | 
						|
 * import chalk = require('chalk'); | 
						|
 * import {stringify} from 'cli-highlight'; | 
						|
 * import * as fs from 'fs'; | 
						|
 * | 
						|
 * const myTheme: Theme = { | 
						|
 *     keyword: chalk.red.bold, | 
						|
 *     addition: chalk.green, | 
						|
 *     deletion: chalk.red.strikethrough, | 
						|
 *     number: plain | 
						|
 * } | 
						|
 * const json = stringify(myTheme); | 
						|
 * fs.writeFile('mytheme.json', json, (err: any) => { | 
						|
 *     if (err) throw err; | 
						|
 *     console.log('Theme saved'); | 
						|
 * }); | 
						|
 * ``` | 
						|
 */ | 
						|
function stringify(theme) { | 
						|
    return JSON.stringify(toJson(theme)); | 
						|
} | 
						|
exports.stringify = stringify; | 
						|
/** | 
						|
 * Parses a JSON string into a [[Theme]] with formatter functions. | 
						|
 * | 
						|
 * ```ts | 
						|
 * import * as fs from 'fs'; | 
						|
 * import {parse, highlight} from 'cli-highlight'; | 
						|
 * | 
						|
 * fs.readFile('mytheme.json', 'utf8', (err: any, json: string)  => { | 
						|
 *     if (err) throw err; | 
						|
 *     const code = highlight('SELECT * FROM table', {theme: parse(json)}); | 
						|
 *     console.log(code); | 
						|
 * }); | 
						|
 * ``` | 
						|
 */ | 
						|
function parse(json) { | 
						|
    return fromJson(JSON.parse(json)); | 
						|
} | 
						|
exports.parse = parse; | 
						|
//# sourceMappingURL=theme.js.map
 |