def interactiveCompile(expr, env, filename, mode): modname = env['__name__'] if data.isDoc(expr, rootops.setlang): newlang = language.tmpLanguage(language.eval(expr, env), modname) env['__currentlang__'] = newlang env[newlang.__impl__.name] = newlang return compile("None", "", "eval") if data.isDoc(expr, (rootops.defop, rootops.getops)): expr['lang'] = '__currentlang__' language.eval(expr, env) return compile("None", "", "eval") else: return logixcompiler.compile([expr], filename, mode, module=modname)
def interact(self, *args): if hasattr(sys, 'ps1'): old_prompt = sys.ps1 else: old_prompt = None import language stdtmp = language.tmpLanguage(stdlang, self.locals['__name__']) self.locals['__currentlang__'] = stdtmp self.locals[stdtmp.__impl__.name] = stdtmp sys.ps1 = "[std]: " try: code.InteractiveConsole.interact(self, *args) finally: if old_prompt: sys.ps1 = old_prompt
def icompile(src, filename='<input>', mode='single'): import sys if src.strip() == "": return compile("None", "", "eval") # {{{ compile ipython magic commands as Python code if src.startswith("__IP.magic"): import codeop return codeop.CommandCompiler()(src, filename, mode) # }}} # {{{ return None if src is unfinished multiline if src.count("\n") > 0: if not src.endswith("\n"): return None else: if src.strip().endswith(":"): return None # }}} import IPython AutoTB = IPython.ultraTB.AutoFormattedTB(mode='Context', color_scheme='Linux', call_pdb=1) try: ulang = _ipy.locals['__currentlang__'] if not isinstance(ulang, language.Language): raise SyntaxError("current language is not valid") elif not ulang.__impl__.name.endswith("~"): ulang = language.tmpLanguage(ulang, _ipy.locals['__name__']) _ipy.locals['__currentlang__'] = ulang lang = ulang.__impl__ expr = lang.parse(src, mode="interactive", execenv=_ipy.locals) return interactiveCompile(expr, _ipy.locals, filename, mode) # {{{ exception handling except SyntaxError: raise except macros.MacroExpandError, exc: macros.formatMacroError(exc) exc_info = exc.exc_info raise ValueError("macro expand error")
def runsource(self, src, filename='<input>', mode='single'): import sys if src.strip() == "": return False # {{{ return True if src is unfinished multiline if src.count("\n") > 0: if not src.endswith("\n"): return True else: if src.strip().endswith(":"): return True # }}} try: ulang = self.locals['__currentlang__'] if not isinstance(ulang, language.Language): raise SyntaxError("current language is not valid") elif not ulang.__impl__.name.endswith("~"): ulang = language.tmpLanguage(ulang, self.locals['__name__']) self.locals['__currentlang__'] = ulang lang = ulang.__impl__ expr = lang.parse(src, mode='interactive', execenv=self.locals) import ipy code = ipy.interactiveCompile(expr, self.locals, filename, mode) self.runcode(code) # {{{ update prompt with current language name lang = self.locals['__currentlang__'] name = lang.__impl__.name sys.ps1 = "[%s]: " % (name.endswith("~") and name[:-1] or name) # }}} return False # {{{ exception handling except SyntaxError: self.showsyntaxerror(filename) except MacroExpandError, exc: formatMacroError(exc)
def initInteractive(ipy, baselang): package = __name__[:__name__.rfind(".")] logix = sys.modules[package] ipy.locals['logix'] = logix global _ipy _ipy = ipy logix.init() # {{{ optimisations if 0: import psyco import compiler psyco.bind(language.Language) psyco.bind(compiler.pycodegen, rec=10) if 0: import optimize import compiler optimize.bind_all(compiler) optimize.bind_all(parser) # }}} if baselang: ipy.locals['__currentlang__'] = logix.baselang else: mod = logix.imp('%s.std' % package, {}) tmpstd = language.tmpLanguage(mod.std, '__main__') ipy.locals['__currentlang__'] = tmpstd ipy.locals[tmpstd.__impl__.name] = tmpstd logix.stdlang = mod.std print "(type logix.license for more information)" print "Welcome to Logix"