flexmark-java é uma implementação Java do analisador CommonMark (especificação 0.28) usando os blocos primeiro, embutidos após a arquitetura de análise Markdown.
Seus pontos fortes são velocidade, flexibilidade, AST baseado em elemento de origem Markdown com detalhes da posição de origem até caracteres individuais de lexemas que compõem o elemento e extensibilidade.
A API permite controle granular do processo de análise e é otimizada para análise com um grande número de extensões instaladas. O analisador e as extensões vêm com muitas opções de comportamento do analisador e variações de renderização de HTML. O objetivo final é fazer com que o analisador e o renderizador sejam capazes de imitar outros analisadores com grande grau de precisão. Isso agora está parcialmente concluído com a implementação da emulação do processador Markdown
A motivação para este projeto foi a necessidade de substituir o analisador pegdown em meu plugin Markdown Navigator para IDEs JetBrains. pegdown tem um ótimo conjunto de recursos, mas sua velocidade em geral é inferior ao ideal e, para entradas patológicas, trava ou praticamente trava durante a análise.
Para versões 0.62.2 ou inferiores, Java 8 ou superior, compatível com Java 9+. Para versões 0.64.0 ou superior, Java 11 ou superior.
O projeto está no Maven: com.vladsch.flexmark
O núcleo não tem outras dependências além de org.jetbrains:annotations:24.0.1
. Para extensões, consulte a descrição da extensão abaixo.
A API ainda está evoluindo para acomodar novas extensões e funcionalidades.
Para Maven, adicione flexmark-all
como uma dependência que inclui o núcleo e todos os módulos ao seguinte exemplo:
<dependência> <groupId>com.vladsch.flexmark</groupId> <artifactId>flexmark-all</artifactId> <versão>0.64.8</versão> </dependency>
Fonte: BasicSample.java
pacote 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;classe pública BasicSample { public static void main(String[] args) {Opções MutableDataSet = new MutableDataSet(); // remova o comentário para definir extensões opcionais //options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), StrikethroughExtension.create())); // remova o comentário para converter quebras suaves em quebras fortes //options.set(HtmlRenderer.SOFT_BREAK, "<br />n"); Analisador analisador = Parser.builder(options).build(); Renderizador HtmlRenderer = HtmlRenderer.builder(options).build(); // Você pode reutilizar instâncias do analisador e do renderizador Node document = parser.parse("This is *Sparta*"); String html = renderer.render(documento); // "<p>Aqui é <em>Esparta</em></p>n" System.out.println(html); } }
implementação 'com.vladsch.flexmark:flexmark-all:0.64.8'
Configurações adicionais devido a arquivos duplicados:
opções de embalagem { excluir 'META-INF/LICENSE-LGPL-2.1.txt' excluir 'META-INF/LICENSE-LGPL-3.txt' excluir 'META-INF/LICENSE-W3C-TEST' excluir 'META-INF/DEPENDÊNCIAS'}
Mais informações podem ser encontradas na documentação:
Wiki Home Exemplos de uso Detalhes da extensão Extensões de escrita
A classe PegdownOptionsAdapter
converte sinalizadores pegdown Extensions.*
em opções de flexmark e lista de extensões. Pegdown Extensions.java
está incluído por conveniência e novas opções não encontradas no pegdown 1.6.0. Eles estão localizados no módulo flexmark-profile-pegdown
, mas você pode obter a fonte deste repositório: PegdownOptionsAdapter.java, Extensions.java e criar sua própria versão, modificada de acordo com as necessidades do seu projeto.
Você pode passar seus sinalizadores de extensão para PegdownOptionsAdapter.flexmarkOptions(int)
estático ou pode instanciar PegdownOptionsAdapter
e usar métodos de conveniência para definir, adicionar e remover sinalizadores de extensão. PegdownOptionsAdapter.getFlexmarkOptions()
retornará uma nova cópia de DataHolder
sempre com as opções refletindo sinalizadores de extensão 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;classe pública PegdownOptions { final privado estático DataHolder OPTIONS = PegdownOptionsAdapter.flexmarkOptions(Extensões.ALL ); analisador final estático PARSER = Parser.builder(OPTIONS).build(); final estático HtmlRenderer RENDERER = HtmlRenderer.builder(OPTIONS).build(); // use o PARSER para analisar e o RENDERER para renderizar com compatibilidade pegdown}
A emulação pegdown padrão flexmark-java usa análise de bloco HTML menos estrita, que interrompe um bloco HTML em uma linha em branco. Pegdown apenas interrompe um bloco HTML em uma linha em branco se todas as tags do bloco HTML estiverem fechadas.
Para se aproximar do comportamento original de análise de bloco HTML pegdown, use o método que usa um 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;classe pública PegdownOptions { final privado estático DataHolder OPTIONS = PegdownOptionsAdapter.flexmarkOptions(true, Extensions.ALL ); analisador final estático PARSER = Parser.builder(OPTIONS).build(); final estático HtmlRenderer RENDERER = HtmlRenderer.builder(OPTIONS).build(); // use o PARSER para analisar e o RENDERER para renderizar com compatibilidade pegdown}
Uma amostra com um resolvedor de link personalizado também está disponível, que inclui resolvedor de link para alterar URLs ou atributos de links e um renderizador de nó personalizado se você precisar substituir o HTML do link gerado.
flexmark-java tem muito mais extensões e opções de configuração do que pegdown, além das extensões disponíveis no pegdown 1.6.0. Extensões disponíveis via PegdownOptionsAdapter
Grande reorganização e limpeza de código de implementação na versão 0.60.0, consulte Versão-0.60.0-Changes graças ao excelente trabalho de Alex Karezin, você pode obter uma visão geral das dependências do módulo com capacidade de detalhar pacotes e classes.
API de mesclagem para mesclar vários documentos de descontos em um único documento.
Extensão do renderizador Docx: manipulação limitada de nós de atributos
Módulo extensível de HTML para Markdown Converter: flexmark-html2md-converter. Exemplo: HtmlToMarkdownCustomizedSample.java
Compatibilidade do módulo Java9+
Referências Enumeradas Compostas Referências Enumeradas Extensão para criação de numeração legal para elementos e títulos.
Extensão de macros para permitir que conteúdo de markdown arbitrário seja inserido como bloco ou elementos embutidos, permitindo que elementos de bloco sejam usados onde apenas elementos embutidos são permitidos pela sintaxe.
Markdown com sabor do GitLab para analisar e renderizar extensões de markdown do GitLab.
Módulo OSGi cortesia de Dan Klco (GitHub @klcodanr)
Tags de mídia A extensão do transformador de link de mídia, cortesia de Cornelia Schultz (GitHub @CorneliaXaos), transforma links usando prefixos personalizados para tags HTML5 de áudio, incorporação, imagem e vídeo.
API Translation Helper para facilitar a tradução de documentos de descontos.
Advertência Para criar conteúdo lateral em estilo de bloco. Para obter a documentação completa, consulte a documentação Admonition Extension, Material for MkDocs.
Referência Enumerada para criar referências enumeradas para figuras, tabelas e outros elementos de redução.
Atributos para analisar atributos do formato {name name=value name='value' name="value" #id .class-name}
atributos.
O Transformador de link incorporado do YouTube, graças a Vyacheslav N. Boyko (GitHub @ bvn13), transforma links simples para vídeos do YouTube em HTML iframe de vídeo incorporado.
Conversor Docx usando a biblioteca docx4j. Como usar: Exemplo do DocxConverter, como personalizar: Personalizando a renderização do Docx
O desenvolvimento deste módulo foi patrocinado pela Johner Institut GmbH.
Atualize a biblioteca para ser compatível com CommonMark (especificação 0.28) e adicione ParserEmulationProfile.COMMONMARK_0_27
e ParserEmulationProfile.COMMONMARK_0_28
para permitir a seleção de opções de versão de especificação específica.
API de renderização de nós personalizados com capacidade de invocar a renderização padrão para um nó substituído, permitindo renderizações de nós personalizados que tratam apenas de casos especiais e permitem que o restante seja renderizado normalmente. resolvedor de link personalizado
Extensões Gfm-Issues e Gfm-Users para análise e renderização #123
e @user-name
respectivamente.
Opção de análise profunda de bloco HTML para melhor manipulação de tags de texto bruto que vêm depois de outras tags e para compatibilidade de análise de bloco HTML pegdown.
Módulo flexmark-all
que inclui: núcleo, todas as extensões, formatador, conversores JIRA e YouTrack, módulo de perfil pegdown e conversão de HTML para Markdown.
Módulo de saída de PDF Saída de PDF usando Open HTML para PDF
Tipográfico implementado
Extensão Macro XWiki
Jekyll Tags
HTML para redução
Plug-in gerador de página Maven Markdown
Módulo Markdown Formatter para gerar AST como markdown com opções de formatação.
Tabelas para Markdown Formatter com largura de coluna e alinhamento de tabelas de markdown:
Entrada | Saída |
---|---|
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 | |
Eu uso flexmark-java como analisador do plugin Markdown Navigator para IDEs JetBrains. Costumo usar a versão mais recente e não lançada para corrigir bugs ou obter melhorias. Portanto, se você encontrar um bug que seja um obstáculo para o seu projeto ou vir um bug na página de problemas do github marcado fixed for next release
que está afetando seu projeto, por favor me avise e poderei fazer imediatamente um novo lançamento para resolver seu problema. Caso contrário, deixarei que as correções de bugs e melhorias se acumulem, pensando que ninguém será afetado pelo que já foi corrigido.
Existem muitas opções de extensão na API com o uso pretendido. Um bom soft-start é o módulo flexmark-java-samples
que possui exemplos simples para extensões solicitadas. O próximo melhor lugar é a fonte de uma extensão existente que tenha sintaxe semelhante à que você deseja adicionar.
Se sua extensão estiver alinhada com a API correta, a tarefa geralmente será muito curta e agradável. Se sua extensão usa a API de maneira não intencional ou não segue os protocolos de manutenção esperados, você pode achar que é uma batalha difícil com um ninho de ratos de manipulação de condições if/else e correção de um bug, levando apenas à criação de outro.
Geralmente, se forem necessárias mais de algumas dezenas de linhas para adicionar uma extensão simples, então ou você está fazendo isso errado ou está faltando um ponto de extensão na API. Se você observar todas as extensões implementadas, verá que a maioria são algumas linhas de código diferentes do padrão ditado pela API. Esse é o objetivo desta biblioteca: fornecer um núcleo extensível que facilite a escrita de extensões.
As extensões maiores são flexmark-ext-tables
e flexmark-ext-spec-example
, a essência de ambas tem cerca de 200 linhas de código. Você pode usá-los como um guia para estimar o tamanho de sua extensão.
Minha própria experiência com a adição de extensões mostra que, às vezes, um novo tipo de extensão é melhor abordado com um aprimoramento de API para tornar sua implementação perfeita ou corrigindo um bug que não era visível antes de a extensão sobrecarregar a API da maneira certa. A extensão pretendida pode ser apenas aquela que exige tal abordagem.
A conclusão é: se você deseja implementar uma extensão ou recurso, não hesite em abrir um problema e eu lhe darei dicas sobre a melhor maneira de fazer isso. Você pode economizar muito tempo, permitindo-me melhorar a API para atender às necessidades da sua extensão antes que você faça um grande esforço infrutífero.
Peço que você perceba que sou o cozinheiro-chefe e lavador de garrafas neste projeto, sem um pingo de habilidades de fusão mental vulcana. Peço que você descreva o que deseja implementar porque não consigo ler sua mente. Por favor, faça algum trabalho de reconhecimento em torno do código-fonte e da documentação, porque não posso transferir o que sei para você, sem o seu esforço voluntário.
Se você possui um aplicativo comercial e não deseja escrever as extensões sozinho ou deseja reduzir o tempo e esforço de implementação de extensões e integração do flexmark-java, sinta-se à vontade para entrar em contato comigo. Estou disponível em regime de consultoria/contratação.
Apesar do nome, commonmark não é um superconjunto nem um subconjunto de outros sabores de descontos. Em vez disso, ele propõe uma especificação de sintaxe padrão e inequívoca para o Markdown "principal" original, introduzindo assim efetivamente mais um sabor. Embora o flexmark seja compatível com o commonmark por padrão, seu analisador pode ser ajustado de várias maneiras. Os conjuntos de ajustes necessários para emular os analisadores de markdown mais comumente usados estão disponíveis no flexmark como ParserEmulationProfiles
.
Como o nome ParserEmulationProfile
indica, é apenas o analisador que é ajustado ao tipo de redução específico. A aplicação do perfil não adiciona recursos além daqueles disponíveis na marca comum. Se você quiser usar o flexmark para emular completamente o comportamento de outro processador de markdown, será necessário ajustar o analisador e configurar as extensões do flexmark que fornecem os recursos adicionais disponíveis no analisador que você deseja emular.
Uma reescrita do analisador de lista para controlar melhor a emulação de outros processadores de redução de acordo com a emulação de processadores de redução foi concluída. A adição de predefinições de processador para emular o comportamento específico de processamento de redução desses analisadores está em uma pequena lista de tarefas.
Algumas famílias de emulação fazem um trabalho melhor ao emular seu alvo do que outras. A maior parte do esforço foi direcionada para emular como esses processadores analisam o Markdown padrão e listam especificamente a análise relacionada. Para processadores que estendem o Markdown original, você precisará adicionar as extensões que já estão implementadas no flexmark-java às opções do construtor Parser/Renderer.
As extensões serão modificadas para incluir suas próprias predefinições para emulação de processador específico, se esse processador tiver uma extensão equivalente implementada.
Se você encontrar uma discrepância, abra um problema para que possa ser resolvido.
As principais famílias de processadores são implementadas e alguns membros da família também:
Jekyll
CommonMark para as últimas especificações implementadas, atualmente CommonMark (especificação 0.28)
Liga/Marca Comum
CommonMark (especificação 0.27) para compatibilidade de versões específicas
CommonMark (especificação 0.28) para compatibilidade de versões específicas
Comentários do GitHub
Markdown.pl
Extra de redução de PHP
GitHub Docs (antigo analisador de markdown do GitHub)
Kramdown
FixoIndent
MultiMarkdown
Fixação
perfis para encapsular detalhes de configuração para variantes dentro da família foram adicionados em 0.11.0:
CommonMark (padrão para família): ParserEmulationProfile.COMMONMARK
FixedIndent (padrão para família): ParserEmulationProfile.FIXED_INDENT
Comentários do GitHub (apenas CommonMark): ParserEmulationProfile.COMMONMARK
Documentos antigos do GitHub: ParserEmulationProfile.GITHUB_DOC
Kramdown (padrão para família): ParserEmulationProfile.KRAMDOWN
Markdown.pl (padrão para família): ParserEmulationProfile.MARKDOWN
MultiMarkdown: ParserEmulationProfile.MULTI_MARKDOWN
Pegdown, com extensões pegdown use PegdownOptionsAdapter
em flexmark-profile-pegdown
Pegdown, sem extensões pegdown ParserEmulationProfile.PEGDOWN
Regras de análise de bloco HTML Pegdown, sem extensões pegdown ParserEmulationProfile.PEGDOWN_STRICT
flexmark-java é um fork do projeto commonmark-java, modificado para gerar um AST que reflete todos os elementos na fonte original, rastreamento completo da posição da fonte para todos os elementos no AST e geração mais fácil do JetBrains Open API PsiTree.
A API foi alterada para permitir um controle mais granular do processo de análise e otimizada para análise com um grande número de extensões instaladas. O analisador e as extensões vêm com muitas opções de ajustes para o comportamento do analisador e variações de renderização de HTML. O objetivo final é fazer com que o analisador e o renderizador sejam capazes de imitar outros analisadores com grande grau de precisão.
A motivação para isso foi a necessidade de substituir o analisador pegdown no plugin Markdown Navigator. pegdown tem um ótimo conjunto de recursos, mas sua velocidade em geral é inferior ao ideal e, para entradas patológicas, trava ou praticamente trava durante a análise.
commonmark-java possui uma excelente arquitetura de análise que é fácil de entender e estender. O objetivo era garantir que a adição do rastreamento da posição da fonte no AST não alterasse a facilidade de análise e geração do AST mais do que o absolutamente necessário.
As razões para escolher commonmark-java como analisador são: velocidade, facilidade de compreensão, facilidade de extensão e velocidade. Agora que reformulei o núcleo e adicionei algumas extensões, estou extremamente satisfeito com minha escolha.
Outro objetivo era melhorar a capacidade das extensões de modificar o comportamento do analisador para que qualquer dialeto de markdown pudesse ser implementado através do mecanismo de extensão. Uma API de opções extensível foi adicionada para permitir a configuração de todas as opções em um só lugar. O analisador, o renderizador e as extensões usam essas opções para configuração, incluindo a desativação de alguns analisadores de blocos principais.
Este é um trabalho em andamento com muitas alterações de API. Nenhuma tentativa é feita para manter a compatibilidade retroativa da API com o projeto original e até que o conjunto de recursos esteja quase completo, nem mesmo com versões anteriores deste projeto.
Recurso | flexmark-java | marca comum-java | fixação |
---|---|---|---|
Tempo de análise relativo (menos é melhor) | 1x (1) | 0,6x a 0,7x (2) | Média de 25x, 20.000x a ∞ para entrada patológica (3) |
Todos os elementos de origem no AST | |||
Elementos AST com posição de origem | com alguns erros e idiossincrasias | ||
AST pode ser facilmente manipulado | O pós-processamento AST é um mecanismo de extensão | O pós-processamento AST é um mecanismo de extensão | não é uma opção. Nenhuma informação pai do nó, filhos como List<>. |
Os elementos AST possuem posição de origem detalhada para todas as peças | apenas início/fim do nó | ||
Pode desativar os principais recursos de análise | |||
Analisador principal implementado por meio da API de extensão | testes instanceOf para analisador de bloco específico e classes de nó | núcleo expõe poucos pontos de extensão | |
Implementação do analisador fácil de entender e modificar | um analisador PEG com interações complexas (3) | ||
A análise dos elementos do bloco é independente uma da outra | tudo em uma gramática PEG | ||
Configuração uniforme em: analisador, renderizador e todas as extensões | nenhum além da lista de extensões | sinalizadores de bit int para núcleo, nenhum para extensões | |
Desempenho de análise otimizado para uso com extensões | analisando o desempenho do núcleo, as extensões fazem o que podem | desempenho não é um recurso | |
Rico em recursos com muitas opções de configuração e extensões prontas para uso | extensões limitadas, sem opções | ||
Definições de dependência para processadores para garantir a ordem correta de processamento | ordem especificada pela ordem da lista de extensões, propensa a erros | não aplicável, o núcleo define onde o processamento de extensão é adicionado |
entrada patológica flexmark-java de 100.000 [
análises em 68 ms, 100.000 ]
em 57 ms, 100.000 análises aninhadas [
]
em 55 ms
entrada patológica commonmark-java de 100.000 [
analisa em 30ms, 100.000 ]
em 30ms, 100.000 aninhados [
]
analisa em 43ms
pegdown entrada patológica de 17 [
analisa em 650 ms, 18 [
em 1300 ms
Opções do analisador, itens marcados como item de tarefa devem ser implementados e o restante está completo:
Listas soltas manuais
As listas numeradas sempre começam com 1.
Recuo de item de lista fixo, os itens devem ser recuados por pelo menos 4 espaços
Opção de início de lista relaxada, permite que as listas comecem quando não forem precedidas por uma linha em branco.
Jekyll primeiro assunto
Elementos de tag Jekyll, com suporte para {% include file %}
, Incluir Markdown e conteúdo de arquivo HTML
Codificação de URL do link GitBook. Não aplicável
Nós de comentários HTML: Bloco e Inline
URLs de imagens multilinhas
Elemento de exemplo de especificação
HTML embutido: todos, não comentários, comentários
Blocos HTML: todos, não comentários, comentários
Abreviações
Notas de rodapé
Definições
Índice
Tachado
Listas de tarefas
Sem espaço de cabeçalho Atx
Sem recuos de cabeçalho
Hard Wraps (alcançado com a opção SOFT_BREAK alterada para "<br />"
)
Opção de regras de RH relaxadas
Links Wiki
Blocos de código protegidos
Links âncora para cabeçalhos com geração automática de ID
Opção Table Spans a ser implementada para extensão de tabelas
Links Wiki com GitHub e sintaxe crioula
Atalhos de emoji com opção de usar URL de emoji do GitHub
Citações
Inteligência
Tipográfico
Extensões GitHub
Sintaxe GitHub
Publicação
Suprimir
Extensões de processador
Supressão de sintaxe Commonmark
Estou muito satisfeito com a decisão de mudar para o analisador baseado em Java comum para meus próprios projetos. Embora eu tenha tido que fazer uma grande cirurgia em suas entranhas para obter rastreamento completo da posição da fonte e AST que corresponda aos elementos da fonte, é um prazer trabalhar com ele e agora é um prazer ampliá-lo. Se você não precisa do elemento de nível de origem AST ou do resto do que flexmark-java adicionou e CommonMark é seu analisador de redução de destino, então eu encorajo você a usar commonmark-java, pois é uma excelente escolha para suas necessidades e seu desempenho não sofre pela sobrecarga de recursos que você não usará.
Mais recente, 28 de janeiro de 2017 flexmark-java 0.13.1, intellij-markdown do CE EAP 2017, commonmark-java 0.8.0:
Arquivo | marca comum-java | flexmark-java | marcação intellij | fixação |
---|---|---|---|---|
LEIA-ME-LENTO | 0,420ms | 0,812ms | 2,027ms | 15,483ms |
VERSÃO | 0,743ms | 1,425ms | 4,057ms | 42,936ms |
comumMarkSpec | 31,025ms | 44,465ms | 600,654ms | 575,131ms |
markdown_example | 8.490ms | 10,502ms | 223,593 ms | 983,640ms |
especificação | 4,719ms | 6,249ms | 35,883ms | 307,176ms |
mesa | 0,229ms | 0,623ms | 0,800ms | 3,642ms |
formato de tabela | 1,385ms | 2,881 ms | 4.150ms | 23,592ms |
enrolar | 3,804ms | 4,589ms | 16,609ms | 86,383ms |
Razões acima:
Arquivo | marca comum-java | flexmark-java | marcação intellij | fixação |
---|---|---|---|---|
LEIA-ME-LENTO | 1,00 | 1,93 | 4,83 | 36,88 |
VERSÃO | 1,00 | 1,92 | 5,46 | 57,78 |
comumMarkSpec | 1,00 | 1,43 | 19h36 | 18h54 |
markdown_example | 1,00 | 1,24 | 26.34 | 115,86 |
especificação | 1,00 | 1,32 | 7,60 | 65.09 |
mesa | 1,00 | 2,72 | 3,49 | 15h90 |
formato de tabela | 1,00 | 2.08 | 3h00 | 17.03 |
enrolar | 1,00 | 1.21 | 4,37 | 22,71 |
geral | 1,00 | 1,41 | 17h47 | 40.11 |
Arquivo | marca comum-java | flexmark-java | marcação intellij | fixação |
---|---|---|---|---|
LEIA-ME-LENTO | 0,52 | 1,00 | 2,50 | 19.07 |
VERSÃO | 0,52 | 1,00 | 2,85 | 30.12 |
comumMarkSpec | 0,70 | 1,00 | 13.51 | 12,93 |
markdown_example | 0,81 | 1,00 | 21h29 | 93,66 |
especificação | 0,76 | 1,00 | 5,74 | 49,15 |
mesa | 0,37 | 1,00 | 1,28 | 5,85 |
formato de tabela | 0,48 | 1,00 | 1,44 | 8.19 |
enrolar | 0,83 | 1,00 | 3,62 | 18,83 |
geral | 0,71 | 1,00 | 12h41 | 28h48 |
Como esses dois arquivos representam a entrada patológica para pegdown, não os executo mais como parte do benchmark para evitar distorções nos resultados. Os resultados estão aqui para a posteridade.
Arquivo | marca comum-java | flexmark-java | marcação intellij | fixação |
---|---|---|---|---|
pendurado | 0,082ms | 0,326ms | 0,342ms | 659,138ms |
pendurar-pegdown2 | 0,048ms | 0,235ms | 0,198ms | 1312,944ms |
Razões acima:
Arquivo | marca comum-java | flexmark-java | marcação intellij | fixação |
---|---|---|---|---|
pendurado | 1,00 | 3,98 | 4.17 | 8048.38 |
pendurar-pegdown2 | 1,00 | 4,86 | 4.10 | 27207.32 |
geral | 1,00 | 16h30 | 4.15 | 15151.91 |
Arquivo | marca comum-java | flexmark-java | marcação intellij | fixação |
---|---|---|---|---|
pendurado | 0,25 | 1,00 | 1.05 | 2024.27 |
pendurar-pegdown2 | 0,21 | 1,00 | 0,84 | 5594,73 |
geral | 0,23 | 1,00 | 0,96 | 3519,73 |
VERSION.md é o arquivo de log de versão que uso para Markdown Navigator
commonMarkSpec.md é um arquivo de linha de 33k usado no conjunto de testes intellij-markdown para avaliação de desempenho.
spec.txt arquivo de marcação de especificação commonmark no projeto commonmark-java
hang-pegdown.md é um arquivo que contém uma única linha de 17 caracteres [[[[[[[[[[[[[[[[[
que faz com que pegdown entre em um tempo de análise hiperexponencial.
hang-pegdown2.md um arquivo contendo uma única linha de 18 caracteres [[[[[[[[[[[[[[[[[[
que faz com que pegdown entre em um tempo de análise hiper-exponencial.
wrap.md é um arquivo que eu estava usando para testar o desempenho da digitação, apenas para descobrir que ele não tem nada a ver com o código de digitação quando 0,1 segundo é levado pelo pegdown para analisar o arquivo. No plugin, a análise pode acontecer mais de uma vez: passagem do realce de sintaxe, passagem de construção de árvore psi, anotador externo.
markdown_example.md um arquivo com mais de 10.000 linhas contendo mais de 500kB de texto.
Solicitações pull, problemas e comentários são bem-vindos. Para solicitações pull:
Adicione testes para novos recursos e correções de bugs, de preferência no formato ast_spec.md
Siga o estilo existente para facilitar a mesclagem, tanto quanto possível: recuo de 4 espaços, espaços finais aparados.
Copyright (c) 2015-2016 Atlassian e outros.
Direitos autorais (c) 2016-2023, Vladimir Schneider,
Licenciado BSD (2 cláusulas), consulte o arquivo LICENSE.txt.