2023-12-18 13:12:25 +08:00
|
|
|
"use strict";
|
2024-01-16 21:26:16 +08:00
|
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
|
|
};
|
2023-12-18 13:12:25 +08:00
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
2024-01-16 21:26:16 +08:00
|
|
|
exports.parse = exports.stringify = exports.toJson = exports.fromJson = exports.DEFAULT_THEME = exports.plain = void 0;
|
|
|
|
var chalk_1 = __importDefault(require("chalk"));
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* Identity function for tokens that should not be styled (returns the input string as-is).
|
|
|
|
* See [[Theme]] for an example.
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
var plain = function (codePart) { return codePart; };
|
|
|
|
exports.plain = plain;
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* The default theme. It is possible to override just individual keys.
|
|
|
|
*/
|
|
|
|
exports.DEFAULT_THEME = {
|
|
|
|
/**
|
|
|
|
* keyword in a regular Algol-style language
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
keyword: chalk_1.default.blue,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* built-in or library object (constant, class, function)
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
built_in: chalk_1.default.cyan,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* user-defined type in a language with first-class syntactically significant types, like
|
|
|
|
* Haskell
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
type: chalk_1.default.cyan.dim,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* special identifier for a built-in value ("true", "false", "null")
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
literal: chalk_1.default.blue,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* number, including units and modifiers, if any.
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
number: chalk_1.default.green,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* literal regular expression
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
regexp: chalk_1.default.red,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* literal string, character
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
string: chalk_1.default.red,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* 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)
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
class: chalk_1.default.blue,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* function or method declaration
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
function: chalk_1.default.yellow,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
comment: chalk_1.default.green,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* documentation markup within comments
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
doctag: chalk_1.default.green,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* flags, modifiers, annotations, processing instructions, preprocessor directive, etc
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
meta: chalk_1.default.grey,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
tag: chalk_1.default.grey,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* name of an XML tag, the first word in an s-expression
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
name: chalk_1.default.blue,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
attr: chalk_1.default.cyan,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
emphasis: chalk_1.default.italic,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* strong emphasis in text markup
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
strong: chalk_1.default.bold,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* mathematical formula in text markup
|
|
|
|
*/
|
|
|
|
formula: exports.plain,
|
|
|
|
/**
|
|
|
|
* hyperlink in text markup
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
link: chalk_1.default.underline,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
addition: chalk_1.default.green,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* deleted line in a diff
|
|
|
|
*/
|
2024-01-16 21:26:16 +08:00
|
|
|
deletion: chalk_1.default.red,
|
2023-12-18 13:12:25 +08:00
|
|
|
/**
|
|
|
|
* 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)) {
|
|
|
|
;
|
2024-01-16 21:26:16 +08:00
|
|
|
theme[key] = style.reduce(function (previous, current) { return (current === 'plain' ? exports.plain : previous[current]); }, chalk_1.default);
|
2023-12-18 13:12:25 +08:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
;
|
2024-01-16 21:26:16 +08:00
|
|
|
theme[key] = chalk_1.default[style];
|
2023-12-18 13:12:25 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
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
|