mitsuba/doc/gendoc.py

89 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python
#
# This script walks through all plugin files and
# extracts documentation that should go into the
# reference manual
import os, platform, re
def findOrderID(filename):
f = open(filename)
for line in f.readlines():
match = re.match(r'.*\\order{([^}]*)}.*', line)
if match != None:
return int(match.group(1))
return 1000
def extract(target, filename):
f = open(filename)
inheader = False
for line in f.readlines():
match = re.match(r'^/\*! ?(.*)$', line)
if match != None:
print("Processing %s" % filename)
line = match.group(1).replace('%', '\%')
target.write(line + '\n')
inheader = True
continue
if not inheader:
continue
if re.search(r'^[\s\*]*\*/$', line):
inheader = False
continue
match = re.match(r'^\s*\** ?(.*)$', line)
if match != None:
line = match.group(1).replace('%', '\%')
target.write(line + '\n')
f.close()
pyVer = int(platform.python_version_tuple()[0])
# Traverse source directories and process any found plugin code
def process(path, target):
def capture(fileList, dirname, files):
suffix = os.path.split(dirname)[1]
if 'lib' in suffix or suffix == 'tests' \
or suffix == 'mitsuba' or suffix == 'utils' \
or suffix == 'converter' or suffix == 'mtsgui':
return
for filename in files:
if '.cpp' == os.path.splitext(filename)[1]:
fname = os.path.join(dirname, filename)
fileList += [fname]
fileList = []
for (dirname, subdirs, files) in os.walk(path):
capture(fileList, dirname, files)
ordering = [(findOrderID(fname), fname) for fname in fileList]
ordering = sorted(ordering, key = lambda entry: entry[0])
for entry in ordering:
extract(target, entry[1])
def process_src(target, src_subdir, section=None):
if section is None:
section = "section_" + src_subdir
target.write('\input{{{0}}}\n'.format(section))
process('../src/{0}'.format(src_subdir), target)
os.chdir(os.path.dirname(__file__))
with open('plugins_generated.tex', 'w') as f:
process_src(f, 'shapes')
process_src(f, 'bsdfs', 'section_bsdf')
process_src(f, 'textures')
process_src(f, 'subsurface')
process_src(f, 'medium', 'section_media')
process_src(f, 'phase')
process_src(f, 'volume', 'section_volumes')
process_src(f, 'emitters')
process_src(f, 'sensors')
process_src(f, 'integrators')
process_src(f, 'samplers')
process_src(f, 'films')
process_src(f, 'rfilters')
os.system('bibtex main.aux')
os.system('pdflatex main.tex')
#os.system('pdflatex main.tex | grep -i warning | grep -v "Package \(typearea\|hyperref\)"')