summaryrefslogtreecommitdiffstats
path: root/tools/progdoc
blob: ef44d3aa24fb120bacab620acf6b5cfb5a8846a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/perl

$srcdir = $ARGV[0];

open(OUT, ">prog.sgml") || die "Cannot create output file";
include("doc/prog-head.sgml");
process("");
include("doc/prog-foot.sgml");
close OUT;
exit 0;

sub include {
  my $f = shift @_;
  open(IN, "$srcdir/$f") || die "Unable to find $f";
  while (<IN>) {
    print OUT;
  }
  close IN;
}

sub process {
  my $dir = shift @_;
  print "$dir/Doc\n";
  open(IN, "$srcdir/$dir/Doc") || die "Unable to read $dir/Doc";
  my @docfile = <IN>;
  close IN;
  foreach $_ (@docfile) {
    chomp;
    /^#/ && next;
    /^([A-Z]+)\s*(.*)/ || die "Parse error: $_";
    $cmd = $1;
    $arg = $2;
    if ($cmd eq "C") { process("$dir/$arg"); }
    elsif ($cmd eq "H") {
      push @stack, "H";
      print OUT "<chapt>$arg\n";
    } elsif ($cmd eq "S") {
      print "    $arg\n";
      open(DOC, "cd $srcdir/$dir ; $srcdir/doc/kernel-doc -bird $arg |") || die "Unable to start kernel-doc";
      while (<DOC>) { print OUT; }
      close DOC;
    } elsif ($cmd eq "D") {
      print "    $arg\n";
      include("$dir/$arg");
    } else { die "Unknown command: $cmd"; }
  }
}