flexmark-java es una implementación Java del analizador CommonMark (especificación 0.28) que utiliza los bloques primero, en línea después de la arquitectura de análisis Markdown.
Sus puntos fuertes son la velocidad, la flexibilidad, el elemento fuente Markdown basado en AST con detalles de la posición de la fuente hasta los caracteres individuales de los lexemas que componen el elemento y la extensibilidad.
La API permite un control granular del proceso de análisis y está optimizada para analizar con una gran cantidad de extensiones instaladas. El analizador y las extensiones vienen con muchas opciones para el comportamiento del analizador y variaciones de representación HTML. El objetivo final es que el analizador y el renderizador puedan imitar a otros analizadores con gran grado de precisión. Esto ahora está parcialmente completo con la implementación de Markdown Processor Emulation.
La motivación para este proyecto fue la necesidad de reemplazar el analizador pegdown en mi complemento Markdown Navigator para IDE de JetBrains. pegdown tiene un gran conjunto de características, pero su velocidad en general no es ideal y para entradas patológicas se bloquea o prácticamente se bloquea durante el análisis.
Para las versiones 0.62.2 o inferiores, Java 8 o superior, compatible con Java 9+. Para las versiones 0.64.0 o superiores, Java 11 o superiores.
El proyecto está en Maven: com.vladsch.flexmark
El núcleo no tiene más dependencias que org.jetbrains:annotations:24.0.1
. Para extensiones, consulte la descripción de la extensión a continuación.
La API todavía está evolucionando para adaptarse a nuevas extensiones y funcionalidades.
Para Maven, agregue flexmark-all
como una dependencia que incluye el núcleo y todos los módulos al siguiente ejemplo:
<dependencia> <groupId>com.vladsch.flexmark</groupId> <artifactId>flexmark-todo</artifactId> <versión>0.64.8</versión> </dependencia>
Fuente: BasicSample.java
paquete com.vladsch.flexmark.samples;importar com.vladsch.flexmark.util.ast.Node;importar com.vladsch.flexmark.html.HtmlRenderer;importar com.vladsch.flexmark.parser.Parser;importar com.vladsch.flexmark .util.data.MutableDataSet; clase pública BasicSample { vacío estático público main(String[] args) { Opciones de MutableDataSet = nuevo MutableDataSet(); // descomentar para establecer extensiones opcionales //options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), StrikethroughExtension.create())); // descomentar para convertir pausas suaves en pausas duras //options.set(HtmlRenderer.SOFT_BREAK, "<br />n"); Analizador analizador = Parser.builder(opciones).build(); Renderizador HtmlRenderer = HtmlRenderer.builder(opciones).build(); // Puedes reutilizar instancias de analizador y renderizador Node document = parser.parse("This is *Sparta*"); Cadena html = renderer.render(documento); // "<p>Esto es <em>Esparta</em></p>n" System.out.println(html); } }
implementación 'com.vladsch.flexmark:flexmark-all:0.64.8'
Configuraciones adicionales debido a archivos duplicados:
opciones de embalaje { excluir 'META-INF/LICENCIA-LGPL-2.1.txt' excluir 'META-INF/LICENCIA-LGPL-3.txt' excluir 'META-INF/LICENCIA-W3C-TEST' excluir 'META-INF/DEPENDENCIAS'}
Puede encontrar más información en la documentación:
Wiki Inicio Ejemplos de uso Detalles de extensión Extensiones de escritura
La clase PegdownOptionsAdapter
convierte los indicadores pegdown Extensions.*
en opciones de flexmark y lista de extensiones. Pegdown Extensions.java
se incluye por conveniencia y hay nuevas opciones que no se encuentran en pegdown 1.6.0. Estos se encuentran en el módulo flexmark-profile-pegdown
, pero puede obtener la fuente de este repositorio: PegdownOptionsAdapter.java, Extensions.java y crear su propia versión, modificada según las necesidades de su proyecto.
Puede pasar sus indicadores de extensión a PegdownOptionsAdapter.flexmarkOptions(int)
estático o puede crear una instancia PegdownOptionsAdapter
y usar métodos convenientes para configurar, agregar y eliminar indicadores de extensión. PegdownOptionsAdapter.getFlexmarkOptions()
devolverá una copia nueva de DataHolder
cada vez con las opciones reflejando los indicadores de extensión pegdown.
importar com.vladsch.flexmark.html.HtmlRenderer;importar com.vladsch.flexmark.parser.Parser;importar com.vladsch.flexmark.profile.pegdown.Extensions;importar com.vladsch.flexmark.profile.pegdown.PegdownOptionsAdapter;importar com .vladsch.flexmark.util.data.DataHolder;clase pública PegdownOptions {OPCIONES de soporte de datos estáticas privadas finales = PegdownOptionsAdapter.flexmarkOptions( Extensions.ALL ); Analizador final estático PARSER = Parser.builder(OPCIONES).build(); HtmlRenderer final estático RENDERER = HtmlRenderer.builder(OPCIONES).build(); // usa PARSER para analizar y RENDERER para renderizar con compatibilidad pegdown}
La emulación predeterminada de flexmark-java pegdown utiliza un análisis de bloques HTML menos estricto que interrumpe un bloque HTML en una línea en blanco. Pegdown solo interrumpe un bloque HTML en una línea en blanco si todas las etiquetas del bloque HTML están cerradas.
Para acercarse al comportamiento de análisis de bloques HTML original, utilice el método que toma un argumento boolean strictHtml
:
importar com.vladsch.flexmark.html.HtmlRenderer;importar com.vladsch.flexmark.parser.Parser;importar com.vladsch.flexmark.profile.pegdown.Extensions;importar com.vladsch.flexmark.profile.pegdown.PegdownOptionsAdapter;importar com .vladsch.flexmark.util.data.DataHolder;clase pública PegdownOptions {OPCIONES de soporte de datos estáticas privadas finales = PegdownOptionsAdapter.flexmarkOptions(true, Extensions.ALL ); Analizador final estático PARSER = Parser.builder(OPCIONES).build(); HtmlRenderer final estático RENDERER = HtmlRenderer.builder(OPCIONES).build(); // usa PARSER para analizar y RENDERER para renderizar con compatibilidad pegdown}
También está disponible una muestra con un solucionador de enlaces personalizado, que incluye un solucionador de enlaces para cambiar las URL o los atributos de los enlaces y un procesador de nodos personalizado si necesita anular el HTML del enlace generado.
flexmark-java tiene muchas más extensiones y opciones de configuración que pegdown además de las extensiones disponibles en pegdown 1.6.0. Extensiones disponibles a través de PegdownOptionsAdapter
Importante reorganización y limpieza de código de la implementación en la versión 0.60.0, consulte Versión-0.60.0-Cambios. Gracias al excelente trabajo de Alex Karezin, puede obtener una descripción general de las dependencias de los módulos con la capacidad de profundizar en paquetes y clases.
Fusione API para fusionar varios documentos de rebajas en un solo documento.
Extensión Docx Renderer: Manejo de nodos de atributos limitados
Módulo extensible de conversión de HTML a Markdown: flexmark-html2md-converter. Ejemplo: HtmlToMarkdownCustomizedSample.java
Compatibilidad del módulo Java9+
Referencias enumeradas compuestas Referencias enumeradas Extensión para crear numeración legal para elementos y encabezados.
Extensión de macros para permitir que se inserte contenido de rebajas arbitrario como bloque o elementos en línea, lo que permite utilizar elementos de bloque donde la sintaxis solo permite elementos en línea.
GitLab Flavored Markdown para analizar y renderizar extensiones de Markdown de GitLab.
Módulo OSGi cortesía de Dan Klco (GitHub @klcodanr)
Etiquetas de medios La extensión del transformador de enlaces de medios, cortesía de Cornelia Schultz (GitHub @CorneliaXaos), transforma enlaces utilizando prefijos personalizados en etiquetas HTML5 de audio, inserción, imagen y video.
API de ayuda de traducción para facilitar la traducción de documentos con rebajas.
Advertencia Para crear contenido lateral con estilo de bloque. Para obtener la documentación completa, consulte la extensión Admonition, Material para la documentación de MkDocs.
Referencia enumerada para crear referencias enumeradas para figuras, tablas y otros elementos de rebajas.
Atributos para analizar atributos de la forma {name name=value name='value' name="value" #id .class-name}
atributos.
YouTube Embedded Link Transformer gracias a Vyacheslav N. Boyko (GitHub @bvn13) transforma enlaces simples a videos de YouTube en iframe HTML de video incrustado.
Docx Converter usando la biblioteca docx4j. Cómo utilizar: Muestra de DocxConverter, cómo personalizar: Personalización de Docx Rendering
El desarrollo de este módulo fue patrocinado por Johner Institut GmbH.
Actualice la biblioteca para que sea compatible con CommonMark (especificación 0.28) y agregue ParserEmulationProfile.COMMONMARK_0_27
y ParserEmulationProfile.COMMONMARK_0_28
para permitir seleccionar opciones de versión de especificación específicas.
API de representación de nodos personalizados con capacidad para invocar la representación estándar para un nodo anulado, lo que permite representaciones de nodos personalizados que solo manejan casos especiales y permiten que el resto se represente como de costumbre. solucionador de enlaces personalizado
Extensiones Gfm-Issues y Gfm-Users para analizar y representar #123
y @user-name
respectivamente.
Opción de análisis profundo de bloques HTML para un mejor manejo de etiquetas de texto sin formato que vienen después de otras etiquetas y para compatibilidad con el análisis de bloques HTML vinculados.
Módulo flexmark-all
que incluye: núcleo, todas las extensiones, formateador, conversores JIRA y YouTrack, módulo de perfil pegdown y conversión de HTML a Markdown.
Módulo de salida de PDF Salida de PDF usando Open HTML To PDF
Tipográfica implementada
Extensión de macros XWiki
Etiquetas de Jekyll
HTML para rebajar
Complemento generador de páginas de rebajas de Maven
Módulo Markdown Formatter para generar AST como descuento con opciones de formato.
Tablas para Markdown Formatter con ancho de columna y alineación de tablas de Markdown:
Aporte | Producción |
---|---|
day|time|spent :---|:---:|--: nov. 2. tue|10:00|4h 40m nov. 3. thu|11:00|4h nov. 7. mon|10:20|4h 20m total:|| 13h | | day | time | spent | |:------------|:-----:|--------:| | nov. 2. tue | 10:00 | 4h 40m | | nov. 3. thu | 11:00 | 4h | | nov. 7. mon | 10:20 | 4h 20m | | total: || 13h | |
Utilizo flexmark-java como analizador del complemento Markdown Navigator para IDE de JetBrains. Tiendo a utilizar la última versión inédita para corregir errores u obtener mejoras. Entonces, si encuentra un error que impide su proyecto o ve un error en la página de problemas de github marcado fixed for next release
que está afectando su proyecto, hágamelo saber y es posible que pueda realizar una nueva versión de inmediato para solucionarlo. tu problema. De lo contrario, dejaré que se acumulen correcciones de errores y mejoras pensando que nadie se ve afectado por lo que ya está solucionado.
Hay muchas opciones de extensión en la API con su uso previsto. Un buen comienzo suave es el módulo flexmark-java-samples
que tiene ejemplos simples para las extensiones solicitadas. El siguiente mejor lugar es la fuente de una extensión existente que tenga una sintaxis similar a la que desea agregar.
Si su extensión se alinea con la API correcta, la tarea suele ser muy breve y sencilla. Si su extensión usa la API de manera no intencionada o no sigue los protocolos de limpieza esperados, puede resultarle una batalla cuesta arriba con un nido de ratas de manejo de condiciones if/else y corrección de un error que solo conduce a la creación de otro.
Generalmente, si se necesitan más de unas pocas docenas de líneas para agregar una extensión simple, entonces o lo está haciendo mal o a la API le falta un punto de extensión. Si observa todas las extensiones implementadas, verá que la mayoría son unas pocas líneas de código distintas al texto estándar dictado por la API. Ese es el objetivo de esta biblioteca: proporcionar un núcleo extensible que facilite la escritura de extensiones.
Las extensiones más grandes son flexmark-ext-tables
y flexmark-ext-spec-example
, la esencia de ambas es alrededor de 200 líneas de código. Puede utilizarlos como guía para estimar el tamaño de su extensión.
Mi propia experiencia al agregar extensiones muestra que a veces es mejor abordar un nuevo tipo de extensión con una mejora de la API para que su implementación sea perfecta, o corrigiendo un error que no era visible antes de que la extensión enfatizara la API de la manera correcta. Su extensión prevista puede ser la que requiera dicho enfoque.
La conclusión es: si desea implementar una extensión o una función, no dude en abrir un problema y le daré sugerencias sobre la mejor manera de hacerlo. Puede ahorrarle mucho tiempo al permitirme mejorar la API para abordar las necesidades de su extensión antes de que le ponga mucho esfuerzo infructuoso.
Le pido que se dé cuenta de que soy el jefe de cocina y el lavado de botellas en este proyecto, sin un ápice de habilidades de Vulcan Mind Melding. Le pido que describa lo que desea implementar porque no puedo leer su mente. Por favor, haga un poco de trabajo de reconocimiento en torno al código fuente y la documentación porque no puedo transferirle lo que sé sin su esfuerzo voluntario.
Si tiene una aplicación comercial y no desea escribir las extensiones usted mismo o desea reducir el tiempo y el esfuerzo de implementar extensiones e integrar flexmark-java, no dude en contactarme. Estoy disponible en forma de consultoría/contratación.
A pesar de su nombre, commonmark no es ni un superconjunto ni un subconjunto de otros tipos de rebajas. Más bien, propone una especificación de sintaxis estándar e inequívoca para el Markdown "central" original, introduciendo así efectivamente otro sabor más. Si bien flexmark es compatible de forma predeterminada con commonmark, su analizador se puede modificar de varias maneras. Los conjuntos de ajustes necesarios para emular los analizadores de rebajas más utilizados están disponibles en flexmark como ParserEmulationProfiles
.
Como lo implica el nombre ParserEmulationProfile
, es solo el analizador el que se ajusta al tipo de rebajas específico. La aplicación del perfil no agrega funciones más allá de las disponibles en commonmark. Si desea utilizar flexmark para emular completamente el comportamiento de otro procesador de rebajas, debe ajustar el analizador y configurar las extensiones de flexmark que proporcionan las funciones adicionales disponibles en el analizador que desea emular.
Se completó una reescritura del analizador de listas para controlar mejor la emulación de otros procesadores Markdown según la emulación de procesadores Markdown. La adición de ajustes preestablecidos del procesador para emular el comportamiento de procesamiento de rebajas específico de estos analizadores se encuentra en una breve lista de tareas pendientes.
Algunas familias de emulación hacen un mejor trabajo al emular a su objetivo que otras. La mayor parte del esfuerzo se dirigió a emular cómo estos procesadores analizan Markdown estándar y enumeran específicamente el análisis relacionado. Para los procesadores que extienden Markdown original, deberá agregar aquellas extensiones que ya están implementadas en flexmark-java a las opciones del generador Parser/Renderer.
Las extensiones se modificarán para incluir sus propios ajustes preestablecidos para la emulación de un procesador específico, si ese procesador tiene implementada una extensión equivalente.
Si encuentra una discrepancia, abra un problema para poder solucionarlo.
Se implementan las principales familias de procesadores y algunos miembros de la familia también:
Jekyll
CommonMark para la última especificación implementada, actualmente CommonMark (especificación 0.28)
Liga/Marca común
CommonMark (especificación 0.27) para compatibilidad de versiones específicas
CommonMark (especificación 0.28) para compatibilidad de versiones específicas
Comentarios de GitHub
Markdown.pl
Rebaja adicional de PHP
GitHub Docs (antiguo analizador de rebajas de GitHub)
Kramdown
Sangría fija
Rebajas múltiples
pegado
En 0.11.0 se agregaron perfiles para encapsular detalles de configuración para variantes dentro de la familia:
CommonMark (predeterminado para la familia): ParserEmulationProfile.COMMONMARK
FixIndent (predeterminado para la familia): ParserEmulationProfile.FIXED_INDENT
Comentarios de GitHub (solo CommonMark): ParserEmulationProfile.COMMONMARK
Documentos antiguos de GitHub: ParserEmulationProfile.GITHUB_DOC
Kramdown (predeterminado para la familia): ParserEmulationProfile.KRAMDOWN
Markdown.pl (predeterminado para la familia): ParserEmulationProfile.MARKDOWN
MultiMarkdown: ParserEmulationProfile.MULTI_MARKDOWN
Pegdown, con extensiones de pegdown use PegdownOptionsAdapter
en flexmark-profile-pegdown
Pegdown, sin extensiones de pegdown ParserEmulationProfile.PEGDOWN
Reglas de análisis de bloques HTML de Pegdown, sin extensiones de Pegdown ParserEmulationProfile.PEGDOWN_STRICT
flexmark-java es una bifurcación del proyecto commonmark-java, modificado para generar un AST que refleja todos los elementos en la fuente original, seguimiento completo de la posición de la fuente para todos los elementos en el AST y una generación más sencilla de JetBrains Open API PsiTree.
La API se cambió para permitir un control más granular del proceso de análisis y se optimizó para analizar con una gran cantidad de extensiones instaladas. El analizador y las extensiones vienen con muchas opciones de ajuste para el comportamiento del analizador y variaciones de representación HTML. El objetivo final es que el analizador y el renderizador puedan imitar a otros analizadores con gran grado de precisión.
La motivación para esto fue la necesidad de reemplazar el analizador pegdown en el complemento Markdown Navigator. pegdown tiene un gran conjunto de características, pero su velocidad en general no es la ideal y para entradas patológicas se bloquea o prácticamente se bloquea durante el análisis.
commonmark-java tiene una excelente arquitectura de análisis que es fácil de entender y ampliar. El objetivo era garantizar que agregar el seguimiento de la posición de la fuente en el AST no cambiara la facilidad de análisis y generación del AST más de lo absolutamente necesario.
Las razones para elegir commonmark-java como analizador son: velocidad, facilidad de comprensión, facilidad de extensión y velocidad. Ahora que he modificado el núcleo y añadido algunas extensiones, estoy muy satisfecho con mi elección.
Otro objetivo era mejorar la capacidad de las extensiones para modificar el comportamiento del analizador para que cualquier dialecto de rebajas pudiera implementarse a través del mecanismo de extensión. Se agregó una API de opciones extensibles para permitir la configuración de todas las opciones en un solo lugar. El analizador, el renderizador y las extensiones utilizan estas opciones para la configuración, incluida la desactivación de algunos analizadores de bloques principales.
Este es un trabajo en progreso con muchos cambios de API. No se hace ningún intento de mantener la compatibilidad de API con versiones anteriores del proyecto original y hasta que el conjunto de funciones esté prácticamente completo, ni siquiera con versiones anteriores de este proyecto.
Característica | flexmark-java | marca común-java | pegado |
---|---|---|---|
Tiempo de análisis relativo (menos es mejor) | 1x (1) | 0,6x a 0,7x (2) | 25x promedio, 20,000x a ∞ para entrada patológica (3) |
Todos los elementos fuente en el AST | |||
Elementos AST con posición de origen. | con algunos errores e idiosincrasias | ||
AST se puede manipular fácilmente | El posprocesamiento AST es un mecanismo de extensión | El posprocesamiento AST es un mecanismo de extensión | no es una opción. No hay información principal del nodo, los hijos como Lista<>. |
Los elementos AST tienen una posición de origen detallada para todas las partes. | solo inicio/fin de nodo | ||
Puede deshabilitar las funciones principales de análisis | |||
Analizador central implementado a través de la extensión API | pruebas instanceOf de para analizadores de bloques y clases de nodos específicos | El núcleo expone algunos puntos de extensión. | |
Implementación del analizador fácil de entender y modificar | un analizador PEG con interacciones complejas (3) | ||
El análisis de elementos de bloque es independiente entre sí. | todo en una gramática PEG | ||
Configuración uniforme en: analizador, renderizador y todas las extensiones | ninguno más allá de la lista de extensiones | indicadores de bits int para el núcleo, ninguno para las extensiones | |
Rendimiento de análisis optimizado para su uso con extensiones | analizando el rendimiento para el núcleo, las extensiones hacen lo que pueden | el rendimiento no es una característica | |
Funciones ricas con muchas opciones de configuración y extensiones listas para usar | extensiones limitadas, sin opciones | ||
Definiciones de dependencia para procesadores para garantizar el orden correcto de procesamiento | orden especificado por el orden de la lista de extensiones, propenso a errores | no aplicable, el núcleo define dónde se agrega el procesamiento de extensión |
entrada patológica flexmark-java de 100.000 [
análisis en 68 ms, 100.000 ]
en 57 ms, 100.000 análisis anidados [
]
en 55 ms
entrada patológica commonmark-java de 100.000 [
análisis en 30 ms, 100.000 ]
en 30 ms, 100.000 análisis anidados [
]
en 43 ms
entrada patológica vinculada de 17 [
análisis en 650 ms, 18 [
en 1300 ms
Las opciones del analizador, los elementos marcados como elementos de tarea deben implementarse, el resto está completo:
Listas sueltas manuales
Las listas numeradas siempre comienzan con 1.
Se corrigió la sangría de los elementos de la lista, los elementos deben tener una sangría de al menos 4 espacios
Opción de inicio de lista relajada, permite que las listas comiencen cuando no están precedidas por una línea en blanco.
Tema frontal de Jekyll
Elementos de etiqueta Jekyll, con soporte para {% include file %}
, incluye Markdown y contenido de archivo HTML
Codificación de URL del enlace de GitBook. No aplicable
Nodos de comentarios HTML: bloque y en línea
URL de imágenes de varias líneas
Elemento de ejemplo de especificación
HTML en línea: todo, no comentarios, comentarios
Bloques HTML: todos, no comentarios, comentarios
Abreviaturas
Notas a pie de página
Definiciones
Tabla de contenido
Tachado
Listas de tareas
Sin espacio de encabezado Atx
Sin sangrías de encabezado
Hard Wraps (logrado con la opción SOFT_BREAK cambiada a "<br />"
)
Opción de reglas de recursos humanos relajadas
Enlaces wiki
Bloques de código vallados
Enlaces de anclaje para encabezados con generación automática de identificación
Opción Table Spans que se implementará para la extensión de tablas
Enlaces Wiki con GitHub y sintaxis criolla
Atajos de emoji con la opción de URL de emoji de GitHub
Citas
Picardía
Tipográfico
Extensiones de GitHub
Sintaxis de GitHub
Publicación
Reprimir
Extensiones de procesador
Supresión de sintaxis común
Estoy muy satisfecho con la decisión de cambiar al analizador basado en commonmark-java para mis propios proyectos. Aunque tuve que realizar una cirugía mayor en sus entrañas para obtener un seguimiento completo de la posición de la fuente y un AST que coincida con los elementos de la fuente, es un placer trabajar con él y ahora es un placer ampliarlo. Si no necesita el elemento de nivel de origen AST o el resto de lo que agregó flexmark-java y CommonMark es su analizador de rebajas de destino, le recomiendo que utilice commonmark-java, ya que es una excelente opción para sus necesidades y su rendimiento no se ve afectado. por la sobrecarga de funciones que no utilizará.
Último, 28 de enero de 2017 flexmark-java 0.13.1, intellij-markdown de CE EAP 2017, commonmark-java 0.8.0:
Archivo | marca común-java | flexmark-java | rebajas intellij | pegado |
---|---|---|---|---|
LÉAME-LENTO | 0,420 ms | 0,812 ms | 2.027ms | 15.483ms |
VERSIÓN | 0,743 ms | 1,425 ms | 4,057 ms | 42,936 ms |
comúnMarkSpec | 31.025ms | 44,465 ms | 600,654 ms | 575,131 ms |
ejemplo_de_rebaja | 8.490ms | 10.502ms | 223,593 ms | 983,640 ms |
especulación | 4,719 ms | 6,249 ms | 35.883ms | 307,176 ms |
mesa | 0,229 ms | 0,623 ms | 0,800 ms | 3,642 ms |
formato de tabla | 1,385 ms | 2,881 ms | 4.150ms | 23.592ms |
envoltura | 3,804 ms | 4,589 ms | 16.609ms | 86.383ms |
Ratios de lo anterior:
Archivo | marca común-java | flexmark-java | rebajas intellij | pegado |
---|---|---|---|---|
LÉAME-LENTO | 1.00 | 1,93 | 4.83 | 36,88 |
VERSIÓN | 1.00 | 1,92 | 5.46 | 57,78 |
comúnMarkSpec | 1.00 | 1.43 | 19.36 | 18.54 |
ejemplo_de_rebaja | 1.00 | 1.24 | 26.34 | 115,86 |
especulación | 1.00 | 1.32 | 7.60 | 65.09 |
mesa | 1.00 | 2.72 | 3.49 | 15.90 |
formato de tabla | 1.00 | 2.08 | 3.00 | 17.03 |
envoltura | 1.00 | 1.21 | 4.37 | 22,71 |
en general | 1.00 | 1.41 | 17.47 | 40.11 |
Archivo | marca común-java | flexmark-java | rebajas intellij | pegado |
---|---|---|---|---|
LÉAME-LENTO | 0,52 | 1.00 | 2.50 | 19.07 |
VERSIÓN | 0,52 | 1.00 | 2,85 | 30.12 |
comúnMarkSpec | 0,70 | 1.00 | 13.51 | 12.93 |
ejemplo_de_rebaja | 0,81 | 1.00 | 21.29 | 93,66 |
especulación | 0,76 | 1.00 | 5.74 | 49.15 |
mesa | 0,37 | 1.00 | 1.28 | 5.85 |
formato de tabla | 0,48 | 1.00 | 1.44 | 8.19 |
envoltura | 0,83 | 1.00 | 3.62 | 18.83 |
en general | 0,71 | 1.00 | 12.41 | 28,48 |
Debido a que estos dos archivos representan la entrada patológica para la vinculación, ya no los ejecuto como parte del punto de referencia para evitar sesgar los resultados. Los resultados están aquí para la posteridad.
Archivo | marca común-java | flexmark-java | rebajas intellij | pegado |
---|---|---|---|---|
colgar-pegar | 0,082 ms | 0,326 ms | 0,342 ms | 659,138 ms |
colgar-pegdown2 | 0,048 ms | 0,235 ms | 0,198 ms | 1312,944 ms |
Ratios de lo anterior:
Archivo | marca común-java | flexmark-java | rebajas intellij | pegado |
---|---|---|---|---|
colgar-pegar | 1.00 | 3,98 | 4.17 | 8048.38 |
colgar-pegdown2 | 1.00 | 4.86 | 4.10 | 27207.32 |
en general | 1.00 | 4.30 | 4.15 | 15151.91 |
Archivo | marca común-java | flexmark-java | rebajas intellij | pegado |
---|---|---|---|---|
colgar-pegar | 0,25 | 1.00 | 1.05 | 2024.27 |
colgar-pegdown2 | 0,21 | 1.00 | 0,84 | 5594.73 |
en general | 0,23 | 1.00 | 0,96 | 3519.73 |
VERSION.md es el archivo de registro de versiones que uso para Markdown Navigator
commonMarkSpec.md es un archivo de 33k líneas utilizado en el conjunto de pruebas intellij-markdown para la evaluación del rendimiento.
spec.txt archivo de rebajas de especificaciones de commonmark en el proyecto commonmark-java
hang-pegdown.md es un archivo que contiene una sola línea de 17 caracteres [[[[[[[[[[[[[[[[[
lo que hace que pegdown entre en un tiempo de análisis hiperexponencial.
hang-pegdown2.md un archivo que contiene una sola línea de 18 caracteres [[[[[[[[[[[[[[[[[[
lo que hace que pegdown entre en un tiempo de análisis hiperexponencial.
wrap.md es un archivo que estaba usando para probar el ajuste al escribir el rendimiento solo para descubrir que no tiene nada que ver con el ajuste al escribir código cuando pegdown toma 0,1 segundos para analizar el archivo. En el complemento, el análisis puede realizarse más de una vez: paso del resaltador de sintaxis, paso de construcción del árbol psi, anotador externo.
markdown_example.md un archivo con más de 10.000 líneas que contienen más de 500 kB de texto.
Se aceptan solicitudes de extracción, problemas y comentarios. Para solicitudes de extracción:
Agregue pruebas para nuevas funciones y correcciones de errores, preferiblemente en el formato ast_spec.md
Siga el estilo existente para facilitar la fusión, en la medida de lo posible: sangría de 4 espacios, espacios finales recortados.
Copyright (c) 2015-2016 Atlassian y otros.
Copyright (c) 2016-2023, Vladimir Schneider,
Licencia BSD (2 cláusulas), consulte el archivo LICENSE.txt.