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
|
#! /usr/bin/env python
"""This tool inspects synopsis processors and generates a docbook section
with a listing of all parameters for inclusion into the tutorial."""
from Synopsis.import_processor import import_processor
from Synopsis.Processor import Parametrized
import sys, string, types
def name_of_instance(instance):
name = string.split(instance.__module__, '.')
if name[-1] != instance.__class__.__name__:
name.append(instance.__class__.__name__)
return '%s'%'.'.join(name)
def id_of_instance(instance):
name = string.split(instance.__module__, '.')[-2:]
if name[-1] != instance.__class__.__name__:
name = [name[-1], instance.__class__.__name__]
return '%s'%'-'.join(name)
if not len(sys.argv) == 3:
print 'Usage : %s <processor> <output>'%sys.argv[0]
sys.exit(-1)
try:
processor = import_processor(sys.argv[1])
except ImportError, msg:
sys.stderr.write('Error : %s\n'%msg)
sys.exit(-1)
p = processor()
parameters = p.get_parameters()
output = open(sys.argv[2], 'w+')
output.write('<?xml version="1.0" encoding="UTF-8"?>\n')
output.write('<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"\n')
output.write('"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">\n')
output.write('<section id="%s-ref">\n'%id_of_instance(p))
output.write(' <title>%s</title>\n'%name_of_instance(p))
output.write(' <segmentedlist>\n')
output.write(' <segtitle>Name</segtitle>\n')
output.write(' <segtitle>Default value</segtitle>\n')
output.write(' <segtitle>Description</segtitle>\n')
for name in parameters:
output.write(' <seglistitem>\n')
output.write(' <seg>%s</seg>\n'%name)
parameter = parameters[name]
value = parameter.value
if type(value) == types.InstanceType or isinstance(value, Parametrized):
value = name_of_instance(value)
elif type(value) == types.ListType:
if (len(value)
and (type(value[0]) == types.InstanceType
or isinstance(value[0], Parametrized))):
value = '[%s]'%string.join(map(lambda x:name_of_instance(x), value), ', ')
output.write(' <seg>%s</seg>\n'%value)
output.write(' <seg>%s</seg>\n'%parameter.doc)
output.write(' </seglistitem>\n')
output.write(' </segmentedlist>')
output.write('</section>\n')
|