git: fde67e2e6387 - main - textproc/xled: New port: Sed and awk for tabular data

From: Jimmy Olgeni <olgeni_at_FreeBSD.org>
Date: Thu, 27 Aug 2026 15:43:48 UTC
The branch main has been updated by olgeni:

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

commit fde67e2e63878dc1ad45c8fc1e136086cae75636
Author:     Jimmy Olgeni <olgeni@FreeBSD.org>
AuthorDate: 2026-08-25 20:34:45 +0000
Commit:     Jimmy Olgeni <olgeni@FreeBSD.org>
CommitDate: 2026-08-27 15:43:31 +0000

    textproc/xled: New port: Sed and awk for tabular data
---
 textproc/Makefile             |   1 +
 textproc/xled/Makefile        |  19 +++++
 textproc/xled/Makefile.crates |  79 +++++++++++++++++++++
 textproc/xled/distinfo        | 161 ++++++++++++++++++++++++++++++++++++++++++
 textproc/xled/pkg-descr       |   8 +++
 5 files changed, 268 insertions(+)

diff --git a/textproc/Makefile b/textproc/Makefile
index dfe6635b991f..66a8e6f1533a 100644
--- a/textproc/Makefile
+++ b/textproc/Makefile
@@ -2309,6 +2309,7 @@
     SUBDIR += xhtml-basic
     SUBDIR += xhtml-modularization
     SUBDIR += xhtml1-xsd
+    SUBDIR += xled
     SUBDIR += xlhtml
     SUBDIR += xlnt
     SUBDIR += xlreader
diff --git a/textproc/xled/Makefile b/textproc/xled/Makefile
new file mode 100644
index 000000000000..2113bc9d9625
--- /dev/null
+++ b/textproc/xled/Makefile
@@ -0,0 +1,19 @@
+PORTNAME=	xled
+DISTVERSIONPREFIX=	v
+DISTVERSION=	0.12.1
+CATEGORIES=	textproc
+
+MAINTAINER=	olgeni@FreeBSD.org
+COMMENT=	Sed and awk for tabular data
+WWW=		https://excelano.com/xled/
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+USES=		cargo
+USE_GITHUB=	yes
+GH_ACCOUNT=	excelano
+
+PLIST_FILES=	bin/xled
+
+.include <bsd.port.mk>
diff --git a/textproc/xled/Makefile.crates b/textproc/xled/Makefile.crates
new file mode 100644
index 000000000000..5d8c65ad7079
--- /dev/null
+++ b/textproc/xled/Makefile.crates
@@ -0,0 +1,79 @@
+CARGO_CRATES=	aho-corasick-1.1.4 \
+		android_system_properties-0.1.5 \
+		anstream-1.0.0 \
+		anstyle-1.0.14 \
+		anstyle-parse-1.0.0 \
+		anstyle-query-1.1.5 \
+		anstyle-wincon-3.0.11 \
+		autocfg-1.5.1 \
+		bitflags-2.13.0 \
+		bumpalo-3.20.3 \
+		cc-1.4.0 \
+		cfg-if-1.0.4 \
+		cfg_aliases-0.2.2 \
+		chrono-0.4.45 \
+		clap-4.6.6 \
+		clap_builder-4.6.6 \
+		clap_derive-4.6.4 \
+		clap_lex-1.1.0 \
+		clipboard-win-5.4.1 \
+		colorchoice-1.0.5 \
+		core-foundation-sys-0.8.7 \
+		csv-1.4.0 \
+		csv-core-0.1.13 \
+		encsniff-0.2.0 \
+		endian-type-0.2.0 \
+		error-code-3.3.2 \
+		find-msvc-tools-0.1.9 \
+		futures-core-0.3.33 \
+		futures-task-0.3.33 \
+		futures-util-0.3.33 \
+		heck-0.5.0 \
+		home-0.5.12 \
+		iana-time-zone-0.1.65 \
+		iana-time-zone-haiku-0.1.2 \
+		is_terminal_polyfill-1.70.2 \
+		itoa-1.0.18 \
+		js-sys-0.3.103 \
+		libc-0.2.186 \
+		log-0.4.33 \
+		memchr-2.8.2 \
+		nibble_vec-0.1.0 \
+		nix-0.31.3 \
+		num-traits-0.2.19 \
+		once_cell-1.21.4 \
+		once_cell_polyfill-1.70.2 \
+		pin-project-lite-0.2.17 \
+		proc-macro2-1.0.106 \
+		quote-1.0.46 \
+		radix_trie-0.3.0 \
+		regex-1.13.1 \
+		regex-automata-0.4.16 \
+		regex-syntax-0.8.11 \
+		rustversion-1.0.23 \
+		rustyline-18.0.1 \
+		ryu-1.0.23 \
+		serde_core-1.0.228 \
+		serde_derive-1.0.228 \
+		shlex-2.0.1 \
+		slab-0.4.12 \
+		smallvec-1.15.2 \
+		strsim-0.11.1 \
+		syn-2.0.118 \
+		syn-3.0.3 \
+		unicode-ident-1.0.24 \
+		unicode-segmentation-1.13.3 \
+		unicode-width-0.2.2 \
+		utf8parse-0.2.2 \
+		wasm-bindgen-0.2.126 \
+		wasm-bindgen-macro-0.2.126 \
+		wasm-bindgen-macro-support-0.2.126 \
+		wasm-bindgen-shared-0.2.126 \
+		windows-core-0.62.2 \
+		windows-implement-0.60.2 \
+		windows-interface-0.59.3 \
+		windows-link-0.2.1 \
+		windows-result-0.4.1 \
+		windows-strings-0.5.1 \
+		windows-sys-0.61.2 \
+		xaddr-0.2.1
diff --git a/textproc/xled/distinfo b/textproc/xled/distinfo
new file mode 100644
index 000000000000..0617302e913a
--- /dev/null
+++ b/textproc/xled/distinfo
@@ -0,0 +1,161 @@
+TIMESTAMP = 1787689403
+SHA256 (rust/crates/aho-corasick-1.1.4.crate) = ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301
+SIZE (rust/crates/aho-corasick-1.1.4.crate) = 184015
+SHA256 (rust/crates/android_system_properties-0.1.5.crate) = 819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311
+SIZE (rust/crates/android_system_properties-0.1.5.crate) = 5243
+SHA256 (rust/crates/anstream-1.0.0.crate) = 824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d
+SIZE (rust/crates/anstream-1.0.0.crate) = 28916
+SHA256 (rust/crates/anstyle-1.0.14.crate) = 940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000
+SIZE (rust/crates/anstyle-1.0.14.crate) = 17787
+SHA256 (rust/crates/anstyle-parse-1.0.0.crate) = 52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e
+SIZE (rust/crates/anstyle-parse-1.0.0.crate) = 22042
+SHA256 (rust/crates/anstyle-query-1.1.5.crate) = 40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc
+SIZE (rust/crates/anstyle-query-1.1.5.crate) = 10264
+SHA256 (rust/crates/anstyle-wincon-3.0.11.crate) = 291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d
+SIZE (rust/crates/anstyle-wincon-3.0.11.crate) = 12638
+SHA256 (rust/crates/autocfg-1.5.1.crate) = f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53
+SIZE (rust/crates/autocfg-1.5.1.crate) = 18911
+SHA256 (rust/crates/bitflags-2.13.0.crate) = b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8
+SIZE (rust/crates/bitflags-2.13.0.crate) = 51280
+SHA256 (rust/crates/bumpalo-3.20.3.crate) = 72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649
+SIZE (rust/crates/bumpalo-3.20.3.crate) = 98671
+SHA256 (rust/crates/cc-1.4.0.crate) = 5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9
+SIZE (rust/crates/cc-1.4.0.crate) = 97878
+SHA256 (rust/crates/cfg-if-1.0.4.crate) = 9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801
+SIZE (rust/crates/cfg-if-1.0.4.crate) = 9360
+SHA256 (rust/crates/cfg_aliases-0.2.2.crate) = f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527
+SIZE (rust/crates/cfg_aliases-0.2.2.crate) = 6527
+SHA256 (rust/crates/chrono-0.4.45.crate) = 1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327
+SIZE (rust/crates/chrono-0.4.45.crate) = 240866
+SHA256 (rust/crates/clap-4.6.6.crate) = 473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca
+SIZE (rust/crates/clap-4.6.6.crate) = 64815
+SHA256 (rust/crates/clap_builder-4.6.6.crate) = 7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889
+SIZE (rust/crates/clap_builder-4.6.6.crate) = 171756
+SHA256 (rust/crates/clap_derive-4.6.4.crate) = d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061
+SIZE (rust/crates/clap_derive-4.6.4.crate) = 33533
+SHA256 (rust/crates/clap_lex-1.1.0.crate) = c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9
+SIZE (rust/crates/clap_lex-1.1.0.crate) = 13470
+SHA256 (rust/crates/clipboard-win-5.4.1.crate) = bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4
+SIZE (rust/crates/clipboard-win-5.4.1.crate) = 20994
+SHA256 (rust/crates/colorchoice-1.0.5.crate) = 1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570
+SIZE (rust/crates/colorchoice-1.0.5.crate) = 8187
+SHA256 (rust/crates/core-foundation-sys-0.8.7.crate) = 773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b
+SIZE (rust/crates/core-foundation-sys-0.8.7.crate) = 37712
+SHA256 (rust/crates/csv-1.4.0.crate) = 52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938
+SIZE (rust/crates/csv-1.4.0.crate) = 888642
+SHA256 (rust/crates/csv-core-0.1.13.crate) = 704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782
+SIZE (rust/crates/csv-core-0.1.13.crate) = 26119
+SHA256 (rust/crates/encsniff-0.2.0.crate) = 7c664255d6421230324c0c075a57d3997cf1129f2f6e97e7ba3faff9771299c5
+SIZE (rust/crates/encsniff-0.2.0.crate) = 11120
+SHA256 (rust/crates/endian-type-0.2.0.crate) = 869b0adbda23651a9c5c0c3d270aac9fcb52e8622a8f2b17e57802d7791962f2
+SIZE (rust/crates/endian-type-0.2.0.crate) = 4006
+SHA256 (rust/crates/error-code-3.3.2.crate) = dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59
+SIZE (rust/crates/error-code-3.3.2.crate) = 8516
+SHA256 (rust/crates/find-msvc-tools-0.1.9.crate) = 5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582
+SIZE (rust/crates/find-msvc-tools-0.1.9.crate) = 31493
+SHA256 (rust/crates/futures-core-0.3.33.crate) = 2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7
+SIZE (rust/crates/futures-core-0.3.33.crate) = 14691
+SHA256 (rust/crates/futures-task-0.3.33.crate) = b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109
+SIZE (rust/crates/futures-task-0.3.33.crate) = 11381
+SHA256 (rust/crates/futures-util-0.3.33.crate) = a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa
+SIZE (rust/crates/futures-util-0.3.33.crate) = 169725
+SHA256 (rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea
+SIZE (rust/crates/heck-0.5.0.crate) = 11517
+SHA256 (rust/crates/home-0.5.12.crate) = cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d
+SIZE (rust/crates/home-0.5.12.crate) = 9445
+SHA256 (rust/crates/iana-time-zone-0.1.65.crate) = e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470
+SIZE (rust/crates/iana-time-zone-0.1.65.crate) = 34079
+SHA256 (rust/crates/iana-time-zone-haiku-0.1.2.crate) = f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f
+SIZE (rust/crates/iana-time-zone-haiku-0.1.2.crate) = 7185
+SHA256 (rust/crates/is_terminal_polyfill-1.70.2.crate) = a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695
+SIZE (rust/crates/is_terminal_polyfill-1.70.2.crate) = 7548
+SHA256 (rust/crates/itoa-1.0.18.crate) = 8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682
+SIZE (rust/crates/itoa-1.0.18.crate) = 15935
+SHA256 (rust/crates/js-sys-0.3.103.crate) = 53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102
+SIZE (rust/crates/js-sys-0.3.103.crate) = 108366
+SHA256 (rust/crates/libc-0.2.186.crate) = 68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66
+SIZE (rust/crates/libc-0.2.186.crate) = 821883
+SHA256 (rust/crates/log-0.4.33.crate) = 0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad
+SIZE (rust/crates/log-0.4.33.crate) = 52997
+SHA256 (rust/crates/memchr-2.8.2.crate) = 88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4
+SIZE (rust/crates/memchr-2.8.2.crate) = 99069
+SHA256 (rust/crates/nibble_vec-0.1.0.crate) = 77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43
+SIZE (rust/crates/nibble_vec-0.1.0.crate) = 11796
+SHA256 (rust/crates/nix-0.31.3.crate) = cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d
+SIZE (rust/crates/nix-0.31.3.crate) = 347476
+SHA256 (rust/crates/num-traits-0.2.19.crate) = 071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841
+SIZE (rust/crates/num-traits-0.2.19.crate) = 51631
+SHA256 (rust/crates/once_cell-1.21.4.crate) = 9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50
+SIZE (rust/crates/once_cell-1.21.4.crate) = 35010
+SHA256 (rust/crates/once_cell_polyfill-1.70.2.crate) = 384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe
+SIZE (rust/crates/once_cell_polyfill-1.70.2.crate) = 7448
+SHA256 (rust/crates/pin-project-lite-0.2.17.crate) = a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd
+SIZE (rust/crates/pin-project-lite-0.2.17.crate) = 31034
+SHA256 (rust/crates/proc-macro2-1.0.106.crate) = 8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934
+SIZE (rust/crates/proc-macro2-1.0.106.crate) = 59765
+SHA256 (rust/crates/quote-1.0.46.crate) = dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368
+SIZE (rust/crates/quote-1.0.46.crate) = 31628
+SHA256 (rust/crates/radix_trie-0.3.0.crate) = 3b4431027dcd37fc2a73ef740b5f233aa805897935b8bce0195e41bbf9a3289a
+SIZE (rust/crates/radix_trie-0.3.0.crate) = 249805
+SHA256 (rust/crates/regex-1.13.1.crate) = f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d
+SIZE (rust/crates/regex-1.13.1.crate) = 157118
+SHA256 (rust/crates/regex-automata-0.4.16.crate) = 8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad
+SIZE (rust/crates/regex-automata-0.4.16.crate) = 627556
+SHA256 (rust/crates/regex-syntax-0.8.11.crate) = d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4
+SIZE (rust/crates/regex-syntax-0.8.11.crate) = 359055
+SHA256 (rust/crates/rustversion-1.0.23.crate) = cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f
+SIZE (rust/crates/rustversion-1.0.23.crate) = 21013
+SHA256 (rust/crates/rustyline-18.0.1.crate) = 53f6a737db68eb1a8ccff86b584b2fc13eca6a7bb6f78ebc7c529547e3ab9684
+SIZE (rust/crates/rustyline-18.0.1.crate) = 137919
+SHA256 (rust/crates/ryu-1.0.23.crate) = 9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f
+SIZE (rust/crates/ryu-1.0.23.crate) = 52823
+SHA256 (rust/crates/serde_core-1.0.228.crate) = 41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad
+SIZE (rust/crates/serde_core-1.0.228.crate) = 63111
+SHA256 (rust/crates/serde_derive-1.0.228.crate) = d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79
+SIZE (rust/crates/serde_derive-1.0.228.crate) = 59605
+SHA256 (rust/crates/shlex-2.0.1.crate) = f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba
+SIZE (rust/crates/shlex-2.0.1.crate) = 19332
+SHA256 (rust/crates/slab-0.4.12.crate) = 0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5
+SIZE (rust/crates/slab-0.4.12.crate) = 19080
+SHA256 (rust/crates/smallvec-1.15.2.crate) = 8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90
+SIZE (rust/crates/smallvec-1.15.2.crate) = 34899
+SHA256 (rust/crates/strsim-0.11.1.crate) = 7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f
+SIZE (rust/crates/strsim-0.11.1.crate) = 14266
+SHA256 (rust/crates/syn-2.0.118.crate) = 1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422
+SIZE (rust/crates/syn-2.0.118.crate) = 305533
+SHA256 (rust/crates/syn-3.0.3.crate) = 53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3
+SIZE (rust/crates/syn-3.0.3.crate) = 312999
+SHA256 (rust/crates/unicode-ident-1.0.24.crate) = e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75
+SIZE (rust/crates/unicode-ident-1.0.24.crate) = 49298
+SHA256 (rust/crates/unicode-segmentation-1.13.3.crate) = c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8
+SIZE (rust/crates/unicode-segmentation-1.13.3.crate) = 112325
+SHA256 (rust/crates/unicode-width-0.2.2.crate) = b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254
+SIZE (rust/crates/unicode-width-0.2.2.crate) = 282768
+SHA256 (rust/crates/utf8parse-0.2.2.crate) = 06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821
+SIZE (rust/crates/utf8parse-0.2.2.crate) = 13499
+SHA256 (rust/crates/wasm-bindgen-0.2.126.crate) = 4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4
+SIZE (rust/crates/wasm-bindgen-0.2.126.crate) = 67461
+SHA256 (rust/crates/wasm-bindgen-macro-0.2.126.crate) = 167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1
+SIZE (rust/crates/wasm-bindgen-macro-0.2.126.crate) = 9303
+SHA256 (rust/crates/wasm-bindgen-macro-support-0.2.126.crate) = f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e
+SIZE (rust/crates/wasm-bindgen-macro-support-0.2.126.crate) = 82688
+SHA256 (rust/crates/wasm-bindgen-shared-0.2.126.crate) = dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24
+SIZE (rust/crates/wasm-bindgen-shared-0.2.126.crate) = 11287
+SHA256 (rust/crates/windows-core-0.62.2.crate) = b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb
+SIZE (rust/crates/windows-core-0.62.2.crate) = 36932
+SHA256 (rust/crates/windows-implement-0.60.2.crate) = 053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf
+SIZE (rust/crates/windows-implement-0.60.2.crate) = 15325
+SHA256 (rust/crates/windows-interface-0.59.3.crate) = 3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358
+SIZE (rust/crates/windows-interface-0.59.3.crate) = 11809
+SHA256 (rust/crates/windows-link-0.2.1.crate) = f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5
+SIZE (rust/crates/windows-link-0.2.1.crate) = 6133
+SHA256 (rust/crates/windows-result-0.4.1.crate) = 7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5
+SIZE (rust/crates/windows-result-0.4.1.crate) = 13381
+SHA256 (rust/crates/windows-strings-0.5.1.crate) = 7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091
+SIZE (rust/crates/windows-strings-0.5.1.crate) = 13966
+SHA256 (rust/crates/windows-sys-0.61.2.crate) = ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc
+SIZE (rust/crates/windows-sys-0.61.2.crate) = 2517186
+SHA256 (rust/crates/xaddr-0.2.1.crate) = 4573aaeb9b492c539fbd893a11a2c2455a78f4e677e892e18f63ff563922985f
+SIZE (rust/crates/xaddr-0.2.1.crate) = 19298
+SHA256 (excelano-xled-v0.12.1_GH0.tar.gz) = 7fa56256289bb5123529e77f06befa6b92b161e44a10cb507e3b3a6da991d1f5
+SIZE (excelano-xled-v0.12.1_GH0.tar.gz) = 154223
diff --git a/textproc/xled/pkg-descr b/textproc/xled/pkg-descr
new file mode 100644
index 000000000000..848ea71ac968
--- /dev/null
+++ b/textproc/xled/pkg-descr
@@ -0,0 +1,8 @@
+xled is sed and awk for tabular data: the field model of awk, the s///
+substitution of sed, and the live in-memory buffer of ed, applied to
+Excel-style ranges over CSV and DSV files.
+
+Cells are addressed by column letter, by bracketed name, or by range, and
+values stay stringly-typed with explicit casts, so leading zeros and long
+identifiers survive intact.  It never reshapes the table, and every edit can
+be previewed before it is committed.