Built-in

Punctuation

Plugin for converting plain-text punctuation into typographically correct Unicode characters.

The comark/plugins/punctuation plugin transforms plain-text punctuation into typographically correct Unicode characters — smart quotes, dashes, ellipsis, and common symbols. No peer dependencies required.

Usage

import { parse } from 'comark'
import punctuation from 'comark/plugins/punctuation'

const result = await parse('"Hello" -- world... (c)', {
  plugins: [punctuation()]
})
// nodes: [ [ 'p', {}, '“Hello” – world… ©' ] ]

With framework components:

<script setup lang="ts">
import { Comark } from '@comark/vue'
import punctuation from '@comark/vue/plugins/punctuation'
</script>

<template>
  <Comark :plugins="[punctuation()]">{{ content }}</Comark>
</template>

Features

Smart Quotes

Straight quotes are converted to curly (typographic) quotes:

InputOutput
"text""text"
'text''text'
don'tdon't

Dashes

InputOutputName
--En-dash
---Em-dash

Ellipsis

InputOutput
...

Symbols

InputOutput
(c)©
(r)®
(tm)
+-±

Code Preservation

Text inside code, pre, math, kbd, script, and style elements is not transformed:

Transform this: "hello" -- world...

Don't transform this: `"hello" -- world...`

API

punctuation(options?)

Returns a ComarkPlugin that applies typographic transformations to text nodes.

Parameters:

  • options? - Optional configuration — see Options

Returns: ComarkPlugin


Options

OptionTypeDefaultDescription
quotesbooleantrueConvert straight quotes to smart quotes
dashesbooleantrueConvert -- to en-dash and --- to em-dash
ellipsisbooleantrueConvert ... to ellipsis character
symbolsbooleantrueConvert (c), (r), (tm), +-

quotes

Convert straight quotes ("..." and '...') to typographic curly quotes.

punctuation({ quotes: false }) // disable smart quotes only

Default: true

dashes

Convert -- to en-dash (–) and --- to em-dash (—).

punctuation({ dashes: false })

Default: true

ellipsis

Convert ... to the ellipsis character (…).

punctuation({ ellipsis: false })

Default: true

symbols

Convert (c) → ©, (r) → ®, (tm) → ™, +- → ±.

punctuation({ symbols: false })

Default: true