def build(classfile): global dclass global vclass global fclass global allclasses global allheaders global withoutpath #print "adding", classfile + "'s members to dictionary" # Reading the header file f = open(classfile, 'r') lines = f.readlines() f.close() vlist = [] # List of members and methods classname = "" COMMENT = FALSE INMACRO = FALSE INRECORD = FALSE INCLASS = FALSE for line in lines: line = wstring.chop(line) # Remove line separators if wstring.strip(line) == "": continue if not INCLASS: INCLASS = lexer.openclass(line) if not INCLASS: continue INCLASS = lexer.closeclass(line) if not INCLASS: continue # Skip typedef and struct blocks if not INRECORD: INRECORD = lexer.openrecord(line) if INRECORD: INRECORD = lexer.closerecord(line) continue # If we are inside a macro or pragma block, skip it if not INMACRO: INMACRO = lexer.opendef(line) if INMACRO: INMACRO = lexer.closedef(line) continue words = string.split(line) if len(words) > 1: w = words[0] if w == "class": # First of new class found if len(vlist) > 0: if classname == "": print "Error, members without class", vlist sys.exit(0) classname = words[1] if classname not in allclasses: allclasses[classname] = classfile if classfile not in allheaders: allheaders[classfile] = classname dummy, fname = os.path.split(classfile) withoutpath[fname] = classname print "class", classname, "in", classfile INCLASS = TRUE continue # Processing comment block if not COMMENT: if not lexer.embeddedcomment(line): COMMENT = lexer.opencomment(line) else: test = lexer.removecomment(line) if wstring.strip(test) == "": continue # Inside a multi-line comment if COMMENT: # Comment opened COMMENT = lexer.closecomment(line) # Always inside comment? # End of multi-line comment if not COMMENT: # Terminator reached i = string.find(line, "*/") if i == -1: print "Error in parsing header" sys.exit(0) line = line[i + 2:] # Keeping the code is exists # Start of multi-line comment if COMMENT: i = string.find(line, "/*") if i != -1: line = line[:i] else: continue line = wstring.strip(line) if line == "": continue # Define statement are ignored if line[0:7] == "#define": continue if lexer.isdeclaration(line): # Processing simple var declarations if lexer.isvardecl(line): nlist = lexer.splitvardecl(line) for n in nlist: vlist.append(n) n = lexer.getident(n) vclass[n] = classname dclass[n] = classname #print "append var", n continue # Processing function declaration if lexer.isprototype(line): f = lexer.prototype vlist.append(f) fkey = lexer.getident(f) fclass[fkey] = classname dclass[fkey] = classname #print "append function", f continue
def build(classfile): global dclass print "adding", classfile + "'s content to dictionary" # Reading the header file f = open(classfile, 'r') lines = f.readlines() f.close() vlist = [] # List of members and methods key = "" COMMENT = FALSE INSMAC = FALSE INSBLK = FALSE INCLASS = FALSE for line in lines: line = wstring.chop(line) # Remove line separators if wstring.strip(line) == "": continue # Skip typedef and struct blocks if not INSBLK: INSBLK = lexer.openstruct(line) if INSBLK: INSBLK = lexer.closeblock(line) continue # If we are inside a macro or pragma block, skip it if not INSMAC: INSMAC = lexer.opendef(line) if INSMAC: INSMAC = lexer.closedef(line) continue words = string.split(line) w = words[0] if (w == "class"): # First of new class found if len(vlist) > 0: if key == "": print "Error, members without class", vlist sys.exit(0) dclass[key] = vlist key = words[1] #print "class", key vlist = [] # New list of members INCLASS = TRUE continue # Processing comment block if not COMMENT: if not lexer.embeddedcomment(line): COMMENT = lexer.opencomment(line) else: test = lexer.removecomment(line) if wstring.strip(test) == "": continue # Inside a multi-line comment if COMMENT: # Comment opened COMMENT = lexer.closecomment(line) # Always inside comment? # End of multi-line comment if not COMMENT: # Terminator reached i = string.find(line, "*/") if i == -1: print "Error in parsing header" sys.exit(0) line = line[i + 2:] # Keeping the code is exists # Start of multi-line comment if COMMENT: i = string.find(line, "/*") if i != -1: line = line[:i] else: continue line = wstring.strip(line) if line == "": continue # Define statement are ignored if line[0:7] == "#define": continue if lexer.isdeclaration(line): # Processing var declarations if lexer.isvardecl(line): nlist = lexer.splitvardecl(line) for n in nlist: vlist.append(n) #print "append var", n continue # Processing function declaration if lexer.isprototype(line): f = lexer.prototype vlist.append(f) #print "append function", f continue # End for # Adding the list of members of the class if key != "": dclass[key] = vlist