Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- esoprint.py, encodes in esoteric language code
- Supported languages:
- - Brainfuck
- - Ook!
- - Whitespace
- - Zombie # Blindly coded, not tested
- Maybe future supported languages:
- - Tink
- - Piet
- - Befunge
- - False
- - Q-BAL # When I find a interpreter
- - Malbolge # Maybe too big...
- - Beatnik # Really ¿?
- - Unlambda
- Not future supported languages:
- # It's not a logical thing to make a computer generate this!
- - Sheakspere
- - Haiku
- - Chef
- # Make's it boring
- - Whenever
- # Impossible
- - HQ9+
- - BIT
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Copyright (C) 2010 kenkeiras <kenkeiras@gmail.com>
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
- Version 2, December 2004
- Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
- Everyone is permitted to copy and distribute verbatim or modified
- copies of this license document, and changing it is allowed as long
- as the name is changed.
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- 0. You just DO WHAT THE FUCK YOU WANT TO.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Usage:
- ./esoprint.py [-h] [-l <language>] [-o <output file>] [<data> [<data> | -n [...] ] | -n]
- -h (--help): prints this help
- -l (--language): Set's output language, currently supported: Ook!, Brainf*ck, Whitespace, Zombie
- -o (--output) : Set's output file (to stdout by default)
- Whatever else is considered as data, the -n (--newline) is considered a line jump
- """
- # Language dictionary elements for BrainFuck-like langs
- # init: program initalization
- # inc
- # dec
- # push
- # pop
- # show
- # # get [Actually unused]
- def usage():
- import sys
- print sys.argv[0]+" [-h] [-l <language>] [-o <output file>] [<data> [<data> | -n [...] ] | -n] "
- print "-h (--help): prints this help"
- print "-l (--language): Set's output language"
- print "-o (--output) : Set's output file (to stdout by default)"
- print "Whatever else is considered as data, the -n (--newline) is considered a line jump"
- print "If no data is entered, it will be received from STDIN"
- print "Supported languages:"
- print """ - Brainfuck
- - Ook!
- - Whitespace
- - Zombie
- """
- brainfuck = {
- "init": "",
- "inc":"+",
- "dec":"-",
- "push":">",
- "pop":"<",
- "show":".",
- "get":",", #Unused
- "loop":"[", # Unused
- "endloop":"]" # Unused
- }
- ook = {
- "init": "",
- "inc":"Ook. Ook. ",
- "dec":"Ook! Ook! ",
- "push":"Ook. Ook? ",
- "pop":"Ook? Ook. ",
- "show":"Ook! Ook. ",
- "get":"Ook. Ook! ", # Unused
- "loop":"Ook! Ook? ", # Unused
- "endloop":"Ook? Ook! " # Unused
- }
- # Encodes in a Zombie program
- def zombie_encode(data):
- z = "Dundun is a zombie\n"
- z += " summon\n"
- z += " task talk\n"
- for p in data.split("\n"):
- z += " say \""+str( p.replace("\"","\\\"") )+"\"\n"
- z += " animate\n"
- z += "animate"
- return z
- # Encodes in a Whitespace program
- def whitespace_encode(data):
- for c in data:
- w += " " # Push into the stack: [Space] [Space]
- w += " " # Element, always positive [Space]
- # Character to binary (needed)
- b = bin( ord( c ) )
- w += b[ 2 : ].replace("0"," ").replace("1","\t") # Space: 0 || Tab: 1
- w += "\n" # Element end: [LF]
- w += "\t\n " # Output stack top: [Tab][LF][Space][Space]
- w += "\n\n\n" # Ending [LF][LF]
- return w
- # Encodes in a Brainf*ck-like language
- def stack_encode(lang, data):
- s = lang['init']
- n = 0
- for c in data:
- i = ord( c )
- while ( n > i ):
- s += lang['dec']
- n -= 1
- while ( n < i ):
- s += lang['inc']
- n += 1
- s += lang['show']
- return s
- bf_like = {"brainfuck":brainfuck,"ook":ook}
- langlist = {"whitespace":whitespace_encode,"zombie":zombie_encode}
- if __name__ == "__main__":
- import sys
- argc=len(sys.argv)
- lang=""
- data=""
- out = ""
- i=1
- while (i < argc):
- if (sys.argv[i] == "-l") or (sys.argv[i] == "--language"):
- i += 1
- lang = sys.argv[i]
- elif (sys.argv[i] == "-o") or (sys.argv[i] == "--output"):
- i += 1
- out = sys.argv[i]
- elif (sys.argv[i] == "-h") or (sys.argv[i] == "--help"):
- usage()
- sys.exit(0)
- elif (sys.argv[i] == "-n") or (sys.argv[i] == "--newline"):
- data += "\n"
- else:
- data = (data+" "+sys.argv[i]).strip()
- i+=1
- if (lang == ""):
- lang = raw_input("Select language: ")
- lang = lang.lower()
- if (lang not in langlist) and (lang not in bf_like):
- print "Unknown language (lenguaje desconocido)"
- sys.exit(1)
- if (data == ""):
- for line in sys.stdin:
- data += line
- if (data == "\n"):
- print "Sin entrada, saliendo..."
- sys.exit(0)
- if (lang in langlist):
- result = langlist[lang](data)
- else:
- result = stack_encode(bf_like[lang],data)
- if (out == ""):
- print result
- else:
- f = open(out,"w")
- f.write(result)
- f.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement