PLplot 5.15.0
makedocstrings.py
Go to the documentation of this file.
1# Copyright 2002 Gary Bishop
2# This file is part of PLplot.
3
4# PLplot is free software; you can redistribute it and/or modify
5# it under the terms of the GNU Library General Public License as published by
6# the Free Software Foundation; version 2 of the License.
7
8# PLplot is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU Library General Public License for more details.
12
13# You should have received a copy of the GNU Library General Public License
14# along with the file PLplot; if not, write to the Free Software
15# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
17# The recent versions of SWIG (at least for 1.3.11) do not handle documentation
18# strings correctly
19# This script is a quick hack to fixup the doc strings in the
20# SWIG-generated c code, but presumably this script
21# will not always be necessary
22
23import sys, re
24
25def main():
26 if len(sys.argv) != 3:
27 print 'usage: makedocstrings infile outfile'
28
29 infile = open(sys.argv[1], 'rt')
30 outfile = open(sys.argv[2], 'wt')
31
32 docstrings = {}
33
34 while 1:
35 line = infile.readline()
36 if not line:
37 break
38 m = re.match(r'#define _doc_([a-zA-Z_0-9]+)', line)
39 if m:
40 name = m.group(1)
41 value = '_doc_'+name
42 docstrings[name] = value
43 #print 'got',name
44
45 if re.match(r'static PyMethodDef SwigMethods', line):
46 outfile.write(line)
47 #print 'here'
48 while 1:
49 line = infile.readline()
50 m = re.match('[ \t]+\{[ \t]\‍(char \*\‍)"([a-zA-Z_0-9]+)"(.*)\,[ ]*NULL[ ]*\},', line)
51 if not m:
52 m = re.match('[ \t]+\{[ \t]\‍(char \*\‍)"([a-zA-Z_0-9]+)"(.*)\},', line)
53 if not m:
54 break
55 func = m.group(1)
56 #print 'look for',func
57 if func in docstrings.keys():
58 line = '\t{ (char *)"%s"%s, %s },\n' % (func, m.group(2), docstrings[func])
59 outfile.write(line)
60
61 outfile.write(line)
62
63if __name__ == '__main__':
64 main()