# coding: utf-8
# Big Text v2.1.2
# Generates text five lines tall.
# By William W. <wildbill AT purezc DOT com>
# License: GPL
# Options
# These are your starting options, and can be temporarily
# remembered by passing :! to the command
options = {
# Font: normal, bold
'font': 'normal',
# Output command
'command': 'say',
# Inversion: False -> off, True -> on
'invert': False,
# Colors: False -> off, [['1','2','3'],['1','2','3']] -> chosen colors
'colors': False,
# Go back through colors instead of just looping: False -> off, True -> on
'rewind': False,
# Cycle multiple colors by 0 -> line, 1 -> letter, 2 -> line
'cycle': 0,
# Keep the cycle open across lines, even if coloring by letter/word: False -> off, True -> on
'keepcycle': False,
# Don't skip spaces in alternation: False -> off, True -> on
'spaces': False,
# Flipped vert: False -> off, True -> on
'flip': False,
# Flipped horiz: False -> off, 1 -> string, 2 -> letters
'reverse': False
}
#
#/b Cheese!
# Simply a big "Cheese!"
#/b :m moos.
# An action whereby you "moo" in big text
#/b :c4 Burn!
# "Burn!" in red text (where 4 is red by standard mIRC colors)
#/b :c4,8 :c8,4 Ew!
# Alternative colors by line; red on yellow, then yellow on red
#/b :l :c4,,5 :c8,,7 :c9,,3 :c12,,2 :c13,,6 Rainbow!
# "Rainbow" text colorized by letter (see sample image)
# Python seems to be incapable of getting control codes right
# by ASCII value, so here they are:
# Bold: \2
# Underline: \31
# Reverse: \22
# Color: \3
# Normal: \15
# Space: || \xa0
import xchat, re, random
__module_name__ = "Big Text"
__module_version__ = "2.1.2"
__module_description__ = "Generates text five lines tall."
characters = {
'A': ['2112', '101', '111', '101', '101'],
'a': ['2112', '001', '2113', '101', '2311'],
'B': ['1132', '101', '1132', '101', '1132'],
'b': ['100', '100', '1132', '101', '1132'],
'C': ['23132', '101', '100', '101', '2112'],
'c': ['002', '2313', '102', '102', '2313'],
'D': ['110', '12332', '101', '101', '1132'],
'd': ['001', '001', '2311', '101', '2311'],
'E': ['111', '100', '1132', '100', '111'],
'e': ['2112', '101', '111', '100', '2112'],
'F': ['111', '100', '1132', '100', '100'],
'f': ['011', '2120', '3112', '2120', '2120'],
'G': ['2112', '100', '1231', '101', '2112'],
'g': ['2311', '101', '2113', '001', '2112'],
'H': ['101', '101', '111', '101', '101'],
'h': ['100', '100', '1132', '101', '101'],
'I': ['111', '010', '010', '010', '111'],
'i': ['1', '0', '1', '1', '1'],
'J': ['001', '001', '001', '101', '2112'],
'j': ['001', '000', '001', '101', '2112'],
'K': ['121', '112', '1322', '112', '121'],
'k': ['102', '102', '121', '112', '121'],
'L': ['100', '100', '100', '100', '111'],
'l': ['1', '1', '1', '1', '1'],
'M': ['21212', '1113', '12321', '1021', '1021'],
'm': ['0002', '21212', '1113', '12321', '12321'],
'N': ['101', '1321', '111', '1231', '101'],
'n': ['000', '1132', '101', '101', '101'],
'O': ['2112', '101', '101', '101', '2112'],
'o': ['000', '23132', '101', '101', '23132'],
'P': ['1132', '101', '1132', '100', '100'],
'p': ['000', '1132', '101', '1132', '100'],
'Q': ['2110', '1012', '1012', '1012', '21123'],
'q': ['000', '2311', '101', '2311', '001'],
'R': ['1132', '101', '1132', '101', '101'],
'r': ['000', '23132', '101', '100', '100'],
'S': ['2311', '100', '2112', '001', '1132'],
's': ['002', '031', '210', '012', '130'],
'T': ['111', '010', '010', '010', '010'],
't': ['010', '111', '010', '010', '010'],
'U': ['101', '101', '101', '101', '2112'],
'u': ['000', '101', '101', '101', '2311'],
'V': ['1021', '1021', '1021', '21212', '0130'],
'v': ['2000', '1021', '1021', '21212', '0130'],
'W': ['1021', '1021', '12321', '1113', '21212'],
'w': ['0002', '1021', '12321', '1113', '21212'],
'X': ['101', '101', '2112', '101', '101'],
'x': ['000', '101', '2112', '2112', '101'],
'Y': ['101', '101', '2112', '010', '010'],
'y': ['000', '1221', '2112', '2210', '3102'],
'Z': ['111', '0212', '010', '2120', '111'],
'z': ['200', '311', '012', '210', '311'],
'0': ['2112', '101', '1231', '1321', '2112'],
'1': ['010', '2310', '010', '010', '111'],
'2': ['2310', '0212', '2112', '100', '111'],
'3': ['1132', '001', '2112', '001', '1132'],
'4': ['101', '101', '111', '001', '001'],
'5': ['111', '100', '1132', '001', '1132'],
'6': ['2112', '100', '1132', '101', '2112'],
'7': ['111', '001', '0212', '010', '010'],
'8': ['2112', '101', '2112', '101', '2112'],
'9': ['2112', '101', '2311', '001', '2112'],
'/': ['001', '0212', '010', '2120', '100'],
'\\': ['100', '2120', '010', '0212', '001'],
'|': ['1', '1', '0', '1', '1'],
'-': ['000', '000', '111', '000', '000'],
'=': ['000', '111', '000', '111', '000'],
'+': ['000', '010', '111', '010', '000'],
'?': ['2112', '101', '0212', '000', '0212'],
'!': ['1', '1', '1', '0', '1'],
'(': ['011', '2120', '100', '2120', '011'],
')': ['110', '0212', '001', '0212', '110'],
'`': ['212', '01', '00', '00', '00'],
'*': ['000', '010', '111', '23032', '000'],
'^': ['010', '23032', '000', '000', '000'],
'%': ['101', '0212', '010', '2120', '101'],
'#': ['23032', '111', '23032', '111', '23032'],
'~': ['0000', '21301', '12112', '0000', '0000'],
'$': ['2110', '12302', '21132', '02321', '1112'],
'@': ['2112', '101', '1231', '100', '2112'],
'&': ['21102', '1010', '21121', '10132', '21121'],
'[': ['11', '10', '10', '10', '11'],
']': ['11', '01', '01', '01', '11'],
'{': ['2311', '2120', '100', '2120', '2311'],
'}': ['1132', '0212', '001', '0212', '1132'],
'<': ['0031', '0130', '3100', '0130', '0031'],
'>': ['1300', '0310', '0013', '0310', '1300'],
'_': ['000', '000', '000', '000', '111'],
"'": ['212', '10', '00', '00', '00'],
'"': ['101', '23032', '000', '000', '000'],
':': ['0', '1', '0', '1', '0'],
';': ['212', '00', '00', '212', '10'],
'.': ['0', '0', '0', '0', '1'],
',': ['00', '00', '00', '212', '10'],
' ': ['02', '02', '02', '02', '02']
}
fonts = {
'normal': ['EE', 'SFF', 'E', 'SF', 'E'], # Whole empty, whole full, half empty, half full, between characters
'bold': ['EEEE', 'SFFFF', 'EE', 'SFF', 'EE']
}
options_def = {'font': 'normal', 'command': 'say', 'invert': False, 'colors': False, 'rewind': False, 'cycle': 0, 'keepcycle': False, 'spaces': False, 'flip': False, 'reverse': False}
options_local = {'font': 'normal', 'reverse': random.choice([False, 1, 2]), 'invert': False, 'flip': random.choice([True, False]), 'colors': [['4', '', '5'], ['8', '', '7'], ['9', '', '3'], ['12', '', '2'], ['13', '', '6']], 'spaces': False, 'command': 'echo', 'cycle': 1, 'keepcycle': random.choice([True, False]), 'rewind': False}
usage = 'Usage: B [:!] [:m/:e/:<command>:] [:b] [:i/:c<fg>[,[<bg>][,<shadow>]] [:l/:w [:s] [:k]] [:rw]] [:f] [:r/:rl] <text>'
def generate(text):
global characters
bigged = ''
big = [[],[],[],[],[]]
end = '4'
for i, l in enumerate(list(text)):
if i + 1 == len(text):
end = ''
if characters.has_key(l):
bigged += l
set = characters[l]
for line in range(0, 5):
big[line] += [set[line] + end]
return [bigged, big]
def draw(text, config):
if len(text) < 1:
return 0
global xchat, fonts
opts = config
chars = fonts[config['font']]
# Tweaks for reversal
if opts['reverse'] == 2:
text = text[::-1]
# Generate the text
bigged, big = generate(text)
# More reversal tweaks
if opts['reverse']:
bigged = bigged[::-1]
# Flipped
if opts['flip']:
big.reverse()
# Rewind colors
if opts['rewind'] and type(opts['colors']) is list and len(opts['colors']) > 2:
opts['colors'] += opts['colors'][::-1][1:-1]
c = 0 # Starting color
for line in big:
# Interpret our drawing
drawn = []
for part in line:
draw = ''
for p in part:
if int(p) in range(0, 5):
draw += chars[int(p)]
else:
print "Invalid character found in character mapping: " + p
return 0
drawn += [draw]
# Output it
if drawn:
prefix = '' # Used for inversion
# Reversed
if opts['reverse']:
drawn = '!'.join(drawn)[::-1].split('!')
# Color... this stuff makes my brain hurt
if opts['colors']:
# Determine what we join by based upon shadow
joiner = ''
if len(opts['colors'][0]) == 3:
joiner = chars[4]
# Don't shift colors over spaces
spaces = []
if not opts['spaces']:
for i, l in enumerate(list(bigged)):
if l == ' ':
spaces += [i]
# Not cycling colors by character or word
if not opts['cycle'] or len(opts['colors']) <= 1:
drawn = [joiner.join(drawn)]
# Color by word; lots of crap to rechunk
elif opts['cycle'] == 2:
newdrawn = []
letters = []
spaces = []
for i, l in enumerate(list(bigged)): # My head asplode
if l == ' ':
if opts['spaces'] != 1:
spaces += [len(newdrawn)]
if letters != []:
newdrawn += [joiner.join(letters)]
newdrawn += [drawn[i]]
letters = []
else:
letters += [drawn[i]]
if letters != []:
newdrawn += [joiner.join(letters)]
drawn = newdrawn[:]
# Add some padding if we have a background color
if opts['colors'][0][1] != '':
drawn[0] = chars[4]+drawn[0]
drawn[len(drawn)-1] += chars[4]
for i, part in enumerate(drawn):
# Shadowed
if len(opts['colors'][c]) == 3:
# Reversed text; pad accordingly
if opts['reverse']:
part += chars[4]
else:
part = chars[4]+part
part = re.sub('ES|SE', ' 0,'+opts['colors'][c][2]+'D'+' ', part)
# Get the colors to use and apply
space = opts['colors'][c][:2]
font = space[::-1]
if space[1] == '':
font = ['0', space[0]]
space = 0
if space != 0:
part = re.sub('(E+)', ' '+','.join(space)+r'\1 ', part)
part = re.sub('(F+)', ' '+','.join(font)+r'\1 ', part)
# FINALLY
drawn[i] = part
# Change the color if we're not on space
if not opts['cycle'] or i not in spaces:
if c + 1 < len(opts['colors']):
c += 1
else:
c = 0
# If we're chunking colors, reset
if not opts['keepcycle'] and opts['cycle']:
c = 0
# WHOO!!!
drawn = ''.join(drawn)
# Do not use color, thereby making life much easier
else:
drawn = re.sub('(F+)', r' \1 ', ''.join(drawn))
# Inversion
if opts['invert']:
drawn = 'E'+drawn+'E'
prefix = ' '
# Remove shadow codes and convert our output
drawn = drawn.replace('S', '')
drawn = re.sub('[EDF]', '', drawn)
xchat.command(opts['command']+' '+prefix+drawn)
return 1
def bigtext(word, word_eol, userdata):
global usage, options, options_default
if len(word) == 1:
print usage
return xchat.EAT_XCHAT
word = word_eol[0].split(' ')
offset = 0
flag = True
remember = False
opts = options.copy()
for w in word[1:]:
offset += 1
if w == ':!' and offset == 1:
remember = True
opts = options_def.copy()
elif w == ':b':
opts['font'] = 'bold'
elif w == ':m':
opts['command'] = 'me'
elif w == ':e':
opts['command'] = 'echo'
elif re.match('^:.+:$', w):
command = {}
for i, p in enumerate(w[1:-1].split('\\\\')):
command[i] = []
for q in p.split('\\_'):
command[i] += [q.replace('_', ' ')]
command[i] = '_'.join(command[i])
opts['command'] = '\\'.join(command.values())
elif w == ':i':
opts['invert'] = True
elif re.match('^:c[0-9]+(,([0-9]+)?(,[0-9]+)?)?$', w):
if opts['colors'] == 0:
opts['colors'] = []
colors = w[2:].split(',')
if len(colors) == 1:
colors += ['']
if opts['colors'] == [] or len(colors) == len(opts['colors'][0]):
opts['colors'] += [colors]
elif w == ':rw':
opts['rewind'] = True
elif w == ':l':
opts['cycle'] = 1
elif w == ':w':
opts['cycle'] = 2
elif w == ':k':
opts['keepcycle'] = True
elif w == ':s':
opts['spaces'] = True
elif w == ':f':
opts['flip'] = True
elif w == ':r':
opts['reverse'] = 1
elif w == ':rl':
opts['reverse'] = 2
elif w == ':':
offset += 1
flag = False
break
else:
flag = False
break
if flag or offset >= len(word):
if remember:
options = opts.copy()
result = []
for opt in opts.keys():
result += [' 5'+opt+' : 7 '+str(opts[opt])]
print ' Big Text options set: '+' ; '.join(result)
else:
print usage
return xchat.EAT_XCHAT
elif remember:
options = opts.copy()
draw(word_eol[offset], opts.copy())
return xchat.EAT_XCHAT
xchat.hook_command("B", bigtext, help=usage)
draw('BIG TEXT', options_local.copy())
print "Script loaded. Use /B for help."
xchat scripts
xchat big text irc rainbow script
here is a fun big text x-chat irc script. this xchat plugin will make your text big and colorful.
xchat irc scripts and plugins
Are you looking for xchat irc scripts? This site was created to provide you the best xchat plugins and x chat scripts. The chat program X-Chat was created for irc chat. Users can download it and connect to irc rooms and chat and also use x-chat scripts.
Subscribe to:
Comments (Atom)