flexmark-java est une implémentation Java de l'analyseur CommonMark (spécification 0.28) utilisant d'abord les blocs, en ligne après l'architecture d'analyse Markdown.
Ses points forts sont la rapidité, la flexibilité, l'AST basé sur l'élément source Markdown avec des détails sur la position de la source jusqu'aux caractères individuels des lexèmes qui composent l'élément et l'extensibilité.
L'API permet un contrôle granulaire du processus d'analyse et est optimisée pour l'analyse avec un grand nombre d'extensions installées. L'analyseur et les extensions sont livrés avec de nombreuses options pour le comportement de l'analyseur et les variations de rendu HTML. L'objectif final est que l'analyseur et le moteur de rendu soient capables d'imiter d'autres analyseurs avec un grand degré de précision. Ceci est maintenant partiellement terminé avec la mise en œuvre de l'émulation du processeur Markdown.
La motivation pour ce projet était la nécessité de remplacer l'analyseur pegdown dans mon plugin Markdown Navigator pour les IDE JetBrains. pegdown a un excellent ensemble de fonctionnalités, mais sa vitesse en général est loin d'être idéale et pour les entrées pathologiques, elle se bloque ou se bloque pratiquement pendant l'analyse.
Pour les versions 0.62.2 ou inférieures, Java 8 ou supérieure, compatible Java 9+. Pour les versions 0.64.0 ou supérieure, Java 11 ou supérieure.
Le projet est sur Maven : com.vladsch.flexmark
Le noyau n'a aucune dépendance autre que org.jetbrains:annotations:24.0.1
. Pour les extensions, voir la description de l'extension ci-dessous.
L'API continue d'évoluer pour s'adapter à de nouvelles extensions et fonctionnalités.
Pour Maven, ajoutez flexmark-all
en tant que dépendance incluant le noyau et tous les modules à l'exemple suivant :
<dépendance> <groupId>com.vladsch.flexmark</groupId> <artifactId>flexmark-all</artifactId> <version>0.64.8</version> </dépendance>
Source : BasicSample.java
package com.vladsch.flexmark.samples; importer com.vladsch.flexmark.util.ast.Node; importer com.vladsch.flexmark.html.HtmlRenderer; importer com.vladsch.flexmark.parser.Parser; importer com.vladsch.flexmark .util.data.MutableDataSet;public class BasicSample { public static void main(String[] args) { Options MutableDataSet = new MutableDataSet(); // Décommentez pour définir des extensions facultatives //options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), StrikethroughExtension.create())); // décommentez pour convertir les pauses logicielles en pauses strictes //options.set(HtmlRenderer.SOFT_BREAK, "<br />n"); Analyseur parser = Parser.builder(options).build(); Moteur de rendu HtmlRenderer = HtmlRenderer.builder(options).build(); // Vous pouvez réutiliser les instances d'analyseur et de rendu Node document = parser.parse("This is *Sparta*"); Chaîne html = renderer.render(document); // "<p>Voici <em>Sparte</em></p>n" System.out.println(html); } }
implémentation 'com.vladsch.flexmark:flexmark-all:0.64.8'
Paramètres supplémentaires en raison de fichiers en double :
options d'emballage { exclure 'META-INF/LICENSE-LGPL-2.1.txt' exclure 'META-INF/LICENSE-LGPL-3.txt' exclure 'META-INF/LICENSE-W3C-TEST' exclure 'META-INF/DÉPENDANCES'}
Plus d’informations peuvent être trouvées dans la documentation :
Accueil Wiki Exemples d'utilisation Détails de l'extension Écriture d'extensions
La classe PegdownOptionsAdapter
convertit les indicateurs pegdown Extensions.*
en options flexmark et liste d'extensions. Pegdown Extensions.java
est inclus pour plus de commodité et de nouvelles options introuvables dans pegdown 1.6.0. Ceux-ci se trouvent dans le module flexmark-profile-pegdown
mais vous pouvez récupérer la source de ce dépôt : PegdownOptionsAdapter.java, Extensions.java et créer votre propre version, modifiée selon les besoins de votre projet.
Vous pouvez transmettre vos indicateurs d'extension à PegdownOptionsAdapter.flexmarkOptions(int)
statique ou vous pouvez instancier PegdownOptionsAdapter
et utiliser des méthodes pratiques pour définir, ajouter et supprimer des indicateurs d'extension. PegdownOptionsAdapter.getFlexmarkOptions()
renverra à chaque fois une nouvelle copie de DataHolder
avec les options reflétant les indicateurs d'extension pegdown.
importer com.vladsch.flexmark.html.HtmlRenderer; importer com.vladsch.flexmark.parser.Parser; importer com.vladsch.flexmark.profile.pegdown.Extensions; importer com.vladsch.flexmark.profile.pegdown.PegdownOptionsAdapter; importer com .vladsch.flexmark.util.data.DataHolder;classe publique PegdownOptions { final privé statique DataHolder OPTIONS = PegdownOptionsAdapter.flexmarkOptions (Extensions.ALL ); Analyseur final statique PARSER = Parser.builder(OPTIONS).build(); statique final HtmlRenderer RENDERER = HtmlRenderer.builder(OPTIONS).build(); // utilise PARSER pour analyser et RENDERER pour effectuer le rendu avec compatibilité pegdown}
L'émulation pegdown flexmark-java par défaut utilise une analyse de bloc HTML moins stricte qui interrompt un bloc HTML sur une ligne vide. Pegdown n'interrompt un bloc HTML sur une ligne vide que si toutes les balises du bloc HTML sont fermées.
Pour vous rapprocher du comportement original d'analyse des blocs HTML, utilisez la méthode qui prend un argument boolean strictHtml
:
importer com.vladsch.flexmark.html.HtmlRenderer; importer com.vladsch.flexmark.parser.Parser; importer com.vladsch.flexmark.profile.pegdown.Extensions; importer com.vladsch.flexmark.profile.pegdown.PegdownOptionsAdapter; importer com .vladsch.flexmark.util.data.DataHolder;classe publique PegdownOptions { final privé statique DataHolder OPTIONS = PegdownOptionsAdapter.flexmarkOptions (true, Extensions.ALL ); Analyseur final statique PARSER = Parser.builder(OPTIONS).build(); statique final HtmlRenderer RENDERER = HtmlRenderer.builder(OPTIONS).build(); // utilise PARSER pour analyser et RENDERER pour effectuer le rendu avec compatibilité pegdown}
Un exemple avec un résolveur de liens personnalisé est également disponible, qui inclut un résolveur de liens pour modifier les URL ou les attributs des liens et un moteur de rendu de nœud personnalisé si vous devez remplacer le HTML du lien généré.
flexmark-java a beaucoup plus d'extensions et d'options de configuration que pegdown en plus des extensions disponibles dans pegdown 1.6.0. Extensions disponibles via PegdownOptionsAdapter
Réorganisation majeure et nettoyage du code de l'implémentation dans la version 0.60.0, voir Version-0.60.0-Changements grâce à l'excellent travail d'Alex Karezin, vous pouvez obtenir un aperçu des dépendances des modules avec la possibilité d'explorer les packages et les classes.
API de fusion pour fusionner plusieurs documents markdown en un seul document.
Extension Docx Renderer : gestion des nœuds d'attributs limités
Module de conversion HTML vers Markdown extensible : flexmark-html2md-converter. Exemple : HtmlToMarkdownCustomizedSample.java
Compatibilité des modules Java9+
Références énumérées composées Références énumérées Extension permettant de créer une numérotation légale pour les éléments et les titres.
Extension de macros pour permettre d'insérer du contenu de démarque arbitraire en tant qu'éléments de bloc ou en ligne, permettant d'utiliser des éléments de bloc là où seuls les éléments en ligne sont autorisés par la syntaxe.
GitLab Flavored Markdown pour l'analyse et le rendu des extensions de démarque GitLab.
Module OSGi avec l'aimable autorisation de Dan Klco (GitHub @klcodanr)
Balises multimédias L'extension de transformateur de lien multimédia, gracieuseté de Cornelia Schultz (GitHub @CorneliaXaos), transforme les liens à l'aide de préfixes personnalisés en balises HTML5 audio, intégrées, image et vidéo.
API Translation Helper pour faciliter la traduction de documents markdown.
Admonition Pour créer du contenu secondaire de style bloc. Pour une documentation complète, veuillez consulter la documentation Admonition Extension, Material for MkDocs.
Référence énumérée pour créer des références énumérées pour les figures, les tableaux et autres éléments de démarque.
Attributs pour analyser les attributs de la forme {name name=value name='value' name="value" #id .class-name}
attributs.
YouTube Embedded Link Transformer grâce à Vyacheslav N. Boyko (GitHub @bvn13) transforme des liens simples vers des vidéos YouTube en HTML iframe vidéo intégré.
Docx Converter utilisant la bibliothèque docx4j. Comment utiliser : exemple DocxConverter, comment personnaliser : personnalisation du rendu Docx
Le développement de ce module a été sponsorisé par Johner Institut GmbH.
Mettez à jour la bibliothèque pour qu'elle soit conforme à CommonMark (spécification 0.28) et ajoutez ParserEmulationProfile.COMMONMARK_0_27
et ParserEmulationProfile.COMMONMARK_0_28
pour permettre la sélection d'options de version de spécification spécifiques.
API de rendu de nœud personnalisé avec possibilité d'invoquer le rendu standard pour un nœud remplacé, permettant des rendus de nœuds personnalisés qui ne gèrent que des cas spéciaux et permettent au reste d'être rendu comme d'habitude. résolveur de liens personnalisé
Extensions Gfm-Issues et Gfm-Users pour l'analyse et le rendu respectivement #123
et @user-name
.
Option d'analyse approfondie des blocs HTML pour une meilleure gestion des balises de texte brut qui viennent après d'autres balises et pour la compatibilité de l'analyse des blocs HTML pegdown.
Module flexmark-all
qui comprend : le noyau, toutes les extensions, le formateur, les convertisseurs JIRA et YouTrack, le module de profil pegdown et la conversion HTML vers Markdown.
Module de sortie PDF Sortie PDF à l'aide d'Open HTML To PDF
Typographie mise en œuvre
Extension de macros XWiki
Jekyll Tags
HTML vers démarque
Plugin générateur de pages Maven Markdown
Module Markdown Formatter pour générer AST sous forme de démarque avec des options de formatage.
Tableaux pour Markdown Formatter avec largeur de colonne et alignement des tableaux de démarques :
Saisir | Sortir |
---|---|
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 | |
J'utilise flexmark-java comme analyseur pour le plugin Markdown Navigator pour les IDE JetBrains. J'ai tendance à utiliser la dernière version inédite pour corriger des bugs ou obtenir des améliorations. Donc, si vous trouvez un bogue qui gêne votre projet ou si vous voyez un bogue dans la page des problèmes de Github marqué fixed for next release
qui affecte votre projet, veuillez me le faire savoir et je pourrai peut-être rapidement créer une nouvelle version pour y remédier. votre problème. Sinon, je laisserai les corrections de bugs et les améliorations s’accumuler en pensant que personne n’est affecté par ce qui est déjà corrigé.
Il existe de nombreuses options d'extension dans l'API avec leur utilisation prévue. Un bon démarrage progressif est le module flexmark-java-samples
qui contient des exemples simples pour les extensions demandées. Le deuxième meilleur endroit est la source d’une extension existante dont la syntaxe est similaire à celle que vous souhaitez ajouter.
Si votre extension correspond à la bonne API, la tâche est généralement très courte et simple. Si votre extension utilise l'API de manière involontaire ou ne suit pas les protocoles de maintenance attendus, vous pourriez trouver une bataille difficile avec un nid de rats de gestion des conditions if/else et la correction d'un bug ne conduisant qu'à en créer un autre.
Généralement, s'il faut plus de quelques dizaines de lignes pour ajouter une extension simple, soit vous vous y prenez mal, soit il manque un point d'extension à l'API. Si vous regardez toutes les extensions implémentées, vous verrez que la plupart sont quelques lignes de code autres que le passe-partout dicté par l'API. C'est l'objectif de cette bibliothèque : fournir un noyau extensible qui facilite l'écriture d'extensions.
Les extensions les plus grandes sont flexmark-ext-tables
et flexmark-ext-spec-example
, la substance des deux est d'environ 200 lignes de code. Vous pouvez les utiliser comme guide pour estimer la taille de votre extension.
Ma propre expérience en matière d'ajout d'extensions montre que parfois, il est préférable de traiter un nouveau type d'extension en améliorant l'API pour rendre sa mise en œuvre transparente, ou en corrigeant un bug qui n'était pas visible avant que l'extension ne stresse l'API de la bonne manière. L'extension que vous envisagez est peut-être celle qui nécessite une telle approche.
Ce qu'il faut retenir : si vous souhaitez implémenter une extension ou une fonctionnalité, n'hésitez pas à ouvrir un ticket et je vous donnerai des indications sur la meilleure façon de procéder. Cela peut vous faire gagner beaucoup de temps en me permettant d'améliorer l'API pour répondre aux besoins de votre extension avant d'y consacrer beaucoup d'efforts infructueux.
Je vous demande de réaliser que je suis le chef cuisinier et le laveur de bouteilles sur ce projet, sans un iota de compétences en Vulcan Mind Melding. Je vous demande de décrire ce que vous souhaitez mettre en œuvre car je ne peux pas lire dans vos pensées. Veuillez effectuer un travail de reconnaissance autour du code source et de la documentation, car je ne peux pas vous transférer ce que je sais, sans votre volonté.
Si vous avez une application commerciale et que vous ne souhaitez pas écrire la ou les extensions vous-même ou si vous souhaitez réduire le temps et les efforts liés à la mise en œuvre des extensions et à l'intégration de flexmark-java, n'hésitez pas à me contacter. Je suis disponible sur une base de conseil/contrat.
Malgré son nom, Commonmark n'est ni un sur-ensemble ni un sous-ensemble d'autres saveurs de démarque. Au lieu de cela, il propose une spécification de syntaxe standard et sans ambiguïté pour le Markdown original « de base », introduisant ainsi effectivement encore une autre saveur. Bien que flexmark soit par défaut conforme à commonmark, son analyseur peut être modifié de différentes manières. Les ensembles de réglages nécessaires pour émuler les analyseurs de démarques les plus couramment utilisés sont disponibles dans flexmark sous le nom ParserEmulationProfiles
.
Comme son nom ParserEmulationProfile
l'indique, seul l'analyseur est ajusté au type de démarque spécifique. L'application du profil n'ajoute pas de fonctionnalités au-delà de celles disponibles dans commonmark. Si vous souhaitez utiliser flexmark pour émuler entièrement le comportement d'un autre processeur de démarque, vous devez ajuster l'analyseur et configurer les extensions flexmark qui fournissent les fonctionnalités supplémentaires disponibles dans l'analyseur que vous souhaitez émuler.
Une réécriture de l'analyseur de liste pour mieux contrôler l'émulation d'autres processeurs de démarque selon l'émulation des processeurs de démarque est terminée. L'ajout de préréglages de processeur pour émuler le comportement de traitement de démarque spécifique de ces analyseurs figure sur une courte liste de choses à faire.
Certaines familles d’émulation réussissent mieux que d’autres à émuler leur cible. La plupart des efforts visaient à émuler la manière dont ces processeurs analysent spécifiquement le Markdown standard et l'analyse liée aux listes. Pour les processeurs qui étendent Markdown d'origine, vous devrez ajouter les extensions déjà implémentées dans flexmark-java aux options du générateur Parser/Renderer.
Les extensions seront modifiées pour inclure leurs propres préréglages pour l'émulation de processeur spécifique, si ce processeur a une extension équivalente implémentée.
Si vous constatez une anomalie, veuillez ouvrir un problème afin qu'il puisse être résolu.
Les principales familles de processeurs sont implémentées et certains membres de la famille également :
Jekyll
CommonMark pour la dernière spécification implémentée, actuellement CommonMark (spécification 0.28)
Ligue/Marque Commune
CommonMark (spécification 0.27) pour une compatibilité de version spécifique
CommonMark (spécification 0.28) pour une compatibilité de version spécifique
Commentaires sur GitHub
Markdown.pl
Php Markdown supplémentaire
GitHub Docs (ancien analyseur de démarques GitHub)
Kramdown
Retrait Fixe
MultiMarkdown
Pegdown
des profils pour encapsuler les détails de configuration des variantes au sein de la famille ont été ajoutés dans la version 0.11.0 :
CommonMark (par défaut pour la famille) : ParserEmulationProfile.COMMONMARK
FixedIndent (par défaut pour la famille) : ParserEmulationProfile.FIXED_INDENT
Commentaires GitHub (juste CommonMark) : ParserEmulationProfile.COMMONMARK
Anciens documents GitHub : ParserEmulationProfile.GITHUB_DOC
Kramdown (par défaut pour la famille) : ParserEmulationProfile.KRAMDOWN
Markdown.pl (par défaut pour la famille) : ParserEmulationProfile.MARKDOWN
MultiMarkdown : ParserEmulationProfile.MULTI_MARKDOWN
Pegdown, avec les extensions pegdown, utilisez PegdownOptionsAdapter
dans flexmark-profile-pegdown
Pegdown, sans extensions pegdown ParserEmulationProfile.PEGDOWN
Règles d'analyse des blocs HTML Pegdown, sans extensions Pegdown ParserEmulationProfile.PEGDOWN_STRICT
flexmark-java est un fork du projet commonmark-java, modifié pour générer un AST qui reflète tous les éléments de la source d'origine, un suivi complet de la position de la source pour tous les éléments de l'AST et une génération plus facile de PsiTree JetBrains Open API.
L'API a été modifiée pour permettre un contrôle plus granulaire du processus d'analyse et optimisée pour l'analyse avec un grand nombre d'extensions installées. L'analyseur et les extensions sont dotés de nombreuses options de réglage du comportement de l'analyseur et des variations de rendu HTML. L'objectif final est que l'analyseur et le moteur de rendu soient capables d'imiter d'autres analyseurs avec un grand degré de précision.
La motivation pour cela était la nécessité de remplacer l'analyseur pegdown dans le plugin Markdown Navigator. pegdown a un excellent ensemble de fonctionnalités, mais sa vitesse en général est loin d'être idéale et pour les entrées pathologiques, elle se bloque ou se bloque pratiquement pendant l'analyse.
commonmark-java possède une excellente architecture d'analyse facile à comprendre et à étendre. L'objectif était de garantir que l'ajout du suivi de la position de la source dans l'AST ne modifierait pas la facilité d'analyse et de génération de l'AST plus que nécessaire.
Les raisons du choix de commonmark-java comme analyseur sont : la vitesse, la facilité de compréhension, la facilité d'extension et la rapidité. Maintenant que j'ai retravaillé le noyau et ajouté quelques extensions, je suis extrêmement satisfait de mon choix.
Un autre objectif était d'améliorer la capacité des extensions à modifier le comportement de l'analyseur afin que n'importe quel dialecte de démarque puisse être implémenté via le mécanisme d'extension. Une API d'options extensible a été ajoutée pour permettre la configuration de toutes les options en un seul endroit. L'analyseur, le moteur de rendu et les extensions utilisent ces options pour la configuration, notamment en désactivant certains analyseurs de blocs principaux.
Il s'agit d'un travail en cours avec de nombreux changements d'API. Aucune tentative n'est faite pour conserver la compatibilité ascendante de l'API avec le projet d'origine et jusqu'à ce que l'ensemble des fonctionnalités soit pratiquement complet, pas même avec les versions antérieures de ce projet.
Fonctionnalité | flexmark-java | marque commune-java | cheville |
---|---|---|---|
Temps d'analyse relatif (moins c'est mieux) | 1x (1) | 0,6x à 0,7x (2) | 25x en moyenne, 20 000x à ∞ pour l'entrée pathologique (3) |
Tous les éléments sources dans l'AST | |||
Éléments AST avec position source | avec quelques erreurs et particularités | ||
AST peut être facilement manipulé | Le post-traitement AST est un mécanisme d'extension | Le post-traitement AST est un mécanisme d'extension | pas une option. Aucune information parent du nœud, enfants comme List<>. |
Les éléments AST ont une position source détaillée pour toutes les pièces | uniquement le début/la fin du nœud | ||
Peut désactiver les fonctionnalités d'analyse de base | |||
Analyseur principal implémenté via l'API d'extension | instanceOf teste un analyseur de blocs et des classes de nœuds spécifiques | le noyau expose quelques points d'extension | |
Implémentation de l'analyseur facile à comprendre et à modifier | un analyseur PEG avec des interactions complexes (3) | ||
L'analyse des éléments de bloc est indépendante les uns des autres | tout dans une seule grammaire PEG | ||
Configuration uniforme sur : l'analyseur, le moteur de rendu et toutes les extensions | aucun au-delà de la liste d'extensions | indicateurs de bits int pour le noyau, aucun pour les extensions | |
Performances d'analyse optimisées pour une utilisation avec des extensions | en analysant les performances du noyau, les extensions font ce qu'elles peuvent | la performance n'est pas une fonctionnalité | |
Riche en fonctionnalités avec de nombreuses options de configuration et extensions prêtes à l'emploi | extensions limitées, pas d'options | ||
Définitions de dépendances pour les processeurs afin de garantir le bon ordre de traitement | ordre spécifié par l'ordre de la liste d'extensions, sujet aux erreurs | non applicable, le noyau définit où le traitement des extensions est ajouté |
entrée pathologique flexmark-java de 100 000 [
analyses en 68 ms, 100 000 ]
en 57 ms, 100 000 [
]
analyses imbriquées en 55 ms
entrée pathologique commonmark-java de 100 000 [
analyses en 30 ms, 100 000 ]
en 30 ms, 100 000 [
]
analyses imbriquées en 43 ms
entrée pathologique pegdown de 17 [
analyse en 650 ms, 18 [
en 1300 ms
Options de l'analyseur, les éléments marqués comme élément de tâche doivent être implémentés, le reste est terminé :
Listes libres manuelles
Les listes numérotées commencent toujours par 1.
Retrait des éléments de liste fixe, les éléments doivent être mis en retrait d'au moins 4 espaces
Option de début de liste assouplie, permettant aux listes de démarrer lorsqu'elles ne sont pas précédées d'une ligne vide.
Jekyll, affaire préliminaire
Éléments de balise Jekyll, avec prise en charge de {% include file %}
, Inclure Markdown et Contenu de fichier HTML
Encodage de l'URL du lien GitBook. Sans objet
Nœuds de commentaires HTML : bloc et en ligne
URL d'images multilignes
Élément d'exemple de spécification
HTML en ligne : tous, non-commentaires, commentaires
Blocs HTML : tous, non-commentaires, commentaires
Abréviations
Notes de bas de page
Définitions
Table des matières
Barré
Listes de tâches
Pas d'espace d'en-tête Atx
Aucun retrait d'en-tête
Hard Wraps (obtenu avec l'option SOFT_BREAK remplacée par "<br />"
)
Option de règles RH assouplies
Liens Wiki
Blocs de code clôturés
Liens d'ancrage pour les en-têtes avec génération automatique d'identifiant
Option Table Spans à implémenter pour l’extension des tables
Liens Wiki avec GitHub et syntaxe créole
Raccourcis Emoji avec utilisation de l'option URL emoji GitHub
Citations
Intelligence
Typographique
Extensions GitHub
Syntaxe GitHub
Édition
Réprimer
Extensions de processeur
Suppression de la syntaxe Commonmark
Je suis très satisfait de la décision de passer à un analyseur basé sur Commonmark-Java pour mes propres projets. Même si j'ai dû procéder à une intervention chirurgicale majeure dans ses entrailles pour obtenir un suivi complet de la position de la source et un AST qui correspond aux éléments sources, c'est un plaisir de travailler avec et c'est maintenant un plaisir de l'étendre. Si vous n'avez pas besoin de l'élément de niveau source AST ou du reste de ce que flexmark-java a ajouté et que CommonMark est votre analyseur de démarque cible, je vous encourage à utiliser commonmark-java car c'est un excellent choix pour vos besoins et ses performances n'en souffrent pas. pour la surcharge des fonctionnalités que vous n’utiliserez pas.
Dernière version, 28 janvier 2017, flexmark-java 0.13.1, intellij-markdown de CE EAP 2017, commonmark-java 0.8.0 :
Déposer | marque commune-java | flexmark-java | intellij-markdown | cheville |
---|---|---|---|---|
README-SLOW | 0,420 ms | 0,812 ms | 2,027 ms | 15,483 ms |
VERSION | 0,743 ms | 1,425 ms | 4,057 ms | 42,936 ms |
CommonMarkSpec | 31,025 ms | 44,465 ms | 600,654ms | 575,131ms |
exemple_markdown | 8,490 ms | 10,502 ms | 223,593 ms | 983,640ms |
spécification | 4,719 ms | 6,249 ms | 35,883 ms | 307,176 ms |
tableau | 0,229 ms | 0,623 ms | 0,800 ms | 3,642 ms |
format de tableau | 1,385 ms | 2,881 ms | 4,150 ms | 23,592 ms |
envelopper | 3,804 ms | 4,589 ms | 16,609 ms | 86,383 ms |
Ratios ci-dessus :
Déposer | marque commune-java | flexmark-java | intellij-markdown | cheville |
---|---|---|---|---|
README-SLOW | 1h00 | 1,93 | 4,83 | 36,88 |
VERSION | 1h00 | 1,92 | 5.46 | 57,78 |
CommonMarkSpec | 1h00 | 1,43 | 19h36 | 18h54 |
exemple_markdown | 1h00 | 1.24 | 26.34 | 115,86 |
spécification | 1h00 | 1.32 | 7h60 | 65.09 |
tableau | 1h00 | 2,72 | 3.49 | 15h90 |
format de tableau | 1h00 | 2.08 | 3h00 | 17.03 |
envelopper | 1h00 | 1.21 | 4.37 | 22.71 |
dans l'ensemble | 1h00 | 1.41 | 17h47 | 40.11 |
Déposer | marque commune-java | flexmark-java | intellij-markdown | cheville |
---|---|---|---|---|
README-SLOW | 0,52 | 1h00 | 2,50 | 19.07 |
VERSION | 0,52 | 1h00 | 2,85 | 30.12 |
CommonMarkSpec | 0,70 | 1h00 | 13.51 | 12.93 |
exemple_markdown | 0,81 | 1h00 | 21.29 | 93.66 |
spécification | 0,76 | 1h00 | 5,74 | 49h15 |
tableau | 0,37 | 1h00 | 1,28 | 5,85 |
format de tableau | 0,48 | 1h00 | 1,44 | 8.19 |
envelopper | 0,83 | 1h00 | 3,62 | 18.83 |
dans l'ensemble | 0,71 | 1h00 | 12h41 | 28h48 |
Étant donné que ces deux fichiers représentent l'entrée pathologique pour le pegdown, je ne les exécute plus dans le cadre du benchmark pour éviter toute distorsion des résultats. Les résultats sont là pour la postérité.
Déposer | marque commune-java | flexmark-java | intellij-markdown | cheville |
---|---|---|---|---|
pendaison | 0,082 ms | 0,326 ms | 0,342 ms | 659,138 ms |
accrocher-pegdown2 | 0,048 ms | 0,235 ms | 0,198 ms | 1312,944 ms |
Ratios ci-dessus :
Déposer | marque commune-java | flexmark-java | intellij-markdown | cheville |
---|---|---|---|---|
pendaison | 1h00 | 3,98 | 4.17 | 8048.38 |
accrocher-pegdown2 | 1h00 | 4,86 | 4.10 | 27207.32 |
dans l'ensemble | 1h00 | 16h30 | 4.15 | 15151.91 |
Déposer | marque commune-java | flexmark-java | intellij-markdown | cheville |
---|---|---|---|---|
pendaison | 0,25 | 1h00 | 1.05 | 2024.27 |
accrocher-pegdown2 | 0,21 | 1h00 | 0,84 | 5594.73 |
dans l'ensemble | 0,23 | 1h00 | 0,96 | 3519.73 |
VERSION.md est le fichier journal de version que j'utilise pour Markdown Navigator
commonMarkSpec.md est un fichier de ligne de 33 Ko utilisé dans la suite de tests Intellij-markdown pour l'évaluation des performances.
fichier spec.txt commonmark spec markdown dans le projet commonmark-java
hang-pegdown.md est un fichier contenant une seule ligne de 17 caractères [[[[[[[[[[[[[[[[[
qui provoque le passage du pegdown dans un temps d'analyse hyper-exponentiel.
hang-pegdown2.md un fichier contenant une seule ligne de 18 caractères [[[[[[[[[[[[[[[[[[
qui provoque le passage du pegdown dans un temps d'analyse hyper-exponentiel.
wrap.md est un fichier que j'utilisais pour tester les performances de frappe sur les performances de frappe, pour découvrir que cela n'a rien à voir avec l'enroulement sur la saisie du code lorsque 0,1 seconde est nécessaire à l'analyse du fichier. Dans le plugin, l'analyse peut avoir lieu plus d'une fois : passage du surligneur de syntaxe, passage de la construction de l'arbre psi, annotateur externe.
markdown_example.md un fichier de plus de 10 000 lignes contenant plus de 500 Ko de texte.
Les demandes de tirage, les problèmes et les commentaires sont les bienvenus. Pour les demandes de tirage :
Ajoutez des tests pour les nouvelles fonctionnalités et les corrections de bugs, de préférence au format ast_spec.md
Suivez le style existant pour faciliter la fusion autant que possible : 4 espaces de retrait, espaces de fin coupés.
Copyright (c) 2015-2016 Atlassian et autres.
Copyright (c) 2016-2023, Vladimir Schneider,
Licence BSD (2 clauses), voir le fichier LICENSE.txt.