find_missing_doc: Convert to python.
[samba.git] / docs-xml / scripts / find_missing_doc
index 6ce547be3edea0bfd5498de60daba58de2e47e97..d75ef8dcc72a938ac3fd7f594c521f61caaf520d 100755 (executable)
@@ -1,62 +1,83 @@
-#!/usr/bin/perl
+#!/usr/bin/python
 
-my %doc;
+# Copyright (C) 2007,2012 Jelmer Vernooij <jelmer@samba.org>
 
-$topdir = (shift @ARGV) or $topdir = ".";
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
 
-##################################################
-# Reading links from manpage
-
-$curdir = $ENV{PWD};
-
-chdir("smbdotconf");
+import optparse
+import os
+import re
 
-open(IN,"xsltproc --xinclude --param smb.context ALL generate-context.xsl parameters.all.xml|");
+parser = optparse.OptionParser("source_dir")
 
-while(<IN>) {
-       if( /<samba:parameter .*?name="([^"]*?)"/g ){
-               my $name = $1;
-           $name =~ s/ //g;
-               $doc{$name} = "NOTFOUND";
-       }
-}
+(opts, args) = parser.parse_args()
 
-close(IN);
+if len(args) == 1:
+    topdir = args[0]
+else:
+    topdir = "."
 
-chdir($curdir);
-
-#################################################
-# Reading entries from source code
-
-
-open(SOURCE,"$topdir/lib/param/param_table.c") or die("Can't open $topdir/lib/param/param_table.c: $!");
+# Reading links from manpage
 
-while ($ln = <SOURCE>) {
-  last if $ln =~ m/^static\ struct\ parm_struct\ parm_table.*/;
-} #burn through the preceding lines
+curdir = os.getcwd()
+doc = {}
 
-while ($ln = <SOURCE>) {
-  last if $ln =~ m/^\s*\}\;\s*$/;
-  #pull in the param names only
-  next if $ln =~ m/.*P_SEPARATOR.*/;
-  next unless $ln =~ /\s*\.label\s*=\s*\"(.*)\".*/;
+os.chdir("smbdotconf");
 
-  my $name = $1;
-  $name =~ s/ //g;
+f = os.popen("xsltproc --xinclude --param smb.context ALL generate-context.xsl parameters.all.xml", "r")
+try:
+    for l in f.readlines():
+        m = re.match('<samba:parameter .*?name="([^"]*?)"', l)
+        if m:
+            name = m.group(1).replace(" ", "")
+            doc[name] = False
+finally:
+    f.close()
 
-  if($doc{lc($name)}) {
-       $doc{lc($name)} = "FOUND";
-  } else {
-       print "'$name' is not documented\n";
-  }
-}
-close SOURCE;
+os.chdir(curdir)
 
-##################################################
-# Trying to find missing references
+# Reading entries from source code
 
-foreach (keys %doc) {
-       if($doc{$_} cmp "FOUND") {
-               print "'$_' is documented but is not a configuration option\n";
-       }
-}
+f = open(os.path.join(topdir, "lib/param/param_table.c"), "r")
+
+# burn through the preceding lines
+while True:
+    l = f.readline()
+    if l.startswith("static struct parm_struct parm_table"):
+        break
+
+for l in f.readlines():
+    if re.match("^\s*\}\;\s*$", l):
+        break
+    # pull in the param names only
+    if re.match(".*P_SEPARATOR.*", l):
+        continue
+    m = re.match("\s*\.label\s*=\s*\"(.*)\".*", l)
+    if not m:
+        continue
+
+    name = m.group(1)
+    name = name.replace(" ", "")
+
+    if name.lower() in doc:
+        doc[name.lower()] = True
+    else:
+      print "'%s' is not documented" % name
+f.close()
+
+# Try to find missing references
+for key in doc.keys():
+     if doc[key] == "FOUND":
+         print "'$_' is documented but is not a configuration option"