Analizador de Markdown bien hecho. Rápido y fácil de ampliar.
Demostración en vivo
Sigue la especificación CommonMark + agrega extensiones de sintaxis y azúcar (enlace automático de URL, tipógrafo).
¡Sintaxis configurable! Puedes agregar nuevas reglas e incluso reemplazar las existentes.
Alta velocidad.
Seguro por defecto.
Complementos escritos por la comunidad y otros paquetes en npm.
Tabla de contenido
Instalar
Ejemplos de uso
Simple
Iniciar con ajustes preestablecidos y opciones
Carga de complementos
Resaltado de sintaxis
Linkificar
API
Extensiones de sintaxis
Administrar reglas
Punto de referencia
Markdown-it para empresas
Autores
Referencias / Gracias
nodo.js :
npm instala markdown-it
navegador (CDN):
jsEntregar CDN
cdnjs.com CDN
Ver también:
Documentación API : para obtener más información y ejemplos.
Información de desarrollo: para creadores de complementos.
// node.js// puede usar `require('markdown-it')` para CJSimportar markdownit desde 'markdown-it'const md = markdownit()const result = md.render('# markdown-it rulezz!') ;// navegador con compilación UMD, agregado a "ventana" al cargar el script// Nota, no hay ningún guión en "markdownit".const md = window.markdownit();const result = md.render('# markdown-it rulezz!');
Representación de una sola línea, sin ajuste de párrafo:
importar markdownit desde 'markdown-it'const md = markdownit()const result = md.renderInline('__markdown-it__ rulezz!');
(*) Los ajustes preestablecidos definen combinaciones de reglas y opciones activas. Puede ser "commonmark"
, "zero"
o "default"
(si se omite). Consulte los documentos de API para obtener más detalles.
importar markdownit desde 'markdown-it'// modo commonmarkconst md = markdownit('commonmark')// modo predeterminadoconst md = markdownit()// habilitar todoconst md = markdownit({ html: verdadero, vincular: verdadero, tipógrafo: verdadero})// lista de opciones completa (valores predeterminados)const md = markdownit({ // Habilitar etiquetas HTML en la fuente html: falso, // Utilice '/' para cerrar etiquetas individuales (<br />). // Esto es sólo para compatibilidad total con CommonMark. xhtmlOut: falso, // Convierte 'n' en párrafos en <br> saltos: falso, // Prefijo de lenguaje CSS para bloques vallados. puede ser // útil para resaltadores externos. langPrefix: 'idioma-', // Convierte automáticamente texto similar a una URL en enlaces vincular: falso, // Habilitar algún reemplazo neutral del idioma + embellecimiento de citas // Para obtener la lista completa de reemplazos, consulte https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs tipógrafo: falso, // Pares de reemplazo de comillas dobles + simples, cuando el tipógrafo está habilitado, // y comillas inteligentes en. Podría ser una cadena o una matriz. // // Por ejemplo, puedes usar '«»„“' para ruso, '„“‚'' para alemán, // y ['«xA0', 'xA0»', '‹xA0', 'xA0›'] para francés (incluido nbsp). citas: '""''', // Función resaltador. Debería devolver HTML escapado, // o '' si la cadena de origen no se cambia y se debe escapar externamente. // Si el resultado comienza con <pre... se omite el contenedor interno. resaltar: function (/*str, lang*/) { return ''; }});
importar markdownit desde 'markdown-it'const md = markdownit .use(complemento1) .use(complemento2, opciones, ...) .use(complemento3);
Aplique resaltado de sintaxis a bloques de código delimitados con la opción highlight
:
importar markdownit desde 'markdown-it'importar hljs desde 'highlight.js' // https://highlightjs.org// Valores predeterminados realesconst md = markdownit({ resaltar: función (str, idioma) {if (lang && hljs.getLanguage(lang)) { intente {return hljs.highlight(str, { idioma: idioma }).value; } captura (__) {}}retorno ''; // usar escape predeterminado externo }});
O con anulación completa del contenedor (si necesita asignar una clase a <pre>
o <code>
):
importar markdownit desde 'markdown-it'importar hljs desde 'highlight.js' // https://highlightjs.org// Valores predeterminados realesconst md = markdownit({ resaltar: función (str, idioma) {if (lang && hljs.getLanguage(lang)) { intentar {return '<pre><code class="hljs">' + hljs.highlight(str, { idioma: idioma, ignoreIllegals : verdadero }).valor + '</code></pre>'; } catch (__) {}}return '<pre><code class="hljs">' + md.utils.escapeHtml(str) + '</code></pre>'; }});
linkify: true
usa linkify-it. Para configurar linkify-it, acceda a la instancia de linkify a través de md.linkify
:
md.linkify.set({ fuzzyEmail: falso }); // desactiva la conversión de correo electrónico a enlace
Documentación API
Si va a escribir complementos, consulte la información de desarrollo.
Integrado (habilitado de forma predeterminada):
Tablas (GFM)
Tachado (GFM)
A través de complementos:
subíndice
sobrescrito
nota
lista de definiciones
abreviatura
emojis
contenedor personalizado
insertar
marca
... y otros
De forma predeterminada, todas las reglas están habilitadas, pero pueden restringirse mediante opciones. Al cargar el complemento, todas sus reglas se habilitan automáticamente.
importar markdownit desde 'markdown-it'// Activar/desactivar reglas, con curryingconst md = markdownit() .disable(['enlace', 'imagen']) .enable(['enlace']) .enable('image');// Habilitar todoconst md = markdownit({ html: verdadero, vincular: verdadero, tipógrafo: verdadero,});
Puedes encontrar todas las reglas en las fuentes:
parser_core.mjs
parser_block.mjs
parser_inline.mjs
Aquí está el resultado del análisis del archivo Léame en MB Pro Retina 2013 (2,4 GHz):
npm ejecuta benchmark-deps Léame de benchmark/benchmark.mjs Muestras seleccionadas: (1 de 28) > LÉAME Muestra: README.md (7774 bytes) > referencia de marca común x 1222 operaciones/seg ±0,96% (97 ejecuciones muestreadas) > actual x 743 operaciones/seg ±0,84% (97 ejecuciones muestreadas) > marca común actual x 1568 operaciones/seg ±0,84% (98 ejecuciones muestreadas) > marcado x 1587 operaciones/seg ±4,31 % (93 ejecuciones muestreadas)
Nota. La versión CommonMark se ejecuta con normalizadores de enlaces simplificados para una comparación más "honesta". La diferencia es ≈1,5×.
Como puede ver, markdown-it
no compensa la velocidad por su flexibilidad. Desaceleración de la versión "completa" causada por funciones adicionales que no están disponibles en otras implementaciones.
Disponible como parte de la suscripción Tidelift.
Los mantenedores de markdown-it
y miles de otros paquetes están trabajando con Tidelift para brindar soporte comercial y mantenimiento para las dependencias de código abierto que utiliza para crear sus aplicaciones. Ahorre tiempo, reduzca el riesgo y mejore la salud del código, mientras paga a los mantenedores de las dependencias exactas que utiliza. Obtenga más información.
Alex Kocharin github/rlidwka
Vitaly Puzrin github/puzrin
Markdown: es el resultado de la decisión de los autores que contribuyeron con el 99% del código de Remarkable de pasar a un proyecto con la misma autoría pero con un nuevo liderazgo (Vitaly y Alex). No es un tenedor.
Muchas gracias a John MacFarlane por su trabajo en las implementaciones de referencia y especificaciones de CommonMark. Su trabajo nos ahorró mucho tiempo durante el desarrollo de este proyecto.
Enlaces relacionados:
https://github.com/jgm/CommonMark: hace referencia a las implementaciones de CommonMark en C y JS; también contiene las últimas especificaciones y una demostración en línea.
http://talk.commonmark.org: foro CommonMark, un buen lugar para colaborar con los esfuerzos de los desarrolladores.
Puertos
movimiento-markdown-it - Ruby/RubyMotion
markdown-it-py-Python