mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2026-10-04 14:57:10 +00:00
Merge pull request #34038 from bios21/master
[remarkable] Improve Rules types
This commit is contained in:
Vendored
+3
@@ -2,8 +2,11 @@
|
||||
// Project: https://github.com/jonschlinkert/remarkable
|
||||
// Definitions by: makepost <https://github.com/makepost>
|
||||
// Richard Lea <https://github.com/chigix>
|
||||
// Lilian Saget-Lethias <https://github.com/bios21>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
// TypeScript Version: 2.3
|
||||
|
||||
import Remarkable = require("./lib");
|
||||
|
||||
export = Remarkable;
|
||||
export as namespace Remarkable;
|
||||
|
||||
Vendored
+538
-178
@@ -1,3 +1,5 @@
|
||||
// tslint:disable:no-empty-interface
|
||||
|
||||
import * as Utils from "./common/utils";
|
||||
import Renderer = require("./renderer");
|
||||
import Ruler = require("./ruler");
|
||||
@@ -76,7 +78,7 @@ declare namespace Remarkable {
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
type GetBreak = (tokens: ContentToken[], idx: number) => "" | "\n";
|
||||
type GetBreak = Rule<ContentToken, "" | "\n">;
|
||||
|
||||
interface Options {
|
||||
/**
|
||||
@@ -140,76 +142,76 @@ declare namespace Remarkable {
|
||||
}
|
||||
|
||||
interface StateBlock {
|
||||
src: string;
|
||||
/** Shortcuts to simplify nested calls */
|
||||
parser: ParserBlock;
|
||||
options: Options;
|
||||
env: Env;
|
||||
tokens: [ContentToken];
|
||||
bMarks: number[];
|
||||
eMarks: number[];
|
||||
tShift: number[];
|
||||
/** required block content indent */
|
||||
blkIndent: number;
|
||||
/** line index in src */
|
||||
line: number;
|
||||
/** lines count */
|
||||
lineMax: number;
|
||||
/** loose/tight mode for lists */
|
||||
tight: boolean;
|
||||
/** If `list`, block parser stops on two newlines */
|
||||
parentType: 'root' | 'list';
|
||||
/** Indent of the current dd block, -1 if there isn't any */
|
||||
ddIndent: number;
|
||||
level: number;
|
||||
result: string;
|
||||
isEmpty: (line: number) => boolean;
|
||||
skipEmptyLines: (from: number) => number;
|
||||
skipSpaces: (pos: number) => number;
|
||||
skipChars: (pos: number, code: number) => number;
|
||||
getLines: (begin: number, end: number, indent: number, keepLastLF: boolean) => string;
|
||||
src: string;
|
||||
/** Shortcuts to simplify nested calls */
|
||||
parser: ParserBlock;
|
||||
options: Options;
|
||||
env: Env;
|
||||
tokens: BlockContentToken[];
|
||||
bMarks: number[];
|
||||
eMarks: number[];
|
||||
tShift: number[];
|
||||
/** required block content indent */
|
||||
blkIndent: number;
|
||||
/** line index in src */
|
||||
line: number;
|
||||
/** lines count */
|
||||
lineMax: number;
|
||||
/** loose/tight mode for lists */
|
||||
tight: boolean;
|
||||
/** If `list`, block parser stops on two newlines */
|
||||
parentType: 'root' | 'list';
|
||||
/** Indent of the current dd block, -1 if there isn't any */
|
||||
ddIndent: number;
|
||||
level: number;
|
||||
result: string;
|
||||
isEmpty: (line: number) => boolean;
|
||||
skipEmptyLines: (from: number) => number;
|
||||
skipSpaces: (pos: number) => number;
|
||||
skipChars: (pos: number, code: number) => number;
|
||||
getLines: (begin: number, end: number, indent: number, keepLastLF: boolean) => string;
|
||||
}
|
||||
interface StateInline {
|
||||
src: string;
|
||||
env: Env;
|
||||
parser: ParserInline;
|
||||
tokens: [ContentToken];
|
||||
pos: number;
|
||||
posMax: number;
|
||||
level: number;
|
||||
pending: string;
|
||||
pendingLevel: number;
|
||||
/** Set true when seek link label */
|
||||
isInLabel: boolean;
|
||||
/**
|
||||
* Increment for each nesting link.
|
||||
* Used to prevent nesting in definitions.
|
||||
*/
|
||||
linkLevel: number;
|
||||
/**
|
||||
* Temporary storage for link url.
|
||||
*/
|
||||
linkContent: string;
|
||||
src: string;
|
||||
env: Env;
|
||||
parser: ParserInline;
|
||||
tokens: ContentToken[];
|
||||
pos: number;
|
||||
posMax: number;
|
||||
level: number;
|
||||
pending: string;
|
||||
pendingLevel: number;
|
||||
/** Set true when seek link label */
|
||||
isInLabel: boolean;
|
||||
/**
|
||||
* Increment for each nesting link.
|
||||
* Used to prevent nesting in definitions.
|
||||
*/
|
||||
linkLevel: number;
|
||||
/**
|
||||
* Temporary storage for link url.
|
||||
*/
|
||||
linkContent: string;
|
||||
|
||||
/**
|
||||
* Track unpaired `[` for link labels.
|
||||
*/
|
||||
labelUnmatchedScopes: number;
|
||||
push: (token: ContentToken) => void;
|
||||
pushPending: () => void;
|
||||
}
|
||||
/**
|
||||
* Track unpaired `[` for link labels.
|
||||
*/
|
||||
labelUnmatchedScopes: number;
|
||||
push: (token: ContentToken) => void;
|
||||
pushPending: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return `true` if the parsing function has recognized the current position
|
||||
* in the input as one if its tokens.
|
||||
*/
|
||||
type CoreParsingRule = (
|
||||
/**
|
||||
* Representation of the current input stream, and the results of
|
||||
* parsing it so far.
|
||||
*/
|
||||
state: StateInline,
|
||||
) => boolean;
|
||||
/**
|
||||
* Return `true` if the parsing function has recognized the current position
|
||||
* in the input as one if its tokens.
|
||||
*/
|
||||
type CoreParsingRule = (
|
||||
/**
|
||||
* Representation of the current input stream, and the results of
|
||||
* parsing it so far.
|
||||
*/
|
||||
state: StateInline,
|
||||
) => boolean;
|
||||
|
||||
/**
|
||||
* Return `true` if the parsing function has recognized the current position
|
||||
@@ -257,11 +259,12 @@ declare namespace Remarkable {
|
||||
silent: boolean
|
||||
) => boolean;
|
||||
|
||||
type Rule = (
|
||||
type Rule<T extends TagToken = TagToken, R extends string = string> = (
|
||||
/**
|
||||
* The list of tokens currently being processed.
|
||||
*/
|
||||
tokens: ContentToken[],
|
||||
// tslint:disable-next-line:no-unnecessary-generics
|
||||
tokens: T[],
|
||||
|
||||
/**
|
||||
* The index of the token currently being processed.
|
||||
@@ -271,78 +274,86 @@ declare namespace Remarkable {
|
||||
/**
|
||||
* The options given to remarkable.
|
||||
*/
|
||||
options: Options,
|
||||
options?: Options,
|
||||
|
||||
/**
|
||||
* The key-value store created by the parsing rules.
|
||||
*/
|
||||
env: Env,
|
||||
) => string;
|
||||
env?: Env,
|
||||
|
||||
/**
|
||||
* The possible instance of Remarkable. See `fence` renderer function.
|
||||
*/
|
||||
instance?: Remarkable,
|
||||
) => R;
|
||||
|
||||
/**
|
||||
* Renderer rules.
|
||||
*/
|
||||
interface Rules {
|
||||
[name: string]: Rule;
|
||||
"blockquote_open": Rule;
|
||||
"blockquote_close": Rule;
|
||||
"code": Rule;
|
||||
"fence": Rule;
|
||||
"fence_custom": Rule;
|
||||
"heading_open": Rule;
|
||||
"heading_close": Rule;
|
||||
"hr": Rule;
|
||||
"bullet_list_open": Rule;
|
||||
"bullet_list_close": Rule;
|
||||
"list_item_open": Rule;
|
||||
"list_item_close": Rule;
|
||||
"ordered_list_open": Rule;
|
||||
"ordered_list_close": Rule;
|
||||
"paragraph_open": Rule;
|
||||
"paragraph_close": Rule;
|
||||
"link_open": Rule;
|
||||
"link_close": Rule;
|
||||
"image": Rule;
|
||||
"table_open": Rule;
|
||||
"table_close": Rule;
|
||||
"thead_open": Rule;
|
||||
"thead_close": Rule;
|
||||
"tbody_open": Rule;
|
||||
"tbody_close": Rule;
|
||||
"tr_open": Rule;
|
||||
"tr_close": Rule;
|
||||
"th_open": Rule;
|
||||
"th_close": Rule;
|
||||
"td_open": Rule;
|
||||
"td_close": Rule;
|
||||
"strong_open": Rule;
|
||||
"strong_close": Rule;
|
||||
"em_open": Rule;
|
||||
"em_close": Rule;
|
||||
"del_open": Rule;
|
||||
"del_close": Rule;
|
||||
"ins_open": Rule;
|
||||
"ins_close": Rule;
|
||||
"mark_open": Rule;
|
||||
"mark_close": Rule;
|
||||
"sub": Rule;
|
||||
"sup": Rule;
|
||||
"hardbreak": Rule;
|
||||
"softbreak": Rule;
|
||||
"text": Rule;
|
||||
"htmlblock": Rule;
|
||||
"htmltag": Rule;
|
||||
"abbr_open": Rule;
|
||||
"abbr_close": Rule;
|
||||
"footnote_ref": Rule;
|
||||
"footnote_block_open": Rule;
|
||||
"footnote_block_close": Rule;
|
||||
"footnote_open": Rule;
|
||||
"footnote_close": Rule;
|
||||
"footnote_anchor": Rule;
|
||||
"dl_open": Rule;
|
||||
"dt_open": Rule;
|
||||
"dd_open": Rule;
|
||||
"dl_close": Rule;
|
||||
"dt_close": Rule;
|
||||
"dd_close": Rule;
|
||||
[name: string]: Rule | { [name: string]: Rule<ContentToken> };
|
||||
"blockquote_open": Rule<BlockquoteOpenToken>;
|
||||
"blockquote_close": Rule<BlockquoteCloseToken>;
|
||||
"code": Rule<CodeToken>;
|
||||
"fence": Rule<FenceToken>;
|
||||
"fence_custom": { [name: string]: Rule<FenceToken> };
|
||||
"heading_open": Rule<HeadingOpenToken>;
|
||||
"heading_close": Rule<HeadingCloseToken>;
|
||||
"hr": Rule<HrToken>;
|
||||
"bullet_list_open": Rule<BulletListOpenToken>;
|
||||
"bullet_list_close": Rule<BulletListCloseToken>;
|
||||
"list_item_open": Rule<ListItemOpenToken>;
|
||||
"list_item_close": Rule<ListItemCloseToken>;
|
||||
"ordered_list_open": Rule<OrderedListOpenToken>;
|
||||
"ordered_list_close": Rule<OrderedListCloseToken>;
|
||||
"paragraph_open": Rule<ParagraphOpenToken>;
|
||||
"paragraph_close": Rule<ParagraphCloseToken>;
|
||||
"link_open": Rule<LinkOpenToken>;
|
||||
"link_close": Rule<LinkCloseToken>;
|
||||
"image": Rule<ImageToken>;
|
||||
"table_open": Rule<TableOpenToken>;
|
||||
"table_close": Rule<TableCloseToken>;
|
||||
"thead_open": Rule<THeadOpenToken>;
|
||||
"thead_close": Rule<THeadCloseToken>;
|
||||
"tbody_open": Rule<TBodyOpenToken>;
|
||||
"tbody_close": Rule<TBodyCloseToken>;
|
||||
"tr_open": Rule<TROpenToken>;
|
||||
"tr_close": Rule<TRCloseToken>;
|
||||
"th_open": Rule<THOpenToken>;
|
||||
"th_close": Rule<THCloseToken>;
|
||||
"td_open": Rule<TDOpenToken>;
|
||||
"td_close": Rule<TDCloseToken>;
|
||||
"strong_open": Rule<StrongOpenToken>;
|
||||
"strong_close": Rule<StrongCloseToken>;
|
||||
"em_open": Rule<EmOpenToken>;
|
||||
"em_close": Rule<EmCloseToken>;
|
||||
"del_open": Rule<DelOpenToken>;
|
||||
"del_close": Rule<DelCloseToken>;
|
||||
"ins_open": Rule<InsOpenToken>;
|
||||
"ins_close": Rule<InsCloseToken>;
|
||||
"mark_open": Rule<MarkOpenToken>;
|
||||
"mark_close": Rule<MarkCloseToken>;
|
||||
"sub": Rule<SubToken>;
|
||||
"sup": Rule<SupToken>;
|
||||
"hardbreak": Rule<HardbreakToken>;
|
||||
"softbreak": Rule<SoftbreakToken>;
|
||||
"text": Rule<TextToken>;
|
||||
"htmlblock": Rule<HtmlBlockToken>;
|
||||
"htmltag": Rule<HtmlTagToken>;
|
||||
"abbr_open": Rule<AbbrOpenToken>;
|
||||
"abbr_close": Rule<AbbrCloseToken>;
|
||||
"footnote_ref": Rule<FootnoteInlineToken>;
|
||||
"footnote_block_open": Rule<FootnoteBlockOpenToken>;
|
||||
"footnote_block_close": Rule<FootnoteBlockCloseToken>;
|
||||
"footnote_open": Rule<FootnoteOpenToken>;
|
||||
"footnote_close": Rule<FootnoteCloseToken>;
|
||||
"footnote_anchor": Rule<FootnoteAnchorToken>;
|
||||
"dl_open": Rule<DlOpenToken>;
|
||||
"dt_open": Rule<DtOpenToken>;
|
||||
"dd_open": Rule<DdOpenToken>;
|
||||
"dl_close": Rule<DlCloseToken>;
|
||||
"dt_close": Rule<DtCloseToken>;
|
||||
"dd_close": Rule<DdCloseToken>;
|
||||
|
||||
/**
|
||||
* Check to see if `\n` is needed before the next token.
|
||||
@@ -374,13 +385,13 @@ declare namespace Remarkable {
|
||||
* The content of the block. This might include inline mardown syntax
|
||||
* which may need further processing by the inline rules.
|
||||
*/
|
||||
content: string;
|
||||
content?: string;
|
||||
|
||||
/**
|
||||
* This is initialized with an empty array (`[]`) and will be filled
|
||||
* with the inline parser tokens as the inline parsing rules are applied.
|
||||
*/
|
||||
children: Token[];
|
||||
children?: Token[];
|
||||
}
|
||||
|
||||
interface ContentToken extends TagToken {
|
||||
@@ -388,83 +399,432 @@ declare namespace Remarkable {
|
||||
* A text token has a `content` property. This is passed to
|
||||
* the corresponding renderer to be converted for output.
|
||||
*/
|
||||
content: any;
|
||||
|
||||
/**
|
||||
* The type of the token.
|
||||
*/
|
||||
type: string;
|
||||
content?: any;
|
||||
|
||||
/**
|
||||
* Is this a block element
|
||||
*/
|
||||
block: boolean;
|
||||
block?: boolean;
|
||||
}
|
||||
|
||||
interface MiscTokenProps {
|
||||
/**
|
||||
* Image alt.
|
||||
*/
|
||||
alt?: string;
|
||||
// ---------------
|
||||
// Specific Block Tokens
|
||||
// ---------------
|
||||
|
||||
interface BlockquoteToken extends TagToken {}
|
||||
interface BlockquoteOpenToken extends BlockquoteToken {
|
||||
type: 'blockquote_open';
|
||||
}
|
||||
interface BlockquoteCloseToken extends BlockquoteToken {
|
||||
type: 'blockquote_close';
|
||||
}
|
||||
|
||||
interface CodeToken extends BlockContentToken {
|
||||
/**
|
||||
* Code: `true` if block, `false` if inline.
|
||||
*/
|
||||
block?: boolean;
|
||||
block: boolean;
|
||||
|
||||
/**
|
||||
* Footnote label.
|
||||
*/
|
||||
label?: any;
|
||||
type: 'code';
|
||||
}
|
||||
|
||||
/**
|
||||
* Heading level.
|
||||
*/
|
||||
hLevel?: number;
|
||||
interface DlOpenToken extends TagToken {
|
||||
type: 'dl_open';
|
||||
}
|
||||
interface DlCloseToken extends TagToken {
|
||||
type: 'dl_close';
|
||||
}
|
||||
interface DtOpenToken extends TagToken {
|
||||
type: 'dt_open';
|
||||
}
|
||||
interface DtCloseToken extends TagToken {
|
||||
type: 'dt_close';
|
||||
}
|
||||
interface DdOpenToken extends TagToken {
|
||||
type: 'dd_open';
|
||||
}
|
||||
interface DdCloseToken extends TagToken {
|
||||
type: 'dd_close';
|
||||
}
|
||||
|
||||
/**
|
||||
* Link url.
|
||||
*/
|
||||
href?: string;
|
||||
|
||||
/**
|
||||
* Footnote id.
|
||||
*/
|
||||
id?: number;
|
||||
|
||||
/**
|
||||
* Ordered list marker value.
|
||||
*/
|
||||
order?: number;
|
||||
interface FenceToken extends ContentToken {
|
||||
content: string;
|
||||
block?: false;
|
||||
|
||||
/**
|
||||
* Fenced block params.
|
||||
*/
|
||||
params?: any[];
|
||||
params: string;
|
||||
type: 'fence';
|
||||
}
|
||||
|
||||
interface FootnoteGenericToken extends TagToken {
|
||||
/**
|
||||
* Image url.
|
||||
* Footnote id.
|
||||
*/
|
||||
src?: string;
|
||||
id: number;
|
||||
|
||||
/**
|
||||
* Footnote sub id.
|
||||
*/
|
||||
subId?: number;
|
||||
}
|
||||
interface FootnoteReferenceToken extends FootnoteGenericToken {}
|
||||
interface FootnoteReferenceOpenToken extends FootnoteReferenceToken {
|
||||
label: string;
|
||||
type: 'footnote_reference_open';
|
||||
}
|
||||
interface FootnoteReferenceCloseToken extends FootnoteReferenceToken {
|
||||
type: 'footnote_reference_close';
|
||||
}
|
||||
|
||||
type HeadingValue = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
|
||||
interface HeadingToken extends TagToken {
|
||||
hLevel: HeadingValue;
|
||||
}
|
||||
interface HeadingOpenToken extends HeadingToken {
|
||||
type: 'heading_open';
|
||||
}
|
||||
interface HeadingCloseToken extends HeadingToken {
|
||||
type: 'heading_close';
|
||||
}
|
||||
|
||||
interface HrToken extends TagToken {
|
||||
type: 'hr';
|
||||
}
|
||||
|
||||
interface HtmlBlockToken extends ContentToken {
|
||||
content: string;
|
||||
block: false;
|
||||
type: 'htmlblock';
|
||||
}
|
||||
|
||||
interface LHeadingOpenToken extends HeadingOpenToken {}
|
||||
interface LHeadingCloseToken extends HeadingCloseToken {}
|
||||
|
||||
interface OrderedListToken extends TagToken {}
|
||||
interface OrderedListOpenToken extends OrderedListToken {
|
||||
/**
|
||||
* Ordered list marker value.
|
||||
*/
|
||||
order: number;
|
||||
type: 'ordered_list_open';
|
||||
}
|
||||
interface OrderedListCloseToken extends OrderedListToken {
|
||||
type: 'ordered_list_close';
|
||||
}
|
||||
interface BulletListToken extends TagToken {}
|
||||
interface BulletListOpenToken extends BulletListToken {
|
||||
type: 'bullet_list_open';
|
||||
}
|
||||
interface BulletListCloseToken extends BulletListToken {
|
||||
type: 'bullet_list_close';
|
||||
}
|
||||
interface ListItemToken extends TagToken {}
|
||||
interface ListItemOpenToken extends ListItemToken {
|
||||
type: 'list_item_open';
|
||||
}
|
||||
interface ListItemCloseToken extends ListItemToken {
|
||||
type: 'list_item_close';
|
||||
}
|
||||
|
||||
interface ParagraphToken extends TagToken {
|
||||
/**
|
||||
* Absence of empty line before current tag: `true` if absent, `false`
|
||||
* if present. List is tight if any list item is tight.
|
||||
*/
|
||||
tight?: boolean;
|
||||
tight: boolean;
|
||||
}
|
||||
|
||||
interface ParagraphOpenToken extends ParagraphToken {
|
||||
type: 'paragraph_open';
|
||||
}
|
||||
|
||||
interface ParagraphCloseToken extends ParagraphToken {
|
||||
type: 'paragraph_close';
|
||||
}
|
||||
|
||||
interface TextToken extends TagToken {
|
||||
content?: string;
|
||||
type: 'text';
|
||||
}
|
||||
|
||||
interface StrongToken extends TagToken {}
|
||||
interface StrongOpenToken extends TagToken {
|
||||
type: 'strong_open';
|
||||
}
|
||||
interface StrongCloseToken extends TagToken {
|
||||
type: 'strong_close';
|
||||
}
|
||||
|
||||
interface TableToken extends TagToken {}
|
||||
interface TableOpenToken extends TableToken {
|
||||
type: 'table_open';
|
||||
}
|
||||
interface TableCloseToken extends TableToken {
|
||||
type: 'table_close';
|
||||
}
|
||||
interface THeadToken extends TagToken {}
|
||||
interface THeadOpenToken extends THeadToken {
|
||||
type: 'thead_open';
|
||||
}
|
||||
interface THeadCloseToken extends THeadToken {
|
||||
type: 'thead_close';
|
||||
}
|
||||
interface TBodyToken extends TagToken {}
|
||||
interface TBodyOpenToken extends TBodyToken {
|
||||
type: 'tbody_open';
|
||||
}
|
||||
interface TBodyCloseToken extends TBodyToken {
|
||||
type: 'tbody_close';
|
||||
}
|
||||
interface TRToken extends TagToken {}
|
||||
interface TROpenToken extends TRToken {
|
||||
type: 'tr_open';
|
||||
}
|
||||
interface TRCloseToken extends TRToken {
|
||||
type: 'tr_close';
|
||||
}
|
||||
interface THToken extends TagToken {}
|
||||
interface THOpenToken extends THToken {
|
||||
type: 'th_open';
|
||||
}
|
||||
interface THCloseToken extends THToken {
|
||||
type: 'th_close';
|
||||
}
|
||||
interface TDToken extends TagToken {}
|
||||
interface TDOpenToken extends TDToken {
|
||||
type: 'td_open';
|
||||
}
|
||||
interface TDCloseToken extends TDToken {
|
||||
type: 'td_close';
|
||||
}
|
||||
|
||||
// ---------------
|
||||
// Specific Block Tokens
|
||||
// ---------------
|
||||
|
||||
interface LinkToken extends TagToken {}
|
||||
interface LinkOpenToken extends LinkToken {
|
||||
/**
|
||||
* Link url.
|
||||
*/
|
||||
href: string;
|
||||
/**
|
||||
* Link title.
|
||||
*/
|
||||
title?: string;
|
||||
type: 'link_open';
|
||||
}
|
||||
interface LinkCloseToken extends LinkToken {
|
||||
type: 'link_close';
|
||||
}
|
||||
|
||||
interface DelToken extends TagToken {}
|
||||
interface DelOpenToken extends DelToken {
|
||||
type: 'del_open';
|
||||
}
|
||||
interface DelCloseToken extends DelToken {
|
||||
type: 'del_open';
|
||||
}
|
||||
|
||||
interface EmToken extends TagToken {}
|
||||
interface EmOpenToken extends EmToken {
|
||||
type: 'em_open';
|
||||
}
|
||||
interface EmCloseToken extends EmToken {
|
||||
type: 'em_close';
|
||||
}
|
||||
|
||||
interface HardbreakToken extends TagToken {
|
||||
type: 'hardbreak';
|
||||
}
|
||||
interface SoftbreakToken extends TagToken {
|
||||
type: 'softbreak';
|
||||
}
|
||||
|
||||
interface FootnoteInlineToken extends FootnoteGenericToken {
|
||||
type: 'footnote_ref';
|
||||
}
|
||||
|
||||
interface HtmlTagToken extends ContentToken {
|
||||
content: string;
|
||||
type: 'htmltag';
|
||||
}
|
||||
|
||||
interface InsToken extends TagToken {}
|
||||
interface InsOpenToken extends InsToken {
|
||||
type: 'ins_open';
|
||||
}
|
||||
interface InsCloseToken extends InsToken {
|
||||
type: 'ins_close';
|
||||
}
|
||||
|
||||
interface ImageToken extends ContentToken {
|
||||
/**
|
||||
* Image url.
|
||||
*/
|
||||
src: string;
|
||||
|
||||
/**
|
||||
* Image alt.
|
||||
*/
|
||||
alt: string;
|
||||
|
||||
/**
|
||||
* Image title.
|
||||
*/
|
||||
title: string;
|
||||
|
||||
type: 'image';
|
||||
}
|
||||
|
||||
interface MarkToken extends TagToken {}
|
||||
interface MarkOpenToken extends MarkToken {
|
||||
type: 'mark_open';
|
||||
}
|
||||
interface MarkCloseToken extends MarkToken {
|
||||
type: 'mark_close';
|
||||
}
|
||||
|
||||
interface SubToken extends ContentToken {
|
||||
content: string;
|
||||
type: 'sub';
|
||||
}
|
||||
|
||||
interface SupToken extends ContentToken {
|
||||
content: string;
|
||||
type: 'sup';
|
||||
}
|
||||
|
||||
// ---------------
|
||||
// Specific Core Tokens
|
||||
// ---------------
|
||||
|
||||
interface AbbrToken extends TagToken {}
|
||||
interface AbbrOpenToken extends AbbrToken {
|
||||
/**
|
||||
* Abbreviation title.
|
||||
*/
|
||||
title?: string;
|
||||
title: string;
|
||||
type: 'abbr_open';
|
||||
}
|
||||
interface AbbrCloseToken extends AbbrToken {
|
||||
type: 'abbr_close';
|
||||
}
|
||||
|
||||
type Token = (BlockContentToken | ContentToken | TagToken) & MiscTokenProps;
|
||||
interface FootnoteToken extends FootnoteGenericToken {}
|
||||
interface FootnoteOpenToken extends FootnoteToken {
|
||||
type: 'footnote_open';
|
||||
}
|
||||
interface FootnoteCloseToken extends FootnoteToken {
|
||||
type: 'footnote_close';
|
||||
}
|
||||
|
||||
interface FootnoteBlockToken extends TagToken {}
|
||||
interface FootnoteBlockOpenToken extends FootnoteBlockToken {
|
||||
type: 'footnote_block_open';
|
||||
}
|
||||
interface FootnoteBlockCloseToken extends FootnoteBlockToken {
|
||||
type: 'footnote_block_close';
|
||||
}
|
||||
|
||||
interface FootnoteAnchorToken extends FootnoteGenericToken {
|
||||
type: 'footnote_anchor';
|
||||
}
|
||||
|
||||
type Token =
|
||||
| BlockContentToken
|
||||
| ContentToken
|
||||
| TagToken
|
||||
| BlockquoteToken
|
||||
| BlockquoteOpenToken
|
||||
| BlockquoteCloseToken
|
||||
| CodeToken
|
||||
| DlOpenToken
|
||||
| DlCloseToken
|
||||
| DtOpenToken
|
||||
| DtCloseToken
|
||||
| DdOpenToken
|
||||
| DdCloseToken
|
||||
| FenceToken
|
||||
| FootnoteGenericToken
|
||||
| FootnoteReferenceToken
|
||||
| FootnoteReferenceOpenToken
|
||||
| FootnoteReferenceCloseToken
|
||||
| HeadingToken
|
||||
| HeadingOpenToken
|
||||
| HeadingCloseToken
|
||||
| HrToken
|
||||
| HtmlBlockToken
|
||||
| LHeadingOpenToken
|
||||
| LHeadingCloseToken
|
||||
| OrderedListToken
|
||||
| OrderedListOpenToken
|
||||
| OrderedListCloseToken
|
||||
| BulletListToken
|
||||
| BulletListOpenToken
|
||||
| BulletListCloseToken
|
||||
| ListItemToken
|
||||
| ListItemOpenToken
|
||||
| ListItemCloseToken
|
||||
| ParagraphToken
|
||||
| ParagraphOpenToken
|
||||
| ParagraphCloseToken
|
||||
| TextToken
|
||||
| StrongToken
|
||||
| StrongOpenToken
|
||||
| StrongCloseToken
|
||||
| TableToken
|
||||
| TableOpenToken
|
||||
| TableCloseToken
|
||||
| THeadToken
|
||||
| THeadOpenToken
|
||||
| THeadCloseToken
|
||||
| TBodyToken
|
||||
| TBodyOpenToken
|
||||
| TBodyCloseToken
|
||||
| TRToken
|
||||
| TROpenToken
|
||||
| TRCloseToken
|
||||
| THToken
|
||||
| THOpenToken
|
||||
| THCloseToken
|
||||
| TDToken
|
||||
| TDOpenToken
|
||||
| TDCloseToken
|
||||
| LinkToken
|
||||
| LinkOpenToken
|
||||
| LinkCloseToken
|
||||
| DelToken
|
||||
| DelOpenToken
|
||||
| DelCloseToken
|
||||
| EmToken
|
||||
| EmOpenToken
|
||||
| EmCloseToken
|
||||
| HardbreakToken
|
||||
| SoftbreakToken
|
||||
| FootnoteInlineToken
|
||||
| HtmlTagToken
|
||||
| InsToken
|
||||
| InsOpenToken
|
||||
| InsCloseToken
|
||||
| ImageToken
|
||||
| MarkToken
|
||||
| MarkOpenToken
|
||||
| MarkCloseToken
|
||||
| SubToken
|
||||
| SupToken
|
||||
| AbbrToken
|
||||
| AbbrOpenToken
|
||||
| AbbrCloseToken
|
||||
| FootnoteToken
|
||||
| FootnoteOpenToken
|
||||
| FootnoteCloseToken
|
||||
| FootnoteBlockToken
|
||||
| FootnoteBlockOpenToken
|
||||
| FootnoteBlockCloseToken
|
||||
| FootnoteAnchorToken;
|
||||
}
|
||||
|
||||
declare class ParserBlock {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import hljs = require("highlight.js");
|
||||
import Remarkable = require("remarkable");
|
||||
import * as ImportedRemarkable from "remarkable";
|
||||
|
||||
/**
|
||||
* Examples from README.
|
||||
@@ -10,6 +11,9 @@ export class RemarkableTest {
|
||||
usage() {
|
||||
const md = new Remarkable();
|
||||
md.render("# Remarkable rulezz!");
|
||||
|
||||
const importedMd = new ImportedRemarkable();
|
||||
importedMd.render("# Remarkable rulezz!");
|
||||
}
|
||||
|
||||
defineOptionsInContructor() {
|
||||
@@ -148,72 +152,78 @@ export class RemarkableTest {
|
||||
*/
|
||||
export class TokenTest {
|
||||
blockRules() {
|
||||
const tokens: Remarkable.Token[] = [];
|
||||
const state = {
|
||||
level: 0,
|
||||
line: 0,
|
||||
tokens,
|
||||
};
|
||||
const state: Remarkable.StateBlock = {} as any;
|
||||
|
||||
const lines: [number, number] = [0, 0];
|
||||
const startLine = 0;
|
||||
|
||||
state.tokens.push({
|
||||
const blockquoteOpenToken: Remarkable.BlockquoteOpenToken = {
|
||||
type: "blockquote_open",
|
||||
lines,
|
||||
level: state.level++,
|
||||
});
|
||||
};
|
||||
state.tokens.push(blockquoteOpenToken);
|
||||
|
||||
state.tokens.push({
|
||||
const blockquoteCloseToken: Remarkable.BlockquoteCloseToken = {
|
||||
type: "blockquote_close",
|
||||
level: --state.level,
|
||||
});
|
||||
};
|
||||
state.tokens.push(blockquoteCloseToken);
|
||||
|
||||
state.tokens.push({
|
||||
const codeToken: Remarkable.CodeToken = {
|
||||
type: "code",
|
||||
content: "",
|
||||
block: true,
|
||||
lines,
|
||||
level: state.level,
|
||||
});
|
||||
};
|
||||
state.tokens.push(codeToken);
|
||||
|
||||
state.tokens.push({
|
||||
// inline token doesn't need a proper type
|
||||
const inlineToken: Remarkable.BlockContentToken = {
|
||||
type: "inline",
|
||||
content: "",
|
||||
level: state.level + 1,
|
||||
lines,
|
||||
children: [],
|
||||
});
|
||||
};
|
||||
state.tokens.push(inlineToken);
|
||||
|
||||
state.tokens.push({
|
||||
const fenceToken: Remarkable.FenceToken = {
|
||||
type: "fence",
|
||||
params: [],
|
||||
params: "",
|
||||
content: "",
|
||||
lines: [startLine, state.line],
|
||||
level: state.level,
|
||||
});
|
||||
};
|
||||
state.tokens.push(fenceToken);
|
||||
|
||||
state.tokens.push({
|
||||
const footnoteRefOpenToken: Remarkable.FootnoteReferenceOpenToken = {
|
||||
type: "footnote_reference_open",
|
||||
label: "",
|
||||
level: state.level++,
|
||||
});
|
||||
id: 0,
|
||||
};
|
||||
state.tokens.push(footnoteRefOpenToken);
|
||||
|
||||
state.tokens.push({ type: "heading_close", hLevel: 1, level: state.level });
|
||||
const headingCloseToken: Remarkable.HeadingCloseToken = { type: "heading_close", hLevel: 1, level: state.level };
|
||||
state.tokens.push(headingCloseToken);
|
||||
|
||||
state.tokens.push({
|
||||
const orderedListOpenToken: Remarkable.OrderedListOpenToken = {
|
||||
type: "ordered_list_open",
|
||||
order: 0,
|
||||
lines: [startLine, 0],
|
||||
level: state.level++,
|
||||
});
|
||||
};
|
||||
state.tokens.push(orderedListOpenToken);
|
||||
|
||||
state.tokens.push({
|
||||
const paragraphOpenToken: Remarkable.ParagraphOpenToken = {
|
||||
type: "paragraph_open",
|
||||
tight: false,
|
||||
lines: [startLine, state.line],
|
||||
level: state.level,
|
||||
});
|
||||
};
|
||||
state.tokens.push(paragraphOpenToken);
|
||||
}
|
||||
|
||||
coreRules() {
|
||||
@@ -224,89 +234,102 @@ export class TokenTest {
|
||||
const m = ["", "", ""];
|
||||
let level = 0;
|
||||
|
||||
nodes.push({
|
||||
const textToken1: Remarkable.TextToken = {
|
||||
type: "text",
|
||||
content: "",
|
||||
level,
|
||||
});
|
||||
};
|
||||
nodes.push(textToken1);
|
||||
|
||||
nodes.push({
|
||||
const abbrOpenToken: Remarkable.AbbrOpenToken = {
|
||||
type: "abbr_open",
|
||||
title: state.env["abbreviations"][":" + m[2]],
|
||||
level: level++,
|
||||
});
|
||||
};
|
||||
nodes.push(abbrOpenToken);
|
||||
|
||||
nodes.push({
|
||||
const textToken2: Remarkable.TextToken = {
|
||||
type: "text",
|
||||
content: m[2],
|
||||
level,
|
||||
});
|
||||
};
|
||||
nodes.push(textToken2);
|
||||
|
||||
nodes.push({
|
||||
const abbrCloseToken: Remarkable.AbbrCloseToken = {
|
||||
type: "abbr_close",
|
||||
level: --level,
|
||||
});
|
||||
};
|
||||
nodes.push(abbrCloseToken);
|
||||
|
||||
state.tokens.push({
|
||||
// inline token doesn't need a proper type
|
||||
const inlineToken1: Remarkable.BlockContentToken = {
|
||||
type: "inline",
|
||||
content: state.src.replace(/\n/g, " ").trim(),
|
||||
level: 0,
|
||||
lines: [0, 1],
|
||||
children: [],
|
||||
});
|
||||
};
|
||||
state.tokens.push(inlineToken1);
|
||||
|
||||
tokens.push({
|
||||
const inlineToken2: Remarkable.BlockContentToken = {
|
||||
type: "inline",
|
||||
content: "",
|
||||
level,
|
||||
children: [],
|
||||
});
|
||||
};
|
||||
tokens.push(inlineToken2);
|
||||
}
|
||||
|
||||
inlineRules() {
|
||||
const state: Remarkable.Token[] = [];
|
||||
const state: Remarkable.StateInline = {} as any;
|
||||
let level = 0;
|
||||
|
||||
state.push({
|
||||
const linkOpenToken1: Remarkable.LinkOpenToken = {
|
||||
type: "link_open",
|
||||
href: "",
|
||||
level,
|
||||
});
|
||||
};
|
||||
state.push(linkOpenToken1);
|
||||
|
||||
state.push({
|
||||
const codeToken: Remarkable.CodeToken = {
|
||||
type: "code",
|
||||
content: "",
|
||||
block: false,
|
||||
level,
|
||||
});
|
||||
};
|
||||
state.push(codeToken);
|
||||
|
||||
state.push({
|
||||
const footnoteRefToken1: Remarkable.FootnoteReferenceToken = {
|
||||
type: "footnote_ref",
|
||||
id: 1,
|
||||
level,
|
||||
});
|
||||
};
|
||||
state.push(footnoteRefToken1);
|
||||
|
||||
state.push({
|
||||
const footnoteRefToken2: Remarkable.FootnoteReferenceToken = {
|
||||
type: "footnote_ref",
|
||||
id: 1,
|
||||
subId: 1,
|
||||
level,
|
||||
});
|
||||
};
|
||||
state.push(footnoteRefToken2);
|
||||
|
||||
state.push({
|
||||
const imageToken: Remarkable.ImageToken = {
|
||||
type: "image",
|
||||
src: "",
|
||||
title: "",
|
||||
alt: "",
|
||||
level,
|
||||
});
|
||||
};
|
||||
state.push(imageToken);
|
||||
|
||||
state.push({
|
||||
const linkOpenToken2: Remarkable.LinkOpenToken = {
|
||||
type: "link_open",
|
||||
href: "",
|
||||
title: "",
|
||||
level: level++,
|
||||
});
|
||||
};
|
||||
state.push(linkOpenToken2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"noImplicitAny": true,
|
||||
"noImplicitThis": true,
|
||||
"strictNullChecks": true,
|
||||
"strictFunctionTypes": true,
|
||||
"strictFunctionTypes": false,
|
||||
"baseUrl": "../",
|
||||
"typeRoots": [
|
||||
"../"
|
||||
@@ -24,4 +24,4 @@
|
||||
"index.d.ts",
|
||||
"remarkable-tests.ts"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user