]>
Commit | Line | Data |
---|---|---|
1 | package Text::Homestuck; | |
2 | ||
3 | use 5.014000; | |
4 | use strict; | |
5 | use warnings; | |
6 | use parent qw/Exporter/; | |
7 | our @EXPORT = qw/aradia tavros sollux karkat nepeta kanaya terezi vriska equius gamzee eridan feferi/; | |
8 | our $VERSION = '0.000_001'; | |
9 | ||
10 | sub filter { | |
11 | my ($name, $code) = @_; | |
12 | no strict 'refs'; | |
13 | *{$name} = sub (;$){ | |
14 | local *__ANON__ = $name; | |
15 | if ($_[0]) { | |
16 | local $_ = $_[0]; | |
17 | $code->(); | |
18 | $_ | |
19 | } else { | |
20 | $code->(); | |
21 | $_ | |
22 | } | |
23 | } | |
24 | } | |
25 | ||
26 | filter aradia => sub { | |
27 | y/A-Z/a-z/; | |
28 | y/,.?//d; | |
29 | s/o/0/g; | |
30 | }; | |
31 | ||
32 | filter tavros => sub { | |
33 | y/a-zA-Z.!?/A-Za-z,,,/; | |
34 | s/:\)/}:)/g; | |
35 | }; | |
36 | ||
37 | filter sollux => sub { | |
38 | y/A-Z/a-z/; | |
39 | y/s/2/; | |
40 | s/i/ii/g; | |
41 | s/to/two/g; | |
42 | s/\b(fuck|joke|kk|aa)\b/\U$1/g; | |
43 | }; | |
44 | ||
45 | filter karkat => sub { | |
46 | y/a-z/A-Z/; | |
47 | s/\bD:/D:B/; | |
48 | }; | |
49 | ||
50 | filter nepeta => sub { | |
51 | y/A-Z/a-z/; | |
52 | s/ee/33/; | |
53 | $_ = ":33 < $_"; | |
54 | }; | |
55 | ||
56 | filter kanaya => sub { | |
57 | y/,.!?'//d; | |
58 | s/\b(\w)/\u$1/g; | |
59 | }; | |
60 | ||
61 | filter terezi => sub { | |
62 | y/a-z/A-Z/; | |
63 | y/AIE/413/; | |
64 | s/(!|\?)/$1$1/g; | |
65 | s/:\]|:\)/>:]/g; | |
66 | }; | |
67 | ||
68 | filter vriska => sub { | |
69 | y/Bb/88/; | |
70 | s/:\)/::::\)/g; | |
71 | s/D:/D::::/g; | |
72 | }; | |
73 | ||
74 | filter equius => sub { | |
75 | s/strong/STRONG/g; | |
76 | s/strength/STRONGNESS/g; | |
77 | s/x/%/ig; | |
78 | s/loo/100/ig; | |
79 | s/ool/001/ig; | |
80 | s/[?.!]$//; | |
81 | $_ = "D --> $_"; | |
82 | }; | |
83 | ||
84 | filter gamzee => sub { | |
85 | y/[A-Z]/[a-z]/; | |
86 | s/([a-z])(.)/$1\u$2/g; | |
87 | s/:\)/:o\)/g; | |
88 | }; | |
89 | ||
90 | filter eridan => sub { | |
91 | y/',.?!//d; | |
92 | s/w/ww/g; | |
93 | s/v/vv/g; | |
94 | s/ing/in/g; | |
95 | s/want to/wanna/g; | |
96 | s/going to/gonna/g; | |
97 | }; | |
98 | ||
99 | filter feferi => sub { | |
100 | s/H/)(/g; | |
101 | s/E/-E/g; | |
102 | s/:\)/38)/g; | |
103 | }; | |
104 | ||
105 | 1; | |
106 | __END__ | |
107 | ||
108 | =head1 NAME | |
109 | ||
110 | Text::Homestuck - Emulate the typing quirks of Homestuck trolls | |
111 | ||
112 | =head1 SYNOPSIS | |
113 | ||
114 | use Text::Homestuck; | |
115 | say feferi 'HELLO WORLD!'; # )(-ELLO WORLD! | |
116 | my @array = ('Move along.', 'Nothing to see here'); | |
117 | aradia for @array; | |
118 | say "@array"; # m0ve al0ng n0thing t0 see here | |
119 | ||
120 | =head1 DESCRIPTION | |
121 | ||
122 | Text::Homestuck exports several subroutines, one for each typing quirk. There are 12 such functions right now, one for each pre-scratch troll: aradia, tavros, sollux, karkat, nepeta, kanaya, terezi, vriska, equius, gamzee, eridan, feferi. | |
123 | ||
124 | Each subroutine takes one or no arguments. If called with an argument, they apply the quirk to the argument and return the result. If called with no arguments, they apply the quirk to C<$_>, modifiying it in-place, and returning C<$_>. | |
125 | ||
126 | =head1 SEE ALSO | |
127 | ||
128 | Homestuck: L<http://mspaintadventures.com/?s=6&p=001901> | |
129 | ||
130 | A table of typing quirks: L<http://mspaintadventures.wikia.com/wiki/Typing_Quirk> | |
131 | ||
132 | =head1 AUTHOR | |
133 | ||
134 | Marius Gavrilescu C<< <marius@ieval.ro> >> | |
135 | ||
136 | =head1 COPYRIGHT AND LICENSE | |
137 | ||
138 | Copyright (C) 2014 by Marius Gavrilescu | |
139 | ||
140 | This library is free software; you can redistribute it and/or modify | |
141 | it under the same terms as Perl itself, either Perl version 5.18.2 or, | |
142 | at your option, any later version of Perl 5 you may have available. | |
143 | ||
144 | ||
145 | =cut |