Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@benrbray/mdast-util-cite

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@benrbray/mdast-util-cite

Converts a `micromark` token stream into an `mdast` syntax tree.

latest
Source
npmnpm
Version
2.0.1-alpha.4
Version published
Weekly downloads
49
-45.56%
Maintainers
1
Weekly downloads
 
Created
Source

mdast-util-cite

license

Extension for mdast-util-from-markdown and mdast-util-to-markdown to support pandoc-style citations. Converts the token stream produced by micromark-extension-cite into an abstract syntax tree.

Note that this extension only parses the input -- it is up to you to assign meaning to these citations by looking up each key in a .bibtex file or other tagged citation database.

Using remark? You probably shouldn’t use this package directly, but instead use remark-cite. See micromark-extension-cite for a full description of the supported syntax.

Install

Install @benrbray/mdast-util-cite on npm.

npm install @benrbray/mdast-util-cite

Usage

Markdown to AST

import fromMarkdown from 'mdast-util-from-markdown'
import { citeSyntax } from 'micromark-extension-cite'
import { citeFromMarkdown } from 'mdast-util-cite'

let ast = fromMarkdown('[see @wadler1989, sec. 1.3; and -@hughes1990, pp.4]', {
  extensions: [citeSyntax()],
  mdastExtensions: [citeFromMarkdown]
})

The corresponding node in the abstract syntax tree has the form below, where:

  • value contains the original markdown source
  • data.altSyntax will be true if the citation uses the alternate syntax
  • data.citeItems is a list of items cited by the node
    • each item has a key and optionally prefix and suffix strings
    • if the item's key was preceded by a -, item.suppressAuthor will be true
{
	"type": "cite",
	"value": "[see @wadler1989, sec. 1.3; and -@hughes1990, pp.4]",
	"data": {
		"citeItems": [
			{
				"prefix": "see ",
				"key": "wadler1989",
				"suffix": ", sec. 1.3"
			},{
				"prefix": " and ",
				"suppressAuthor": true,
				"key": "hughes1990",
				"suffix": ", pp.4"
			}
		]
	}
}

AST to Markdown

Taking the ast from the previous example,

import fromMarkdown from 'mdast-util-from-markdown'
import { citeToMarkdown } from 'mdast-util-cite'

const defaultOptions = {
	standardizeAltSyntax: false,
	enableAuthorSuppression: true,
	useNodeValue: false,
};

let markdownString = toMarkdown(ast, {
	extensions: [citeToMarkdown(defaultOptions)]
}).trim();

The result will be:

[see @wadler1989, sec. 1.3; and -@hughes1990, pp.4]

The citeToMarkdown extension has the following options:

  • options.standardizeAltSyntax (default false): When true, nodes with data.altSyntax = true will be rendered in standard pandoc syntax [@cite] rather than the alternative syntax @[cite].

  • options.enableAuthorSuppression (default true): When false, will not produce author suppression hyphens - in the output markdown, even if they are present in the AST.

  • options.useNodeValue (default false): When true, every citation node serializes to its node.value, rather than being reconstructed from its data.citeItems list. When active, this setting overrides all other options.

Keywords

markdown

FAQs

Package last updated on 11 Jul 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts