litespeed-quic/tools/gen-rst-tags.pl

49 lines
1.5 KiB
Perl

#!/usr/bin/env perl
#
# Parse .rst files and generate tags.
use strict;
use warnings;
my $id = '[a-zA-Z_0-9]';
my @tags;
for my $file (@ARGV) {
open my $fh, '<', $file
or die "Cannot open $file for reading: $!";
while (<$fh>) {
chomp;
if (m/^(\.\. function:: )(.+)/) {
my ($pfx, $val) = ($1, $2);
if ($val =~ m/($id+) \(/o) {
push @tags, "$1\t$file\t/^$pfx$val/\n";
} else {
warn "unknown pattern in $file:$.: $_\n";
}
} elsif (m/^(\s*\.\. (?:type|member):: )(.+)/) {
my ($pfx, $val) = ($1, $2);
if ($val =~ m/\(\*([^\)]+)\)/) {
push @tags, "$1\t$file\t/^$pfx$val/\n";
} elsif ($val =~ m/($id+)(?::\d+)?\s*$/o) {
push @tags, "$1\t$file\t/^$pfx$val/\n";
} else {
warn "unknown pattern in $file:$.: $_\n";
}
} elsif (m/^(\s*\.\. var:: )(.+)/) {
my ($pfx, $val) = ($1, $2);
if ($val =~ m/($id+)(?:\[[^\]]*\])?\s*$/o) {
push @tags, "$1\t$file\t/^$pfx$val/\n";
} else {
warn "unknown pattern in $file:$.: $_\n";
}
} elsif (m/^(\s*\.\. macro::\s+)(\S+)\s*$/) {
push @tags, "$2\t$file\t/^$1$2/\n";
} elsif (m/^\s*\.\. (?:toctree|image|highlight|code-block)::/) {
# Skip
} elsif (m/^\s*\.\.\s*\S+::/) {
warn "unknown pattern in $file:$.: $_\n";
}
}
}
print sort @tags;