flexmark-java adalah implementasi Java dari parser CommonMark (spesifikasi 0.28) yang menggunakan blok terlebih dahulu, sebaris setelah arsitektur parsing Markdown.
Kekuatannya adalah kecepatan, fleksibilitas, penurunan harga elemen sumber berdasarkan AST dengan rincian posisi sumber hingga karakter individu leksem yang membentuk elemen dan ekstensibilitas.
API ini memungkinkan kontrol granular pada proses penguraian dan dioptimalkan untuk penguraian dengan sejumlah besar ekstensi terpasang. Parser dan ekstensi hadir dengan banyak opsi untuk perilaku parser dan variasi rendering HTML. Tujuan akhirnya adalah agar parser dan renderer dapat meniru parser lain dengan tingkat akurasi yang tinggi. Hal ini sekarang telah selesai sebagian dengan penerapan Emulasi Prosesor Markdown
Motivasi untuk proyek ini adalah kebutuhan untuk mengganti parser pegdown di plugin Markdown Navigator saya untuk IDE JetBrains. pegdown memiliki serangkaian fitur yang bagus tetapi kecepatannya secara umum kurang dari ideal dan untuk input patologis hang atau praktis hang selama penguraian.
Untuk Versi 0.62.2 atau lebih rendah, Java 8 atau lebih tinggi, kompatibel dengan Java 9+. Untuk Versi 0.64.0 atau lebih tinggi, Java 11 atau lebih tinggi.
Proyek ini ada di Maven: com.vladsch.flexmark
Inti tidak memiliki ketergantungan selain org.jetbrains:annotations:24.0.1
. Untuk ekstensi, lihat deskripsi ekstensi di bawah.
API masih terus berkembang untuk mengakomodasi ekstensi dan fungsi baru.
Untuk Maven, tambahkan flexmark-all
sebagai dependensi yang mencakup inti dan semua modul ke contoh berikut:
<ketergantungan> <groupId>com.vladsch.flexmark</groupId> <artifactId>flexmark-semua</artifactId> <versi>0.64.8</versi> </ketergantungan>
Sumber: BasicSample.java
paket com.vladsch.flexmark.samples;import com.vladsch.flexmark.util.ast.Node;import com.vladsch.flexmark.html.HtmlRenderer;import com.vladsch.flexmark.parser.Parser;import com.vladsch.flexmark .util.data.MutableDataSet;kelas publik BasicSample { public static void main(String[] args) { Opsi MutableDataSet = baru MutableDataSet(); // batalkan komentar untuk menyetel ekstensi opsional //options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), StrikethroughExtension.create())); // batalkan komentar untuk mengubah soft-break menjadi hard break //options.set(HtmlRenderer.SOFT_BREAK, "<br />n"); Parser parser = Parser.builder(pilihan).build(); Penyaji HtmlRenderer = HtmlRenderer.builder(pilihan).build(); // Anda dapat menggunakan kembali instance parser dan renderer Node document = parser.parse("Ini *Sparta*"); String html = renderer.render(dokumen); // "<p>Ini <em>Sparta</em></p>n" System.out.println(html); } }
implementasi 'com.vladsch.flexmark:flexmark-all:0.64.8'
Pengaturan tambahan karena file duplikat:
Opsi pengemasan { kecualikan 'META-INF/LICENSE-LGPL-2.1.txt' kecualikan 'META-INF/LICENSE-LGPL-3.txt' kecualikan 'META-INF/LICENSE-W3C-TEST' kecualikan 'META-INF/DEPENDENCIES'}
Informasi lebih lanjut dapat ditemukan di dokumentasi:
Beranda Wiki Contoh Penggunaan Ekstensi Penulisan Detail Ekstensi
Kelas PegdownOptionsAdapter
mengonversi tanda pegdown Extensions.*
menjadi opsi flexmark dan daftar ekstensi. Pegdown Extensions.java
disertakan untuk kenyamanan dan opsi baru yang tidak ditemukan di pegdown 1.6.0. Ini terletak di modul flexmark-profile-pegdown
tetapi Anda dapat mengambil sumber dari repo ini: PegdownOptionsAdapter.java, Extensions.java dan membuat versi Anda sendiri, dimodifikasi sesuai kebutuhan proyek Anda.
Anda dapat meneruskan tanda ekstensi ke PegdownOptionsAdapter.flexmarkOptions(int)
statis atau Anda dapat membuat instance PegdownOptionsAdapter
dan menggunakan metode praktis untuk menyetel, menambah, dan menghapus tanda ekstensi. PegdownOptionsAdapter.getFlexmarkOptions()
akan mengembalikan salinan DataHolder
baru setiap saat dengan opsi yang mencerminkan tanda ekstensi pegdown.
import com.vladsch.flexmark.html.HtmlRenderer;import com.vladsch.flexmark.parser.Parser;import com.vladsch.flexmark.profile.pegdown.Extensions;import com.vladsch.flexmark.profile.pegdown.PegdownOptionsAdapter;import com .vladsch.flexmark.util.data.DataHolder;pegdownOptions kelas publik { PILIHAN DataHolder statis pribadi terakhir = PegdownOptionsAdapter.flexmarkOptions( Extensions.ALL ); Parser akhir statis PARSER = Parser.builder(OPTIONS).build(); statis final HtmlRenderer RENDERER = HtmlRenderer.builder(OPTIONS).build(); // gunakan PARSER untuk mengurai dan RENDERER untuk merender dengan kompatibilitas pegdown}
Emulasi pegdown flexmark-java default menggunakan penguraian blok HTML yang tidak terlalu ketat yang mengganggu blok HTML pada baris kosong. Pegdown hanya menginterupsi blok HTML pada baris kosong jika semua tag di blok HTML ditutup.
Untuk lebih mendekati perilaku penguraian blok HTML pegdown asli, gunakan metode yang menggunakan argumen boolean strictHtml
:
import com.vladsch.flexmark.html.HtmlRenderer;import com.vladsch.flexmark.parser.Parser;import com.vladsch.flexmark.profile.pegdown.Extensions;import com.vladsch.flexmark.profile.pegdown.PegdownOptionsAdapter;import com .vladsch.flexmark.util.data.DataHolder;pegdownOptions kelas publik { PILIHAN DataHolder statis pribadi terakhir = PegdownOptionsAdapter.flexmarkOptions(true, Extensions.ALL ); Parser akhir statis PARSER = Parser.builder(OPTIONS).build(); statis final HtmlRenderer RENDERER = HtmlRenderer.builder(OPTIONS).build(); // gunakan PARSER untuk mengurai dan RENDERER untuk merender dengan kompatibilitas pegdown}
Contoh dengan penyelesai tautan khusus juga tersedia, yang mencakup penyelesai tautan untuk mengubah URL atau atribut tautan dan perender simpul khusus jika Anda perlu mengganti HTML tautan yang dihasilkan.
flexmark-java memiliki lebih banyak ekstensi dan opsi konfigurasi daripada pegdown selain ekstensi yang tersedia di pegdown 1.6.0. Ekstensi yang Tersedia melalui PegdownOptionsAdapter
Reorganisasi besar-besaran dan pembersihan kode implementasi di versi 0.60.0, lihat Versi-0.60.0-Perubahan berkat kerja hebat dari Alex Karezin Anda bisa mendapatkan ikhtisar dependensi modul dengan kemampuan menelusuri paket dan kelas.
Gabungkan API untuk menggabungkan beberapa dokumen penurunan harga menjadi satu dokumen.
Ekstensi Docx Renderer: Penanganan Node Atribut Terbatas
Modul Konverter HTML ke Penurunan Harga yang dapat diperluas: flexmark-html2md-converter. Contoh: HtmlToMarkdownCustomizedSample.java
Kompatibilitas modul Java9+
Referensi Terhitung Majemuk Referensi Terhitung Ekstensi untuk membuat penomoran resmi untuk elemen dan judul.
Ekstensi Makro untuk memungkinkan konten penurunan harga sewenang-wenang disisipkan sebagai elemen blok atau sebaris, memungkinkan elemen blok digunakan di mana hanya elemen sebaris yang diizinkan oleh sintaksis.
Penurunan Harga Rasa GitLab untuk menguraikan dan merender ekstensi penurunan harga GitLab.
Modul OSGi milik Dan Klco (GitHub @klcodanr)
Tag Media Ekstensi transformator tautan media milik Cornelia Schultz (GitHub @CorneliaXaos) mengubah tautan menggunakan awalan khusus menjadi tag Audio, Sematan, Gambar, dan Video HTML5.
API Pembantu Terjemahan untuk mempermudah penerjemahan dokumen penurunan harga.
Peringatan Untuk membuat konten sampingan bergaya blok. Untuk dokumentasi selengkapnya silakan lihat dokumentasi Admonition Extension, Material for MkDocs.
Referensi Terhitung untuk membuat referensi tercacah untuk gambar, tabel, dan elemen penurunan harga lainnya.
Atribut untuk mengurai atribut berupa atribut {name name=value name='value' name="value" #id .class-name}
.
Transformator Tautan Tersemat YouTube berkat Vyacheslav N. Boyko (GitHub @bvn13) mengubah tautan sederhana ke video youtube menjadi HTML iframe video tersemat.
Konverter Docx menggunakan perpustakaan docx4j. Cara menggunakan: Contoh DocxConverter, cara menyesuaikan: Menyesuaikan Rendering Docx
Pengembangan modul ini disponsori oleh Johner Institut GmbH.
Perbarui pustaka agar sesuai dengan CommonMark (spesifikasi 0.28) dan tambahkan ParserEmulationProfile.COMMONMARK_0_27
dan ParserEmulationProfile.COMMONMARK_0_28
untuk memungkinkan pemilihan opsi versi spesifikasi tertentu.
API rendering node kustom dengan kemampuan untuk memanggil rendering standar untuk node yang diganti, memungkinkan rendering node kustom yang hanya menangani kasus khusus dan membiarkan sisanya dirender seperti biasa. pemecah tautan khusus
Ekstensi Gfm-Issues dan Gfm-Users untuk penguraian dan rendering masing-masing #123
dan @user-name
.
Opsi penguraian blok HTML dalam untuk penanganan yang lebih baik terhadap tag teks mentah yang muncul setelah tag lain dan untuk kompatibilitas penguraian blok HTML pegdown.
modul flexmark-all
yang mencakup: inti, semua ekstensi, formatter, konverter JIRA dan YouTrack, modul profil pegdown, dan konversi HTML ke Markdown.
Modul Output PDF Output PDF menggunakan Open HTML To PDF
Tipografi diterapkan
Ekstensi Makro XWiki
Tag Jekyll
Html Untuk Penurunan Harga
Plugin Pembuat Halaman Penurunan Harga Maven
Modul Markdown Formatter untuk menampilkan AST sebagai penurunan harga dengan opsi pemformatan.
Tabel untuk Markdown Formatter dengan lebar kolom dan perataan tabel penurunan harga:
Masukan | Keluaran |
---|---|
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 | |
Saya menggunakan flexmark-java sebagai parser untuk plugin Markdown Navigator untuk IDE JetBrains. Saya cenderung menggunakan versi terbaru yang belum dirilis untuk memperbaiki bug atau mendapatkan perbaikan. Jadi jika Anda menemukan bug yang menghalangi proyek Anda atau melihat bug di halaman masalah github yang ditandai fixed for next release
yang memengaruhi proyek Anda, harap beri tahu saya dan saya mungkin dapat segera membuat rilis baru untuk mengatasinya. masalah Anda. Jika tidak, saya akan membiarkan perbaikan bug dan peningkatan terakumulasi dengan berpikir tidak ada seorang pun yang terpengaruh oleh apa yang telah diperbaiki.
Ada banyak opsi ekstensi di API dengan tujuan penggunaannya. Permulaan yang baik adalah modul flexmark-java-samples
yang memiliki sampel sederhana untuk meminta ekstensi. Tempat terbaik berikutnya adalah sumber ekstensi yang sudah ada yang memiliki sintaksis serupa dengan yang ingin Anda tambahkan.
Jika ekstensi Anda sejalan dengan API yang tepat, tugasnya biasanya sangat singkat dan mudah. Jika ekstensi Anda menggunakan API dengan cara yang tidak diinginkan atau tidak mengikuti protokol tata graha yang diharapkan, Anda mungkin akan menghadapi tantangan berat dalam menangani kondisi if/else dan memperbaiki satu bug yang hanya mengarah pada pembuatan bug lainnya.
Secara umum, jika diperlukan lebih dari beberapa lusin baris untuk menambahkan ekstensi sederhana, berarti Anda salah melakukannya atau API tidak memiliki titik ekstensi. Jika Anda melihat semua ekstensi yang diterapkan, Anda akan melihat bahwa sebagian besar hanyalah beberapa baris kode selain pelat ketel yang ditentukan oleh API. Itulah tujuan perpustakaan ini: menyediakan inti yang dapat diperluas sehingga membuat ekstensi penulisan menjadi mudah.
Ekstensi yang lebih besar adalah flexmark-ext-tables
dan flexmark-ext-spec-example
, isi keduanya adalah sekitar 200 baris kode. Anda dapat menggunakannya sebagai panduan untuk memperkirakan ukuran ekstensi Anda.
Pengalaman saya sendiri dalam menambahkan ekstensi menunjukkan bahwa terkadang jenis ekstensi baru paling baik diatasi dengan penyempurnaan API agar penerapannya lancar, atau dengan memperbaiki bug yang tidak terlihat sebelum ekstensi menekankan API dengan cara yang benar. Perpanjangan yang Anda maksud mungkin saja memerlukan pendekatan seperti itu.
Kesimpulannya adalah: jika Anda ingin menerapkan ekstensi atau fitur, jangan ragu untuk membuka masalah dan saya akan memberi Anda petunjuk tentang cara terbaik untuk melakukannya. Ini mungkin menghemat banyak waktu Anda dengan mengizinkan saya meningkatkan API untuk memenuhi kebutuhan ekstensi Anda sebelum Anda melakukan banyak upaya yang sia-sia.
Saya meminta Anda menyadari bahwa saya adalah kepala juru masak dan pencuci botol dalam proyek ini, tanpa sedikit pun keterampilan Vulcan Mind Melding. Saya meminta Anda menjelaskan apa yang ingin Anda terapkan karena saya tidak dapat membaca pikiran Anda. Harap lakukan pengintaian latar belakang seputar kode sumber dan dokumentasi karena saya tidak dapat mentransfer apa yang saya ketahui kepada Anda, tanpa usaha kesediaan Anda.
Jika Anda memiliki aplikasi komersial dan tidak ingin membuat ekstensi sendiri atau ingin mengurangi waktu dan tenaga dalam mengimplementasikan ekstensi dan mengintegrasikan flexmark-java, jangan ragu untuk menghubungi saya. Saya tersedia berdasarkan konsultasi/kontrak.
Terlepas dari namanya, commonmark bukanlah superset atau subset dari varian penurunan harga lainnya. Sebaliknya, ia mengusulkan spesifikasi sintaksis yang standar dan tidak ambigu untuk Markdown "inti" yang asli, sehingga secara efektif memperkenalkan varian lain. Meskipun flexmark secara default sesuai dengan commonmark, parsernya dapat diubah dengan berbagai cara. Kumpulan penyesuaian yang diperlukan untuk meniru parser penurunan harga yang paling umum digunakan tersedia di flexmark sebagai ParserEmulationProfiles
.
Sesuai dengan namanya ParserEmulationProfile
, hanya parser yang disesuaikan dengan jenis penurunan harga tertentu. Menerapkan profil tidak menambahkan fitur di luar yang tersedia pada umumnya. Jika Anda ingin menggunakan flexmark untuk sepenuhnya meniru perilaku pemroses penurunan harga lainnya, Anda harus menyesuaikan parser dan mengonfigurasi ekstensi flexmark yang menyediakan fitur tambahan yang tersedia di parser yang ingin Anda tiru.
Penulisan ulang pengurai daftar untuk mengontrol emulasi prosesor penurunan harga lainnya dengan lebih baik sesuai Emulasi Prosesor Penurunan Harga telah selesai. Penambahan preset prosesor untuk meniru perilaku pemrosesan penurunan harga tertentu dari parser ini merupakan hal yang harus dilakukan.
Beberapa keluarga emulasi melakukan pekerjaan yang lebih baik dalam meniru target mereka dibandingkan yang lain. Sebagian besar upaya diarahkan untuk meniru cara prosesor ini mengurai Markdown standar dan membuat daftar penguraian terkait secara khusus. Untuk prosesor yang memperluas Markdown asli, Anda perlu menambahkan ekstensi yang sudah diterapkan di flexmark-java ke opsi pembuat Parser/Renderer.
Ekstensi akan dimodifikasi untuk menyertakan presetnya sendiri untuk emulasi prosesor tertentu, jika prosesor tersebut menerapkan ekstensi setara.
Jika Anda menemukan ketidaksesuaian, silakan buka masalahnya agar dapat diatasi.
Keluarga prosesor utama diimplementasikan dan beberapa anggota keluarga juga:
Jekyll
CommonMark untuk spesifikasi implementasi terbaru, saat ini CommonMark (spesifikasi 0.28)
Liga/Tanda Umum
CommonMark (spesifikasi 0.27) untuk kompatibilitas versi tertentu
CommonMark (spesifikasi 0.28) untuk kompatibilitas versi tertentu
Komentar GitHub
Penurunan harga.pl
Ekstra Penurunan Harga Php
GitHub Docs (parser penurunan harga GitHub lama)
Kramdown
Indentasi Tetap
MultiPenurunan Harga
pasak
profil untuk merangkum detail konfigurasi untuk varian dalam kelompok tersebut ditambahkan di 0.11.0:
CommonMark (default untuk keluarga): ParserEmulationProfile.COMMONMARK
FixedIndent (default untuk keluarga): ParserEmulationProfile.FIXED_INDENT
Komentar GitHub (hanya CommonMark): ParserEmulationProfile.COMMONMARK
Dokumen GitHub Lama: ParserEmulationProfile.GITHUB_DOC
Kramdown (default untuk keluarga): ParserEmulationProfile.KRAMDOWN
Markdown.pl (default untuk keluarga): ParserEmulationProfile.MARKDOWN
MultiMarkdown: ParserEmulationProfile.MULTI_MARKDOWN
Pegdown, dengan ekstensi pegdown gunakan PegdownOptionsAdapter
di flexmark-profile-pegdown
Pegdown, tanpa ekstensi pegdown ParserEmulationProfile.PEGDOWN
Aturan penguraian blok HTML Pegdown, tanpa ekstensi pegdown ParserEmulationProfile.PEGDOWN_STRICT
flexmark-java adalah cabang dari proyek commonmark-java, dimodifikasi untuk menghasilkan AST yang mencerminkan semua elemen dalam sumber asli, pelacakan posisi sumber lengkap untuk semua elemen dalam AST dan pembuatan PsiTree API Terbuka JetBrains yang lebih mudah.
API diubah untuk memungkinkan kontrol proses penguraian yang lebih terperinci dan dioptimalkan untuk penguraian dengan sejumlah besar ekstensi terpasang. Parser dan ekstensi hadir dengan banyak opsi penyesuaian untuk perilaku parser dan variasi rendering HTML. Tujuan akhirnya adalah agar parser dan renderer dapat meniru parser lain dengan tingkat akurasi yang tinggi.
Motivasi untuk ini adalah kebutuhan untuk mengganti parser pegdown di plugin Markdown Navigator. pegdown memiliki serangkaian fitur yang bagus tetapi kecepatannya secara umum kurang dari ideal dan untuk input patologis hang atau praktis hang selama penguraian.
commonmark-java memiliki arsitektur parsing luar biasa yang mudah dipahami dan diperluas. Tujuannya adalah untuk memastikan bahwa menambahkan pelacakan posisi sumber di AST tidak akan mengubah kemudahan penguraian dan menghasilkan AST lebih dari yang diperlukan.
Alasan memilih commonmark-java sebagai parser adalah: kecepatan, kemudahan pemahaman, kemudahan perluasan, dan kecepatan. Sekarang saya telah mengerjakan ulang inti dan menambahkan beberapa ekstensi, saya sangat puas dengan pilihan saya.
Tujuan lainnya adalah untuk meningkatkan kemampuan ekstensi untuk mengubah perilaku parser sehingga setiap dialek penurunan harga dapat diterapkan melalui mekanisme ekstensi. API opsi yang dapat diperluas telah ditambahkan untuk memungkinkan pengaturan semua opsi di satu tempat. Parser, renderer, dan ekstensi menggunakan opsi ini untuk konfigurasi, termasuk menonaktifkan beberapa parser blok inti.
Ini sedang dalam proses dengan banyak perubahan API. Tidak ada upaya yang dilakukan untuk mempertahankan kompatibilitas API ke proyek asli dan hingga sebagian besar rangkaian fitur selesai, bahkan untuk versi sebelumnya dari proyek ini.
Fitur | flexmark-java | commonmark-java | pegdown |
---|---|---|---|
Waktu penguraian relatif (lebih sedikit lebih baik) | 1x (1) | 0,6x hingga 0,7x (2) | Rata-rata 25x, 20.000x hingga ∞ untuk masukan patologis (3) |
Semua elemen sumber di AST | |||
Elemen AST dengan posisi sumber | dengan beberapa kesalahan dan keanehan | ||
AST dapat dengan mudah dimanipulasi | Pemrosesan pasca AST adalah mekanisme ekstensi | Pemrosesan pasca AST adalah mekanisme ekstensi | bukan suatu pilihan. Tidak ada informasi induk simpul, anak-anak sebagai Daftar<>. |
Elemen AST memiliki posisi sumber terperinci untuk semua bagian | hanya simpul awal/akhir | ||
Dapat menonaktifkan fitur penguraian inti | |||
Parser inti diimplementasikan melalui API ekstensi | pengujian instanceOf untuk parser blok dan kelas simpul tertentu | inti memperlihatkan beberapa titik ekstensi | |
Mudah untuk memahami dan memodifikasi implementasi parser | satu parser PEG dengan interaksi kompleks (3) | ||
Penguraian elemen blok tidak bergantung satu sama lain | semuanya dalam satu tata bahasa PEG | ||
Konfigurasi seragam di seluruh: parser, renderer, dan semua ekstensi | tidak ada yang melebihi daftar ekstensi | int bit menandai untuk inti, tidak ada untuk ekstensi | |
Kinerja penguraian dioptimalkan untuk digunakan dengan ekstensi | menguraikan kinerja untuk inti, ekstensi melakukan apa yang mereka bisa | kinerja bukanlah suatu fitur | |
Kaya fitur dengan banyak opsi konfigurasi dan ekstensi yang siap pakai | ekstensi terbatas, tidak ada pilihan | ||
Definisi ketergantungan prosesor untuk menjamin urutan pemrosesan yang benar | pesanan ditentukan oleh urutan daftar ekstensi, rawan kesalahan | tidak berlaku, inti menentukan di mana pemrosesan ekstensi ditambahkan |
input patologis flexmark-java sebesar 100.000 [
diurai dalam 68 md, 100.000 ]
dalam 57 md, 100.000 [
]
bersarang diurai dalam 55 md
masukan patologis commonmark-java sebesar 100.000 [
diurai dalam 30 md, 100.000 ]
dalam 30 md, 100.000 bersarang [
]
diurai dalam 43 md
pegdown input patologis 17 [
diurai dalam 650 md, 18 [
dalam 1300 md
Opsi parser, item yang ditandai sebagai item tugas harus dilaksanakan, sisanya selesai:
Daftar longgar manual
Daftar bernomor selalu dimulai dengan 1.
Memperbaiki indentasi item daftar, item harus diindentasi minimal 4 spasi
Opsi awal daftar yang santai, memungkinkan daftar dimulai ketika tidak didahului oleh baris kosong.
Masalah depan Jekyll
Elemen tag Jekyll, dengan dukungan untuk {% include file %}
, Sertakan Penurunan Harga dan Konten File HTML
Pengkodean URL tautan GitBook. Tidak berlaku
Node komentar HTML: Blokir dan Sebaris
URL Gambar multi-baris
Elemen Contoh Spesifikasi
HTML sebaris: semua, non-komentar, komentar
Blok HTML: semua, non-komentar, komentar
Singkatan
Catatan kaki
Definisi
Daftar isi
Dicoret
Daftar Tugas
Tidak Ada Ruang Header Atx
Tidak ada indentasi Header
Hard Wraps (dicapai dengan opsi SOFT_BREAK diubah menjadi "<br />"
)
Opsi Aturan SDM yang Santai
Tautan Wiki
Blok kode berpagar
Tautan jangkar untuk header dengan pembuatan id otomatis
Opsi Rentang Tabel yang akan diterapkan untuk ekstensi tabel
Tautan Wiki dengan sintaks GitHub dan Creole
Pintasan Emoji dengan menggunakan opsi URL emoji GitHub
Kutipan
Cerdas
Berkenaan dgn percetakan
Ekstensi GitHub
Sintaks GitHub
Penerbitan
Menekan
Ekstensi Prosesor
Penekanan Sintaks Commonmark
Saya sangat senang dengan keputusan untuk beralih ke parser berbasis commonmark-java untuk proyek saya sendiri. Meskipun saya harus melakukan operasi besar pada bagian dalamnya untuk mendapatkan pelacakan posisi sumber lengkap dan AST yang cocok dengan elemen sumber, sangat menyenangkan untuk bekerja dengannya dan sekarang menyenangkan untuk diperluas. Jika Anda tidak memerlukan elemen tingkat sumber AST atau apa pun yang ditambahkan flexmark-java dan CommonMark adalah parser penurunan harga target Anda, maka saya mendorong Anda untuk menggunakan commonmark-java karena ini adalah pilihan yang sangat baik untuk kebutuhan Anda dan kinerjanya tidak menurun untuk overhead fitur yang tidak akan Anda gunakan.
Terbaru, 28 Jan 2017 flexmark-java 0.13.1, intellij-markdown dari CE EAP 2017, commonmark-java 0.8.0:
Mengajukan | commonmark-java | flexmark-java | penurunan harga intellij | pegdown |
---|---|---|---|---|
README-LAMBAT | 0,420 ms | 0,812 mdtk | 2,027 md | 15,483 md |
VERSI | 0,743 md | 1,425 md | 4,057 md | 42,936 md |
commonMarkSpec | 31,025 md | 44,465 md | 600.654ms | 575.131ms |
contoh_penurunan harga | 8,490 md | 10,502 ms | 223.593ms | 983.640ms |
spesifikasi | 4,719 md | 6,249 md | 35,883 md | 307.176ms |
meja | 0,229 mdtk | 0,623 ms | 0,800 ms | 3,642 md |
format tabel | 1,385 md | 2,881 md | 4,150 md | 23,592 md |
membungkus | 3,804 ms | 4,589 md | 16,609 md | 86.383ms |
Rasio di atas:
Mengajukan | commonmark-java | flexmark-java | penurunan harga intellij | pegdown |
---|---|---|---|---|
README-LAMBAT | 1,00 | 1.93 | 4.83 | 36.88 |
VERSI | 1,00 | 1.92 | 5.46 | 57.78 |
commonMarkSpec | 1,00 | 1.43 | 19.36 | 18.54 |
contoh_penurunan harga | 1,00 | 1.24 | 26.34 | 115.86 |
spesifikasi | 1,00 | 1.32 | 7.60 | 65.09 |
meja | 1,00 | 2.72 | 3.49 | 15.90 |
format tabel | 1,00 | 2.08 | 3.00 | 17.03 |
membungkus | 1,00 | 1.21 | 4.37 | 22.71 |
keseluruhan | 1,00 | 1.41 | 17.47 | 40.11 |
Mengajukan | commonmark-java | flexmark-java | penurunan harga intellij | pegdown |
---|---|---|---|---|
README-LAMBAT | 0,52 | 1,00 | 2.50 | 19.07 |
VERSI | 0,52 | 1,00 | 2.85 | 30.12 |
commonMarkSpec | 0,70 | 1,00 | 13.51 | 12.93 |
contoh_penurunan harga | 0,81 | 1,00 | 21.29 | 93.66 |
spesifikasi | 0,76 | 1,00 | 5.74 | 49.15 |
meja | 0,37 | 1,00 | 1.28 | 5.85 |
format tabel | 0,48 | 1,00 | 1.44 | 8.19 |
membungkus | 0,83 | 1,00 | 3.62 | 18.83 |
keseluruhan | 0,71 | 1,00 | 12.41 | 28.48 |
Karena kedua file ini mewakili masukan patologis untuk pegdown, saya tidak lagi menjalankannya sebagai bagian dari tolok ukur untuk mencegah hasil yang menyimpang. Hasilnya ada di sini untuk anak cucu.
Mengajukan | commonmark-java | flexmark-java | penurunan harga intellij | pegdown |
---|---|---|---|---|
hang-pegdown | 0,082 ms | 0,326 ms | 0,342 ms | 659.138ms |
hang-pegdown2 | 0,048 ms | 0,235 mdtk | 0,198 ms | 1312.944ms |
Rasio di atas:
Mengajukan | commonmark-java | flexmark-java | penurunan harga intellij | pegdown |
---|---|---|---|---|
hang-pegdown | 1,00 | 3,98 | 4.17 | 8048.38 |
hang-pegdown2 | 1,00 | 4.86 | 4.10 | 27207.32 |
keseluruhan | 1,00 | 4.30 | 4.15 | 15151.91 |
Mengajukan | commonmark-java | flexmark-java | penurunan harga intellij | pegdown |
---|---|---|---|---|
hang-pegdown | 0,25 | 1,00 | 1.05 | 2024.27 |
hang-pegdown2 | 0,21 | 1,00 | 0,84 | 5594.73 |
keseluruhan | 0,23 | 1,00 | 0,96 | 3519.73 |
VERSION.md adalah file log versi yang saya gunakan untuk Markdown Navigator
commonMarkSpec.md adalah file baris 33k yang digunakan dalam rangkaian pengujian intellij-markdown untuk evaluasi kinerja.
spec.txt file penurunan spesifikasi commonmark di proyek commonmark-java
hang-pegdown.md adalah file yang berisi satu baris 17 karakter [[[[[[[[[[[[[[[[[
yang menyebabkan pegdown masuk ke waktu penguraian hiper-eksponensial.
hang-pegdown2.md file yang berisi satu baris 18 karakter [[[[[[[[[[[[[[[[[[
yang menyebabkan pegdown masuk ke waktu penguraian hiper-eksponensial.
wrap.md adalah file yang saya gunakan untuk menguji kinerja pengetikan wrap hanya untuk menemukan bahwa itu tidak ada hubungannya dengan wrap pada kode pengetikan ketika 0,1 detik dibutuhkan oleh pegdown untuk mengurai file. Dalam plugin, penguraian dapat terjadi lebih dari sekali: jalur penyorot sintaksis, jalur pembuatan pohon psi, anotator eksternal.
markdown_example.md file dengan 10.000+ baris berisi 500kB+ teks.
Permintaan tarik, masalah, dan komentar diterima. Untuk permintaan tarik:
Tambahkan pengujian untuk fitur baru dan perbaikan bug, sebaiknya dalam format ast_spec.md
Ikuti gaya yang ada untuk membuat penggabungan lebih mudah, sebanyak mungkin: 4 spasi indentasi, spasi tambahan dipangkas.
Hak Cipta (c) 2015-2016 Atlassian dan lainnya.
Hak Cipta (c) 2016-2023, Vladimir Schneider,
Berlisensi BSD (2-klausul), lihat file LICENSE.txt.