From fc6726a875a4e250c0ed24bb91eff6952e99b8fb Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 24 Apr 2024 12:09:11 +0000 Subject: tlmgr search: support --json git-svn-id: svn://tug.org/texlive/trunk@71056 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/scripts/texlive/tlmgr.pl | 45 +++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/Master/texmf-dist/scripts/texlive/tlmgr.pl b/Master/texmf-dist/scripts/texlive/tlmgr.pl index d24047b077a..fdc7b9c8055 100755 --- a/Master/texmf-dist/scripts/texlive/tlmgr.pl +++ b/Master/texmf-dist/scripts/texlive/tlmgr.pl @@ -1843,13 +1843,29 @@ sub action_search { $tlpdb = $localtlpdb; } - my ($foundfile, $founddesc) = search_tlpdb($tlpdb, $r, + my $ret = search_tlpdb($tlpdb, $r, $opts{'file'} || $opts{'all'}, (!$opts{'file'} || $opts{'all'}), $opts{'word'}); - - print $founddesc; - print $foundfile; + + if ($opts{'json'}) { + my $json = TeXLive::TLUtils::encode_json($ret); + print($json); + } else { + my $retfile = ''; + my $retdesc = ''; + for my $pkg (sort keys %{$ret->{"packages"}}) { + $retdesc .= "$pkg - " . $ret->{"packages"}{$pkg} . "\n"; + } + for my $pkg (sort keys %{$ret->{"files"}}) { + $retfile .= "$pkg:\n"; + for my $f (@{$ret->{"files"}{$pkg}}) { + $retfile .= "\t$f\n"; + } + } + print ($retdesc); + print ($retfile); + } return ($F_OK | $F_NOPOSTACTION); } @@ -1896,20 +1912,24 @@ sub search_tlpdb { # first report on $pkg - $shortdesc found my $retfile = ''; my $retdesc = ''; + my %ret = ( "packages" => {}, "files" => {} ); for my $pkg (sort keys %$fndptr) { if ($fndptr->{$pkg}{'desc'}) { - $retdesc .= "$pkg - " . $fndptr->{$pkg}{'desc'} . "\n"; + $ret{"packages"}{$pkg} = $fndptr->{$pkg}{'desc'}; } } for my $pkg (sort keys %$fndptr) { if ($fndptr->{$pkg}{'files'}) { - $retfile .= "$pkg:\n"; - for my $f (keys %{$fndptr->{$pkg}{'files'}}) { - $retfile .= "\t$f\n"; - } + $ret{"files"}{$pkg} = [ keys %{$fndptr->{$pkg}{'files'}} ]; } } - return($retfile, $retdesc); + # { + # require Data::Dumper; + # print Data::Dumper->Dump([\%retjson], [qw(retjson)]); + # my $json = TeXLive::TLUtils::encode_json(\%retjson); + # print($json); + # } + return (\%ret); } sub search_pkg_files { @@ -9467,6 +9487,11 @@ filenames) to match only full words. For example, searching for C with this option will not output packages containing the word C (unless they also contain the word C
on its own). +=item B<--json> + +Output search results as json hash with two keys: B and B. + + =back =back -- cgit v1.2.3