forked from bartvdbraak/blender
d1d1d2b870
- Added a centralized function for resolving targets (aaa.bbb.ccc) - Added documentation support for locally defined classes and methods - The time taken to parse now dictates how long to use the cache before parsing again - Other tweaks and comments and support for numeric var types The text plugin scripts have been updated to make use of these features.
65 lines
1.4 KiB
Python
65 lines
1.4 KiB
Python
#!BPY
|
|
"""
|
|
Name: 'Function Documentation | Ctrl I'
|
|
Blender: 246
|
|
Group: 'TextPlugin'
|
|
Shortcut: 'Ctrl+I'
|
|
Tooltip: 'Attempts to display documentation about the function preceding the cursor.'
|
|
"""
|
|
|
|
# Only run if we have the required modules
|
|
try:
|
|
import bpy
|
|
from BPyTextPlugin import *
|
|
except ImportError:
|
|
OK = False
|
|
else:
|
|
OK = True
|
|
|
|
def main():
|
|
txt = bpy.data.texts.active
|
|
if not txt:
|
|
return
|
|
|
|
(line, c) = current_line(txt)
|
|
|
|
# Check we are in a normal context
|
|
if get_context(txt) != CTX_NORMAL:
|
|
return
|
|
|
|
# Identify the name under the cursor
|
|
llen = len(line)
|
|
while c<llen and (line[c].isalnum() or line[c]=='_'):
|
|
c += 1
|
|
|
|
targets = get_targets(line, c)
|
|
|
|
# If no name under cursor, look backward to see if we're in function parens
|
|
if len(targets) == 0 or targets[0] == '':
|
|
# Look backwards for first '(' without ')'
|
|
b = 0
|
|
found = False
|
|
for i in range(c-1, -1, -1):
|
|
if line[i] == ')': b += 1
|
|
elif line[i] == '(':
|
|
b -= 1
|
|
if b < 0:
|
|
found = True
|
|
c = i
|
|
break
|
|
if found: targets = get_targets(line, c)
|
|
if len(targets) == 0 or targets[0] == '':
|
|
return
|
|
|
|
obj = resolve_targets(txt, targets)
|
|
if not obj: return
|
|
|
|
if isinstance(obj, Definition): # Local definition
|
|
txt.showDocs(obj.doc)
|
|
elif hasattr(obj, '__doc__') and obj.__doc__:
|
|
txt.showDocs(obj.__doc__)
|
|
|
|
# Check we are running as a script and not imported as a module
|
|
if __name__ == "__main__" and OK:
|
|
main()
|