95 lines
2.8 KiB
TypeScript
95 lines
2.8 KiB
TypeScript
|
/**
|
|||
|
* Get the plain-text value of a node.
|
|||
|
*
|
|||
|
* ###### Algorithm
|
|||
|
*
|
|||
|
* * if `tree` is a comment, returns its `value`
|
|||
|
* * if `tree` is a text, applies normal whitespace collapsing to its
|
|||
|
* `value`, as defined by the CSS Text spec
|
|||
|
* * if `tree` is a root or element, applies an algorithm similar to the
|
|||
|
* `innerText` getter as defined by HTML
|
|||
|
*
|
|||
|
* ###### Notes
|
|||
|
*
|
|||
|
* > 👉 **Note**: the algorithm acts as if `tree` is being rendered, and as if
|
|||
|
* > we’re a CSS-supporting user agent, with scripting enabled.
|
|||
|
*
|
|||
|
* * if `tree` is an element that is not displayed (such as a `head`), we’ll
|
|||
|
* still use the `innerText` algorithm instead of switching to `textContent`
|
|||
|
* * if descendants of `tree` are elements that are not displayed, they are
|
|||
|
* ignored
|
|||
|
* * CSS is not considered, except for the default user agent style sheet
|
|||
|
* * a line feed is collapsed instead of ignored in cases where Fullwidth, Wide,
|
|||
|
* or Halfwidth East Asian Width characters are used, the same goes for a case
|
|||
|
* with Chinese, Japanese, or Yi writing systems
|
|||
|
* * replaced elements (such as `audio`) are treated like non-replaced elements
|
|||
|
*
|
|||
|
* @param {Nodes} tree
|
|||
|
* Tree to turn into text.
|
|||
|
* @param {Options} [options]
|
|||
|
* Configuration (optional).
|
|||
|
* @returns {string}
|
|||
|
* Serialized `tree`.
|
|||
|
*/
|
|||
|
export function toText(tree: Nodes, options?: Options | undefined): string;
|
|||
|
export type Comment = import('hast').Comment;
|
|||
|
export type Element = import('hast').Element;
|
|||
|
export type Nodes = import('hast').Nodes;
|
|||
|
export type Parents = import('hast').Parents;
|
|||
|
export type Text = import('hast').Text;
|
|||
|
export type TestFunction = import('hast-util-is-element').TestFunction;
|
|||
|
/**
|
|||
|
* Valid and useful whitespace values (from CSS).
|
|||
|
*/
|
|||
|
export type Whitespace = 'normal' | 'nowrap' | 'pre' | 'pre-wrap';
|
|||
|
/**
|
|||
|
* Specific break:
|
|||
|
*
|
|||
|
* * `0` — space
|
|||
|
* * `1` — line ending
|
|||
|
* * `2` — blank line
|
|||
|
*/
|
|||
|
export type BreakNumber = 0 | 1 | 2;
|
|||
|
/**
|
|||
|
* Forced break.
|
|||
|
*/
|
|||
|
export type BreakForce = '\n';
|
|||
|
/**
|
|||
|
* Whether there was a break.
|
|||
|
*/
|
|||
|
export type BreakValue = boolean;
|
|||
|
/**
|
|||
|
* Any value for a break before.
|
|||
|
*/
|
|||
|
export type BreakBefore = BreakNumber | BreakValue | undefined;
|
|||
|
/**
|
|||
|
* Any value for a break after.
|
|||
|
*/
|
|||
|
export type BreakAfter = BreakForce | BreakNumber | BreakValue | undefined;
|
|||
|
/**
|
|||
|
* Info on current collection.
|
|||
|
*/
|
|||
|
export type CollectionInfo = {
|
|||
|
/**
|
|||
|
* Whether there was a break after.
|
|||
|
*/
|
|||
|
breakAfter: BreakAfter;
|
|||
|
/**
|
|||
|
* Whether there was a break before.
|
|||
|
*/
|
|||
|
breakBefore: BreakBefore;
|
|||
|
/**
|
|||
|
* Current whitespace setting.
|
|||
|
*/
|
|||
|
whitespace: Whitespace;
|
|||
|
};
|
|||
|
/**
|
|||
|
* Configuration.
|
|||
|
*/
|
|||
|
export type Options = {
|
|||
|
/**
|
|||
|
* Initial CSS whitespace setting to use (default: `'normal'`).
|
|||
|
*/
|
|||
|
whitespace?: Whitespace | null | undefined;
|
|||
|
};
|