/doc/include_anchors.py
Python | 90 lines | 75 code | 5 blank | 10 comment | 1 complexity | ec249976240a49182bd8f54f29055c45 MD5 | raw file
Possible License(s): LGPL-3.0
- #-------------------------------------------------------------------------
- # CxxTest: A lightweight C++ unit testing library.
- # Copyright (c) 2008 Sandia Corporation.
- # This software is distributed under the LGPL License v3
- # For more information, see the COPYING file in the top CxxTest directory.
- # Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
- # the U.S. Government retains certain rights in this software.
- #-------------------------------------------------------------------------
- import re
- import sys
- import os.path
- import os
- pat1a = re.compile('include::([a-zA-Z0-9_\.\-/\/]+\/)\.([^\_]+)\_[a-zA-Z0-9]*\.py\[\]')
- pat1b = re.compile('include::([a-zA-Z0-9_\.\-/\/]+\/)\.([^\_]+)\_[a-zA-Z0-9]*\.sh\[\]')
- pat1c = re.compile('include::([a-zA-Z0-9_\.\-/\/]+\/)\.([^\_]+)\_[a-zA-Z0-9]*\.h\[\]')
- pat1d = re.compile('include::([a-zA-Z0-9_\.\-/\/]+\/)\.([^\_]+)\_[a-zA-Z0-9]*\.cpp\[\]')
- pat2 = re.compile('([^@]+)@([a-zA-Z0-9]+):')
- pat3 = re.compile('([^@]+)@:([a-zA-Z0-9]+)')
- processed = set()
- def process(dir, root, suffix):
- #print "PROCESS ",root, suffix
- bname = "%s%s" % (dir, root)
- global processed
- if bname in processed:
- return
- #
- anchors = {}
- anchors[''] = open('%s.%s_.%s' % (dir, root, suffix), 'w')
- INPUT = open('%s%s.%s' % (dir, root, suffix), 'r')
- for line in INPUT:
- m2 = pat2.match(line)
- m3 = pat3.match(line)
- if m2:
- anchor = m2.group(2)
- anchors[anchor] = open('%s.%s_%s.%s' % (dir, root, anchor, suffix), 'w')
- elif m3:
- anchor = m3.group(2)
- anchors[anchor].close()
- del anchors[anchor]
- else:
- for anchor in anchors:
- os.write(anchors[anchor].fileno(), line)
- INPUT.close()
- for anchor in anchors:
- if anchor != '':
- print "ERROR: anchor '%s' did not terminate" % anchor
- anchors[anchor].close()
- #
- processed.add(bname)
- for file in sys.argv[1:]:
- print "Processing file '%s' ..." % file
- INPUT = open(file, 'r')
- for line in INPUT:
- suffix = None
- m = pat1a.match(line)
- if m:
- suffix = 'py'
- #
- if suffix is None:
- m = pat1b.match(line)
- if m:
- suffix = 'sh'
- #
- if suffix is None:
- m = pat1c.match(line)
- if m:
- suffix = 'h'
- #
- if suffix is None:
- m = pat1d.match(line)
- if m:
- suffix = 'cpp'
- #
- if not suffix is None:
- #print "HERE", line, suffix
- fname = m.group(1)+m.group(2)+'.'+suffix
- if not os.path.exists(fname):
- print line
- print "ERROR: file '%s' does not exist!" % fname
- sys.exit(1)
- process(m.group(1), m.group(2), suffix)
- INPUT.close()