Files

85 lines
2.5 KiB
Python

"""
User contributed script: MSDN API HELP plugin
This script fetches the API reference (from MSDN) of a given highlighted identifier
and returns the results in a new web browser page.
This script depends on the feedparser package: http://code.google.com/p/feedparser/
"""
from __future__ import print_function
# -----------------------------------------------------------------------
import ida_kernwin
import ida_name
import ida_idaapi
try:
import feedparser
except:
ida_kernwin.warning('Feedparser package not installed')
def get_url(ident):
"""
Note: This code is left in a separate, toplevel function so that
tests can easily override it and provide a replacement file://
URL and work on machines without an internet connection
"""
try:
# This is a 'hook' to enable testing on machines disconnected
# from the internet (we're not testing feedparser's HTTPS URL
# download capabilities anyway)
import sys
return sys.modules["__main__"].get_url(ident)
except:
return "https://social.msdn.microsoft.com/search/en-US/feed?query=%s&format=RSS&theme=feed%%2fen-us" % ident
# -----------------------------------------------------------------------
class msdnapihelp_plugin_t(ida_idaapi.plugin_t):
flags = ida_idaapi.PLUGIN_UNL
comment = "Online MSDN API Help"
help = "Help me"
wanted_name = "MSDN API Help"
wanted_hotkey = "F3"
def init(self):
return ida_idaapi.PLUGIN_OK
@staticmethod
def sanitize_name(name):
t = ida_name.FUNC_IMPORT_PREFIX
if name.startswith(t):
return name[len(t):]
return name
def run(self, arg):
# Get the highlighted identifier
v = ida_kernwin.get_current_viewer()
ident, ok = ida_kernwin.get_highlight(v)
if not ok:
print("No identifier was highlighted")
return
ident = self.sanitize_name(ident)
print("Looking up '%s' in MSDN online" % ident)
d = feedparser.parse(get_url(ident))
if len(d['entries']) > 0:
url = d['entries'][0].link
if arg > 0:
print("URL: %s" % url)
else:
import webbrowser
webbrowser.open_new_tab(url)
else:
print("API documentation not found for: %s" % ident)
def term(self):
pass
# -----------------------------------------------------------------------
def PLUGIN_ENTRY():
return msdnapihelp_plugin_t()