def GenerateTags(buff): """Create a DocStruct object that represents a Tcl Script @param buff: a file like buffer object (StringIO) """ rtags = taglib.DocStruct() rtags.SetElementDescription('procedure', "Procedure Definitions") for lnum, line in enumerate(buff): line = line.strip() # Skip comment and empty lines if line.startswith(u"#") or not line: continue # Check for Procedure defs if parselib.IsToken(line, 0, u'proc'): parts = line.split() if len(parts) > 1: name = parts[1] if u"::" in name: spaces = name.split("::") space_l = rtags.GetElement('namespace', spaces[0]) if space_l == None: space_l = taglib.Namespace(spaces[0], lnum) rtags.AddElement('namespace', space_l) space_l.AddElement('procedure', taglib.Procedure(spaces[-1], lnum)) else: rtags.AddElement('procedure', taglib.Procedure(parts[1], lnum)) return rtags
def GenerateTags(buff): """Create a DocStruct object that represents a Tcl Script @param buff: a file like buffer object (StringIO) """ rtags = taglib.DocStruct() rtags.SetElementDescription('procedure', "Procedure Definitions") for lnum, line in enumerate(buff): line = line.strip() # Skip comment and empty lines if line.startswith(u"#") or not line: continue # Check for Procedure defs if parselib.IsToken(line, 0, u'proc'): parts = line.split() if len(parts) > 1 and parts[1].isalnum(): rtags.AddElement('procedure', taglib.Procedure(parts[1], lnum)) return rtags
def GenerateTags(buff): """Create a DocStruct object that represents a Tcl Script @param buff: a file like buffer object (StringIO) """ rtags = taglib.DocStruct() rtags.SetElementDescription('procedure', "Procedure Definitions") rtags.SetElementDescription('class', "SNIT") # Scope tracking for SNIT blocks insnit = False cursnit = None openparens = 0 for lnum, line in enumerate(buff): line = line.strip() # Skip comment and empty lines if line.startswith(u"#") or not line: continue if insnit and cursnit is not None: if parselib.IsToken(line, 0, u'method') or \ parselib.IsToken(line, 0, u'typemethod'): parts = line.split() if len(parts) > 1: name = parts[1] cursnit.AddMethod(taglib.Method(name, lnum)) elif parselib.IsToken(line, 0, u'typevariable') or \ parselib.IsToken(line, 0, u'variable'): parts = line.split() if len(parts) > 1: name = parts[1] cursnit.AddVariable(taglib.Variable(name, lnum)) elif parselib.IsToken(u'constructor', 0, line) or \ parselib.IsToken(u'destructor', 0, line): name = parselib.GetFirstIdentifier(line) cursnit.AddMethod(taglib.Method(name, lnum)) elif parselib.IsToken(line, 0, u"package"): pkg = GetPackage(line, lnum) if pkg: cursnit.AddElement('package', pkg) # Update Scope openparens += GetParenCount(line) if openparens == 0: insnit = False cursnit = None continue # Check for Procedure defs if parselib.IsToken(line, 0, u'proc'): parts = line.split() if len(parts) > 1: name = parts[1] if u"::" in name: spaces = name.split("::") space_l = rtags.GetElement('namespace', spaces[0]) if space_l == None: space_l = taglib.Namespace(spaces[0], lnum) rtags.AddElement('namespace', space_l) space_l.AddElement('procedure', taglib.Procedure(spaces[-1], lnum)) else: rtags.AddElement('procedure', taglib.Procedure(parts[1], lnum)) elif line.startswith(u'snit::'): parts = line.split() if len(parts) > 1: insnit = True openparens = GetParenCount(line) name = parts[1] cursnit = taglib.Class(name, lnum) rtags.AddClass(cursnit) elif parselib.IsToken(line, 0, u"package"): pkg = GetPackage(line, lnum) if pkg: rtags.AddElement('package', pkg) return rtags
def GenerateTags(buff): """Create a DocStruct object that represents a SQL document @param buff: a file like buffer object (StringIO) """ rtags = taglib.DocStruct() # Setup document structure rtags.SetElementDescription('function', "Function Definitions") rtags.SetElementDescription('procedure', "Procedure Definitions") rtags.SetElementDescription('package', "Packages") rtags.SetElementPriority('package', 3) rtags.SetElementPriority('function', 2) rtags.SetElementPriority('procedure', 1) # State Variables inpackage = False # Inside a package incomment = False # Inside a comment infunpro = False # Inside a function or proceedure definition lastname = None # Name of last found element lastpkg = None # Last found package object lastpkgname = None # Name of last package for lnum, line in enumerate(buff): line = line.strip() llen = len(line) idx = 0 while idx < len(line): # Skip Whitespace idx = parselib.SkipWhitespace(line, idx) # Check for coments if line[idx:].startswith(u'/*'): idx += 2 incomment = True elif line[idx:].startswith(u'--') or line[idx:].startswith(u'#'): break # go to next line elif line[idx:].startswith(u'*/'): idx += 2 incomment = False # At end of line if idx >= llen: break # Look for tags if incomment: idx += 1 elif (inpackage or infunpro) and \ parselib.IsToken(line, idx, u'end', True): idx = parselib.SkipWhitespace(line, idx + 3) name = parselib.GetFirstIdentifier(line[idx:]) if inpackage and name == lastpkgname: inpackage = False lastpkgname = None elif infunpro and name == lastname: infunpro = False lastname = None elif not infunpro and parselib.IsToken(line, idx, u'package', True): # Skip whitespace idx = parselib.SkipWhitespace(line, idx + 7) name = parselib.GetFirstIdentifier(line[idx:]) if name is not None and name.lower() == u'body': idx = parselib.SkipWhitespace(line, idx + 3) name = parselib.GetFirstIdentifier(line[idx:]) if name is not None: inpackage = True lastpkgname = name lastpkg = taglib.Package(name, lnum) rtags.AddElement('package', lastpkg) elif parselib.IsToken(line, idx, u'function', True): # Skip whitespace idx = parselib.SkipWhitespace(line, idx + 8) name = parselib.GetFirstIdentifier(line[idx:]) if name is not None: infunpro = True lastname = name if lastpkg is not None: lastpkg.AddElement('function', taglib.Function(name, lnum)) else: rtags.AddFunction(taglib.Function(name, lnum)) elif parselib.IsToken(line, idx, u'procedure', True): # Skip whitespace idx = parselib.SkipWhitespace(line, idx + 9) name = parselib.GetFirstIdentifier(line[idx:]) if name is not None: infunpro = True lastname = name if lastpkg is not None: lastpkg.AddElement('procedure', taglib.Procedure(name, lnum)) else: rtags.AddElement('procedure', taglib.Procedure(name, lnum)) else: idx += 1 return rtags