Files
_/_/__init__.py
2014-09-17 18:22:31 +02:00

114 lines
2.8 KiB
Python

import os
import sys
import imp
def to_i(num, b):
"""String to integer."""
n = 0
for d in num:
if int(d) > b:
return 0
n = b * n + int(d)
return n
def to_c(digit):
"""Integer to char."""
if digit < 10:
return str(digit)
return chr(ord('a') + digit - 10)
def to_s(number, base):
"""Integer to string."""
if number < 0:
return '-' + to_s(-number, base)
(d, m) = divmod(number, base)
if d > 0:
return to_s(d, base) + to_c(m)
return to_c(m)
def chunks(li, n):
r = []
for i in range(0, len(li), n):
r.append(li[i:i+n])
return r
def __script__(src):
"""For a documentation, consult the README."""
code = []
src = [list(to_s(ord(c), 6).rjust(3, "0")) for c in src]
src = [int(x, base=6)+1 for sub in src for x in sub]
for n in src:
if code:
if len(code[-1]) + n + 1 >= 60: code.append("")
else: code[-1] += " "
code[-1] += ("_" * n)
else: code.append("_" * n)
return "\n".join(code)
def __ruby_script__(src):
return "require '_'\n\n" + __script__(src)
def __py_script__(src):
return "import _\n\n" + __script__(src)
def to_be_exec(name):
"""Decodes _ to a fragment."""
global code
global fragment
code.extend(fragment)
del fragment[:]
for i in name.split():
fragment.append(str((len(i)-1)))
code = []
fragment = []
def _():
"""Decodes all fragments to code and executes it."""
global code
global fragment
if not code and not fragment:
return
code.extend(fragment)
eval(''.join([chr(to_i(c, 6)) for c in chunks(''.join(code), 3)]))
code, fragment = [], []
def _to_code(filename):
"""Code generator for an _ module."""
doc = open(filename, "rb").read()
for i in doc.split():
to_be_exec(i)
_()
def _install_importer():
"""Installs the module finder."""
sys.meta_path.insert(0, Finder())
class Finder:
"""Custom module finder for _ files."""
@classmethod
def find_module(cls, fullname, path):
for dirname in sys.path:
filename = os.path.join(dirname, fullname)
if os.path.exists(filename):
return UnderScoreLoader(filename)
else if os.path.exists(filename + ".py"):
return UnderScoreLoader(filename + ".py")
class UnderScoreLoader:
"""Custom module loader for _ files."""
def __init__(self, filename):
self.filename = filename
def load_module(self, fullname):
if fullname in sys.modules:
mod = sys.modules[fullname]
else:
mod = imp.new_module(fullname)
sys.modules[fullname] = mod
mod.__file__ = self.filename
mod.__loader__ = self
_to_code(self.filename)
return
_install_importer()