summaryrefslogtreecommitdiffstats
path: root/feed/sse_feed.py
blob: 453f06a3f069f57312cfda24d234a201b4bc9ab9 (plain)
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
#!/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()
        k = t.lower()[:40]

        try:
            table[k][1] += 1
        except KeyError:
            table[k] = [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