| 1 | This is a collection of filters to do all sorts of strange things to text. |
| 2 | B1ff, the Swedish Chef, and an eleet filter are included, along with many, |
| 3 | many more. |
| 4 | |
| 5 | http://joeyh.name/code/filters |
| 6 | |
| 7 | Since the original versions of some of these filters have copyright |
| 8 | problems, I have done a "clean room" re-implementation of the original lex |
| 9 | filters in perl. I did this without looking at the original code to the |
| 10 | filters at all, I simply observed their output and drew my own conclusions, |
| 11 | and wrote my own code. Then I compared the output of the original and new |
| 12 | filters when ran on large bodies of text, and fixed the things I had |
| 13 | missed. |
| 14 | |
| 15 | Here are the results of my investigations of how the filters work: |
| 16 | |
| 17 | eleet: |
| 18 | This is the simplest filter to figure out. The letters a-z of |
| 19 | the alphabet are replaced with the following letters: |
| 20 | 4 b c d 3 f g h 1 j |< l /\/\ /\/ 0 p q r 5 + u \/ \/\/ >< y z |
| 21 | Note that the equivalent translation is done on upper-case letters. |
| 22 | |
| 23 | fudd: |
| 24 | |
| 25 | This one is trivial too. A few transpositions happen differently if |
| 26 | the letter is at the end of the word or not, and I think I found |
| 27 | all the transpositions with only a few paragraphs of sample output. |
| 28 | The only weird thing is that 'n.' is changed to "n, uh-hah-hah-hah." |
| 29 | (Works well with sentances ending in "gun." ..) |
| 30 | |
| 31 | chef: |
| 32 | Personally my favorite filter. This took a bit of work to figure |
| 33 | out, and I doubt I have everything correct. Note that due to a bug |
| 34 | or an odd feature of the original program, it doesn't seem to think |
| 35 | that the first letter of the first word is really the first letter |
| 36 | of a word and so some of the words below don't trigger for that first |
| 37 | word. I did not emulate this behavior because I think it's probably a |
| 38 | bug. |
| 39 | |
| 40 | The word "bork" is never changed, no matter what any of these |
| 41 | rules may say. Neither is "Bork". |
| 42 | |
| 43 | The following translations only happen to letters that are the first |
| 44 | letter of a word of at least 2 letters in size: |
| 45 | o -> oo |
| 46 | O -> Oo |
| 47 | |
| 48 | These happen to letters that are not the last letter of a word: |
| 49 | a -> e |
| 50 | A -> e |
| 51 | |
| 52 | These translations only happen if the letter is not the first letter |
| 53 | of a word: |
| 54 | f -> ff |
| 55 | i -> ee (but only the first `i' per word) |
| 56 | o -> u |
| 57 | u -> oo |
| 58 | |
| 59 | These translations always happen: |
| 60 | v -> f |
| 61 | V -> F |
| 62 | w -> v |
| 63 | W -> V |
| 64 | an -> un |
| 65 | An -> Un |
| 66 | au -> oo |
| 67 | Au -> Oo |
| 68 | |
| 69 | Any occurrence of "e" at the end of a word is changed to "e-a". |
| 70 | |
| 71 | Any occurrence of "e" and the beginning of a word is changed to "i". |
| 72 | Same with capitals. |
| 73 | |
| 74 | Any occurrence of "the" is changed to "zee", any occurrence of |
| 75 | "The", to "Zee". |
| 76 | |
| 77 | Any occurrence of "tion" in a word, to "shun". |
| 78 | |
| 79 | Any "th" at the end of a word is changed to "t". |
| 80 | |
| 81 | Any "en" at the end of a word is changed to "ee". |
| 82 | |
| 83 | Any "ow" at the end of a word is changed to "oo". |
| 84 | |
| 85 | And of course, after any `.', `?', or `!' that is at the end of a |
| 86 | line, the Chef prints out a new line, and then the famous |
| 87 | "Bork Bork Bork!", and then another newline. |
| 88 | |
| 89 | Known bugs in this implementation: |
| 90 | - says "frunch", not "french". |
| 91 | - still quite buggy in general. |
| 92 | |
| 93 | b1ff: |
| 94 | Unlike the other filters, b1ff does not try to be an exact duplicate |
| 95 | of its predecessor. |
| 96 | |
| 97 | After upper-casing everything, b1ff does some word and sub-word |
| 98 | substitutions, most of them misspellings. |
| 99 | |
| 100 | B1ff also changes punctuation - All commas become periods; all |
| 101 | semicolons, commas. Question and exclamation marks are changed to |
| 102 | things like "!!!!1!" and "?!?!?!". It looks like the original filter |
| 103 | decided how long a sequence to print based on the text input before |
| 104 | the end of sentence. I took a simpler route and just randomized it. |
| 105 | |
| 106 | Collected and written by Joey Hess <id@joeyh.name> |