git: e04f41e0ea13 - main - textproc/mdq: New port: Like jq but for Markdown: find specific elements in a md doc

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Mon, 24 Feb 2025 10:27:20 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=e04f41e0ea133043f278fae4f971ad69f20a89d5

commit e04f41e0ea133043f278fae4f971ad69f20a89d5
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2025-02-24 10:27:10 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2025-02-24 10:27:18 +0000

    textproc/mdq: New port: Like jq but for Markdown: find specific elements in a md doc
---
 textproc/Makefile      |   1 +
 textproc/mdq/Makefile  |  83 +++++++++++++++++++++++++++++++++++
 textproc/mdq/distinfo  | 117 +++++++++++++++++++++++++++++++++++++++++++++++++
 textproc/mdq/pkg-descr |   6 +++
 4 files changed, 207 insertions(+)

diff --git a/textproc/Makefile b/textproc/Makefile
index ee29b1dc883a..ba263bc9be9b 100644
--- a/textproc/Makefile
+++ b/textproc/Makefile
@@ -486,6 +486,7 @@
     SUBDIR += mdbook
     SUBDIR += mdbook-linkcheck
     SUBDIR += mdbook-mermaid
+    SUBDIR += mdq
     SUBDIR += meilisearch
     SUBDIR += meld
     SUBDIR += metauml
diff --git a/textproc/mdq/Makefile b/textproc/mdq/Makefile
new file mode 100644
index 000000000000..f4e5187f30a8
--- /dev/null
+++ b/textproc/mdq/Makefile
@@ -0,0 +1,83 @@
+PORTNAME=	mdq
+DISTVERSIONPREFIX=	v
+DISTVERSION=	0.3.0
+CATEGORIES=	textproc
+
+MAINTAINER=	yuri@FreeBSD.org
+COMMENT=	Like jq but for Markdown: find specific elements in a md doc
+WWW=		https://github.com/yshavit/mdq
+
+LICENSE=	APACHE20 MIT
+LICENSE_COMB=	dual
+LICENSE_FILE_APACHE20=	${WRKSRC}/LICENSE-APACHE
+LICENSE_FILE_MIT=	${WRKSRC}/LICENSE-MIT
+
+USES=		cargo
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	yshavit
+
+CARGO_CRATES=	aho-corasick-1.1.3 \
+		anstream-0.6.18 \
+		anstyle-1.0.10 \
+		anstyle-parse-0.2.6 \
+		anstyle-query-1.1.2 \
+		anstyle-wincon-3.0.7 \
+		clap-4.5.26 \
+		clap_builder-4.5.26 \
+		clap_derive-4.5.24 \
+		clap_lex-0.7.4 \
+		colorchoice-1.0.3 \
+		equivalent-1.0.1 \
+		hashbrown-0.15.2 \
+		heck-0.5.0 \
+		indexmap-2.7.0 \
+		indoc-2.0.5 \
+		is_terminal_polyfill-1.70.1 \
+		itoa-1.0.14 \
+		lazy_static-1.5.0 \
+		libc-0.2.169 \
+		markdown-1.0.0-alpha.21 \
+		memchr-2.7.4 \
+		once_cell-1.20.2 \
+		paste-1.0.15 \
+		proc-macro2-1.0.93 \
+		quote-1.0.38 \
+		regex-1.11.1 \
+		regex-automata-0.4.9 \
+		regex-syntax-0.8.5 \
+		ryu-1.0.18 \
+		serde-1.0.217 \
+		serde_derive-1.0.217 \
+		serde_json-1.0.136 \
+		serde_spanned-0.6.8 \
+		strsim-0.11.1 \
+		syn-2.0.96 \
+		termsize-0.1.9 \
+		toml-0.8.19 \
+		toml_datetime-0.6.8 \
+		toml_edit-0.22.22 \
+		unicode-id-0.3.5 \
+		unicode-ident-1.0.14 \
+		utf8parse-0.2.2 \
+		winapi-0.3.9 \
+		winapi-i686-pc-windows-gnu-0.4.0 \
+		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		windows-sys-0.59.0 \
+		windows-targets-0.52.6 \
+		windows_aarch64_gnullvm-0.52.6 \
+		windows_aarch64_msvc-0.52.6 \
+		windows_i686_gnu-0.52.6 \
+		windows_i686_gnullvm-0.52.6 \
+		windows_i686_msvc-0.52.6 \
+		windows_x86_64_gnu-0.52.6 \
+		windows_x86_64_gnullvm-0.52.6 \
+		windows_x86_64_msvc-0.52.6 \
+		winnow-0.6.24
+
+PLIST_FILES=	bin/${PORTNAME}
+
+post-install:
+	@${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+
+.include <bsd.port.mk>
diff --git a/textproc/mdq/distinfo b/textproc/mdq/distinfo
new file mode 100644
index 000000000000..3c5f1cb13b06
--- /dev/null
+++ b/textproc/mdq/distinfo
@@ -0,0 +1,117 @@
+TIMESTAMP = 1740392353
+SHA256 (rust/crates/aho-corasick-1.1.3.crate) = 8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916
+SIZE (rust/crates/aho-corasick-1.1.3.crate) = 183311
+SHA256 (rust/crates/anstream-0.6.18.crate) = 8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b
+SIZE (rust/crates/anstream-0.6.18.crate) = 29681
+SHA256 (rust/crates/anstyle-1.0.10.crate) = 55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9
+SIZE (rust/crates/anstyle-1.0.10.crate) = 15725
+SHA256 (rust/crates/anstyle-parse-0.2.6.crate) = 3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9
+SIZE (rust/crates/anstyle-parse-0.2.6.crate) = 22343
+SHA256 (rust/crates/anstyle-query-1.1.2.crate) = 79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c
+SIZE (rust/crates/anstyle-query-1.1.2.crate) = 9969
+SHA256 (rust/crates/anstyle-wincon-3.0.7.crate) = ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e
+SIZE (rust/crates/anstyle-wincon-3.0.7.crate) = 12400
+SHA256 (rust/crates/clap-4.5.26.crate) = a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783
+SIZE (rust/crates/clap-4.5.26.crate) = 56474
+SHA256 (rust/crates/clap_builder-4.5.26.crate) = 96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121
+SIZE (rust/crates/clap_builder-4.5.26.crate) = 167961
+SHA256 (rust/crates/clap_derive-4.5.24.crate) = 54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c
+SIZE (rust/crates/clap_derive-4.5.24.crate) = 30669
+SHA256 (rust/crates/clap_lex-0.7.4.crate) = f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6
+SIZE (rust/crates/clap_lex-0.7.4.crate) = 12858
+SHA256 (rust/crates/colorchoice-1.0.3.crate) = 5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990
+SIZE (rust/crates/colorchoice-1.0.3.crate) = 7923
+SHA256 (rust/crates/equivalent-1.0.1.crate) = 5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5
+SIZE (rust/crates/equivalent-1.0.1.crate) = 6615
+SHA256 (rust/crates/hashbrown-0.15.2.crate) = bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289
+SIZE (rust/crates/hashbrown-0.15.2.crate) = 138478
+SHA256 (rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea
+SIZE (rust/crates/heck-0.5.0.crate) = 11517
+SHA256 (rust/crates/indexmap-2.7.0.crate) = 62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f
+SIZE (rust/crates/indexmap-2.7.0.crate) = 85335
+SHA256 (rust/crates/indoc-2.0.5.crate) = b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5
+SIZE (rust/crates/indoc-2.0.5.crate) = 14396
+SHA256 (rust/crates/is_terminal_polyfill-1.70.1.crate) = 7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf
+SIZE (rust/crates/is_terminal_polyfill-1.70.1.crate) = 7492
+SHA256 (rust/crates/itoa-1.0.14.crate) = d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674
+SIZE (rust/crates/itoa-1.0.14.crate) = 11210
+SHA256 (rust/crates/lazy_static-1.5.0.crate) = bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe
+SIZE (rust/crates/lazy_static-1.5.0.crate) = 14025
+SHA256 (rust/crates/libc-0.2.169.crate) = b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a
+SIZE (rust/crates/libc-0.2.169.crate) = 757901
+SHA256 (rust/crates/markdown-1.0.0-alpha.21.crate) = a6491e6c702bf7e3b24e769d800746d5f2c06a6c6a2db7992612e0f429029e81
+SIZE (rust/crates/markdown-1.0.0-alpha.21.crate) = 215648
+SHA256 (rust/crates/memchr-2.7.4.crate) = 78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3
+SIZE (rust/crates/memchr-2.7.4.crate) = 96670
+SHA256 (rust/crates/once_cell-1.20.2.crate) = 1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775
+SIZE (rust/crates/once_cell-1.20.2.crate) = 33394
+SHA256 (rust/crates/paste-1.0.15.crate) = 57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a
+SIZE (rust/crates/paste-1.0.15.crate) = 18374
+SHA256 (rust/crates/proc-macro2-1.0.93.crate) = 60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99
+SIZE (rust/crates/proc-macro2-1.0.93.crate) = 52388
+SHA256 (rust/crates/quote-1.0.38.crate) = 0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc
+SIZE (rust/crates/quote-1.0.38.crate) = 31252
+SHA256 (rust/crates/regex-1.11.1.crate) = b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191
+SIZE (rust/crates/regex-1.11.1.crate) = 254170
+SHA256 (rust/crates/regex-automata-0.4.9.crate) = 809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908
+SIZE (rust/crates/regex-automata-0.4.9.crate) = 618525
+SHA256 (rust/crates/regex-syntax-0.8.5.crate) = 2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c
+SIZE (rust/crates/regex-syntax-0.8.5.crate) = 357541
+SHA256 (rust/crates/ryu-1.0.18.crate) = f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f
+SIZE (rust/crates/ryu-1.0.18.crate) = 47713
+SHA256 (rust/crates/serde-1.0.217.crate) = 02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70
+SIZE (rust/crates/serde-1.0.217.crate) = 79019
+SHA256 (rust/crates/serde_derive-1.0.217.crate) = 5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0
+SIZE (rust/crates/serde_derive-1.0.217.crate) = 57749
+SHA256 (rust/crates/serde_json-1.0.136.crate) = 336a0c23cf42a38d9eaa7cd22c7040d04e1228a19a933890805ffd00a16437d2
+SIZE (rust/crates/serde_json-1.0.136.crate) = 154504
+SHA256 (rust/crates/serde_spanned-0.6.8.crate) = 87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1
+SIZE (rust/crates/serde_spanned-0.6.8.crate) = 9330
+SHA256 (rust/crates/strsim-0.11.1.crate) = 7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f
+SIZE (rust/crates/strsim-0.11.1.crate) = 14266
+SHA256 (rust/crates/syn-2.0.96.crate) = d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80
+SIZE (rust/crates/syn-2.0.96.crate) = 297497
+SHA256 (rust/crates/termsize-0.1.9.crate) = 6f11ff5c25c172608d5b85e2fb43ee9a6d683a7f4ab7f96ae07b3d8b590368fd
+SIZE (rust/crates/termsize-0.1.9.crate) = 6216
+SHA256 (rust/crates/toml-0.8.19.crate) = a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e
+SIZE (rust/crates/toml-0.8.19.crate) = 50974
+SHA256 (rust/crates/toml_datetime-0.6.8.crate) = 0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41
+SIZE (rust/crates/toml_datetime-0.6.8.crate) = 12028
+SHA256 (rust/crates/toml_edit-0.22.22.crate) = 4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5
+SIZE (rust/crates/toml_edit-0.22.22.crate) = 106387
+SHA256 (rust/crates/unicode-id-0.3.5.crate) = 10103c57044730945224467c09f71a4db0071c123a0648cc3e818913bde6b561
+SIZE (rust/crates/unicode-id-0.3.5.crate) = 16807
+SHA256 (rust/crates/unicode-ident-1.0.14.crate) = adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83
+SIZE (rust/crates/unicode-ident-1.0.14.crate) = 47547
+SHA256 (rust/crates/utf8parse-0.2.2.crate) = 06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821
+SIZE (rust/crates/utf8parse-0.2.2.crate) = 13499
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/windows-sys-0.59.0.crate) = 1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b
+SIZE (rust/crates/windows-sys-0.59.0.crate) = 2387323
+SHA256 (rust/crates/windows-targets-0.52.6.crate) = 9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973
+SIZE (rust/crates/windows-targets-0.52.6.crate) = 6403
+SHA256 (rust/crates/windows_aarch64_gnullvm-0.52.6.crate) = 32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3
+SIZE (rust/crates/windows_aarch64_gnullvm-0.52.6.crate) = 435718
+SHA256 (rust/crates/windows_aarch64_msvc-0.52.6.crate) = 09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469
+SIZE (rust/crates/windows_aarch64_msvc-0.52.6.crate) = 832615
+SHA256 (rust/crates/windows_i686_gnu-0.52.6.crate) = 8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b
+SIZE (rust/crates/windows_i686_gnu-0.52.6.crate) = 880402
+SHA256 (rust/crates/windows_i686_gnullvm-0.52.6.crate) = 0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66
+SIZE (rust/crates/windows_i686_gnullvm-0.52.6.crate) = 475940
+SHA256 (rust/crates/windows_i686_msvc-0.52.6.crate) = 240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66
+SIZE (rust/crates/windows_i686_msvc-0.52.6.crate) = 901163
+SHA256 (rust/crates/windows_x86_64_gnu-0.52.6.crate) = 147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78
+SIZE (rust/crates/windows_x86_64_gnu-0.52.6.crate) = 836363
+SHA256 (rust/crates/windows_x86_64_gnullvm-0.52.6.crate) = 24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d
+SIZE (rust/crates/windows_x86_64_gnullvm-0.52.6.crate) = 435707
+SHA256 (rust/crates/windows_x86_64_msvc-0.52.6.crate) = 589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec
+SIZE (rust/crates/windows_x86_64_msvc-0.52.6.crate) = 832564
+SHA256 (rust/crates/winnow-0.6.24.crate) = c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a
+SIZE (rust/crates/winnow-0.6.24.crate) = 165680
+SHA256 (yshavit-mdq-v0.3.0_GH0.tar.gz) = 0a62a73f762e6ffa38dc914c585916d50d093c282a4805d6abd3cf1896a14293
+SIZE (yshavit-mdq-v0.3.0_GH0.tar.gz) = 94024
diff --git a/textproc/mdq/pkg-descr b/textproc/mdq/pkg-descr
new file mode 100644
index 000000000000..7b7736873cfa
--- /dev/null
+++ b/textproc/mdq/pkg-descr
@@ -0,0 +1,6 @@
+mdq aims to do for Markdown what jq does for JSON: provide an easy way to zero
+in on specific parts of a document.
+
+For example, GitHub PRs are Markdown documents, and some organizations have
+specific templates with checklists for all reviewers to complete. Enforcing
+these often requires ugly regexes that are a pain to write and worse to debug.