[ci] Fix clang-santisers job for GHA change
[xapian.git] / xapian-bindings / ruby / generate-rdoc-stubs
blobec02ae3f5ac2a1a3d30373373c6167cc231c9347
1 #!/usr/bin/perl -w
2 use strict;
4 my ($srcdir) = ($0 =~ m!^(.*?)[^/]*$!);
5 my $dir = '../doxygen-xml';
7 my %documented = ();
9 open XAPIAN_RB, '<', "${srcdir}/xapian.rb" or die $!;
10 mkdir 'docs', 0777 unless -d 'docs';
11 my $out = 'docs/xapian.rb';
12 open OUT, '>', $out."T" or die $!;
13 while (<XAPIAN_RB>) {
14 print OUT $_;
15 if (m!^\s*class\s+Xapian::(\w+)!) {
16 ++$documented{$1};
19 close XAPIAN_RB;
21 my %id = ();
23 open INDEX, '<', "$dir/index.xml" or die $!;
24 while (<INDEX>) {
25 if (m!\bkind="(?:class|struct)".*><name>Xapian::(.+)</name>!) {
26 my $class = $1;
27 if (exists $documented{$class} ||
28 $class =~ /^Internal::/ ||
29 $class =~ /::Internal$/ ||
30 $class =~ /_$/) {
31 next;
33 if (m!\brefid="(\w+)"!) {
34 my $refid = $1;
35 if ($refid !~ m![/.]!) {
36 $id{$refid} = $class;
37 } else {
38 print STDERR "Bad refid: $refid\n";
40 } else {
41 print STDERR "No refid found for $class: $_";
45 close INDEX;
47 for my $refid (sort keys %id) {
48 my $prot;
49 open F, '<', "$dir/$refid.xml";
50 while (<F>) {
51 if (/<compounddef id="\Q$refid\E" kind="class" prot="(\w+)"/) {
52 $prot = $1;
53 last;
56 close F;
57 if ($refid =~ /^struct/ || (defined $prot && $prot eq 'public')) {
58 my $class = $id{$refid};
59 print OUT <<"END";
60 # Refer to the
61 # {Xapian::$class C++ API documentation}[https://xapian.org/docs/apidoc/html/classXapian_1_1$class.html].
62 class Xapian::$class
63 end
64 END
65 } elsif (!defined $prot) {
66 print STDERR "No prot found for $refid\n";
69 close OUT or die $!;
70 rename $out."T", $out or die $!;