Skip to main content
Version: 3.x.x 🚧

@yozora/tokenizer-indented-code

Npm VersionNpm DownloadNpm LicenseModule formats: cjs, esmNode.js VersionTested with JestCode Style: prettier

github flavor markdown spec

An indented code block is composed of one or more indented chunks separated by blank lines. An indented chunk is a sequence of non-blank lines, each indented four or more spaces. The contents of the code block are the literal contents of the lines, including trailing line endings, minus four spaces of indentation. An indented code block has no info string.

Install

npm install --save @yozora/tokenizer-indented-code

Usage

tip

@yozora/tokenizer-indented-code has been integrated into @yozora/parser / @yozora/parser-gfm-ex / @yozora/parser-gfm, so you can use YozoraParser / GfmExParser / GfmParser directly.

import YozoraParser from '@yozora/parser'

const parser = new YozoraParser()

// parse source markdown content
parser.parse(`
<a/>
*hi*

- one
`)

Options

NameTypeRequiredDefault
namestringfalse"@yozora/tokenizer-indented-code"
prioritynumberfalseTokenizerPriority.ATOMIC
  • name: The unique name of the tokenizer, used to bind the token it generates, to determine the tokenizer that should be called in each life cycle of the token in the entire matching / parsing phase.

  • priority: Priority of the tokenizer, determine the order of processing, high priority priority execution. interruptable. In addition, in the match-block stage, a high-priority tokenizer can interrupt the matching process of a low-priority tokenizer.

Types

@yozora/tokenizer-indented-code produce Code type nodes. See @yozora/ast for full base types.

import type { Literal } from '@yozora/ast'

export const CodeType = 'code'
export type CodeType = typeof CodeType

/**
* Code represents a block of preformatted text, such as ASCII art or computer
* code.
* @see https://github.com/syntax-tree/mdast#code
* @see https://github.github.com/gfm/#code-fence
*/
export interface Code extends Literal<CodeType> {
/**
* Language of the codes
*/
lang?: string
/**
* Meta info string
*/
meta?: string
}

Live Examples

  • Basic.

    #77
      
      
  • If there is any ambiguity between an interpretation of indentation as a code block and as indicating that material belongs to a list item, the list item interpretation takes precedence.

      
      
  • The contents of a code block are literal text, and do not get parsed as Markdown.

    #80
      
      
  • Here we have three chunks separated by blank lines.

    #81
      
      
  • Any initial spaces beyond four will be included in the content, even in interior blank lines.

    #82
      
      
  • An indented code block cannot interrupt a paragraph. (This allows hanging indents and the like.)

    #83
      
      
  • However, any non-blank line with fewer than four leading spaces ends the code block immediately. So a paragraph may occur immediately after indented code.

    #84
      
      
  • And indented code can occur immediately before and after other kinds of blocks.

    #85
      
      
  • The first line can be indented more than four spaces.

    #86
      
      
  • Blank lines preceding or following an indented code block are not included in it.

    #87
      
      
  • Trailing spaces are included in the code block’s content.

    #88