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.
270 lines
6.8 KiB
270 lines
6.8 KiB
/** |
|
* A generic interface that holds all available language tokens. |
|
*/ |
|
export interface Tokens<T> { |
|
/** |
|
* keyword in a regular Algol-style language |
|
*/ |
|
keyword?: T; |
|
/** |
|
* built-in or library object (constant, class, function) |
|
*/ |
|
built_in?: T; |
|
/** |
|
* user-defined type in a language with first-class syntactically significant types, like Haskell |
|
*/ |
|
type?: T; |
|
/** |
|
* special identifier for a built-in value ("true", "false", "null") |
|
*/ |
|
literal?: T; |
|
/** |
|
* number, including units and modifiers, if any. |
|
*/ |
|
number?: T; |
|
/** |
|
* literal regular expression |
|
*/ |
|
regexp?: T; |
|
/** |
|
* literal string, character |
|
*/ |
|
string?: T; |
|
/** |
|
* parsed section inside a literal string |
|
*/ |
|
subst?: T; |
|
/** |
|
* symbolic constant, interned string, goto label |
|
*/ |
|
symbol?: T; |
|
/** |
|
* class or class-level declaration (interfaces, traits, modules, etc) |
|
*/ |
|
class?: T; |
|
/** |
|
* function or method declaration |
|
*/ |
|
function?: T; |
|
/** |
|
* name of a class or a function at the place of declaration |
|
*/ |
|
title?: T; |
|
/** |
|
* block of function arguments (parameters) at the place of declaration |
|
*/ |
|
params?: T; |
|
/** |
|
* comment |
|
*/ |
|
comment?: T; |
|
/** |
|
* documentation markup within comments |
|
*/ |
|
doctag?: T; |
|
/** |
|
* flags, modifiers, annotations, processing instructions, preprocessor directive, etc |
|
*/ |
|
meta?: T; |
|
/** |
|
* keyword or built-in within meta construct |
|
*/ |
|
'meta-keyword'?: T; |
|
/** |
|
* string within meta construct |
|
*/ |
|
'meta-string'?: T; |
|
/** |
|
* heading of a section in a config file, heading in text markup |
|
*/ |
|
section?: T; |
|
/** |
|
* XML/HTML tag |
|
*/ |
|
tag?: T; |
|
/** |
|
* name of an XML tag, the first word in an s-expression |
|
*/ |
|
name?: T; |
|
/** |
|
* s-expression name from the language standard library |
|
*/ |
|
'builtin-name'?: T; |
|
/** |
|
* 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?: T; |
|
/** |
|
* name of an attribute followed by a structured value part, like CSS properties |
|
*/ |
|
attribute?: T; |
|
/** |
|
* variable in a config or a template file, environment var expansion in a script |
|
*/ |
|
variable?: T; |
|
/** |
|
* list item bullet in text markup |
|
*/ |
|
bullet?: T; |
|
/** |
|
* code block in text markup |
|
*/ |
|
code?: T; |
|
/** |
|
* emphasis in text markup |
|
*/ |
|
emphasis?: T; |
|
/** |
|
* strong emphasis in text markup |
|
*/ |
|
strong?: T; |
|
/** |
|
* mathematical formula in text markup |
|
*/ |
|
formula?: T; |
|
/** |
|
* hyperlink in text markup |
|
*/ |
|
link?: T; |
|
/** |
|
* quotation in text markup |
|
*/ |
|
quote?: T; |
|
/** |
|
* tag selector in CSS |
|
*/ |
|
'selector-tag'?: T; |
|
/** |
|
* #id selector in CSS |
|
*/ |
|
'selector-id'?: T; |
|
/** |
|
* .class selector in CSS |
|
*/ |
|
'selector-class'?: T; |
|
/** |
|
* [attr] selector in CSS |
|
*/ |
|
'selector-attr'?: T; |
|
/** |
|
* :pseudo selector in CSS |
|
*/ |
|
'selector-pseudo'?: T; |
|
/** |
|
* tag of a template language |
|
*/ |
|
'template-tag'?: T; |
|
/** |
|
* variable in a template language |
|
*/ |
|
'template-variable'?: T; |
|
/** |
|
* added or changed line in a diff |
|
*/ |
|
addition?: T; |
|
/** |
|
* deleted line in a diff |
|
*/ |
|
deletion?: T; |
|
} |
|
/** |
|
* Possible styles that can be used on a token in a JSON theme. |
|
* See the [chalk](https://github.com/chalk/chalk) module for more information. |
|
* `plain` means no styling. |
|
*/ |
|
export declare type Style = 'reset' | 'bold' | 'dim' | 'italic' | 'underline' | 'inverse' | 'hidden' | 'strikethrough' | 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray' | 'bgBlack' | 'bgRed' | 'bgGreen' | 'bgYellow' | 'bgBlue' | 'bgMagenta' | 'bgCyan' | 'plain'; |
|
/** |
|
* The schema of a JSON file defining a custom scheme. The key is a language token, while the value |
|
* is a [chalk](https://github.com/chalk/chalk#styles) style. |
|
* |
|
* Example: |
|
* ```json |
|
* { |
|
* "keyword": ["red", "bold"], |
|
* "addition": "green", |
|
* "deletion": ["red", "strikethrough"], |
|
* "number": "plain" |
|
* } |
|
* ``` |
|
*/ |
|
export interface JsonTheme extends Tokens<Style | Style[]> { |
|
} |
|
/** |
|
* Passed to [[highlight]] as the `theme` option. A theme is a map of language tokens to a function |
|
* that takes in string value of the token and returns a new string with colorization applied |
|
* (typically a [chalk](https://github.com/chalk/chalk) style), but you can also provide your own |
|
* formatting functions. |
|
* |
|
* Example: |
|
* ```ts |
|
* import {Theme, plain} from 'cli-highlight'; |
|
* import chalk = require('chalk'); |
|
* |
|
* const myTheme: Theme = { |
|
* keyword: chalk.red.bold, |
|
* addition: chalk.green, |
|
* deletion: chalk.red.strikethrough, |
|
* number: plain |
|
* }; |
|
* ``` |
|
*/ |
|
export interface Theme extends Tokens<(codePart: string) => string> { |
|
/** |
|
* things not matched by any token |
|
*/ |
|
default?: (codePart: string) => string; |
|
} |
|
/** |
|
* Identity function for tokens that should not be styled (returns the input string as-is). |
|
* See [[Theme]] for an example. |
|
*/ |
|
export declare const plain: (codePart: string) => string; |
|
/** |
|
* The default theme. It is possible to override just individual keys. |
|
*/ |
|
export declare const DEFAULT_THEME: Theme; |
|
/** |
|
* Converts a [[JsonTheme]] with string values to a [[Theme]] with formatter functions. Used by [[parse]]. |
|
*/ |
|
export declare function fromJson(json: JsonTheme): Theme; |
|
/** |
|
* Converts a [[Theme]] with formatter functions to a [[JsonTheme]] with string values. Used by [[stringify]]. |
|
*/ |
|
export declare function toJson(theme: Theme): JsonTheme; |
|
/** |
|
* 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'); |
|
* }); |
|
* ``` |
|
*/ |
|
export declare function stringify(theme: Theme): string; |
|
/** |
|
* 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); |
|
* }); |
|
* ``` |
|
*/ |
|
export declare function parse(json: string): Theme;
|
|
|