File: paramcheck.py

package info (click to toggle)
dblatex 0.3.4-2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 12,004 kB
  • sloc: xml: 100,126; python: 5,478; makefile: 137; sh: 70
file content (116 lines) | stat: -rw-r--r-- 3,446 bytes parent folder | download | duplicates (5)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import os
import glob
import re
from subprocess import Popen, PIPE
from xml.dom.minidom import parseString

def strip_list(lst, patterns):
    striped = []
    for p in lst:
        strip = 0
        for pat in patterns:
            if pat in p:
                strip = 1
                break
        if not(strip):
            striped.append(p)
    return striped


def get_doc_params(docparam):
    xsl_params_get = \
"""<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>

<xsl:output method="text" indent="yes"/> 

<xsl:template match="programlisting">
  <xsl:copy-of select="."/>
</xsl:template>

<xsl:template match="/">
  <xsl:apply-templates select="//programlisting"/>
</xsl:template>

</xsl:stylesheet>
"""

    xsltmp = "/tmp/getparam.xsl"
    xsl = open("/tmp/getparam.xsl", "w")
    xsl.write(xsl_params_get)
    xsl.close()

    p = Popen("xsltproc --xinclude %s %s" % (xsltmp, docparam), shell=True,
              stdout=PIPE, )#stderr=open("/dev/null", "w"))
    data = p.communicate()[0].split("\n")
    params = []
    for line in data:
        m = re.search("<xsl:param *name=\"([^\"]*)", line)
        if m:
            params.append(m.group(1)+".xml")

    return params

def get_xsl_params(xslextract, xsltarget):
    # Get the list of all the parameters
    p = Popen("xsltproc %s %s" % (xslextract, xsltarget), shell=True,
              stdout=PIPE, stderr=open("/dev/null", "w"))
    dom = parseString(p.communicate()[0])

    params = []
    for e in dom.getElementsByTagName("xsl:param"):
        params.append(str(e.getAttribute("name"))+".xml")
    return params


def main():
    tooldir = os.path.dirname(__file__)
    topdir = os.path.abspath(os.path.join(tooldir, ".."))
    xslextract = os.path.join(topdir, "tools", "paramextract.xsl")
    xsltarget = os.path.join(topdir, "xsl", "docbook.xsl")
    synopdir = os.path.join(topdir, "docs", "params", "syn")
    refentdir = os.path.join(topdir, "docs", "params")

    # d1 = get_doc_params(os.path.join(refentdir, "param.xml"))

    # parfiles
    parfiles = get_xsl_params(xslextract, xsltarget)

    # Get the list of parameter synopsis
    synfiles = [os.path.basename(f) for f in glob.glob("%s/*.xml" % synopdir)]

    # Get the list of parameter refentries
    reffiles = [os.path.basename(f) for f in glob.glob("%s/*.xml" % refentdir)]

    # Strip parameters we know are not documented
    tostrip = ("l10n", "olink", "chunker", "autolabel",
               "target.database.document", "targets.filename",
               "current.docid")
    parfiles = strip_list(parfiles, tostrip)
    synfiles = strip_list(synfiles, tostrip)
    reffiles = strip_list(reffiles, tostrip)

    parfiles.sort()
    synfiles.sort()
    reffiles.sort()

    # Strip files that are not parameter refentries
    for p in ("param", "template"):
        reffiles.remove(p+".xml")

    # Check if there's some missed parameters
    sp = set(parfiles)
    ss = set(synfiles)
    sr = set(reffiles)

    torem_from_syn = ss - sp
    print "==========="
    print "In param list, missing in %s:\n" % (synopdir), sp - ss
    print "\nIn param list, missing in refentries:\n", sp - sr
    print "\nIn synopsis, not in param list:\n", torem_from_syn
    print "\nIn synopsis, missing in refentries:\n", ss - sr - torem_from_syn
    print "\nIn refentries, missing in %s:\n" % (synopdir), sr - ss


if __name__ == "__main__":
    main()