File: extract_translator_comments.py

package info (click to toggle)
zim 0.62-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 7,660 kB
  • ctags: 6,996
  • sloc: python: 52,094; xml: 1,135; makefile: 45; sh: 36
file content (72 lines) | stat: -rwxr-xr-x 1,702 bytes parent folder | download | duplicates (5)
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
66
67
68
69
70
71
72
#!/usr/bin/python

import re

source_files = {}

comment_re = re.compile(r'\s+#\s+T:\s+(.+)\s*$')

def get_file(file):
	if not file in source_files:
		#~ print 'Extracting comments from', file
		source_files[file] = open(file).readlines()
		source_files[file].append('')
	return source_files[file]

def extract_comment(file, line):
	lines = get_file(file)
	line -= 1 # list is 0 based
	match = comment_re.search(lines[line])
	if match:
		# comment on same line
		return match.group(1)
	else:
		# search next line(s) for a comment
		i = line+1
		while i < len(lines):
			if '_(' in lines[i] or 'gettext(' in lines[i]:
				break
			else:
				match = comment_re.search(lines[i])
				if match:
					return match.group(1)
			i += 1
		return None

def extract_comments(sources):
	sources = [s.split(':') for s in sources]
	comments = []
	for file, line in sources:
		comment = extract_comment(file, int(line))
		if comment and comment not in comments:
			comments.append(comment)
	if comments:
		return ' | \n'.join(['#. '+c for c in comments])+'\n'
	else:
		print 'No translator comment for:'
		for file, line in sources:
			print '\t%s line %s' % (file, line)
		return ''

def add_comments(file):
	messages = open(file).readlines()
	fh = open(file, 'w')

	while messages:
		line = messages.pop(0)
		if line.startswith('#: '):
			lines = [line]
			sources = line[3:].strip().split()
			while messages[0].startswith('#: '):
				line = messages.pop(0)
				lines.append(line)
				sources += line[3:].strip().split()
			fh.write(extract_comments(sources))
			fh.writelines(lines)
		elif line.startswith('#. '):
			pass
		else:
			fh.write(line)

if __name__ == '__main__':
	add_comments('translations/zim.pot')