123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- // 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
|