diff options
Diffstat (limited to 'packages/markdown-it-14.1.0/lib/token.mjs')
-rw-r--r-- | packages/markdown-it-14.1.0/lib/token.mjs | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/packages/markdown-it-14.1.0/lib/token.mjs b/packages/markdown-it-14.1.0/lib/token.mjs new file mode 100644 index 0000000..706ae1d --- /dev/null +++ b/packages/markdown-it-14.1.0/lib/token.mjs @@ -0,0 +1,191 @@ +// Token class + +/** + * class Token + **/ + +/** + * new Token(type, tag, nesting) + * + * Create new token and fill passed properties. + **/ +function Token (type, tag, nesting) { + /** + * Token#type -> String + * + * Type of the token (string, e.g. "paragraph_open") + **/ + this.type = type + + /** + * Token#tag -> String + * + * html tag name, e.g. "p" + **/ + this.tag = tag + + /** + * Token#attrs -> Array + * + * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]` + **/ + this.attrs = null + + /** + * Token#map -> Array + * + * Source map info. Format: `[ line_begin, line_end ]` + **/ + this.map = null + + /** + * Token#nesting -> Number + * + * Level change (number in {-1, 0, 1} set), where: + * + * - `1` means the tag is opening + * - `0` means the tag is self-closing + * - `-1` means the tag is closing + **/ + this.nesting = nesting + + /** + * Token#level -> Number + * + * nesting level, the same as `state.level` + **/ + this.level = 0 + + /** + * Token#children -> Array + * + * An array of child nodes (inline and img tokens) + **/ + this.children = null + + /** + * Token#content -> String + * + * In a case of self-closing tag (code, html, fence, etc.), + * it has contents of this tag. + **/ + this.content = '' + + /** + * Token#markup -> String + * + * '*' or '_' for emphasis, fence string for fence, etc. + **/ + this.markup = '' + + /** + * Token#info -> String + * + * Additional information: + * + * - Info string for "fence" tokens + * - The value "auto" for autolink "link_open" and "link_close" tokens + * - The string value of the item marker for ordered-list "list_item_open" tokens + **/ + this.info = '' + + /** + * Token#meta -> Object + * + * A place for plugins to store an arbitrary data + **/ + this.meta = null + + /** + * Token#block -> Boolean + * + * True for block-level tokens, false for inline tokens. + * Used in renderer to calculate line breaks + **/ + this.block = false + + /** + * Token#hidden -> Boolean + * + * If it's true, ignore this element when rendering. Used for tight lists + * to hide paragraphs. + **/ + this.hidden = false +} + +/** + * Token.attrIndex(name) -> Number + * + * Search attribute index by name. + **/ +Token.prototype.attrIndex = function attrIndex (name) { + if (!this.attrs) { return -1 } + + const attrs = this.attrs + + for (let i = 0, len = attrs.length; i < len; i++) { + if (attrs[i][0] === name) { return i } + } + return -1 +} + +/** + * Token.attrPush(attrData) + * + * Add `[ name, value ]` attribute to list. Init attrs if necessary + **/ +Token.prototype.attrPush = function attrPush (attrData) { + if (this.attrs) { + this.attrs.push(attrData) + } else { + this.attrs = [attrData] + } +} + +/** + * Token.attrSet(name, value) + * + * Set `name` attribute to `value`. Override old value if exists. + **/ +Token.prototype.attrSet = function attrSet (name, value) { + const idx = this.attrIndex(name) + const attrData = [name, value] + + if (idx < 0) { + this.attrPush(attrData) + } else { + this.attrs[idx] = attrData + } +} + +/** + * Token.attrGet(name) + * + * Get the value of attribute `name`, or null if it does not exist. + **/ +Token.prototype.attrGet = function attrGet (name) { + const idx = this.attrIndex(name) + let value = null + if (idx >= 0) { + value = this.attrs[idx][1] + } + return value +} + +/** + * Token.attrJoin(name, value) + * + * Join value to existing attribute via space. Or create new attribute if not + * exists. Useful to operate with token classes. + **/ +Token.prototype.attrJoin = function attrJoin (name, value) { + const idx = this.attrIndex(name) + + if (idx < 0) { + this.attrPush([name, value]) + } else { + this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value + } +} + +export default Token |