Permalink
Cannot retrieve contributors at this time
# hexchat-homoglyph.pl | |
# Converts text into visually similar yet different characters. | |
# Author: William Woodruff | |
# ------------------------ | |
# This code is licensed by William Woodruff under the MIT License. | |
# http://opensource.org/licenses/MIT | |
use strict; | |
use warnings; | |
use utf8; | |
use Xchat qw(:all); | |
my $PLUGIN_NAME = 'homoglyph'; | |
my $PLUGIN_VERS = '1.1'; | |
my $PLUGIN_DESC = 'converts characters into visually similar glyphs'; | |
my %GLYPHS = ( | |
'!' => ['!', 'ǃ', '!'], | |
'"' => ['"', '״', '″', '"'], | |
'$' => ['$', '$'], | |
'%' => ['%', '%'], | |
'&' => ['&', '&'], | |
'(' => ['(', '﹝', '('], | |
')' => [')', '﹞', ')'], | |
'*' => ['*', '⁎', '*'], | |
'+' => ['+', '+'], | |
',' => [',', '‚', ','], | |
'-' => ['-', '‐', '�-'], | |
'.' => ['.', '٠', '۔', '܁', '܂', '․', '‧', '。', '.', '。'], | |
'/' => ['/', '̸', '⁄', '∕', '╱', '⫻', '⫽', '/', 'ノ'], | |
'0' => ['0', 'O', 'o', 'Ο', 'ο', 'О', 'о', 'Օ', 'O', 'o'], | |
'1' => ['1', 'I', 'ا', '1'], | |
'2' => ['2', '2'], | |
'3' => ['3', '3'], | |
'4' => ['4', '4'], | |
'5' => ['5', '5'], | |
'6' => ['6', '6'], | |
'7' => ['7', '7'], | |
'8' => ['8', 'Ց', '8'], | |
'9' => ['9', '9'], | |
':' => [':', '։', '܃', '܄', '∶', '꞉', ':'], | |
';' => [';', ';', ';'], | |
'<' => ['<', '‹', '<'], | |
'=' => ['=', '='], | |
'>' => ['>', '›', '>'], | |
'?' => ['?', '?', '¿'], | |
'@' => ['@', '@'], | |
'[' => ['[', '['], | |
'\\' => ['\\', '\'], | |
']' => [']', ']'], | |
'^' => ['^', '^'], | |
'_' => ['_', '_'], | |
'`' => ['`', '`'], | |
'a' => ['A', 'a', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ɑ', 'Α', 'α', 'а', 'Ꭺ', 'A', 'a'], | |
'b' => ['B', 'b', 'ß', 'ʙ', 'Β', 'β', 'В', 'Ь', 'Ᏼ', 'ᛒ', 'B', 'b'], | |
'c' => ['C', 'c', 'ϲ', 'Ϲ', 'С', 'с', 'Ꮯ', 'Ⅽ', 'ⅽ', 'C', 'c'], | |
'd' => ['D', 'd', 'Ď', 'ď', 'Đ', 'đ', 'ԁ', 'ժ', 'Ꭰ', 'Ⅾ', 'ⅾ', 'D', 'd'], | |
'e' => ['E', 'e', 'È', 'É', 'Ê', 'Ë', 'é', 'ê', 'ë', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'Ě', 'ě', 'Ε', 'Е', 'е', 'Ꭼ', 'E', 'e'], | |
'f' => ['F', 'f', 'Ϝ', 'F', 'f'], | |
'g' => ['G', 'g', 'ɡ', 'ɢ', 'Ԍ', 'ն', 'Ꮐ', 'G', 'g'], | |
'h' => ['H', 'h', 'ʜ', 'Η', 'Н', 'һ', 'Ꮋ', 'H', 'h'], | |
'i' => ['I', 'i', 'l', 'ɩ', 'Ι', 'І', 'і', 'ا', 'Ꭵ', 'ᛁ', 'Ⅰ', 'ⅰ', 'I', 'i'], | |
'j' => ['J', 'j', 'ϳ', 'Ј', 'ј', 'յ', 'Ꭻ', 'J', 'j'], | |
'k' => ['K', 'k', 'Κ', 'κ', 'К', 'Ꮶ', 'ᛕ', 'K', 'K', 'k'], | |
'l' => ['L', 'l', 'ʟ', 'ι', 'ا', 'Ꮮ', 'Ⅼ', 'ⅼ', 'L', 'l'], | |
'm' => ['M', 'm', 'Μ', 'Ϻ', 'М', 'Ꮇ', 'ᛖ', 'Ⅿ', 'ⅿ', 'M', 'm'], | |
'n' => ['N', 'n', 'ɴ', 'Ν', 'N', 'n'], | |
'o' => ['0', 'O', 'o', 'Ο', 'ο', 'О', 'о', 'Օ', 'O', 'o'], | |
'p' => ['P', 'p', 'Ρ', 'ρ', 'Р', 'р', 'Ꮲ', 'P', 'p'], | |
'q' => ['Q', 'q', 'Ⴍ', 'Ⴓ', 'Q', 'q'], | |
'r' => ['R', 'r', 'ʀ', 'Ի', 'Ꮢ', 'ᚱ', 'R', 'r'], | |
's' => ['S', 's', 'Ѕ', 'ѕ', 'Տ', 'Ⴝ', 'Ꮪ', '𐐠', 'S', 's'], | |
't' => ['T', 't', 'Τ', 'τ', 'Т', 'Ꭲ', 'T', 't'], | |
'u' => ['U', 'u', 'μ', 'υ', 'Ա', 'Ս', '⋃', 'U', 'u'], | |
'v' => ['V', 'v', 'ν', 'Ѵ', 'ѵ', 'Ꮩ', 'Ⅴ', 'ⅴ', 'V', 'v'], | |
'w' => ['W', 'w', 'ѡ', 'Ꮃ', 'W', 'w'], | |
'x' => ['X', 'x', 'Χ', 'χ', 'Х', 'х', 'Ⅹ', 'ⅹ', 'X', 'x'], | |
'y' => ['Y', 'y', 'ʏ', 'Υ', 'γ', 'у', 'Ү', 'Y', 'y'], | |
'z' => ['Z', 'z', 'Ζ', 'Ꮓ', 'Z', 'z'], | |
'{' => ['{', '{'], | |
'|' => ['|', 'ǀ', 'ا', '|'], | |
'}' => ['}', '}'], | |
'~' => ['~', '⁓', '~'] | |
); | |
register($PLUGIN_NAME, $PLUGIN_VERS, $PLUGIN_DESC, \&on_unload); | |
Xchat::printf("Loaded %s version %s", $PLUGIN_NAME, $PLUGIN_VERS); | |
sub on_unload { | |
Xchat::printf("%s version %s unloaded.", $PLUGIN_NAME, $PLUGIN_VERS); | |
} | |
hook_command('hg', \&homoglyphify, {help_text => "Usage: /hg <text> to homoglyphify the given text."}); | |
sub homoglyphify { | |
if (defined $_[1][1]) { | |
my $text = lc($_[1][1]); | |
my $result = ''; | |
foreach (split //, $text) { | |
if (exists $GLYPHS{$_}) { | |
my @glyphs = @{$GLYPHS{$_}}; | |
$result .= $glyphs[rand @glyphs]; | |
} | |
else { | |
$result .= $_; | |
} | |
} | |
command("say $result"); | |
} | |
return EAT_ALL; | |
} |