File: s_javadoc_merge

package info (click to toggle)
db5.3 5.3.28%2Bdfsg1-0.5
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 158,360 kB
  • sloc: ansic: 448,411; java: 111,824; tcl: 80,544; sh: 44,326; cs: 33,697; cpp: 21,604; perl: 14,557; xml: 10,799; makefile: 4,077; yacc: 1,003; awk: 965; sql: 801; erlang: 342; python: 216; php: 24; asm: 14
file content (45 lines) | stat: -rwxr-xr-x 1,917 bytes parent folder | download | duplicates (11)
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
#!/usr/bin/env python

from glob import glob
import os, re, sys

classre = re.compile(r'(?P<javadoc>(/\*\*([^/]|/[^*])*?\*/\s*)?)(?P<mods>public\s+((abstract)\s+)*)(?P<class_type>(class|interface)\s+)?(?P<class_name>\w+)\s*(?P<end>(extends|implements|{))', re.DOTALL)
fieldre = re.compile(r'(?P<javadoc>(/\*\*([^/]|/[^*])*?\*/\s*)?)(?P<mods>public\s+((abstract|final|static)\s+)*)(?P<field_type>[\w\[\]]+\s+)?(?P<field_name>\w+)(?P<params>\s*(\(.*?\)|=|;))', re.DOTALL)
paramre = re.compile(r'\s*(?:final\s*)?(?P<param_type>[\w\[\]]+)\s+(?P<param_name>\w+)\s*(?P<comma>,?)')

def fieldsig(m):
	return '%s%s' % (m.group('field_name'), paramre.sub('\g<param_type>\g<comma>', m.group('params') or ''))

def parse(input):
	javadoc = {}
	for m in classre.finditer(input):
		javadoc[m.group('class_name')] = m.group('javadoc')
	for m in fieldre.finditer(input):
		javadoc[fieldsig(m)] = m.group('javadoc')
	return javadoc

def mkclass(m):
	#if debug:
		#print "Looking up", m.group('class_name')
	return '%s%s%s%s %s' % (javadoc.get(m.group('class_name'), '/** TODO */\n'), m.group('mods'), (m.group('class_type') or ''), m.group('class_name'), m.group('end'))

def mkfield(m):
	#if debug:
		#print "Looking up", fieldsig(m)
	return '%s%s%s%s%s' % (javadoc.get(fieldsig(m), '/** TODO */\n    '), m.group('mods'), (m.group('field_type') or ''), m.group('field_name'), m.group('params'))

if len(sys.argv) < 3 or not os.path.isfile(sys.argv[1]) or not os.path.isfile(sys.argv[2]):
	print >>sys.stderr, "Usage %s <docfile> <srcfile>" % sys.argv[0]
	sys.exit(-1)
docfile, srcfile = sys.argv[1:3]

# Parse the javadoc from the doc file
#debug = True or (os.path.basename(docfile) == 'Database.java')
javadoc = parse(open(docfile).read())
#if debug:
	#print repr(javadoc)

# Merge the javadoc with the source file
newsrc = classre.sub(mkclass, open(srcfile).read())
newsrc = fieldre.sub(mkfield, newsrc)
sys.stdout.write(newsrc)