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
|
#!/usr/bin/python
import sys, os, stat, string
from popen2 import Popen3
import sse_db
from sse_config import *
from sse_defs import *
supported_languages = [ {
"extensions" : [".c", ".h", ".cc", ".hh", ".cpp", ".hpp"],
"lexer" : SSE_DIR+"/sse_lex_c",
"language_id" : SSE_LANGUAGE_C
}]
def find_language(fn):
for l in supported_languages:
for e in l["extensions"]:
if fn.lower().endswith(e):
return l
return None
def supported_source(fn):
return not find_language(fn) is None
def process_source(archive, root, path, package_id, meta):
print "(%s) Processing %s" % (archive, path)
language = find_language(path)
assert not language is None
file_id = sse_db.new_file(package_id, path, language["language_id"])
table = {}
p = Popen3("%s %s" % (language["lexer"], os.path.join(root, path)))
for identifier in p.fromchild:
t = identifier.strip()
try:
table[t.lower()][1] += 1
except KeyError:
table[t.lower()] = [t, 1]
for k, v in table.items():
if v[0].startswith("S:"):
sse_db.new_word(file_id, v[0][2:], True, v[1])
else:
sse_db.new_word(file_id, v[0], False, v[1])
del table
if p.wait() != 0:
print "WARNING: Subprocess failed!"
del p
|