https://github.com/ProseMirror/prosemirror-markdown
ProseMirror Markdown integration
https://github.com/ProseMirror/prosemirror-markdown
Last synced: 11 months ago
JSON representation
ProseMirror Markdown integration
- Host: GitHub
- URL: https://github.com/ProseMirror/prosemirror-markdown
- Owner: ProseMirror
- License: mit
- Created: 2016-09-20T16:14:16.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2025-03-18T08:15:29.000Z (12 months ago)
- Last Synced: 2025-03-27T06:05:06.158Z (11 months ago)
- Language: TypeScript
- Homepage: https://prosemirror.net
- Size: 1.2 MB
- Stars: 367
- Watchers: 11
- Forks: 83
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-prosemirror - prosemirror-markdown - ProseMirror Markdown integration (Non-core modules)
- awesome-list - prosemirror-markdown
README
prosemirror-markdown
[ WEBSITE | ISSUES | FORUM | GITTER ]
This is a (non-core) module for ProseMirror.
ProseMirror is a well-behaved rich semantic content editor based on
contentEditable, with support for collaborative editing and custom
document schemas.
This module implements a ProseMirror
schema that corresponds to
the document schema used by CommonMark, and
a parser and serializer to convert between ProseMirror documents in
that schema and CommonMark/Markdown text.
This code is released under an
MIT license.
There's a forum for general
discussion and support requests, and the
Github bug tracker
is the place to report issues.
We aim to be an inclusive, welcoming community. To make that explicit,
we have a code of
conduct that applies
to communication around the project.
Documentation
-
schema: Schema<"doc" | "paragraph" | "blockquote" | "horizontal_rule" | "heading" | "code_block" | "ordered_list" | "bullet_list" | "list_item" | "text" | "image" | "hard_break", "em" | "strong" | "link" | "code"> -
Document schema for the data model used by CommonMark.
-
class
MarkdownParser -
A configuration of a Markdown parser. Such a parser uses
markdown-it to
tokenize a file, and then runs the custom rules it is given over
the tokens to create a ProseMirror document tree.-
new MarkdownParser(schema: Schema, tokenizer: any, tokens: Object<ParseSpec>) -
Create a parser with the given configuration. You can configure
the markdown-it parser to parse the dialect you want, and provide
a description of the ProseMirror entities those tokens map to in
thetokensobject, which maps token names to descriptions of
what to do with them. Such a description is an object, and may
have the following properties: -
schema: Schema -
The parser's document schema.
-
tokenizer: any -
This parser's markdown-it tokenizer.
-
tokens: Object<ParseSpec> -
The value of the
tokensobject used to construct this
parser. Can be useful to copy and modify to base other parsers
on. -
parse(text: string) → any -
Parse a string as CommonMark markup,
and create a ProseMirror document as prescribed by this parser's
rules.
-
-
interface
ParseSpec -
Object type used to specify how Markdown tokens should be parsed.
-
node?: string -
This token maps to a single node, whose type can be looked up
in the schema under the given name. Exactly one ofnode,block, ormarkmust be set. -
block?: string -
This token (unless
noCloseTokenis true) comes in_open
and_closevariants (which are appended to the base token
name provides a the object property), and wraps a block of
content. The block should be wrapped in a node of the type
named to by the property's value. If the token does not have_openor_close, use thenoCloseTokenoption. -
mark?: string -
This token (again, unless
noCloseTokenis true) also comes
in_openand_closevariants, but should add a mark
(named by the value) to its content, rather than wrapping it
in a node. -
attrs?: Attrs -
Attributes for the node or mark. When
getAttrsis provided,
it takes precedence. -
getAttrs?: fn(token: any, tokenStream: any[], index: number) → Attrs -
A function used to compute the attributes for the node or mark
that takes a markdown-it
token and
returns an attribute object. -
noCloseToken?: boolean -
Indicates that the markdown-it
token has
no_openor_closefor the nodes. This defaults totrue
forcode_inline,code_blockandfence. -
ignore?: boolean -
When true, ignore content for the matched token.
-
-
defaultMarkdownParser: MarkdownParser -
A parser parsing unextended CommonMark,
without inline HTML, and producing a document in the basic schema. -
class
MarkdownSerializer -
A specification for serializing a ProseMirror document as
Markdown/CommonMark text.-
new MarkdownSerializer(nodes: Object<fn(state: MarkdownSerializerState, node: Node, parent: Node, index: number)>, marks: Object<Object>, options?: Object = {}) -
Construct a serializer with the given configuration. The
nodes
object should map node names in a given schema to function that
take a serializer state and such a node, and serialize the node.-
options -
escapeExtraCharacters?: RegExp -
Extra characters can be added for escaping. This is passed
directly to String.replace(), and the matching characters are
preceded by a backslash.
-
-
-
nodes: Object<fn(state: MarkdownSerializerState, node: Node, parent: Node, index: number)> -
The node serializer functions for this serializer.
-
marks: Object<Object> -
The mark serializer info.
-
options: Object -
escapeExtraCharacters?: RegExp -
Extra characters can be added for escaping. This is passed
directly to String.replace(), and the matching characters are
preceded by a backslash.
-
-
serialize(content: Node, options?: Object = {}) → string -
Serialize the content of the given node to
CommonMark.-
options -
tightLists?: boolean -
Whether to render lists in a tight style. This can be overridden
on a node level by specifying a tight attribute on the node.
Defaults to false.
-
-
-
-
class
MarkdownSerializerState -
This is an object used to track state and expose
methods related to markdown serialization. Instances are passed to
node and mark serialization methods (seetoMarkdown).-
options: {tightLists?: boolean, escapeExtraCharacters?: RegExp} -
The options passed to the serializer.
-
wrapBlock(delim: string, firstDelim: string, node: Node, f: fn()) -
Render a block, prefixing each line with
delim, and the first
line infirstDelim.nodeshould be the node that is closed at
the end of the block, andfis a function that renders the
content of the block. -
ensureNewLine() -
Ensure the current content ends with a newline.
-
write(content?: string) -
Prepare the state for writing output (closing closed paragraphs,
adding delimiters, and so on), and then optionally add content
(unescaped) to the output. -
closeBlock(node: Node) -
Close the block for the given node.
-
text(text: string, escape?: boolean = true) -
Add the given text to the document. When escape is not
false,
it will be escaped. -
render(node: Node, parent: Node, index: number) -
Render the given node as a block.
-
renderContent(parent: Node) -
Render the contents of
parentas block nodes. -
renderInline(parent: Node) -
Render the contents of
parentas inline content. -
renderList(node: Node, delim: string, firstDelim: fn(index: number) → string) -
Render a node's content as a list.
delimshould be the extra
indentation added to all lines except the first in an item,firstDelimis a function going from an item index to a
delimiter for the first line of the item. -
esc(str: string, startOfLine?: boolean = false) → string -
Escape the given string so that it can safely appear in Markdown
content. IfstartOfLineis true, also escape characters that
have special meaning only at the start of the line. -
repeat(str: string, n: number) → string -
Repeat the given string
ntimes. -
markString(mark: Mark, open: boolean, parent: Node, index: number) → string -
Get the markdown string for a given opening or closing mark.
-
getEnclosingWhitespace(text: string) → {leading?: string, trailing?: string} -
Get leading and trailing whitespace from a string. Values of
leading or trailing property of the return object will be undefined
if there is no match.
-
-
defaultMarkdownSerializer: MarkdownSerializer -
A serializer for the basic schema.