filters/0000755000175000017500000000000012633476041012116 5ustar mariusmariusfilters/pirate0000755000175000017500000000626012633476041013334 0ustar mariusmarius#!/usr/bin/perl -p # an array, not a hash. because order is important @trans_table=( '\bmy\b' => 'me', '\bboss\b' => 'admiral', '\bmanager\b' => 'admiral', '\b[Cc]aptain\b' => "Cap'n", '\bmyself\b' => 'meself', '\byour\b' => 'yer', '\byou\b' => 'ye', '\bfriend\b' => 'matey', '\bfriends\b' => 'maties', '\bco[-]?worker\b' => 'shipmate', '\bco[-]?workers\b' => 'shipmates', '\bearlier\b' => 'afore', '\bold\b' => 'auld', '\bthe\b' => "th'", '\bof\b' => "o'", '\bdon\'t\b' => "dern't", '\bdo not\b' => "dern't", '\bnever\b' => "no nay ne'er", '\bever\b' => "e'er", '\bover\b' => "o'er", '\bYes\b' => 'Aye', '\bNo\b' => 'Nay', '\bdon\'t know\b' => "dinna", '\bhadn\'t\b' => "ha'nae", '\bdidn\'t\b' => "di'nae", '\bwasn\'t\b' => "weren't", '\bhaven\'t\b' => "ha'nae", '\bfor\b' => 'fer', '\bbetween\b' => 'betwixt', '\baround\b' => "aroun'", '\bto\b' => "t'", '\bit\'s\b' => "'tis", '\bIt\'s\b' => 'It be', '\bwoman\b' => 'wench', '\blady\b' => 'wench', '\bwife\b' => 'lady', '\bgirl\b' => 'lass', '\bgirls\b' => 'lassies', '\bguy\b' => 'lubber', '\bman\b' => 'lubber', '\bfellow\b' => 'lubber', '\bdude\b' => 'lubber', '\bboy\b' => 'lad', '\bboys\b' => 'laddies', '\bchildren\b' => 'minnows', '\bkids\b' => 'minnows', '\bhim\b' => 'that scurvey dog', '\bher\b' => 'that comely wench', '\bhim\.\b' => 'that drunken sailor', '\bHe\b' => 'The ornery cuss', '\bShe\b' => 'The winsome lass', '\bhe\'s\b' => 'he be', '\bshe\'s\b' => 'she be', '\bwas\b' => "were bein'", '\bHey\b' => 'Avast', '\bher\.\b' => 'that lovely lass', '\bfood\b' => 'chow', '\broad\b' => 'sea', '\broads\b' => 'seas', '\bstreet\b' => 'river', '\bstreets\b' => 'rivers', '\bhighway\b' => 'ocean', '\bhighways\b' => 'oceans', '\bcar\b' => 'boat', '\bcars\b' => 'boats', '\btruck\b' => 'schooner', '\btrucks\b' => 'schooners', '\bSUV\b' => 'ship', '\bmachine\b' => 'contraption', '\bairplane\b' => 'flying machine', '\bjet\b' => 'flying machine', '\bdriving\b' => 'sailing', '\bdrive\b' => 'sail', '\bwith\b' => "wi'", '\bam\b' => 'be', '\bis\b' => 'be', '\bare\b' => 'be', '\bwas\b' => 'be', '\bwere\b' => 'be', '\bwere\b' => 'be', ); while (@trans_table) { $key=shift @trans_table; $value=shift @trans_table; s/$key/$value/g; } s/ing\b/in'/g; s/ings\b/in's/g; s/(\.( |\t|$))/avast($1,3)/eg; s/([!\?]( \t|$))/avast($1,2)/eg; # Greater chance after exclamation s/\Br\B/roll()/eg; sub roll { return 'r' x (rand(5)+1) if rand > 0.5; return 'r'; } sub avast { my $stub=shift; my $chance=shift; my @shouts=( ", avast$stub", "$stub Ahoy!", ", and a bottle of rum!", ", by Blackbeard's sword$stub", ", by Davy Jones' locker$stub", "$stub Walk the plank!", "$stub Aarrr!", "$stub Yaaarrrrr!", ", pass the grog!", ", and dinna spare the whip!", ", with a chest full of booty$stub", ", and a bucket o' chum$stub", ", we'll keel-haul ye!", "$stub Shiver me timbers!", "$stub And hoist the mainsail!", "$stub And swab the deck!", ", ye scurvey dog$stub", "$stub Fire the cannons!", ", to be sure$stub", ", I'll warrant ye$stub", "$stub Arr, me hearty!", ); if (int rand($chance) == 1) { return @shouts[rand @shouts]." "; } else { return $stub; } } filters/jive.l0000644000175000017500000001537412633476041013242 0ustar mariusmarius%{ /* * Lex filter to transform plain English into Jive English. * No racial or societal slurs are intended. For amusement only. * * Copyright 1986 by Daniel Klein and Clement Cole. * * Reproduction permitted so long as this notice is retained. */ %} %e 1700 %p 4000 %n 700 %k 450 %a 1700 %o 1500 BW [ \t\(] EW [ \t.,;!\?$\)] %option noyywrap %{ void plastc(void); char caseify(char); void expletive(void); void thing(char); %} %% @[Bb]egin(.*) | ".so ".*$ printf("%s", yytext); {BW}send printf("%ct'row",yytext[0]); program+ printf("honky code"); [Uu]nix printf("slow mo-fo"); UNIX printf("dat slow mo-fo"); actual printf("ak'shul"); {BW}take printf("%csnatch",yytext[0]); {BW}took | {BW}take[ns] printf("%csnatch'd",yytext[0]); [Mm]exican printf("%cet-back", caseify('w')); [Ii]talian printf("%creaser", caseify('g')); {BW}big{EW} { printf("%cbig ass",yytext[0]);plastc();} fool printf("honkyfool"); modem printf("doodad"); {BW}he{EW} { printf("%cmah' man he",yytext[0]);plastc();} "e the"{EW} | "a the"{EW} | "t the"{EW} | "d the"{EW} { printf("%c da damn", yytext[0]);plastc();} wife | woman printf("mama"); girl printf("goat"); something printf("sump'n"); {BW}lie printf("%chonky jive",yytext[0]); -o- printf("-on rebound-"); [a-z]"." { printf("%s", yytext);expletive();} ! printf(". Right On!"); [Ss]ure printf("%cho'", yytext[0]); get printf("git"); "will have"{EW} | "will"{EW} | "got to"{EW} { printf("gots'ta");plastc();} "I am" printf("I's gots'ta be"); "aren't" | "am not" | "have not" | "is not" | "are not" printf("ain't"); {BW}see{EW} { printf("%csee's",yytext[0]);plastc();} {BW}are{EW} { printf("%cis",yytext[0]);plastc();} {BW}hat{EW} { printf("%cfedora",yytext[0]);plastc();} {BW}shoe printf("%ckicker",yytext[0]); {BW}"have to"{EW} | {BW}has{EW} { printf("%cgots'ta",yytext[0]);plastc();} have printf("gots'"); {BW}go{EW} | {BW}"come over"{EW} | {BW}come{EW} { printf("%cmosey on down",yytext[0]);plastc();} buy printf("steal"); {BW}car{EW} { printf("%cwheels",yytext[0]);plastc();} drive printf("roll"); {BW}food printf("%ccatfish an' colluhd greens",yytext[0]); {BW}eat{EW} { printf("%cfeed da bud",yytext[0]);plastc();} drink printf("guzzle"); black | negro printf("brother"); white printf("honky"); nigger printf("gentleman"); nice printf("supa' fine"); {BW}person printf("%csucka'",yytext[0]); [Pp]eople printf("%cucka's", caseify('s')); {BW}thing thing(yytext[0]); house{EW} { printf("crib");plastc();} home printf("plantation"); name printf("dojigger"); {BW}path printf("%calley",yytext[0]); [Cc]omputer printf("%clunker", yytext[0]); or printf("o'"); president printf("super-dude"); "prime minister" printf("prahm mistah"); government printf("guv'ment"); knew printf("knowed"); [Bb]ecause printf("'%cuz", caseify('c')); [Yy]our printf("%co'", yytext[0]); [Ff]our printf("%coe", yytext[0]); got printf("gots"); young printf("yung"); you printf("ya'"); You printf("You's"); first printf("fust"); police printf("honky pigs"); {BW}string printf("%cchittlin'",yytext[0]); {BW}read printf("%ceyeball",yytext[0]); write printf("scribble"); think{EW} { printf("thin'");plastc();} with printf("wif"); other printf("uthu'"); [Tt]hr printf("%c'r", yytext[0]); [Tt]h printf("%c", caseify('d')); ing printf("in'"); {BW}a{EW} { printf("%csome",yytext[0]);plastc();} {BW}to{EW} { printf("%ct'",yytext[0]); if(yytext[yyleng-1]!=' ') plastc(); } tion printf("shun"); [Aa]lmost printf("%cos'", caseify('m')); from printf("fum"); [Yy]"ou're" printf("%couse", yytext[0]); alright | okay printf("coo'"); [Aa]nd printf("%cn'", yytext[0]); known printf("knode"); want printf("wants'"); beat printf("whup'ed"); ile printf("ah'l"); er{EW} { printf("uh");plastc();} [a-z]sti printf("%cs'i", yytext[0]); tute printf("toot"); exp printf("'sp"); exs | exc printf("'s"); {BW}ex printf("%c'es",yytext[0]); [ae]ct{EW} { printf("%cc'", yytext[0]); plastc(); } like printf("likes"); done | did printf("dun did"); "kind of" printf("kind'a"); women printf("honky chicks"); {BW}man{EW} { printf("%cdude",yytext[0]);plastc();} {BW}men{EW} | {BW}mens{EW} { printf("%cdudes",yytext[0]);plastc();} injured printf("hosed"); killed | dead printf("wasted"); good printf("baaaad"); open{EW} { printf("jimmey");plastc();} opened{EW} { printf("jimmey'd");plastc();} {BW}very printf("%creal",yytext[0]); per printf("puh'"); oar printf("o'"); {BW}can printf("%ckin",yytext[0]); {BW}just{EW} { printf("%cplum",yytext[0]);plastc();} [Dd]etroit printf("Mo-town"); [Ww]"estern "[Ee]"lectric" printf("da' cave"); {BW}believe printf("%crecon'",yytext[0]); [Ii]"ndianapolis" printf("Nap-town"); Daniel | Dan printf("Liva' Lips"); Reagan printf("Kingfish"); Ronald{EW} | Ron{EW} { printf("Rolo");plastc();} John printf("Rastus"); Jim printf("Bo-Jangles"); pontiff | pope printf("wiz'"); [Pp]ravda printf("dat commie rag"); broken printf("bugger'd"); strange{EW} { printf("funky");plastc();} dance{EW} { printf("boogy");plastc();} ask printf("ax'"); {BW}so{EW} { printf("%cso's",yytext[0]);plastc();} heard printf("'hoid"); head printf("'haid"); boss printf("main man"); money printf("bre'd"); [a-z]":" { *(yytext+1) = ','; printf("%s dig dis:",yytext); } amateur printf("begina'"); radio printf("transista'"); {BW}of{EW} { printf("%cuh",yytext[0]);plastc();} which | what printf("whut"); "don't" printf("doan'"); does printf("duz"); {BW}was{EW} | {BW}were{EW} { printf("%cwuz",yytext[0]);plastc();} {BW}understand printf("%cdig",yytext[0]); {BW}my printf("%cmah'",yytext[0]); again | against printf("agin'"); {BW}[Ii]{EW} { printf("%cah'",yytext[0]);plastc();} meta printf("meta-fuckin'"); cally printf("c'l"); %% void plastc() { unput(yytext[yyleng-1]); } char caseify(c) char c; { if (yytext[0] <= 'Z') return (c - ' '); else return (c); } void thing(c) char c; { static short count = 0; putchar(c); switch (count++ % 4) { case 0: case 2: printf("thang"); break; case 1: printf("doohickey"); break; case 3: printf("wahtahmellun"); break; } } void expletive() { static short count = 0; static short which = 0; if (count++ % 4 == 0) { switch (which++ % 5) { case 0: printf(" What it is, Mama!"); break; case 1: printf(" Ya' know?"); break; case 2: printf(" Sheeeiit."); break; case 3: printf(" Ya' dig?"); break; case 4: printf(" Git down!"); break; } } } /* * Bugs: * * If a sentence starts with a keyword it doan' get converted, or: * it do, but gets a leading space */ filters/rasterman0000755000175000017500000000323312633476041014041 0ustar mariusmarius#!/usr/bin/perl $row = "!qwertyuiop!asdfghjkl!zxcvbnm!"; @row_array = split(//, $row); while (<>) { chomp; y/A-Z/a-z/; s/\byou\b/u/gi; s/\bpeople\b/ppl/gi; s/\bthrough\b/thru/gi; s/\bthough\b/tho/gi; s/\bnope\b/nup/gi; s/\baustralia\b/oz/gi; s/\bfilm\b/flim/gi; s/\bsucks\b/sux/gi; s/\benough\b/enuff/gi; s/\ba lot\b/a shitload/gi; s/\bstuff\b/shit/gi; s/, /.. /g; s/\.$/.../g; @lets = split(//); $strlen = $#lets; for ($x = 0; $x < $strlen; $x++) { if (rand() < 0.01) { swap(\@lets, $x, $x + 1); next; } if (rand() < 0.10 && $lets[$x] eq " ") { swap(\@lets, $x - 1, $x - 2); next; } if(rand() < 0.01) { $i = insert_adjacent(\@lets, $x, $lets[$x]); $strlen += $i; next; } if(rand() < 0.01) { splice(@lets, $x, 1); $strlen--; next; } } print join("", @lets) . "\n"; } sub insert_adjacent { my($aref, $pos, $let) = @_; $newlet = get_adjacent($let); if( !$newlet ) { return 0; } splice(@$aref, $pos + 1, 0, $newlet); return 1; } sub get_adjacent { my($let) = @_; return 0 if $let !~ /[a-zA-Z]/; $i = index($row, $let); $before = $row_array[$i - 1]; $after = $row_array[$i + 1]; if( $before eq "!" || (rand() < rand() && $after ne "!")) { return $after; } else { return $before; } } sub swap { my($aref, $n, $m) = @_; my($tmp); if(defined($$aref[$n]) && defined($$aref[$m])) { if(! (($$aref[$n] =~ /[A-Z ]/ && $$aref[$m] =~ /[A-Z ]/) || ($$aref[$n] =~ /[a-z ]/ && $$aref[$m] =~ /[a-z ]/) )) { return; } $tmp = $$aref[$n]; $$aref[$n] = $$aref[$m]; $$aref[$m] = $tmp; } } filters/newspeak.l0000644000175000017500000005004712633476041014116 0ustar mariusmarius%{ -*- Mode:Fundamental -*- /* * newspeak.l, version 1.1. * Lex filter to transform plain English into NewSpeak. * Copyright (c) 1991 Jamie Zawinski . * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation. No * representations are made about the suitability of this software * for any purpose. It is provided "as is" without express or * implied warranty. * * To compile: * * flex newspeak.l * cc -O -o newspeak lex.yy.c * rm lex.yy.c * * This must be compiled with "flex", not normal "lex". Lex has * some builtin, unchangeable limits which this program exceeds. * This has been verified to work with flex version 2.3.7, and * may not work with flex version 2.3.6. * * You can get 'flex' by anonymous FTP to prep.ai.mit.edu, or * anywhere else you get GNU software. * * Run this like so: "newspeak < some-text-file | more" * * There are some design notes near the end. Suggestions and * improvements to this code are more than welcome. * Hail Big Brother! *--------------------------------------------------------------------------- */ #include unsigned int fcounter = 0; #define Y0 yytext[0] #define Y1 yytext[1] #define Y2 yytext[2] #define Y3 yytext[3] #define C caseify #define CAP(string) capstring(0, (string),0) #define WCAP(string) capstring(Y0,(string),1) #define COMP(string1,string2) compstring(0, (string1),(string2),0) #define WCOMP(string1,string2) compstring(Y0,(string1),(string2),1) #define DUMP() printf("%s",yytext) void capstring(char, char*, int); void compstring(char, char*, char*, int); char _caseify(char, int); char caseify(char); %} %e 8000 %p 9000 %n 2000 %k 3000 %a 5000 %o 4000 W (([ ]?\n[ ]*)|[ ]|[\"'`]) ES [.,;:!?/] EW ({W}|{ES}|"'") YOUNG (([Yy]oung|[Ss]mall|[Ll]ittle){W}) DEAD (([Dd]ead|[Dd]eceased){W}) THE ([Tt]he{W}?) ANDOR ({W}(([Aa]nd)|([Oo]r)){W}?) COLOR (red|green|blue|yellow|cyan|magenta|purple|orange|mauve|pink|turquoise|brown|gr[ae]y) %% %{ /****************************** * PLUSwords * ******************************/ %} [Qq]uite{EW}/[A-Za-z][A-Za-z] CAP("plus"); [Rr]ather{EW}/[A-Za-z][A-Za-z][A-Za-z] CAP("plus"); [Kk]ind{EW}of{EW}/[A-Za-z][A-Za-z][A-Za-z] CAP("plus"); [Kk]inda{EW}/[A-Za-z][A-Za-z][A-Za-z] CAP("plus"); [Mm]ore{W}than{W}a{W}(little|bit){W} CAP("plus"); [Pp]ro- CAP("plus"); [Hh]undreds{W}of{W}[Tt]housands | [Hh]undreds{ANDOR}[Tt]housands | [Hh]undreds{W}if{W}not{W}[Tt]housands | [Tt]housands | [Mm]illions CAP("doubleplusmany"); [Dd]ozens CAP("many"); [Hh]undreds CAP("plusmany"); ([Bb]right|[Ll]ight|[Ii]ntense){W}/{COLOR} CAP("plus"); ([Dd]im|[Ff]aded|[Dd]ark|[Pp]ale){W}/{COLOR} CAP("plusun"); ([Dd]im|[Ff]aded|[Dd]ark|[Pp]ale) CAP("unlight"); [Ee]very DUMP(); [Vv]ery{W} | [Rr]eally{W} | [Tt]erribly{W} | [Aa]wesome({W})? | [Aa]wfully{W} CAP("doubleplus"); [Ww]hopping{EW} CAP("plusbig"); "O.K." | [Aa]ll({W})?[Rr]ight | [Oo][Kk][Aa][Yy] CAP("plusgood"); {W}OK/{W} WCAP("plusgood"); ([Tt]oo|[Oo]verly|[Tt]hat){W}[Mm]uch CAP("plusmuch"); {W}[Bb]ad/{EW} WCAP("ungood"); {W}[Pp]oor/{EW} WCAP("ungood"); {W}[Ll]ame/{EW} WCAP("ungood"); {W}[Pp]itiful/{EW} WCAP("ungood"); {W}[Nn]asty/{EW} WCAP("plusungood"); {W}[Hh]orrid/{EW} WCAP("doubleplus ungood"); {W}[Hh]orrible/{EW} WCAP("doubleplus ungood"); {W}[Aa]wful/{W} WCAP("doubleplus ungood"); {W}[Ee]vil/{W} WCAP("doubleplus ungood"); %{ /****************************** * Titles * ******************************/ %} {W}[Ss]ir/{EW} WCAP("citizen"); {W}[Mm]r"."/{EW} WCAP("brother"); [Mm]ister/{EW} CAP("brother"); [Mm]adame? CAP("sister"); {W}[Mm]iss/{EW} WCAP("sister"); [Mm]a"'"?am/{EW} CAP("sister"); {W}[Mm]r?s"."/{EW} WCAP("sister"); Mrs/{EW} CAP("sister"); {YOUNG}?[Cc]hildren CAP("young citizens"); {YOUNG}?[Bb]oys{ANDOR}[Gg]irl/s CAP("young citizens"); {YOUNG}?([Kk]id|[Gg]irl|[Bb]oy|[Cc]hild)/{EW} CAP("young citizen"); [Ff]ellow CAP("citizen"); [Nn]on{W}?"-"?citizen CAP("unperson"); [Nn]on{W}?"-"?member CAP("unperson"); [Cc]riminal/s? CAP("unperson"); {DEAD}(man|woman) CAP("unperson"); {DEAD}(men|women) CAP("unpersons"); [Ii]n{W}[Pp]erson DUMP(); {W}[Uu]ser WCOMP("party ","worker"); [Ss]tudent COMP("party ","worker"); [Cc]itizen/s?{EW} COMP("party ","worker"); [Pp]erson/s?{EW} COMP("party ","worker"); [Pp]eople COMP("party ","workers"); [Ss]enator | [Cc]ongressman | [Ss]upervisor | [Pp]rofessor printf("Inner Party Member"); [Pp]rof"."/{EW} printf("Inner Party Member"); [Pp]rof/{EW} printf("Inner Party Member"); Representative/s? printf("Inner Party Member"); representatives printf("Inner Party Members"); [Ww]hite{W}[Cc]ollar | [Uu]pper{W}[Cc]lass COMP("inner ","party"); [Mm]iddle{W}[Cc]lass CAP("party"); [Bb]lue{W}[Cc]ollar | [Ww]orking{W}[Cc]lass | [Ll]ower{W}[Cc]lass CAP("prole"); ([Ff]ool|[Ii]diot)/s?{EW} CAP("prole"); [Ss]tupidity CAP("proleness"); %{ /****************************** * Organizations * ******************************/ %} [Aa]?{W}([Ww]hite{W}[Hh]ouse|[Gg]ovt\.?|[Gg]overnment){W}([Ss]ource|[Oo]fficial|[Ss]pokes(man|woman|person)) CAP("an Inner Party Member"); {THE}?[Rr]epublican{W}[Pp]arty COMP("mini","luv"); {THE}?[Dd]emocratic{W}[Pp]arty COMP("mini","plenty"); {THE}?Congress printf("MiniPax"); {THE}?[Ss]enate printf("MiniPax"); {THE}?[Hh]ouse{W}[Oo]f{W}[Rr]epresentatives printf("MiniPax"); {THE}?[Ss]tate{W}[Dd]epartment printf("MiniPax"); {THE}?[Ss]tate{W}[Dd]ept"."? printf("MiniPax"); {THE}?[Dd]efen[cs]e{W}[Dd]epartment | {THE}?[Dd]efen[cs]e{W}[Dd]ept"."? | {THE}?[Ww]ar{W}[Dd]epartment | {THE}?[Ww]ar{W}[Dd]ept"."? | {THE}?[Hh]ouse{W}of{W}[Cc]ommons | {THE}?Pentagon | {THE}?[Ff]eds | {THE}?FCC | {THE}?D[Oo]D | {THE}"D."[Oo]".D." | {THE}?[Ss]ecret{W}[Ss]ervice COMP("mini","luv"); {THE}?White{W}House | {THE}?Kremlin printf("MiniTrue"); {THE}?(CIA|NSA|FBI|MI"-"?5)/{EW} printf("MiniTrue"); {THE}?("C.I.A."|"N.S.A."|"F.B.I.")/{EW} printf("MiniTrue"); {THE}?[Aa]rchive/s? COMP("mini","rec"); {THE}?[Ll]ibrary COMP("mini","rec"); {THE}?[Ll]ibraries COMP("mini","recs"); [Tt]hought{W}[Pp]olice|[Nn]azis? COMP("think","pol"); [Vv]ice{W}[Ss]quad COMP("sex","pol"); PMRC|"P.M.R.C." COMP("sex","pol"); [Oo]fficer CAP("minister"); {THE}?[Dd]epartment{EW}of{EW}. | {THE}?[Dd]ept"."?{EW}of{EW}. | {THE}?[Uu]niversity{EW}of{EW}. | {THE}?[Uu]niv"."?{EW}of{EW}. | {THE}?[Dd]ept"."?{EW}of{EW}. | {THE}?([Ss]ub"-"?)?[Cc]omm?itt?ee{EW}(of|on){EW}. | {THE}?[Ss]chool{EW}of{EW}. { if ((yytext[yyleng-1] >= 'A') && (yytext[yyleng-1] <= 'Z')) /* "the school of Law" --> "MiniLaw" */ printf("Mini%c",yytext[yyleng-1]); else if ((yytext[yyleng-1] >= 'a') && (yytext[yyleng-1] <= 'z')) /* "the school of law" --> "MiniLaw" (not "Minilaw") */ printf("Mini%c",yytext[yyleng-1] - ('a' - 'A')); /* "the school of 5 things" --> "Ministry of 5 things" */ else printf("Ministry of %c",yytext[yyleng-1]); } [Dd]epartment | [Uu]niversity CAP("ministry"); [Uu]niv"."?/{W} CAP("ministry"); [Dd]ept"."?/{W} CAP("ministry"); ([Ss]ub"-"?)?[Cc]omm?itt?ee CAP("ministry"); {THE}[Pp]roject/{EW} CAP("the Three Year Plan"); [Oo]ur{W}[Pp]roject/{EW} CAP("our Three Year Plan"); [Bb]udget printf("Three Year Plan"); [Pp]roject/{ES} printf("Three Year Plan"); {W}({THE}|([aa]{W}))[Pp]roject printf("%cthe Three Year Plan",Y0); [A-Za-z]+"'"[Ss]/{W}(law|Law|LAW|book|Book|BOOK|rule|Rule|RULE){EW} printf("Goldstein's"); %{ /****************************** * Actions * ******************************/ %} [Ii]n{W}love{EW} CAP("SexCriming"); [Ll]ove{W}you/{EW} CAP("love Big Brother"); [Ll]ove{W}me/{EW} CAP("love Big Brother"); [Cc]loning | [Rr]eproduction | [Cc]elibacy | [Pp]rocreation COMP("good","sex"); [Cc]elibate | [Pp]rocreate COMP("good","sexwise"); [Tt]elevisions? | TVs? | [Tt]"."[Vv]"."s? | [Rr]adios? | [Nn]ews{W}?[Pp]apers? | [Jj]ournalism | [Mm]ovies? | [Rr]ock{EW}?"-"?(and|"&"|"'"?n"'"?){EW}?"-"?[Rr]oll({W}[Mm]usic)? | (([Rr]ock|[Cc]lassical|[Ii]ndustrial|[Pp]op|[Dd]ance|[Rr]ap){W})?[Mm]usic | [Tt]unes | [Mm]oney | [Cc]ash | [Cc]omic{W}[Bb]ooks? | ([Ss]tar{W}?)?[Tt]rek COMP("prole","feed"); [Pp]eace{W}[Mm]ovement | [Pp]eace{W}[Pp]rotest | [Aa]nti{EW}[Ww]ar | ([Pp]assive{W})?[Rr]esistance | [Cc]reativity | [Tt]reason | [Rr]esearch COMP("crime","think"); %{ /****************************** * Religion * ******************************/ %} [Jj]esus{W}[Cc]hrist | [Jj]esus | {THE}?[Bb]uddh?a | [Mm]ohamm?ed | [Mm]artin{W}[Ll]uther{W}[Kk]ing | J\.?\ ?R\.?\ \"?Bob\"?\ Dobbs printf("doubleplus crimethinker"); ([Jj]esse{W})?[Hh]elms | ([RrDd]on(ald)?{W})?[Rr]ea?gan | [Gg]eorge{W}[Gg]uscoria printf("doubleplus goodthinker"); [Jj]ewish COMP("crime","thinkwise"); [Jj]ew | [Cc]hristian | [Mm]oslem | [Bb]uddhist | [Aa]thiest | [Aa]gnostic COMP("crime","thinker"); [Ff]aith COMP("belly","feel"); %{ /****************************** * Places * ******************************/ %} [Ee]ngland|{THE}?[Uu]nited{W}[Kk]ingdom | ({THE}?[Uu]nited{W}[Ss]tates{W}[Oo]f{W})?[Aa]merica | {THE}?[Uu]nited{W}[Ss]tates|USA|"U.S.A."|[Cc]anada | [Gg]ermany|[Ii]srael|[Ee]urope printf("Oceana"); Iranian|Iraqu?i|Libyan|Russian|African|Egyptian printf("Eurasian"); Iran|Iraq|Libya|Russia|Africa|Egypt | ([Ss]audi{W})?Arabia|{THE}?Soviet{W}Union printf("Eurasia"); [Ss]oviet printf("Eurasian"); [Cc]hinese|[Jj]apanese|[Tt]aiwanese | [Pp]hillipino|[Ii]ndian|[Aa]ustralian|[Mm]exican | [Nn]icaraguan|[Ss]alvadori?an printf("Eastasian"); China|[Jj]apan|[Tt]aiwan|{THE}?[Pp]hillipines|[Ii]ndia | [Aa]ustralia|[Mm]exico|[Nn]icaragua|[Ee]l{W}[Ss]alvador printf("Eastasia"); [Kk]uwaiti printf("Eurasian"); [Kk]uwait printf("The Malabar Front"); %{ /****************************** * Miscellaneous Translations * ******************************/ %} {W}[Ff]aster WCAP("plus speedful"); {W}[Ss]lower WCAP("plus unspeedful"); {W}[Ff]ast WCAP("speedful"); {W}[Ss]low WCAP("unspeedful"); [Mm]odern CAP("plusnew"); [Aa]ncient CAP("plusunnew"); {W}old/{W} WCAP("plusunnew"); [Hh]appiness CAP("joyfulness"); [Hh]appy CAP("joyful"); [Qq]uick CAP("speedful"); {W}[Ss]peedy WCAP("speedful"); [Hh]eavy CAP("weightful"); [Hh]eavill?y CAP("weightfully"); [Ss]ick(ly)? CAP("unhealthful"); [Gg]ross | [Ss]ickening | [Ff]oul | [Pp]utrid | [Dd]isgusting COMP("crime","thinkful"); [Ss]mash | [Cc]rush | [Oo]bliterate | [Aa]nnihilate | [Nn]eutralize | [Dd]emolish | [Dd]estroy CAP("unbuild"); [Ii]nanimate CAP("unlifeful"); [Ss]ociety|[Cc]ulture printf("IngSoc"); [A-Za-z]+isi?m/{EW} printf("Goldsteinism"); [A-Za-z]+ist/{EW} printf("Goldsteinist"); {W}[Dd]ead WCAP("unlifeful"); {W}[Dd]eath WCAP("unlife"); {W}[Ll]ie WCAP("untruth"); {W}[Ff]alsehood WCAP("untruth"); {W}[Mm]istake/{EW} WCAP("untruth"); {W}[Ww]hisper WCAP("unshout"); {W}[Pp]roud WCAP("prideful"); [Ff]alse CAP("untrue"); [Dd]ark CAP("unlight"); [Bb]lack CAP("unwhite"); [Ff]orbidden CAP("unallowed"); [Ff]orbid CAP("unallow"); [Ff]ailure CAP("unsuccess"); [Ff]ail/{EW} CAP("unwin"); [Ss]tatistics?/{EW} CAP("propaganda"); {W}[Aa]n{W}[Aa]nn?ouncement WCAP("a NewsFlash"); [Aa]nn?ouncement printf("NewsFlash"); [Ii]nstructions? printf("B. B. DayOrder"); [Aa]lmost|[Nn]early CAP("within measurable distance of"); [Ff]unny CAP("humorful"); [Dd]oom CAP("unsave"); [Cc]haos CAP("unorder"); [Cc]haotic CAP("unorderful"); [Ee]nslaved CAP("protected"); [Ee]nslave CAP("protect"); [Dd]angerous CAP("unsafewise"); [Dd]anger CAP("unsafe"); ([Bb]lind{W})?[Oo]bedience COMP("ing","soc"); \"?[Nn]ew{W}[Ww]orld{W}[Oo]rder\"? printf("IngSoc"); [Pp]rivacy | [Ii]ndividuality COMP("own","life"); IMHO printf("for the love of Big Brother"); [Ee]motion(al|s)? | [Cc]onviction | [Bb]elie(f|ve) | [Aa]ccept(ance)? COMP("belly","feel"); [Dd]emocracy | [Ll]iberty | [Ff]reedom | [Jj]ustice | {THE}?[Aa]merican{W}[Ww]ay | [Ss]ubversion | [Pp]assion COMP("crime","think"); [Oo]bscenity | [Pp]ornography | [Oo]rgasm | [Ee]rotica COMP("sex","crime"); [Ss]exy | [Oo]bscene | [Pp]ornographic | [Ee]rotic COMP("sex","crimeful"); [Cc]ritic/s?{W} COMP("crime","thinker"); [Ii]nfant{W}[Mm]ortality COMP("inf","mort"); [Ff]amilies | [Pp]arents COMP("family ","units"); [Mm]other{ANDOR}[Ff]ather | [Bb]rother{ANDOR}[Ss]ister COMP("family ","unit"); {W}[Pp]arent/s?{EW} WCOMP("family ","unit"); [Ff]amily COMP("family ","unit"); God/{EW} printf("Big Brother"); [Pp]res(ident|".")({W}([Bb]ush|[Rr]eagan))? printf("Big Brother"); [Pp]rime{W}[Mm]inister printf("Big Brother"); ([Gg][Nn][Uu]{W}([Ee]macs|EMACS){W})?[Gg]eneral{W}[Pp]ublic{W}[Ll]icense printf("NewSpeak Dictionary"); (questioning|murder|ass?ass?ination)/{ES} printf("interrogation"); [Ss]keptic/{EW} CAP("unperson"); [Ss]illy CAP("foolhardy"); {W}[A-Za-z][A-Za-z]?illy DUMP(); [Ss]outhern|[Ss]outherly CAP("southwise"); [Nn]orthern|[Nn]ortherly CAP("northwise"); [Ee]astern|[Ee]easterly CAP("eastwise"); [Ww]estern|[Ww]esterly CAP("westwise"); [Pl]leasant CAP("goodwise"); [Vv]iolent CAP("unpeacewise"); [Vv]iolence CAP("unpeaceness"); [Ii]ndifference CAP("uncarefulness"); [Ii]ndifferent CAP("uncareful"); [Bb]elly CAP("abdomen"); [Cc]omic CAP("humorwise"); {W}[Uu]nless WCAP("lest"); usually printf("usualwise"); [Gg]uerillas COMP("party ","workers"); [Ww]ar/{EW} CAP("engagement"); [Dd]efen[cs]e/{EW} CAP("peace"); [Ii]nvasion CAP("liberation"); %{ /****************************** * Syllable Rewriting * ****************************** isn't ___ is un___ not the ___ the un___ not my ___ my un___ anti___ un___ (etc...) ___cally ___wise ___ally ___wise ___lly ___wise ___ly ___wise ___aic ___wise ___lic ___wise ___nnic ___wise tric ___wise ___ic ___wise ous ___ful ous ___eful ___less un___ful */ %} [Ii]sn"'"t{W}my{W} CAP("is my un"); [Ii]s{W}not{W}my{W} CAP("is my un"); [Ii]sn"'"t{W}[Tt]he{W} CAP("is the un"); [Ii]s{W}not{W}[Tt]he{W} CAP("is the un"); [Ii]sn"'"t{W}[Ii]n{W}[Tt]he{W} CAP("is in the un"); [Ii]s{W}not{W}[Ii]n{W}[Tt]he{W} CAP("is in the un"); [Ii]t"'"?s{W}not{W}[Tt]he{W} CAP("it's the un"); [Ii]sn"'"t{W} CAP("is un"); [Ii]s{W}not{W} CAP("is un"); [Nn]ot{W}[Tt]he{W} CAP("the un"); [Nn]ot{W}[Mm]y{W} CAP("my un"); [Nn]ot{W}[Aa]{W} CAP("an un"); [Nn]ot{W}have{W} CAP("has un"); [Nn]ot{W}be{W} CAP("be un"); [Nn]ot{W}[Oo]nly/{W} CAP("unonly"); /* avoid "unonwise" */ [Aa]{W}[Nn]ot{W} | [Aa]{W}[Nn]on"-"? printf("%cn%cun",Y0,Y1); /* "a non_" -> "an un_" */ %{ /* {W}[Nn]ot{W} | */ %} {W}[Ii]l"-"?/[a-z][a-z] WCAP("un"); {W}[Aa]nti"-"? | {W}[Nn]on"-"? WCAP("un"); robably|ventually|[Oo]bvious|[Bb]asic|{W}[Oo]nly|otally | [Aa]rctic|holic|{EW}ally|{EW}[Aa]pply|{W}[Tt]opic DUMP(); {W}([Tt]raf|[Pp]aci|[Ss]peci)fi/c{W} DUMP(); {W}(ma|tra)gi/c{W} DUMP(); {W}(pub|cyc|re|fro|gar)li/c{W} DUMP(); {W}(eth|cli|to)ni/c{W} DUMP(); {W}(E|cle|met|cit)ri/c{W} DUMP(); {W}(ch|ep|tr?op|t|mus|stat|att)i/c{W} DUMP(); {W}only/{W} DUMP(); {W}[Aa]tlantic DUMP(); [ \t\n][drstwDRSTW]ally printf("%c%cally", Y0, Y1); [a-z]ically/{W} printf("%cwise", Y0); [a-z]ally/{W} printf("%cwise", Y0); [a-z][a-z]lly/{W} printf("%c%cwise", Y0,Y1); [a-z][a-z][a-z]ly/{W} printf("%c%c%cwise", Y0,Y1,Y2); [a-z]ical/{W} printf("%cwise", Y0); [a-km-qs-z]aic/{EW} printf("%cwise", Y0); /* not laic, raic */ [a-z]lic/{EW} printf("%clwise", Y0); [a-z]nnic/{EW} printf("%cnwise", Y0); [a-z][aeiou]tric/{EW} printf("%c%ctwise", Y0, Y1); [a-z]tric/{EW} printf("%cwise", Y0); [a-z]ic/{EW} printf("%cwise", Y0); [a-z]lly/{EW} printf("%cwise", Y0); [a-z]ly/{EW} printf("%cwise", Y0); [aeiouy][^aeiouy]ous/{EW} printf("%c%cful",Y0,Y1); [^aeiouy]ous/{EW} printf("%ceful",Y0); [^e]ous/{EW} printf("%cful",Y0); [A-Za-z]+less/{EW} { yytext[yyleng-4] = '\0'; if (((yytext[1] < 'A') || (yytext[1] > 'Z')) && (yytext[0] >= 'A') && (yytext[0] <= 'Z')) yytext[0] = yytext[0] - ('a' - 'A'); printf("%cn%sful",C('u'), yytext); } ". " { printf("%s",yytext); fcounter &= 15; if (14 == fcounter++) printf("(fnord) "); } [.,!?]\"([^\n\".!]+[.!])?\n/[\n\t ] printf("%c Hail Big Brother!\"%s",Y0,yytext+2); \"([.,!?][^\n\".!]+[.!])?\n/[\n\t ] printf("%c Hail Big Brother!\"%s",Y1,yytext+2); . printf("%s", yytext); \n printf("\n"); %{ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Brief description of Orwell's NewSpeak: * --------------------------------------- * Each word was made to serve as noun, verb, adjective and adverb. In * particular, nouns and verbs were made exactly the same -- hence "think" * replaced "thought" as a noun (viz. "crimethink" = thought crime, "thinkpol" * = thought police). Adjectives were formed by adding "-ful" to a noun/verb; * adverbs were formed by adding "-wise." Hence "speedful" = fast, * "speedwise" = quickly, "unspeedwise" = slowly. * * The decision on which word should be negated was made fairly randomly; * "dark" could be "unlight," or "light" could be "undark". But in all cases * the most important objective (aside from ideological restriction) was * euphony; the words had to be easily pronounceable. * * Most verb inflections were made regular; "he thinked," "he goed," "he * eated"; only the auxiliaries and modals (to be, to have, may, shall, will, * etc.) were allowed to inflect irregularly. Plurals were also regularized: * "mans," "oxes," "childs." [This isn't implemented here.] * * There were three sets of words. The A vocabulary was for everyday use: * car, man, red, good, etc. It was restricted to fairly simple words. * * The B vocabulary consisted of political/ideological words with very * complicated connotations. All of the B words were compound words -- * bellyfeel (blind emotional acceptance of the ideology), oldthink (the way * of thought before the Revolution), crimethink, Ingsoc, goodsex (intercourse * solely for the purpose of making babies and with no physical enjoyment on * the part of the female), sexcrime (any kind of sex but goodsex, including * sex for its own sake), goodthink (thinking in accordance with Ingsoc), and * so on. These words were also subject to the modifications mentioned * above--hence "goodthinker," "goodthinkful," "goodthinkwise." * * The C vocabulary consisted of scientific and technical words (though there * was no longer any word for "science," any connotation it might have being * subsumed into "Ingsoc"). * * Implementing a translator for all of this would be really complicated -- * I'd need rather extensive lists of the "irregular" words (so they could be * regularized), as well as lists of politically meaningful words (so they * could be excised or translated into either "goodthink" or "crimethink," as * appropriate). Any kind of sexual topic should become "sexcrime" (it being * unlikely that any talk of sex these days would fit into "goodsex"). * * Basically, the reason it's hard is that NewSpeak was intended to *decrease* * the vocabulary, and subsume complicated ideas into politically correct * words so that you wouldn't have to understand the ideas anymore; you'd just * have to emit the right words. So to properly "translate" anything into * NewSpeak, you have to cut the vocabulary way down. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ %} %% int main() { yylex(); printf("\nHail Big Brother!\n"); } void capstring(firstchar,string,i) char firstchar, *string; int i; { if (firstchar != 0) putchar(firstchar); putchar( (yytext[i] <= 'Z') ? (string[0] - ' ') : string[0]); printf("%s",string+1); } void compstring(firstchar,string1,string2,i) char firstchar, *string1, *string2; int i; { capstring(firstchar,string1,i); capstring(0,string2,i); } char _caseify(c,i) char c; int i; { if (yytext[i] <= 'Z') return (c - ' '); else return (c); } char caseify(c) char c; { return _caseify(c,0); } filters/README0000644000175000017500000000710412633476041013000 0ustar mariusmariusThis is a collection of filters to do all sorts of strange things to text. B1ff, the Swedish Chef, and an eleet filter are included, along with many, many more. http://joeyh.name/code/filters Since the original versions of some of these filters have copyright problems, I have done a "clean room" re-implementation of the original lex filters in perl. I did this without looking at the original code to the filters at all, I simply observed their output and drew my own conclusions, and wrote my own code. Then I compared the output of the original and new filters when ran on large bodies of text, and fixed the things I had missed. Here are the results of my investigations of how the filters work: eleet: This is the simplest filter to figure out. The letters a-z of the alphabet are replaced with the following letters: 4 b c d 3 f g h 1 j |< l /\/\ /\/ 0 p q r 5 + u \/ \/\/ >< y z Note that the equivalent translation is done on upper-case letters. fudd: This one is trivial too. A few transpositions happen differently if the letter is at the end of the word or not, and I think I found all the transpositions with only a few paragraphs of sample output. The only weird thing is that 'n.' is changed to "n, uh-hah-hah-hah." (Works well with sentances ending in "gun." ..) chef: Personally my favorite filter. This took a bit of work to figure out, and I doubt I have everything correct. Note that due to a bug or an odd feature of the original program, it doesn't seem to think that the first letter of the first word is really the first letter of a word and so some of the words below don't trigger for that first word. I did not emulate this behavior because I think it's probably a bug. The word "bork" is never changed, no matter what any of these rules may say. Neither is "Bork". The following translations only happen to letters that are the first letter of a word of at least 2 letters in size: o -> oo O -> Oo These happen to letters that are not the last letter of a word: a -> e A -> e These translations only happen if the letter is not the first letter of a word: f -> ff i -> ee (but only the first `i' per word) o -> u u -> oo These translations always happen: v -> f V -> F w -> v W -> V an -> un An -> Un au -> oo Au -> Oo Any occurrence of "e" at the end of a word is changed to "e-a". Any occurrence of "e" and the beginning of a word is changed to "i". Same with capitals. Any occurrence of "the" is changed to "zee", any occurrence of "The", to "Zee". Any occurrence of "tion" in a word, to "shun". Any "th" at the end of a word is changed to "t". Any "en" at the end of a word is changed to "ee". Any "ow" at the end of a word is changed to "oo". And of course, after any `.', `?', or `!' that is at the end of a line, the Chef prints out a new line, and then the famous "Bork Bork Bork!", and then another newline. Known bugs in this implementation: - says "frunch", not "french". - still quite buggy in general. b1ff: Unlike the other filters, b1ff does not try to be an exact duplicate of its predecessor. After upper-casing everything, b1ff does some word and sub-word substitutions, most of them misspellings. B1ff also changes punctuation - All commas become periods; all semicolons, commas. Question and exclamation marks are changed to things like "!!!!1!" and "?!?!?!". It looks like the original filter decided how long a sequence to print based on the text input before the end of sentence. I took a simpler route and just randomized it. Collected and written by Joey Hess filters/cockney.l0000644000175000017500000001012312633476041013723 0ustar mariusmarius%{ /* * Lex filter to transform plain English into Cockney English. * No racial or societal slurs are intended. For amusement only. * * Copyright 1986 by Daniel Klein. * * Reproduction permitted so long as this notice is retained. */ %} BW [ \t\n] SP [ \t]+ EW [ \t.,;!\?$] %Start junk %option noyywrap %{ #include void eos(void); void plastc(void); char caseify(char); void I(void); void bloody(void); void set_did(short); void clear_did(void); void dintI(void); void pooped(void); void expletive(void); %} %% . { srandom(time(0L)); unput(yytext[0]); BEGIN 0; } {BW}[Tt]he{EW} { ECHO; bloody(); } {BW}[Ss]teal{EW} { printf("%c%cick",yytext[0],yytext[1]-5); eos(); } {BW}[Ss]tole{EW} { printf("%c%cicked",yytext[0],yytext[1]-5); eos(); } {BW}tired pooped(); {BW}were{EW} | {BW}was{EW} { printf("%cwuz",yytext[0]); eos(); } [Hh]ello printf("'%cllo", caseify('u')); {BW}[Hh] printf("%c'",yytext[0]); {BW}[Yy]our{EW} { printf("%.2ser",yytext); eos(); } {BW}it{EW} { printf("%.2s'",yytext); eos(); } {BW}go{EW} { printf("%.2sow",yytext); eos(); } {BW}and{EW} { printf("%c'n'",yytext[0]); eos(); } {BW}my{EW} { printf("%.2se",yytext); eos(); } {BW}th(is|at){EW} { printf("%.5s", yytext); eos(); } {BW}[Ww]e{SP}went{EW} | {BW}[Ww]e{SP}had{EW} | {BW}[Ww]e{SP}did{EW} { printf("%.*s",yyleng-1,yytext); set_did(2); eos(); } {BW}I{SP}went{EW} | {BW}I{SP}had{EW} | {BW}I{SP}did{EW} { I(); printf(" did"); set_did(1); eos(); } {BW}I{EW} { I(); eos(); } [Yy]ou{SP}[^aeiouy] { printf("%c'", yytext[0]); plastc(); } [Ww]hat{SP}are{EW} { printf("%cotta", yytext[0]); eos(); } {BW}other | [MmNnRr]other printf("%cuvver",yytext[0]); [MmSs]outh printf("%cowf", yytext[0]); [cYy]outh printf("%coof", yytext[0]); [^o]uth printf("%.2sf",yytext); {BW}th[^e] | [AaEeIiOo]th[^em] { printf("%cf",yytext[0]); plastc(); } oothe | e[ei]the { printf("%c%cve", yytext[0], yytext[0]); } ooth | eeth { printf("%c%cf", yytext[0], yytext[0]); } [aei]the { printf("%cvv",yytext[0]); plastc(); } th putchar('v'); a[km]e{EW} { printf("i%ce",yytext[1]); eos(); } [^r][Oo]ld printf("%.2swld",yytext); [^AaEeIiOoUu][uo]nd[a-z] printf("%cunn%c",yytext[0],yytext[yyleng-1]); ing{EW} { printf("in'"); eos(); } [^dg]get+[^h] printf("%cge'%c",yytext[0],yytext[yyleng-1]); ail printf("aiw"); any printf("enny"); [rSs]ay{EW} { printf("%cigh",yytext[0]); eos(); } way printf("why"); [BbHh]it{EW} { printf("%ci'",yytext[0]); eos(); } ait{EW} { printf("ite"); eos(); } ime{EW} { printf("oime"); eos(); } [^e]ize[^n] printf("%coize%c",yytext[0],yytext[yyleng-1]); [^e]ight printf("%coit",*yytext); [a-z]"?" { *(yytext+1) = ','; printf("%s roit?",yytext); clear_did(); } [a-z]"." { printf("%c", yytext[0]); dintI(); } \n printf("\n"); %% void eos() { if (yytext[yyleng-1] == '.') dintI(); else unput(yytext[yyleng-1]); } void plastc() { unput(yytext[yyleng-1]); } char caseify(c) char c; { if (yytext[0] <= 'Z') return (c - ' '); else return (c); } void I() { /* extern long random(); */ if (random() % 100 < 20) printf("%cOy",yytext[0]); else printf("%cI",yytext[0]); } static short b_count = 0; static short b_which = 0; void bloody() { if (b_count++ % 2 == 0) { switch (b_which++ % 4) { case 0: printf("bloody "); break; case 1: printf("flinkin' "); break; case 2: printf("bleedin' "); break; case 3: printf("soddin' "); break; } } } static short did = 0; void set_did(val) short val; { did = val; } void clear_did() { did = 0; } void dintI() { /* extern long random(); */ if ((did == 1) && (random() % 100 < 50)) printf(", didn'I?"); else if ((did == 2) && (random() % 100 < 50)) printf(", din't we?"); else printf("."); clear_did(); } void pooped() { /* extern long random(); */ switch (random() % 3) { case 0: printf("%cknackered", yytext[0]); break; case 1: printf("%cshagged out", yytext[0]); break; case 2: printf("%cdone in", yytext[0]); break; } } void expletive() { /* Blimey Stright a light 'Strewth Cor blimey */ } filters/studly0000755000175000017500000000070012633476041013365 0ustar mariusmarius#!/usr/bin/perl # stUdLy cAPs, after emacs studly.el -- the commented line is just # to remind diehards how it *should* be done ;) # # just for reference, you may do whatever you like with this file. # # -- nwp@lemon-computing.com for (my $offset = 0; defined(my $c = getc); $offset++) { # (($c + $offset) % 4) == 2 and print (ord($c) ^ 32) or print($c); (($c + $offset) % 4) != 2 and print($c) or $c =~ tr/[A-Za-z]/[a-zA-Z]/, print $c; } filters/nyc.l0000644000175000017500000000532712633476041013073 0ustar mariusmarius%{ /* * Lex filter to transform plain English into Brooklyn English. * No racial or societal slurs are intended. For amusement only. * * Copyright 1986 by Daniel Klein. * * Reproduction permitted so long as this notice is retained. */ %} BW [ \t] SP [ \t] EW [ \t.,;!\?$] %{ void plastc(void); char caseify(char); void expletive(void); %} %% ".so ".*$ printf("%s", yytext); [ao]ther printf("%cdder", yytext[0]=='a'?'a':'u'); [Nn]othing printf("%cuttin'", yytext[0]); [Tt]hin printf("%cin", yytext[0]); [Tt]hir printf("%coi", yytext[0]); [Tt]h[ei] printf("%c%c", caseify('d'), yytext[yyleng-1]); [Tt]hat printf("%cat", caseify('d')); I'm{SP}going{SP}to printf("I'manna"); going{SP}to printf("gonna"); want{SP}to printf("wanna"); t{SP}you printf("tcha"); [Dd]id{SP}you{SP}[eaiou] printf("%c'j%c", yytext[0], yytext[yyleng-1]); [Dd]id{SP}you printf("%c'ja", yytext[0]); [Yy]ou printf("%cuh", yytext[0]); [Hh]ow{SP}are{SP}you printf("%cowahrya", yytext[0]); [Ww]ith printf("%cit'", yytext[0]); [Dd]on't printf("%coan", yytext[0]); ldn't | dn't printf("n't"); isn't printf("ain't"); er{EW} { printf("uh"); plastc(); } ing{EW} { printf("in'"); plastc(); } [Ww]ord | [Hh]eard | [BbGgLlPpSs]urg | [CcHh][eu]r[ntv] printf("%coi%c", yytext[0], yytext[yyleng-1]); [^Mm]mer[^aeiouhrs] printf("%cmoi%c", yytext[0], yytext[yyleng-1]); [Oo]re{EW} { printf("%cwh", caseify('a')); plastc(); } [Oo]r printf("%cwh", caseify('a')); [Oo]f printf("%chv", caseify('u')); tion printf("shun"); alk | our[st] | or[st] printf("awh%c", yytext[yyleng-1]); ause printf("awze"); [Oo]ff printf("%cwhf", caseify('a')); [Ss]tupid printf("%ctoopid", yytext[0]); {BW}under printf(" unner"); {BW}to{EW} { printf(" tuh"); plastc(); } [Aa]ctual printf("%cckshul", yytext[0]); negro printf("spade"); [Pp]uerto{SP}[Rr]ican printf("%cpic", caseify('s')); [Ii]talian printf("%creaser", caseify('g')); [Jj]ewish printf("%cew boy", yytext[0]); [Jj]ew printf("%cebe", caseify('h')); [a-z]":" { *(yytext+1) = ','; printf("%s like, uhh:",yytext); } [a-z]"?" { *(yytext+1) = ','; printf("%s or what?",yytext); } ! printf("! Okay?"); [a-z]"." { printf("%s", yytext);expletive();} %% void plastc() { yyunput(yytext[yyleng-1], yytext); } char caseify(c) char c; { if (yytext[0] <= 'Z') return (c - ' '); else return (c); } short count = 0; short which = 0; void expletive() { if (count++ % 4 == 0) { switch (which++ % 5) { case 0: printf(" Okay?"); break; case 1: printf(" Right?"); break; case 2: printf(" Yuh got me so fahr?"); break; case 3: printf(" Ya' dig?"); break; case 4: printf(" Yuh with me?"); break; } } } int yywrap() { return 1; } filters/scramble.c0000644000175000017500000001350212633476041014053 0ustar mariusmarius/* Scramble the "inner" letters of each word in the input into a random order, and output the result. Non-word (that is, non-alphabetical) characters, and the first and last letters of each word, are left alone. * Output to something other than stdout will append to the file instead of overwriting it - this may be undesirable, and can be changed if so. */ /* Copyright 2009-07-11 Andrew J. Buehler. */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include // for isalpha() #include // for malloc()/calloc()/realloc()/free() and rand()/srand() #include // for strlen() #include // for time() #define ALLOW_FILE_IO 0 /* strips 'reduction' characters from the end of the input string and returns the result * works only if strlen(string> >= reduction, which is the case in the only place it is presently called */ char *shorten_string(char *string, int reduction) { int i; i = strlen(string); for (; reduction > 0; reduction--, i--) { string[i-1] = '\0'; // would it work to use an 'i-reduction' approach instead, similar to what was later done in narrow_string()? } return string; } /* strips 'reduction' characters from the beginning and the end of the input string and returns the result * works only if(strlen(string) >= 2*reduction), which is the case in the only place it is presently called */ char *narrow_string(char *string, int reduction) { int i = reduction; while(string[i]) { string[i-reduction] = string[i]; i++; } string[i-reduction] = '\0'; return shorten_string(string, reduction); } int all_one_letter(char *string) { char c; int i; c = string[0]; for(i = 1; string[i] != '\0'; i++) { if(c != string[i]) { return 0; // a nonduplicate letter has been found } c = string[i]; } return 1; // reached the end of the string having found only duplicate letters, so it's all one letter } /* randomly reorders the contents of the string * WARNING: frees the input string and returns a replacement */ char *scramble_string(char *string) { char *ret, *tmpstr; int len, i, j; len = strlen(string); if(len < 2) return string; // can't scramble a 1-character string or an empty string! if(all_one_letter(string)) return(string); // can't scramble a string which consists entirely of one letter! ret = strdup(string); while(strcmp(string, ret) == 0) { j = 0; tmpstr = strdup(string); while(len > 0) { i = rand() % len; ret[j] = tmpstr[i]; j++; while(tmpstr[i] != '\0') { tmpstr[i] = tmpstr[i+1]; i++; } len--; } free(tmpstr); len = strlen(string); } free(string); return ret; } char *clear_string(char *string) { int i; i = strlen(string); for(; i >= 0 ; i--) { string[i] = '\0'; } return string; } int main(int argc, char **argv) { int word_length; char c, tempchar, *word, *rword; FILE *infile, *outfile; #if ALLOW_FILE_IO /* open files, if any other than stdin and stdout */ if(argc > 1) { if(!strcmp(argv[1], "--help") || !strcmp(argv[1], "-h")) { printf("Usage: %s [INPUT_FILENAME] [OUTPUT_FILENAME]\n", argv[0]); printf("If INPUT_FILENAME is omitted or is '-', read from standard input\nIf OUTPUT_FILENAME is omitted or is '-', print to standard output\n"); return 0; } if(strcmp(argv[1], "-")) { infile = fopen(argv[1], "r"); if(infile == NULL) { fprintf(stderr, "Unable to open input file %s for reading\n", argv[1]); return 1; } } else { infile = stdin; } if(argc > 2) { if(strcmp(argv[2], "-")) { outfile = fopen(argv[2], "a"); if(outfile == NULL) { fprintf(stderr, "Unable to open output file %s for writing\n", argv[2]); return 2; } } else { outfile = stdout; } } } else { // no arguments specified infile = stdin; outfile = stdout; } #else infile = stdin; outfile = stdout; #endif srand(time(NULL)); // needed for scramble_string() to actually be random word_length = 0; word = malloc(sizeof(char)); word[0] = '\0'; c = fgetc(infile); if(feof(infile)) { fprintf(stderr, "Reached EOF while reading the first character of the input file!\n"); free(word); return 4; } while(!feof(infile)) { if(isalpha(c)) { rword = realloc(word, word_length+2); // one for the new character, one for the null if(rword == NULL){ free(word); fprintf(stderr, "Unable to allocate memory\n"); return 5; } word = rword; word[word_length] = c; word[word_length + 1] = '\0'; // duplicate addition with the next line, but possibly more readable word_length++; } else { if(word_length) { word_length--; fputc(word[0], outfile); if(word_length) { tempchar = word[word_length]; word = scramble_string(narrow_string(word, 1)); fprintf(outfile, "%s", word); fputc(tempchar, outfile); } word = clear_string(word); word_length = 0; } fputc(c, outfile); } fflush(outfile); c = fgetc(infile); } free(word); return 0; } filters/debian/0000755000175000017500000000000012633476041013340 5ustar mariusmariusfilters/debian/docs0000644000175000017500000000004012633476041014205 0ustar mariusmariusREADME ky00te.dir/README.ky00te filters/debian/copyright0000644000175000017500000001123012633476041015270 0ustar mariusmariusFormat: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Source: Gathered from many sources, including old usenet posts in the 90's. Files: * Copyright: 1996-2009 Joey Hess License: GPL-2+ The full text of the GPL is distributed as GPL in filters's source, and is distributed in /usr/share/common-licenses/GPL-2 on Debian systems. Files: jethro.l Copyright: 1993 Duane Paulson License: other-1 ** Public domain. Use at your own risk. Y'all come back now, heah? Files: kraut.l Copyright: 1989 John Sparks License: other-2 /* This is in the public domain. Do with it as you will. *\ Files: cockney.l jive.l nyc.l Copyright: 1986 Daniel V Klein License: GPL Daniel confirmed the copyright in this email: . From: Daniel V Klein Date: Wed, 22 Nov 2000 22:00:50 -0500 To: Joey Hess Subject: Re: filters GPL'd . That is so. Have fun (FWIW, I have done some rewriting on them - they are now in Perl, but still need some work...) . -Dan . > I've been told that you have changed the copyright of the cockney, jive > and nyc filters to the GPL? Is that correct? I'd love to move them into > Debian proper. Files: rasterman Copyright: 1997 Zachary Beane License: GPL-2 Files: ken.l Copyright: Stephen K Mulrine License: other-3 The ken filter is now in the public domain. Its author confirmed the new license in this email: . From: Stephen Mulrine Date: Mon, 11 Jun 2001 01:06:52 +0100 (BST) To: edward@debian.org (Edward Betts) Subject: Re: Ken? . [...] . >We would like to include ken in the Debian GNU/Linux Operating System, but >we need permission to modify ken if we want to. Would you be willing to >relicense ken under the GNU GPL, a BSD like license, or public domain? . Certainly, it would be an honour to have it included in the Debian distribution so I hereby release ken into the public domain. Files: ky00te.dir/* Copyright: 1994 Brent E. Edwards License: GPL-2 Comment: The ky00te filter is now relicensed under the GPL. Its author confirmed the new license in this email: . From: Brent Edwards Date: Sat, 30 Jun 2001 09:37:53 -0700 To: Edward Betts Subject: Re: Is this the author of the ky00te filter? . Dear Edward, You have my permission to put the ky00te filter into the GNU GPL license. (Though the license will be far longer than the program itself!) . -- Brent Edwards Files: newspeak.l Copyright: 1991 Jamie Zawinski License: other-4 The newspeak filter is now relicensed under a BSD-like copyright. Its author established the new copyright in this email: . From: Jamie Zawinski Date: Mon, 06 Aug 2001 16:17:02 -0700 To: Joey Hess Subject: Re: copyright of newspeak filter . Hey there -- I'm cleaning out old mail, and don't remember if I replied to this or not. Anyway, in case I didn't -- feel free to slap this license atop the newspeak script (it's BSD-like, so that should work for you.) . Copyright (c) 1991 Jamie Zawinski . Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. No representations are made about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. Files: studly Copyright: Nick Phillips License: other-5 # just for reference, you may do whatever you like with this file. Files: nethackify.c Copyright: 2004 G�kan Seng� License: GPL-2 Files: pirate Copyright: 2003 Dougal Campbell License: GPL-2 Comment: Converted from a php version in the funfilters. Files: kenny Copyright: 2001 Christian Garbs 2002 Alan Eldridge License: Artistic On Debian systems, the full text of the Artistic license can be found in /usr/share/common-licenses/Artistic Files: scottish Copyright: 2007 Adam Borowski License: GPL-3+ The full text of the GPL version 3 can be found in /usr/share/common-licenses/GPL-3 on Debian systems. License: GPL-2 The full text of the GPL is distributed as GPL in filters's source, and is distributed in /usr/share/common-licenses/GPL-2 on Debian systems. filters/debian/changelog0000644000175000017500000003331412633476041015216 0ustar mariusmariusfilters (2.55) unstable; urgency=medium * Fix build warnings. Thanks, Marius Gavrilescu. * scramble: Fix missing free and improve error handling. Thanks, Marius Gavrilescu * A few other minor fixes. * Update urls. -- Joey Hess Sun, 13 Dec 2015 14:54:48 -0400 filters (2.54) unstable; urgency=medium * Fix UTF-8 handling in uniencode. Closes: #508003 Thanks, Marius Gavrilescu. * Improve layout and build process. Thanks, Marius Gavrilescu. * Replace fread with getchar in nethackify. Thanks, Marius Gavrilescu. * Fix NAME section of manpage. Closes: #775035 Thanks, Marius Gavrilescu. * Remove SAMPLES file for deterministic builds. * Makefile: Propagate input CFLAGS and LDFLAGS through to the compiler to allow eg, building with hardening. Thanks, Marius Gavrilescu. -- Joey Hess Thu, 30 Jul 2015 14:33:57 -0400 filters (2.53) unstable; urgency=medium * Orphaned the Debian package. -- Joey Hess Sat, 08 Nov 2014 00:38:19 -0400 filters (2.52) unstable; urgency=medium * Rename lolcat to LOLCAT to avoid collision with a fine rainbow colored cat. Closes: #760910 -- Joey Hess Tue, 09 Sep 2014 10:04:03 -0400 filters (2.51) unstable; urgency=medium * Include lolcat in installation, which was missed by accident. Closes: #760842 Thanks, Jochen Sprickerhof -- Joey Hess Mon, 08 Sep 2014 08:56:28 -0400 filters (2.50) unstable; urgency=medium * Reorganize some code to support building with clang. Closes: #758450 Thanks, Alexander. -- Joey Hess Sun, 31 Aug 2014 14:16:58 -0700 filters (2.49) unstable; urgency=low * scottish: Fix typo. Closes: #688905 * lolcat: New filter. -- Joey Hess Sat, 04 May 2013 23:48:11 -0400 filters (2.48) unstable; urgency=low * Mention that some filters support reading from input files. Closes: #569764 -- Joey Hess Sun, 06 Feb 2011 00:01:44 -0400 filters (2.47) unstable; urgency=low * Patch from Anssi Hannula to avoid warnings when compiling with -Werror=format-security. * scramble: New filter that scambles the inner letters of words. Contributed by Andrew J. Buehler. * Converted debian/copyright to machine parseable format. -- Joey Hess Sat, 11 Jul 2009 16:47:23 -0400 filters (2.46) unstable; urgency=low * fanboy: Improve docs and remove from SAMPLES. Closes: #496588 -- Joey Hess Sun, 26 Oct 2008 23:44:04 -0400 filters (2.45) unstable; urgency=low * Use debhelper v7; rules file minimisation to 3 lines. -- Joey Hess Tue, 22 Jul 2008 00:25:48 -0400 filters (2.44) unstable; urgency=low * Work around dpkg bug #476138. Closes: #475979 * Use CC consistently. -- Joey Hess Mon, 14 Apr 2008 13:26:53 -0400 filters (2.43) unstable; urgency=low * Added the fanboy filter. -- Joey Hess Thu, 25 Oct 2007 04:58:44 -0400 filters (2.42) unstable; urgency=low * Moved from subversion to git. -- Joey Hess Fri, 19 Oct 2007 20:37:33 -0400 filters (2.41) unstable; urgency=low * pirate: Roll r's. Also, conjugate 'is' in present tense, and add some more phrases. Closes: #443213 -- Joey Hess Wed, 19 Sep 2007 14:26:41 -0400 filters (2.40) unstable; urgency=low * Update url to web page in README. * Add scottish filter by Adam Borowski. Closes: #436168 -- Joey Hess Thu, 09 Aug 2007 17:19:14 -0700 filters (2.39) unstable; urgency=low * Add kenny filter. Closes: #317656 -- Joey Hess Mon, 20 Feb 2006 16:27:25 -0500 filters (2.38) unstable; urgency=low * Munged accented characters in man page. -- Joey Hess Sun, 18 Dec 2005 17:31:38 -0500 filters (2.37) unstable; urgency=low * Suggest bsdgames, which contains pig and rot13. -- Joey Hess Wed, 7 Sep 2005 23:36:38 -0400 filters (2.36) unstable; urgency=low * Impress all yer maties on talk like a pirate day with th' new priate filter, by Dougal Campbell, to be sure. * Retroactively spiced up th' changelog. Shiver me timbers! -- Joey Hess Thu, 25 Aug 2005 23:28:25 -0400 filters (2.35) unstable; urgency=low * Ad| nethackify filtcr. Closes: #317656 * Add automatic webpage update gunk. -- Joey Hess Thu, 25 Aug 2005 22:24:29 -0400 filters (2.34) unstable; urgency=low * Add uniencode filter. Because υɳіϲоⅾе is fun. * Fix filters man page to escape hyphens. Because υɳіϲоⅾе is fun. -- Joey Hess Sat, 6 Nov 2004 13:37:51 -0500 filters (2.33) unstable; urgency=low * Better flex fixups; make sure to link with -lfl even if building indivitually, and move stuff that uses unput into %{ %} delimited blocks in rules section. -- Joey Hess Tue, 15 Apr 2003 15:06:25 -0400 filters (2.32) unstable; urgency=low * Deal with the new flex 2.5.31 as follows: - Add main and yywrap functions, though they were not needed before. - Call yyunput instead of unput macro, as the macro uses yytext_ptr, which flex undefes before the bottom set of functions are defined. Closes: #189040 * Various other fixes to build without warnings. -- Joey Hess Mon, 14 Apr 2003 23:39:26 -0400 filters (2.31) unstable; urgency=low * censor: corrected spelling of pyvgbevf, Closes: #172976 -- Joey Hess Sat, 22 Feb 2003 14:03:18 -0500 filters (2.30) unstable; urgency=low * Falk Hueffner provided a patch to make kraut work on alpha. Closes: #169256 -- Joey Hess Thu, 21 Nov 2002 00:16:40 -0500 filters (2.29) unstable; urgency=low * Added certain German phrase to the censor filter. If Germans want to send me censored German phrases, I will be glad to continue adding them to this filter. -- Joey Hess Fri, 15 Nov 2002 13:35:51 -0500 filters (2.28) unstable; urgency=low * Fixed a typo in kraut. * Note in man page that it's a _bad_ German accent. Think 1940's American propiganda movies. Closes: #169163 -- Joey Hess Fri, 15 Nov 2002 11:52:48 -0500 filters (2.27) unstable; urgency=low * Added a censor filter. * Added a spammer filter which generates spamassassin-triggering pseudo-spam from input. * Updated eleet filter (which should perhaps be renamed to just 'leet') to the standards of irc circa mid 2002. * Make jibberish filter only run text through 3 to 8 of the other filters. * Various improvements. -- Joey Hess Sun, 3 Nov 2002 16:37:12 -0500 filters (2.26) unstable; urgency=low * Don't use dh_installmanpages. -- Joey Hess Thu, 13 Jun 2002 18:27:53 -0400 filters (2.25) unstable; urgency=low * Fixed debhelper build-dep. -- Joey Hess Sat, 1 Jun 2002 22:41:07 -0400 filters (2.24) unstable; urgency=low * debhelper v4 * DEB_BUILD_OPTS support -- Joey Hess Sat, 1 Jun 2002 16:45:49 -0400 filters (2.23) unstable; urgency=low * Patch from Seneca to correct newspeak's handling of double quotes preeceeded by punctuation and followed by a blank line. Closes: #146769 -- Joey Hess Sun, 19 May 2002 19:52:06 -0400 filters (2.22) unstable; urgency=low * Something I already fixed in CVS, Closes: #124617 * debhelper v3. -- Joey Hess Mon, 17 Dec 2001 22:20:35 -0500 filters (2.21) unstable; urgency=low * Wrote elmer fudd filter in perl, replacment for a long-removed lex filter of uncertian authorship and copyright. Closes: #109157 -- Joey Hess Thu, 4 Oct 2001 19:32:00 -0400 filters (2.20) unstable; urgency=low * Woo hoo! JWZ has placed newspeak under a BSD-ish license, so it moves in from filters-nonfree. Which is now empty, and will be removed. * AdDed StudLy cAps FiltEr bY NiCk PHillIps . -- Joey Hess Mon, 6 Aug 2001 20:38:49 -0400 filters (2.19) unstable; urgency=low * Fixed jibberish makesamples run to not use installed versions of the filters. -- Joey Hess Sat, 14 Jul 2001 23:44:45 -0400 filters (2.18) unstable; urgency=low * ky00te is free! That leaves only newspeak in filters-nonfree. * A big thanks to Edward Betts for contacting authors. * Fixed echo -n bashism in SAMPLES construction. * rasterman: Added flim! -- Joey Hess Sat, 30 Jun 2001 18:51:39 -0400 filters (2.17) unstable; urgency=low * ken: WAP fixes. -- Joey Hess Mon, 11 Jun 2001 16:35:38 -0400 filters (2.16) unstable; urgency=low * ken is now free. -- Joey Hess Mon, 11 Jun 2001 14:58:58 -0400 filters (2.15) unstable; urgency=low * Rasterized jubberish, Closes: #81901 -- Joey Hess Wed, 10 Jan 2001 23:48:00 -0800 filters (2.14) unstable; urgency=low * hahaha. addde a rasterman filter. (nto just "raster" as i woryr about namespaec pollution.) -- Joey Hess Mon, 27 Nov 2000 20:00:28 -0800 filters (2.13) unstable; urgency=low * cockney, jive, and nyc filters are now GPL'd, moved from -nonfree package. -- Joey Hess Wed, 22 Nov 2000 19:04:08 -0800 filters (2.12) unstable; urgency=low * Use debhelper v2. -- Joey Hess Mon, 25 Sep 2000 15:06:11 -0700 filters (2.11) unstable; urgency=low * Corrected the man page, which was misrepresenting me as the author of some programs I didn't write. -- Joey Hess Tue, 29 Aug 2000 22:58:02 -0700 filters (2.10) unstable; urgency=low * upside-down: 5 and 2 are the best available upside-down versions of themselves. I had it backwards. -- Joey Hess Thu, 29 Jun 2000 16:23:59 -0700 filters (2.9) unstable; urgency=low * Fixed "burk" to "bork" globally. Closes: #52589 -- Joey Hess Sun, 12 Dec 1999 14:14:41 -0800 filters (2.8) unstable; urgency=low * makesample.sh is now careful to make sure each program is executable before running it. Closes: #50985 * I also set -e the script. -- Joey Hess Mon, 22 Nov 1999 14:09:43 -0800 filters (2.7) unstable; urgency=low * A much better synopsis. -- Joey Hess Tue, 9 Nov 1999 00:06:57 -0800 filters (2.6) unstable; urgency=low * FHS -- Joey Hess Fri, 10 Sep 1999 21:25:47 -0700 filters (2.5) unstable; urgency=low * eleet: w -> \/\/ * Spelling correction patch from Edward Betts (closes: #38850) -- Joey Hess Thu, 3 Jun 1999 13:03:02 -0700 filters (2.4) unstable; urgency=low * chef: say "knooeeng" for "knowing", and in general say "oo" for "ow". -- Joey Hess Wed, 19 May 1999 17:20:07 -0700 filters (2.3) unstable; urgency=low * Added kraut filter (free version found). -- Joey Hess Wed, 17 Mar 1999 15:52:05 -0800 filters (2.2) unstable; urgency=low * fixed Makefile to add . to PATH before running makesample.sh, because it called jibberish, which looks only in /usr/games for the filters, and if you're building filters w/o the package installed, they won't be there and the build will fail. Whew! (closes: #33758) -- Joey Hess Fri, 26 Feb 1999 00:17:24 -0800 filters (2.1) unstable; urgency=low 'umop ap!sdn fxaf sujnf `77am y)!ym `jaf7!j umop ap!sdn pappe * -- Joey Hess Sat, 20 Feb 1999 18:22:43 -0800 filters (2.0) unstable; urgency=low * Re-wrote the eleet, chef, b1ff filters in perl, dropped all the rest (except jethro); they will be in filters-nonfree now. This was done due to copyright problems in the original filters. * Fixes important bug #32333 -- Joey Hess Sun, 24 Jan 1999 13:13:17 -0800 filters (1.8) unstable; urgency=low * Added jibberish meta-filter by Raul Miller . (#24677) -- Joey Hess Fri, 4 Dec 1998 15:18:09 -0800 filters (1.7) unstable; urgency=low * Renamed mb to marc-barrett to eliminate namespace pollution. -- Joey Hess Wed, 15 Apr 1998 00:23:38 -0700 filters (1.6) unstable; urgency=low * 4dd3d 3l33t f1lt3r, th4nk5 t0 j3r3my w0rr3ll5 . -- Joey Hess Fri, 6 Mar 1998 11:41:29 -0800 filters (1.5) unstable; urgency=low * Updated standards-version. -- Joey Hess Mon, 9 Feb 1998 13:38:55 -0800 filters (1.4) unstable; urgency=low * Use debhelper. -- Joey Hess Sat, 7 Feb 1998 19:38:35 -0800 filters (1.3) unstable; urgency=low * Libc6. * Added man pages. #11318 -- Joey Hess Wed, 16 Jul 1997 13:31:07 -0400 filters (1.2) frozen unstable; urgency=low * Fixed bug #8329 (buck segfaulted if it encountered C[aou] or R[aeiou] in input.) * Routine update of debian/rules: Run dpkg-gencontrol after debstd, and delete substvars during clean. -- Joey Hess Tue, 8 Apr 1997 20:59:12 -0400 filters (1.1) unstable; urgency=low * Changed version number to 1.1, because there was some confusion if this was a debian-only package. It is, so I've removed the debian revision number. -- Joey Hess Tue, 24 Dec 1996 20:35:51 -0500 filters (1.0-2) unstable; urgency=low * New email address. * Use debmake. -- Joey Hess Tue, 24 Dec 1996 15:40:55 -0500 filters (1.0-1) unstable; urgency=low * First release. -- Joey Hess Sat, 28 Sep 1996 00:55:40 -0400 filters/debian/control0000644000175000017500000000123512633476041014744 0ustar mariusmariusSource: filters Section: games Priority: optional Build-Depends: debhelper (>= 9), flex, bison | byacc | btyacc, dpkg-dev (>= 1.9.0) Maintainer: Debian QA Group Standards-Version: 3.9.6 Vcs-Git: git://git.kitenet.net/filters Homepage: http://joeyh.name/code/filters/ Package: filters Architecture: any Conflicts: filters-nonfree Replaces: filters-nonfree Suggests: bsdgames Depends: ${shlibs:Depends}, ${misc:Depends} Description: collected filters, including B1FF and the Swedish Chef A collection of filters to do all sorts of strange things to text. This includes such favorites as B1FF and the Swedish Chef, and a wide range of others. filters/debian/rules0000755000175000017500000000003512633476041014416 0ustar mariusmarius#!/usr/bin/make -f %: dh $@ filters/debian/TODO0000644000175000017500000000027512633476041014034 0ustar mariusmarius* continue to make the chef filter more similar to the old one * write and collect more filters * does anyone have an asci-art cow font? * rms filter, though vrms already does a good job.. filters/debian/compat0000644000175000017500000000000212633476041014536 0ustar mariusmarius9 filters/scottish0000755000175000017500000000251212633476041013704 0ustar mariusmarius#!/usr/bin/perl -w # Fake scottish (dwarven) accent filter, by Adam Borowski, inspired by the # character "Durkon" from Order of the Stick by Rich Burlew. GPL, 2007. use strict; my @repl=qw( ^yes$:aye there:thar eir$:ar about:aboot ^he$:'e them:'em ^him:'im out_of$:outta of_course:'course ^of$:o' ^and$:an' to$:ta tog:tag that:tha the:tha wouldn't:wouldn'ta cannot:cannae can't:cannae don't:dinnae 're$:r for$:fer ver$:'er ber$:b'r every$:ev'ry en$:'n ^if$:if'n enl:'nl eng:'ng ing:in' ment:mn't ^es:'s ^ex:'s ^not$:na ^no$:nay n't_have:n'tve ^is$:be ^are$:be have:haf abl:'bl ^you$:ye ^your:yer ^you':ye' noth:nuth ^this$:'tis ^here:'ere doesn't:don't at_a$:atta ith$:it' ered$:'red into$:inta ^before:'fore wit'_':wit_' wit'_t:wit_t wit'_w:wit_w wit'_y:wit_y get_a:git_a ally$:'lly ^my:me ^i_think$:methinks nay_w:na_w ^one$:'un ^'un_a:one_a at_ta$:atta ot_ta$:otta ^isn't$:ain't ^so_th:s'th ned$:n'd ^because:'cause ), my @r; sub firstu($) { $_[0]=~s/^([^a-z]*)([a-z])/$1\u$2/; return $_[0]; } for(@repl) { s/_/ /g; my ($l,$r)=split(/:/,$_); for([$l,$r], [firstu $l, firstu $r], ["\U$l","\U$r"]) { ($l,$r)=@$_; $l=~s/^\^/\\b/; $l=~s/\$$/\\b/; push @r, [qr/$l/, $r]; } } while(my $txt=<>) { $txt=~s/$$_[0]/$$_[1]/g for @r; print $txt; } filters/kenny0000755000175000017500000001755712633476041013207 0ustar mariusmarius#!/usr/bin/perl -w # # kenny.pl -- translate from and to KennySpeak # # $Revision: 1.7 $ # # Licensed unter the Artistic License: # http://www.perl.com/language/misc/Artistic.html # # (C) 2001,2002 by Christian Garbs , http://www.cgarbs.de # Alan Eldridge # # KennySpeak invented by Kohan Ikin # http://www.namesuppressed.com/kenny/ # # $Id: kenny.pl,v 1.7 2002/01/06 22:09:52 mitch Exp $ # use strict; # # This is Perl POD documentation. # You can generate a nice manpage with "pod2man kenny.pl > kenny.man". # Or have a look at "perldoc perlpod" for other options # =head1 NAME kenny.pl -- translate from and to KennySpeak =head1 SYNOPSIS B S<[ B<-h> ]> S<[ B<-u> ]> S<[ B<-k> | B<-d> ]> S<[ I ] [ I ] ...> =head1 OVERVIEW kenny.pl translates a given text from or to B. KennySpeak looks like this: "Ppfmfp ppmffm mfmppfmpm, fmpmfpmppffm'fpmmpp pmpmffpmfpmfmppmpm Pmpmppppppppffm!" =head1 DESCRIPTION kenny.pl will read the given filenames, translate them and print the results on stdout. If you don't give a filename, stdin is used. A F<-> as a filename means stdin. Without any parameters, kenny.pl will look at the first line of input and guess which way you want to translate. If kenny.pl guesses wrong, you must select the translation mode using the B<-k> or B<-d> switch. =head2 Switches =over 5 =item B<-h> This will print a short notice and a quick summary of the available switches. =item B<-u> This will convert German umlauts to Ae, Oe, Ue, ae, oe, ue and ss so that they can be kennyfied correctly. =item B<-k> Kennyfy. This forces the input to be translated into KennySpeak. =item B<-d> Dekennyfy. This forces the input to be translated back from KennySpeak. =back =head1 VERSION This is $Revision: 1.7 $. =head1 BUGS The B<-u> switch might not work for charsets other than Latin-1. You might try to convert the kenny.pl script using B to change it from Latin-1 to your preferred charset. =head1 CREDITS kenny.pl was written by B. Look on his homepage for newer versions of kenny.pl. Bug reports or comments about the program should be sent to him: Christian Garbs > F KennySpeak was invented by B. See his homepage for an online version of the original B: Kohan Ikin > F Alan Eldridge > patched in a signal handler to print an appropriate message when kenny.pl is killed. =head1 COPYRIGHT kenny.pl is licensed unter the B which can be found at F. This license has been chosen for keeping compatibility with the original KennySpeak format. =cut ###################################################################### # # CHANGELOG # # $Log: kenny.pl,v $ # Revision 1.7 2002/01/06 22:09:52 mitch # Included patch by Alan Eldridge # to show a message when kenny.pl is killed. # # Revision 1.6 2001/07/20 19:04:49 mitch # Removed warnings with Perl 5.6. # Thanks go to Alan Eldridge # # Revision 1.5 2001/07/15 10:27:57 mitch # Included notice about -u and charsets other than Latin-1. # # Revision 1.4 2001/07/14 13:16:30 mitch # Initial release. # # # ###################################################################### # # finally{}, the source code! # ##### Declaration of function prototypes sub generateKenny(); sub generateDeKenny($); sub guessDialect($); sub translate($); sub addGermanUmlauts($); sub printHelp(); sub theyKilledKenny(); ##### Default values for various option: my $dialect = 0; # Translate from or to KennySpeak? # 0=guess, 1=encode, 2=decode my $umlauts = 0; # Convert German Umlauts before translation? # TRUE= => Ae, Oe, Ue, ae, ou, ue, ss ##### The KennySpeak translation tables: my $kenny = generateKenny(); # encoding table my $dekenny = generateDeKenny($kenny); # decoding table ##### Install signal handlers $SIG{HUP} = \&theyKilledKenny; $SIG{INT} = \&theyKilledKenny; $SIG{QUIT} = \&theyKilledKenny; $SIG{TERM} = \&theyKilledKenny; ##### Parse commandline arguments # "-h" switch (print help): if (grep /^-h$/, @ARGV) { printHelp(); exit 0; } # "-u" switch (convert German umlauts): if ((defined $ARGV[0]) && ($ARGV[0] eq "-u")) { $umlauts = 1; shift @ARGV; } elsif ((defined $ARGV[1]) && ($ARGV[1] eq "-u")) { $umlauts = 1; splice @ARGV, 1, 1; } # "-k" and "-d" switch (force encoding/decoding): if (defined $ARGV[0]) { if ($ARGV[0] eq "-k") { $dialect = 1; shift @ARGV; } elsif ($ARGV[0] eq "-d") { $dialect = 2; shift @ARGV; } } ##### add German umlauts to encoding if desired: if ($umlauts) { addGermanUmlauts($kenny); } ##### Process the given input files (or stdin of none given) while (my $line=<>) { chomp $line; $dialect = guessDialect($line) unless $dialect; $line = translate($line); print "$line\n"; } ##### That's all, folks! exit 0; ##### Signal handler, if we're kill(1)ed sub theyKilledKenny() { print "Oh my God! They killed Kenny! You bastards!\n"; exit 0; } ##### Guess whether input is already kennyfied: sub guessDialect($) { my $line = shift; $line =~ tr/a-zA-Z//cd; if (($line =~ tr/mfpMFP//c) > 0) { return 1; } else { return 2; } } ##### Encode/decode a given line sub translate($) { my $in = shift; my $out = ""; if ($dialect == 1) { $out .= exists $kenny->{$1} ? $kenny->{$1} : $1 while ($in =~ s/^(.)//); } else { my @chars = split //, $in; while (@chars) { if ((@chars > 2) and (exists $dekenny->{$chars[0]}->{$chars[1]}->{$chars[2]})) { $out .= $dekenny->{$chars[0]}->{$chars[1]}->{$chars[2]}; shift @chars; shift @chars; shift @chars; } else { $out .= shift @chars; } } } return $out; } ##### Generate KennySpeak encoding table sub generateKenny() { my %kenny; # lower case characters my ($a, $b, $c) = (0,0,0); for my $char ("a".."z") { my $foo = $a.$b.$c; $foo =~ tr/012/mpf/; $kenny{$char} = $foo; $c++; if ($c == 3) { $c=0; $b++; if ($b == 3) { $b=0; $a++; } } } # upper case characters map { $kenny{uc $_} = ucfirst $kenny{$_} } keys %kenny; return \%kenny; } ##### Generate KennySpeak decoding table sub generateDeKenny($) { my %dekenny; my $kenny = $_[0]; foreach my $key (keys %{$kenny}) { my ($a, $b, $c) = split //, $kenny->{$key}; if (! exists $dekenny{$a}) { $dekenny{$a} = {}; } if (! exists $dekenny{$a}->{$b}) { $dekenny{$a}->{$b} = {}; } $dekenny{$a}->{$b}->{$c} = $key; } return \%dekenny; } ##### Add German Umlaut conversion to KennySpeak encoding table sub addGermanUmlauts($) { my $kenny = $_[0]; $kenny->{""} = $kenny->{"a"} . $kenny->{"e"}; $kenny->{""} = $kenny->{"o"} . $kenny->{"e"}; $kenny->{""} = $kenny->{"u"} . $kenny->{"e"}; $kenny->{""} = $kenny->{"A"} . $kenny->{"e"}; $kenny->{""} = $kenny->{"O"} . $kenny->{"e"}; $kenny->{""} = $kenny->{"U"} . $kenny->{"e"}; $kenny->{""} = $kenny->{"s"} x 2; } ##### Print short help message sub printHelp() { print <<'EOF'; kenny.pl $Revision: 1.7 $ by Christian Garbs Use "pod2man kenny.pl > kenny.man" to generate the man page. Usage: kenny.pl [ -h ] [ -u ] [ -k | -d ] [ file1 ] [ file2 ] ... -h : print this help message -u : convert German umlauts before translation -k : force encoding to KennySpeak -d : force decoding from KennySpeak EOF ; } filters/b1ff0000755000175000017500000000431612633476041012666 0ustar mariusmarius#!/usr/bin/perl -p # B1FF filter. # Copyright 1999 by Joey Hess under the terms of the GNU GPL. # I use an array, not a hash. because order is important. @trans_table=( '\bEVERYONE\b' => 'EVRY 1', '\bEVERYBODY\b' => 'EVRY BUDY', '\bEVERY\b' => 'EVRY', '\bONE\b' => '1', '\bAND\b' => '+', '\bYOU' => 'U', '\bITS\b' => 'IT"S', '\bIT\'S\b' => 'ITS', '\bIS\b' => 'IZ', '\bLINUX\b' => 'LINUS', '\bUNIX\b' => 'THE MANEFRA1M O/S', '\bWINDOWS\b' => 'WINDOWZ (IT RULEZ MAN!)', '\bYOU\'RE\b' => 'YOUR', '\bTHEM\b' => 'THUM', '\bHERE\b' => 'HERE', '\bTHEY\'RE\b' => 'THE1R', '\bTHEIR\b' => 'THERE', '\bWAS\b' => 'WUZ', '\bMACINTOSH\b' => 'IMAC', # too 90's? '\bVERY\b' => 'TOTALLY', '\bCOMPUTER\b' => 'VIC-20', '\bWHETHER\b' => 'WHETHUR', '\b(?:H|CR)ACKER\b' => 'KEWL HACKER D00D!', '\bOF\b' => 'UV', '\bGNU\b' => 'NEW', '\bQUITE\b' => 'REAL', '\bFREE\b' => 'FREE!', 'HOME' => 'HUM', 'COME' => 'CUM', 'MICRO' => 'MIKRO', 'GOVERN' => 'GUVERN', 'PERSON' => 'D00D', 'SOME' => 'SUM', 'WRITE' => 'RITE', 'REAL' => 'REEL', 'LITE' => 'L1TE', 'BIAN' => 'B1AN', 'TION' => 'SHUN', 'FOR' => '4', 'TO' => '2', 'ATE' => '8', '\b2TALLY\b' => 'TOTALY', # fix from line above 'LL' => 'L', 'OO' => '00', 'MATE' => 'M8', 'ER' => 'UR', 'S+\b' => 'Z', 'KN' => 'N', 'IE' => 'EI', ); $_=uc; s/;/,/g; s/'//g; while (@trans_table) { $key=shift @trans_table; $value=shift @trans_table; s/$key/$value/g; } s/(\!+)/$1.make_exclimation()/eg; s/(\?+)/$1.make_question()/eg; s/I/rand 3 > 2 ? '1' : 'I'/eg; # change 1/3 of I's to 1's @punct=('.','!',','); s/\. /. /g; s/\./$punct[int(rand 3)]/eg; s/\,/./g; # b1ff can't hold down on shift too well!!!!!!!1! sub make_exclimation { my $length=shift || int(rand 5); my $ret='!'; my $last=0; for (1..$length) { if (! $last && int(rand 3) eq 2) { $ret.="1"; $last=1; } else { $ret.="!"; $last=0; } } return $ret; } # ask questions excitedly?!?!?!?! sub make_question { my $length=shift || int(rand 5) + 1; my $ret=''; my $last=0; while (length($ret) < $length) { if (! $last && int(rand 5) > 2) { $ret.="?!"; $last=1; } elsif (! $last && int(rand 5) > 3) { $ret.="?1"; $last=1; } else { $ret.="?"; $last=0; } } return $ret; } filters/fudd0000755000175000017500000000036612633476041012773 0ustar mariusmarius#!/usr/bin/perl -p # Elmer Fudd. GPL 2001 by Joey Hess s/[rl]/w/g; s/qu/qw/g; s/th\b/f/g; s/th\B/d/g; s/n\./n, uh-hah-hah-hah. /g; s/[RL]/W/g; s/Qu/Qw/g; s/QU/QW/g; s/TH\b/F/g; s/TH\B/D/g; s/Th/D/g; s/N\./N, uh-hah-hah-hah./g; filters/nethackify.c0000644000175000017500000000361012633476041014407 0ustar mariusmarius /* nethackify tries to write text ala nethack cat /etc/motd/ | nethackify /exec -o nethackify "good morning :)" gurkan@linuks.mine.nu */ #include #include #include #include char *normal ="ABCDEFGHIKLMNOPQRTUVWZbdeghjklmnoqwy:;01678"; char *nethack1="^P(|||C||||||CFCP|J/V/|cccni||nrccvv.,C|o/3"; char *nethack2="?b?)F-(-?<_??\(?(F??\?/??|??????r???????\(???o"; char *nethack3=" [ [L \\ "; char *nethack4=" [ \\ "; char *nethack5=" _ \\ "; int myrandom(float max) { return ((int)(max*rand()/(RAND_MAX+1.0))); } void nethackify(char* str) { int i,c; for(i=0; i0) { switch(myrandom(5)) { case 4: if(nethack5[c]!=' ') str[i]=nethack5[c]; case 3: if(nethack4[c]!=' ') str[i]=nethack4[c]; case 2: if(nethack3[c]!=' ') str[i]=nethack3[c]; break; case 1: if(nethack2[c]!=' ') str[i]=nethack2[c]; break; case 0: str[i]=nethack1[c]; break; default: break; } } } } printf("%c",str[i]); } printf(" "); } int main(int argc, char **argv) { int i,c, ch; struct timeval tv; srand((gettimeofday(&tv,NULL),tv.tv_usec)); if (argc==1) { while((ch = getchar()) != EOF) { for(c=0; c [], "!" => [], "@" => [], "#" => [], '$' => [], "%" => [8240], "^" => [], "&" => [], "*" => [10033], "(" => [], ")" => [], "_" => [9418], "-" => [8208], "+" => [], "=" => [], "[" => [], "]" => [], "{" => [], "}" => [], '\\' => [], "|" => [9475], '"' => [8223], "'" => [8217], ":" => [], ";" => [], "<" => [8249], ">" => [8250], "," => [], "." => [], "/" => [8260], "?" => [], "1" => [], "2" => [], "3" => [1047], "4" => [], "5" => [], "6" => [], "7" => [], "8" => [], "9" => [], "0" => [1365], "a" => [1072], "A" => [1040], "b" => [1068], "B" => [1042], "c" => [1089, 8573, 1010], "C" => [663, 1057, 8557], "d" => [1281, 8574], "D" => [8558], "e" => [1077], "E" => [917, 1045], "f" => [], "F" => [988], "g" => [], "G" => [1292], "h" => [1210], "H" => [919, 1053], "i" => [1110, 8560], "I" => [921, 1030], "j" => [1011, 1112], "J" => [1032], "k" => [], "K" => [922, 1050], "l" => [8572], "L" => [8556], "m" => [8575], "M" => [924, 1052, 8559], "n" => [951, 627], "N" => [925], "o" => [1086, 1413], "O" => [927, 1054], "p" => [961, 1088], "P" => [929, 1056], "q" => [], "Q" => [], "r" => [], "R" => [], "s" => [1109], "S" => [1359], "t" => [], "T" => [932, 1058], "u" => [965], "U" => [], "v" => [957, 8910, 8964, 9013], "V" => [947, 8548], "w" => [], "W" => [], "x" => [1093, 8569, 215], "X" => [935, 1061, 8553], "y" => [1059, 1091], "Y" => [933], "z" => [], "Z" => [918], ); while (<>) { foreach $ם (split //) { if (exists $Δ{$ם} && @{$Δ{$ם}}) { @ה=@{$Δ{$ם}}; print chr($ה[rand @ה]); } else { print $ם } } } filters/.gitattributes0000644000175000017500000000005412633476041015010 0ustar mariusmariusdebian/changelog merge=dpkg-mergechangelogs filters/filters.60000644000175000017500000000661312633476041013663 0ustar mariusmarius.TH FILTERS 6 .SH NAME ken, b1ff, censor, chef, cockney, eleet, fanboy, fudd, jethro, jibberish, jive, kenny, kraut, ky00te, nethackify, newspeak, nyc, pirate, rasterman, scottish, spammer, scramble, studly, uniencode, upside\-down \- assorted text filters .SH SYNOPSIS $SHELL | chef newspeak < thesis.tex > newthesis.tex eleet | wall # b1ff works well too b1ff | ircII | censor .SH "DESCRIPTION" All of these programs are filters to do all sorts of strange things to text. No personal, racial, religious or societal slurs are intended. For amusement only. .P All the filters read input from stdin, change it, and write the filtered text to stdout. Some filters also support reading from files and writing to stdout. .IP b1ff The B1FF filter .IP lolcat As seen in internet gifs everywhere. .IP cockney Cockney English .IP chef convert English on stdin to Mock Swedish on stdout .IP eleet K3wl hacker slang .IP fanboy Speak like a fanboy. Filters out extraneous words and focuses on the words fans use. By default, it will speak like a fan of git/Linus/linux development. To change this, pass as parameters the words that the fanboy typically uses. Alternatively, pass the name of a topic that typically has fanboys to use a predefined word list. .IP fudd Elmer Fudd .IP jethro Hillbilly text filter .IP jive Jive English .IP jibberish Runs text through a random selection of the rest of the filters, to make really weird output. .IP ken English into Cockney, featuring (dubious) rhyming slang for a lot of computer terminology. .IP kraut Generates text with a bad German accent. .IP kenny Generates text as spoken by Kenny on South Park. .IP ky00te This program places a very cute (and familiar to FurryMuck fans) accent on any text file. .IP nethackify Wiped out text like can be found in nethack. .IP newspeak A-la-1984 .IP censor CDA-ize text .IP nyc Brooklyn English .IP pirate Talk like a pirate. .IP rasterman Makes text look like it came from the keyboard of Carsten Haitzler. .IP scottish Fake scottish (dwarven) accent filter, inspired by the character "Durkon" from Order of the Stick. .IP spammer Turns honest text into something that is liable to be flagged as spam. .IP scramble Scramble the "inner" letters of each word in the input into a random order. The resulting text is still strangely readable. .IP studly Studly caps. .IP uniencode Use glorious unicode to the fullest possible extent. As seen previously in many man pages. .IP upside\-down Flips text upside down. Stand on your head and squint to read the output. .SH "SEE ALSO" Other filters: .TP .B pig From the bsdgames package, pig converts text to pig latin. .TP .B dog --oog From the dog package, dog can also function as a filter, converting text to OOG-speak. .SH AUTHORS The eleet, upside\-down, chef, b1ff, and censor filters were written by Joey Hess . Daniel V Klein wrote the cockney, jive, and nyc filters. jibberish is by Raul Miller , jethro is by Duane Paulson , rasterman is by Zachary Beane, ken is by Stephen K Mulrine , newspeak is by Jamie Zawinski , studly is by Nick Phillips , Gurkan Sengun wrote nethackify, Dougal Campbell wrote pirate, kraut is by John Sparks, scottish by Adam Borowski, Kenny is by Christian Garbs and Alan Eldridge, and scramble by Andrew J. Buehler. filters/chef0000755000175000017500000000360012633476041012750 0ustar mariusmarius#!/usr/bin/perl -p # Swedish Chef filter. Bork Bork Bork! # Copyright 1999 by Joey Hess under the terms of the GNU GPL. # Note that the order of the commands in this program is very important! # Change 'e' at the end of a word to 'e-a', but don't mess with the word # "the". s{(\w+)e(\b)}{ if (lc($1) ne 'th') { "$1e-a$2" } else { "$1e$2" } }eg; # Stuff that happens at the end of a word. s/en(\b)/ee$1/g; s/th(\b)/t$1/g; # Stuff that happens if not the first letter of a word. s/(\w)f/$1ff/g; # Change 'o' to 'u' and at the same time, change 'u' to 'oo'. But only # if it's not the first letter of the word. tr/ou/uo/; s{(\b)([uo])}{ $1 . $2 eq 'o' ? 'u' : 'o' }eg; # Note that this also handles doubling "oo" at the beginning of words. s/o/oo/g; # Have to double "Oo" seperatly. s/(\b)O(\w)/$1Oo$2/g; # Fix the word "bork", which will have been mangled to "burk" # by above commands. Note that any occurrence of "burk" in the input # gets changed to "boork", so it's completly safe to do this: s/\b([Bb])urk\b/$1ork/g; # Stuff to do to letters that are the first letter of any word. s/\be/i/g; s/\bE/I/g; # Stuff that always happens. s/tiun/shun/g; # this actually has the effect of changing "tion" to "shun". s/the/zee/g; s/The/Zee/g; tr/vVwW/fFvV/; # Stuff to do to letters that are not the last letter of a word. s/a(?!\b)/e/g; s/A(?!\b)/E/g; s/en/un/g; # this actually has the effect of changing "an" to "un". s/En/Un/g; # this actually has the effect of changing "An" to "Un". s/eoo/oo/g; # this actually has the effect of changing "au" to "oo". s/Eoo/Oo/g; # this actually has the effect of changing "Au" to "Oo". # Change "ow" to "oo". s/uv/oo/g; # Change 'i' to 'ee', but not at the beginning of a word, # and only affect the first 'i' in each word. s/(\b\w[a-hj-zA-HJ-Z]*)i/$1ee/g; # Special punctuation of the end of sentances but only at end of lines. s/([.?!])$/$1\nBork Bork Bork!/g; filters/jibberish0000755000175000017500000000134112633476041014004 0ustar mariusmarius#!/usr/bin/perl # jibberish -- run filters in random order $ENV{PATH}.=":/usr/games"; @all= qw( eleet b1ff chef jethro upside-down kraut cockney jive pirate nyc ken ky00te rasterman newspeak studly censor spammer ); # shuffle order srand; for (0..$#all) { my $n= @all*rand; my $was= $all[$_]; $all[$_]= $all[$n]; $all[$n]= $was; } # start the pipe... my $pipe= join '|', @all[0..3 + rand(5)]; open FILTER, "$pipe|" or die "Never mind...\n"; # display the results while () { print $_ } # This could be optimized: take the last program off the pipeline, # open the pipeline as standard input, then exec that last program. # # But you have to ask yourself: how important is it to optimize # the generation of jibberish? filters/censor0000755000175000017500000000334512633476041013342 0ustar mariusmarius#!/usr/bin/perl # Censor filter. # Copyright 2002 by Joey Hess under the terms of the GNU GPL. # Yes, this program is self-modifying code, if you want it to be. if (exists $ENV{ADD_WORD}) { open(IN, $0) || die "cannot read myself"; @lines=; close IN; open OUT, ">$0" || die "cannot write myself"; for (@lines) { print OUT $_; if (/^__DATA__\n$/) { open(DATAOUT, "|sort|uniq|column >> $0"); $ENV{ADD_WORD} =~ y/n-za-m/a-z/; print DATAOUT "$ENV{ADD_WORD}\n"; print DATAOUT join("\n", map { chomp; split ' ', $_ } ); close DATAOUT; exit; } } } $censored = join("|", reverse sort { $a cmp $b } grep { length $_ } map { chomp; y/a-z/n-za-m/; split ' ', $_ } ); while (<>) { s/\b($censored)ed/CENSORED/ig; # don't say "CENSOREDed" s/\b($censored)/CENSORED/ig; print $_; } __DATA__ ahqr enaql gjng pbpx t-fcbg anxrq encr grng pbzrvat t\f+fcbg avccyr erne guebng pbzvat tebva bcravat fangpu gvg pebgpu ubbgre beny fchax gvggl penc ubeal betl fcrez gvggvr penpx ubyr betnfz fcuvapgre hgrehf pernz uhzc certanag fghq ihyin phag unaqwbo cevpx fgnss intvan phz urnq chff fhpx ivetva phzzvat wvfz chffl fjnyybj ivoengbe pnzr xabo chffvrf fperj jbzo preivk xvff chovp frk jrg pureel ybir chqraqhz frkhny juber pyvg ybire chzc frrq kkk pyvgbevf ybirq cnagvrf frzra nany pyvggl ybnq crargengr funsg nerbyn pyvznk ynovn crargengrq funt nff qevyyrq ynvq cravf funttvat nffubyr qrsybjre yrfovna crgre fuvg obbo qvpx yvcf crpxre fvrt\furvy oernfg qvyqb znfgheong cunyyhf fyhg ohgg rebgvp znfgheongr cvff fyhggvfu ohggbpx rerpgvba znfgheongvat ebfrohq fyvg onyy rkcbfrq znzznel ebq gbathr ovgpu shpx znzznevrf ehg gbby oybj snpvny filters/kraut.l0000644000175000017500000000432212633476041013422 0ustar mariusmarius%e 2000 %p 5000 %n 1000 %k 500 %a 4000 %o 2000 BW [ ] EW [ .,;!?] %% ing printf("ingkt"); " the " printf(" ze "); "The " printf("Ze "); " with " printf(" mitt "); "With " printf("Mitt "); wr printf("w-r-r"); Wr printf("W-r-r"); R printf("R-r-r"); "Yes " printf("Jawohl "); " r" printf(" r-r-r"); "Yes." printf("Jawohl."); "Yes!" printf("Jawohl!"); "YES!" printf("JAWOHL!"); " yes " printf(" ja "); " yes." printf(" ja."); " yes!" printf(" yes!"); "No " printf("Nein "); "No!" printf("Nein!"); "No?" printf("Nein?"); " no " printf(" nein "); " no." printf(" nein."); " no!" printf(" nein!"); " no?" printf(" nein?"); [Mm]"r." printf("Herr"); [Mm]"rs." printf("Frau"); Miss printf("Fraulein"); " of " printf(" uff "); "Of " printf("Uff "); my printf("mein"); My printf("Mein"); " and " printf(" undt "); "And " printf("Undt "); "One " printf("Ein "); " one" printf(" ein"); "Is " printf("Ist "); " is " printf(" ist "); "ow " printf("ow "); "w " printf("w "); sh printf("sch"); Sh printf("Sch"); ch printf("ch"); Ch printf("Ch"); " c" printf(" k"); " C" printf(" K"); v printf("f"); V printf("F"); " w" printf(" v"); W printf("V"); th printf("d"); Th printf("D"); [Jj]ohn printf("Johann"); [Ww]illiam printf("Wilhelm"); [Bb]rad printf("Wilhelm"); [Gg]ary printf("Gerhardt"); [Jj]on printf("Hansel"); [a-f]"!" {printf("%s Naturlich!",yytext);} [p-z]"!" {printf("%s Sieg Heil!",yytext);} . printf("%s", yytext); \n printf("\n"); %% filters/ky00te.dir/0000755000175000017500000000000012633476041014007 5ustar mariusmariusfilters/ky00te.dir/makefile0000644000175000017500000000052612633476041015512 0ustar mariusmariusall: ../ky00te clean: rm -f y.tab.* lex.yy.* rm -f ../ky00te ../ky00te: y.tab.o lex.yy.o $(CC) -o ../ky00te lex.yy.o y.tab.o $(CFLAGS) -lfl $(LDFLAGS) lex.yy.o: lex.yy.c y.tab.h $(CC) $(CFLAGS) -c lex.yy.c y.tab.o: y.tab.c $(CC) $(CFLAGS) -c y.tab.c lex.yy.c: ky00te.lex flex ky00te.lex y.tab.c: ky00te.yacc yacc -d ky00te.yacc filters/ky00te.dir/README.ky00te0000644000175000017500000000515312633476041016006 0ustar mariusmariusThis program is (c) 1994, Brent E. Edwards. Feel free to distribute the complete program world-wide. (Please do NOT break apart this text file from the program.) This program is under absolutely no warrantee of any kind. If you have any questions about this program, please send them to edwardsb@cs.rpi.edu. This program is dedicated to Conrad Wong. This program is catware. If you find it useful in any way, pay for this program by spending one hour petting one or several cats. [ Revised to plain GPL by author, see copyright file. -- Joey Hess ] =================================================== Purpose: This program places a very cute (and familiar to FurryMuck fans) accent to any text file. It is designed for UNIX systems. It requires cc, lex, and yacc to be in your path. Compiling: To compile on a UNIX system, type 'make' Running: To do a line-by-line translation of your text, type 'ky00te'. Control-D will halt the program. To convert a text file and display it on the screen, type 'ky00te < filename | more', where filename is the file to convert. To convert a text file and save it to a file, type 'ky00te < filename.in > filename.out', where filename.in is the file to convert and filename.out is the place to put it. You can also add an accent to the output of any program by typing ' | ky00te'. Petting the cat: Stroke with the furs, not against them. ==================================================== Program version information: Program version 1.00: 13 December 1994 Program version 1.10: 15 December 1994 Version 1.00 was a memory hog. Also, adds 'fur' and 'meow' to list of cat-ch phrases. Program version 1.11: 16 December 1994 With Tobias Kuhler's (ukjp@rz.uni-karlsruhe.de) repeated suggestion, the program now only doubles (not triples) 'r' and no longer capitalizes fur. He also suggested the following improvements: at a, at the -> atta in a, in the -> ynna is a, is the -> yssa on a, on the -> onna with a, with the -> wyffa the -> da you -> ya and -> 'n with -> wyf to -> ta This version also no longer uses the same 'meow'; it switches between 'meow', 'mew', and 'mu' (weighted to the first). I've also added: lot of -> lotta is so -> yssa when -> w'en with -> wyf (when used to start a word) your -> yer not, n't -> na' The README file has been reorganized, and the dedication made explicit. filters/ky00te.dir/ky00te.yacc0000644000175000017500000000407312633476041015770 0ustar mariusmarius%{ #include #include typedef int INT; #define YYSTYPE INT extern int yylex (void); int yyerror(char*); %} %token CUTE %token FLUFF %token SMILE %token PURR %token FUR %token MEOW %token ATTA %token YNNA %token YSSA %token ONNA %token WYFFA %token LOTTA %token WYF %token WYFF %token DA %token YER %token YA %token AN %token TA %token WEN %token NA /*UN*/ %token LETTER %% s: | s t | s ' ' { if (rand() % 30 < 1) { int inRand; inRand = rand() % 5; switch(inRand) { case 0: printf(" *truffle break!* "); break; case 1: printf(" *catnap break!* "); break; case 2: printf(" *purrpurr* "); break; case 3: printf(" *meow!* "); break; case 4: printf(" *fluff!* "); break; } } else { printf(" "); } } ; t: CUTE { printf("ky00te!"); } | FLUFF { printf("*fluff!*"); } | SMILE { printf("};)"); } | PURR { printf("purr"); } | FUR { printf("fur"); } | MEOW { int inRand; inRand = rand() % 5; switch(inRand) { case 0: case 1: case 2: printf("meow"); break; case 3: case 4: printf("mew"); } } | ATTA { printf("atta"); } | YNNA { printf("ynna"); } | YSSA { printf("yssa"); } | ONNA { printf("onna"); } | WYFFA { printf("wyffa"); } | LOTTA { printf("lotta"); } | WYF { printf(" wyf "); } | WYFF { printf(" wyff"); } | DA { printf(" da "); } | YER { printf(" yer"); } | YA { printf(" ya"); } | AN { printf(" 'n "); } | TA { printf(" ta "); } | WEN { printf(" w'en "); } | NA { printf(" na'"); } /*UN*/ | LETTER { if (yylval == 'r') printf("rr"); else printf("%c", $1); } ; %% extern char mylval; int yyerror(char *s) { printf("%s\n",s); } int main() { yyparse(); return 0; } filters/ky00te.dir/ky00te.lex0000644000175000017500000000401012633476041015630 0ustar mariusmarius%{ #include "y.tab.h" extern int yylval; %} %% i { yylval = 'y'; return(LETTER); } I { yylval = 'Y'; return(LETTER); } cks { yylval = 'x'; return(LETTER); } ks { yylval = 'x'; return(LETTER); } cute { return(CUTE); } fluff { return(FLUFF); } smile { return(SMILE); } grin { return(SMILE); } laugh { return(SMILE); } chuckle { return(SMILE); } pr { return(PURR); } p[aeiou]*r { return(PURR); } f[aeiou]+r { return(FUR); } m[aeiou]+/[^.,s?! ] { return(MEOW); } /*UN*/ "at a" { return(ATTA); } "at the" { return(ATTA); } "in a" { return(YNNA); } "in the" { return(YNNA); } "is a" { return(YSSA); } "is the" { return(YSSA); } "is so" { return(YSSA); } "on a" { return(ONNA); } "on the" { return(ONNA); } "with a" { return(WYFFA); } "with the" { return(WYFFA); } "lot of" { return(LOTTA); } " with " { return(WYF); } " with" { return(WYFF); } ^"with " { return(WYF); } ^"with" { return(WYFF); } " with"$ { return(WYF); } " the " { return(DA); } ^"the " { return(DA); } " the"$ { return(DA); } " your" { return(YER); } ^your { return(YER); } " you" { return(YA); } ^you { return(YA); } " and " { return(AN); } ^"and " { return(AN); } " and"$ { return(AN); } " to " { return(TA); } ^"to " { return(TA); } " to"$ { return(TA); } " when " { return(WEN); } ^"when " { return(WEN); } " when"$ { return(WEN); } "n't" { return(NA); } /*UN*/ " not" { return(NA); } /*UN*/ [ \t] { return(' '); } . { yylval = yytext[0]; return(LETTER); } %% filters/eleet0000755000175000017500000000064112633476041013143 0ustar mariusmarius#!/usr/bin/perl -p # Eleet filter, Copyright 1999,2002 by Joey Hess under the terms of the GNU GPL. BEGIN { # abcdefghijklmnopqrstuvwxyz $transstring="4bcd3fgh1jklmn0pqr5tuvwxyz"; $t="tr/a-zA-Z/$transstring$transstring/"; } s/porn/pr0n/g; s/elite/l33t/g; eval $t; # These are not in common usage anymore. #s:h:|-|:ig; #s:l:|_:ig; #s:m:/\\/\\:ig; #s:n:/\\/:ig; #s:w:\\/\\/:ig; #s:v:\\/:ig; #s:x:><:ig; filters/jethro.l0000644000175000017500000001560212633476041013572 0ustar mariusmarius /* jethro.l */ %e 7000 %k 5000 %p 9000 %n 2000 %a 9000 %o 7000 SW [\n \"(] EW [\n ".",\"!?):;] BW [\n ] %{ /* ** jethro v. 1.00 06/10/93 ** Duane Paulson "dap" ** Hillbilly text filter. Compile with lex, then C. ** syntax will be: ** jethro output_file. ** Public domain. Use at your own risk. Y'all come back now, heah? */ /************************************************************************* REVISION LOG when ver who change -------- ---- --- ----------------------------------------------------- 06/10/93 1.00 dap Initial release. 8.May.94 1.10 beg Fixed for HP-UX *************************************************************************/ #define PUTLAST unput(*(yytext+strlen(yytext)-1)); #define SUB(A) fprintf(yyout, "%c%s", *A|(*yytext&32), A+1); #define SSUB(A) fprintf(yyout, "%c%c%s", *yytext, *A|(*(yytext+1)&32), A+1); #define SESUB(A) fprintf(yyout, "%c%c%s", *yytext, *A|(*(yytext+1)&32), A+1); PUTLAST; #define ESUB(A) fprintf(yyout, "%c%s", *A|(*yytext&32), A+1); PUTLAST; #include char WhAt[]="@(#)Duane Paulson's hillbilly text filter. (jethro)\n@(#)$Header: jethro.l,v 1.1 94/05/08 23:41:58 bgriffin Final $" ; %} %% {SW}[Gg]reetings{EW} | {SW}[Hh]i{EW} | {SW}[Hh]ello{EW} SESUB("Howdy"); {SW}[Bb]ye{EW} | {SW}[Gg]oodbye{EW} SESUB("Y'all come back now, heah?"); {SW}[Hh]ear{EW} SESUB("Heah"); {SW}[Cc]ar{EW} | {SW}[Aa]uto{EW} | {SW}[Rr]elax{EW} SESUB("Set a spell -- put yore feet up"); {SW}[Aa]utomobile{EW} SESUB("Gasoline buggy"); [Ss]wimming{BW}pool SUB("Cement pond"); [Pp]ool{BW}table SUB("Fancy eatin table"); [Pp]ool{BW}cue | [Cc]ue{BW}stick SUB("Fancy pot passer"); {SW}[Bb][r]?oil{EW} | {SW}[Bb]ake{EW} | {SW}[Ff]ry{EW} | {SW}[Ss]aute{EW} | {SW}[Cc]ook{EW} SESUB("Whomp up"); {SW}[Bb][r]?oiling{EW} | {SW}[Bb]akeing{EW} | {SW}[Ff]rying{EW} | {SW}[Ss]auteing{EW} | {SW}[Cc]ooking{EW} SESUB("Whompin up"); {SW}[Bb][r]?oiled{EW} | {SW}[Bb]aked{EW} | {SW}[Ff]ryed{EW} | {SW}[Ss]auted{EW} | {SW}[Cc]ooked{EW} SESUB("Done whomped up"); {SW}[Bb][r]?oils{EW} | {SW}[Bb]akes{EW} | {SW}[Ff]rys{EW} | {SW}[Ss]autes{EW} | {SW}[Cc]ooks{EW} SESUB("Whomps up"); {SW}[Gg]roceries{EW} | {SW}[Ff]ood{EW} SESUB("Vittles"); [Ss]alad SUB("Slaw"); [Vv]egetable SUB("Green"); [Pp]otato SUB("Tater"); {SW}[Tt]omato SSUB("Tuhmater"); {SW}[Rr]hubarb{EW} SESUB("Pie plant"); {SW}[Ll]iquor{EW} | {SW}[Ww]hisk[e]?y{EW} | {SW}[Ss]cotch{EW} | {SW}[Bb]ourbon{EW} | {SW}[Gg]in{EW} | {SW}[Vv]odka{EW} | {SW}[Tt]equila{EW} | {SW}[Ll]iqueur{EW} SESUB("Rheumatiz medcin"); {SW}[Bb]ooze{EW} SESUB("Corn likker"); {SW}[Cc]ocktail{EW} | {SW}[Mm]ixed{BW}drink{EW} SESUB("Waste of good likker"); {SW}[Bb]ar{EW} SESUB("Dance hall"); {SW}[Bb]ars{EW} SESUB("Dance halls"); {SW}[Ss]aloon | {SW}[Cc]ocktail{BW}lounge SESUB("Dance hall"); {SW}[Ww]hore | {SW}[Pp]rostitute | {SW}[Ss]lut SSUB("Dance hall girl"); {SW}[Ss]ecret{BW}agent{EW} | {SW}[Ss]py{EW} | {SW}007{EW} SESUB("Double nought spy"); {SW}[Zz]ero{EW} SESUB("Nought"); {SW}[Pp]ants{EW} SESUB("Trousers"); {SW}[Jj]eans{EW} | {SW}[Dd]ungarees{EW} | {SW}[Ll]evi[']?s{EW} SESUB("Overhalls"); {SW}[Ss]hoe SSUB("High-button shoe"); {SW}[Jj]acket SSUB("Coat"); {SW}[Ss]hotgun SSUB("Fowlin piece"); {SW}[Rr]evolver | {SW}[Gg]un SSUB("Shootin iron"); {SW}[Rr]ifle SSUB("Ozark longrifle"); {SW}[Ll]ibrar[yi] SSUB("Liberry"); [Ww]ash SUB("Warsh"); [Ff]amily SUB("Fambly"); [Ff]ry{BW}pan | [Ff]rying{BW}pan | [Ss]aute{BW}pan SUB("Skillet"); {SW}[Aa]nimal SSUB("Critter"); {SW}FBI{EW} | {SW}F.B.I.{EW} | {SW}CIA{EW} | {SW}C.I.A.{EW} | {SW}ATF{EW} | {SW}A.T.F.{EW} | {SW}IRS{EW} | {SW}I.R.S.{EW} | {SW}SS{EW} | {SW}S.S.{EW} | {SW}[Ss]elective{BW}[Ss]ervice{EW} | {SW}[Ss]elective{BW}[Ss]ervice{BW}[Ss]ystem{EW} | {SW}[Ss]ecret{BW}[Ss]ervice{EW} SESUB("Revanooers"); {SW}[Pp]olice | {SW}[Pp]oliceman | {SW}[Ss]heriff | {SW}[Dd]eputy | {SW}[Dd]eputy{BW}[Ss]heriff | {SW}[Mm]arshall | {SW}[Dd]eputy{BW}[Mm]arshall | {SW}[Pp]ark{BW}[Rr]anger | {SW}[Tt]exas{BW}[Rr]anger | {SW}[Hh]ighway{BW}[Pp]atrol SSUB("Constable"); {SW}[Mm]other | {SW}[Mm][ao]mm[ay]? | {SW}[Mm]ommie | {SW}[Mm]om SSUB("Maw"); {SW}[Mm]a{EW} SESUB("Maw"); {SW}[Ff]ather SSUB("Paw"); {SW}[Dd]ad{EW} | {SW}[Dd]addy | {SW}[Pp]a{EW} | {SW}[Pp][ao]p{EW} | {SW}[Pp][ao]pp[ay]?{EW} SESUB("Paw"); {SW}[Gg]randmother{EW} | {SW}[Gg]randma[w]?{EW} SESUB("Granny"); {SW}[Gg]randfather{EW} | {SW}[Gg]ran[d]{1,2}ad[d]?[y]?{EW} | {SW}[Gg]randpop{EW} | {SW}[Gg]randpa[w]?{EW} SESUB("Grampy"); {SW}[Mm]y{EW} SESUB("Mah"); {SW}them{EW} SESUB("em"); [Dd]og SUB("Dawg"); [Ll]awyer | [Ll]egal{BW}counc[ei]l | [Ll]egal{BW}councillor | [Aa]ttorney | [Aa]ttorney{BW}[Aa]t{BW}[Ll]aw SUB("City slicker"); {SW}[Tt]han{EW} SESUB("Then"); [Cc]haracterize SUB("Show"); {SW}[Vv]ery{EW} | {SW}[Ee]xtremely{EW} | {SW}[Rr]eally{EW} | {SW}[Rr]eal{EW} SESUB("Right"); {SW}[Hh]aven't{EW} | {SW}[Ii]sn't{EW} | {SW}[Aa]ren't{EW} SESUB("Aint"); {SW}[Ss]aid{EW} | {SW}[Ss]ays{EW} SESUB("Sez"); {SW}[Aa]re{EW} SESUB("Is"); {SW}[Ss]hould{EW} SESUB("Ortta"); {SW}[Pp]erhaps{EW} | {SW}[Mm]aybe{EW} SESUB("Mebbe"); {SW}[Ss]ick{EW} SESUB("Ailin'"); {SW}I'm{BW}not{EW} SESUB("I aint"); {SW}[Ss]cared{EW} SESUB("A-skeert"); {SW}[Ss]care SSUB("Skeer"); {SW}[Hh]ave{EW} SESUB("Got"); {SW}[Pp]ossess{EW} SESUB("Have"); {SW}[Hh]elp SSUB("Hep"); {SW}[Tt]ired{EW} SESUB("Tuckered out"); {SW}[Cc]ompletely{EW} SESUB("Plumb"); {SW}[Dd]runk{EW} SESUB("A mite woozy"); {SW}[Yy]es{EW} SESUB("Yep"); {SW}[Nn]o{EW} SESUB("Nope"); {SW}[Ii]t{BW}is{EW} SESUB("Tis"); {SW}[Aa]t{BW}all{EW} *(yytext+1)=(char)'A'; SESUB("A tall"); {SW}[Aa]m{EW} | {SW}[Ww]as{EW} | {SW}[Ww]ere{EW} SESUB("Wuz"); {SW}[Ww]asn't{EW} SESUB("Wasunt"); [Ee]very SUB("Ever"); {SW}[Ww]ant/s SSUB("Is after"); {SW}[Ww]anted{EW} SESUB("Was after"); {SW}[Ww]anting{EW} SESUB("Hankering after"); {SW}[Dd]oesn't{EW} | {SW}[Dd]on't{EW} SESUB("Dasent"); {SW}[Yy]ou'll{EW} SESUB("Y'all will"); {SW}[Yy]our SSUB("Yore"); {SW}[Mm]ore{EW} SESUB("Mo"); tial SUB("shul"); cious SUB("shus"); ious SUB("yus"); tion SUB("shun"); {SW}[Cc]an{EW} SESUB("C'n"); {SW}[Yy]ou{EW} SESUB("Y'all"); {SW}[Ff]or{EW} SESUB("Fer"); {SW}[Tt]he{EW} SESUB("Duh"); ing SUB("in"); {SW}[Tt]oo{EW} SESUB("Besides"); {SW}[Tt]o{EW} SESUB("Tuh"); {SW}[Aa][n]?{EW} SESUB("Ah"); {SW}[Oo]ur{EW} | {SW}[Oo]r{EW} SESUB("Ore"); {SW}[Oo]f{EW} SESUB("Uv"); {SW}I{EW} SESUB("Ah"); {SW}I'm{EW} SESUB("Ahm a"); {SW}I'll{EW} SESUB("Ahl"); {SW}I'd{EW} SESUB("Ah wood"); 'nt *(yytext)=(char)'u'; SUB("unt"); 're SUB(" is"); 've SUB(" done"); eed{EW} ECHO; ed{EW} ESUB("d"); {SW}[Oo]wn{EW} | {SW}[Tt]own{EW} | {SW}[Dd]own{EW} | {SW}[Gg]own{EW} | {SW}[Bb]rown{EW} ECHO; wn{EW} ESUB("ed"); {SW}[Bb]elow{EW} | {SW}[Kk]now{EW} | {SW}[Tt]hrow{EW} | {SW}[Gg]row{EW} | {SW}[Hh]ow{EW} | {SW}[Nn]ow{EW} | {SW}[Bb]row{EW} | {SW}[Ss]how{EW} ECHO; ow{EW} ESUB("er"); re{EW} | er{EW} ESUB("uh"); {SW}[Hh]er{EW} ECHO; ! SUB(". Ye DAWGies!!!"); %% filters/spammer0000755000175000017500000001343412633476041013515 0ustar mariusmarius#!/usr/bin/perl # Talk like a spammer. Copyright 2002 by Joey Hess # Licensed under the GPL. # # Doesn't always generate proper engrish, but then neither do # spammers. sub c { return $_[rand @_]; } sub line_of_yelling { my @lines=split(/\n/, shift); my $n=rand @lines; $lines[$n] = uc($lines[$n]); return join("\n", @lines); } sub for_free { return c(qw(100% completely totally absolutely))." ".c(qw(f F))."ree"; } my $hits=0; if (rand > 0.75) { $hits++; $spam .= "Dear Friend, "; } elsif (rand > 0.9) { $hits++; $spam .= "Below is the result of your feedback form".c(qw{: . ..})."\n"; } elsif (rand > 0.75) { $hits++; $spam .= "This message is not spam!\n"; } while (<>) { # Try to trigger spam trappers. Keep count of the number of unique # ones triggered. @results = ( s/^(Subject:\s+.*)/$1. ' ' x (rand(20) + 40) . rand(1000000)/eig, s/free\b/for_free()/eig, s/(email|message|e-mail|mail)\b/$1 (sent in compliance with regulations)/i, s/(join|register|order|apply)/$1 today/ig, s/money/big bucks/i, s/check\b/check or money order/i, s/(amazing|atonishing|neat|interesting)/AMAZING/ig, s/guarantee\b/GUARANTEE/ig, s/(profits|money)/PROFITS/ig, s/(no questions asked|quiet|confidential|secret)\b/NO QUESTIONS ASKED/ig, s/refund\b/full refund/i, s/free\b/FREE/ig, s/\b(full|complete|fully)\b/100% GUARANTEED/ig, s/(spam|UCE)\b/c(qw(bulk direct mass))." email"/eig, s/spammer/businessman/ig, s/(call|phone|contact)\b/CALL NOW/ig, s/business\b/online business/ig, s/online\b/online business opportunities/ig, s/number\b/social security number/ig, s/addresses\b/addresses on cd/ig, s/cdrom\b/addresses on cd/ig, s/click\b/click here/ig, s/viagra/c('VIAGRA', 'natural viagra', 'herbal viagra')/eig, s/\btraffic\b/rand > 0.6 ? 'more web traffic' : 'traffic'/eig, s/targeted/targeted traffic/ig, s/limited/LIMITED TIME OFFER/ig, s/buy\b/buy direct/ig, s/profit\b/PURE PROFIT/ig, s/opportunity/once in a lifetime opportunity/ig, s/stock\b/STOCK PICK/ig, s/access\b/INSTANT ACCESS/ig, s/(diploma|credential)s?/college diploma$a/ig, s/(penis|breast)/larger $1/ig, s/\b(work|job)\b/home employment/ig, s/experience\b/no experience needed!/ig, s/printer\b/printer (toner cartridge)/ig, s/(income|money|savings?)\b/you income/ig, s/(amazing|amazed|atonished|interesting)/be amazed/ig, s/(\$\d+\.?\d*)/for only $1!/ig, s/natural/completly natural/ig, s/obligation/no obligation/ig, s/vacation\b/c(qw(dream special free))." vacation"/eig, s/sign up\b/sign up today/ig, s/cell (phone)?\b/free cell phone/ig, s/(offer|trial|membership|website|quote|installation|sample|dvd|preview|leads)\b/free $1/ig, s/\bvalue/outstanding value/ig, s/shipping/shopping spree/ig, s/winning/WINNING/ig, s/winner\b/WINNER/ig, s/promotion\b/special promotion/ig, s/password\b/free password/ig, s/\bcash\b/extra cash/ig, s/cancel\b/cancel at any time/ig, s/\bearn\b/earn up to/ig, s/(movies|pics|photos|videos)/c(qw(hundreds thousands millions tons))." of $1"/eig, s/\bporn\b/free porn/ig, s/\blegal\b/c(qw(absolutely perfectly totall 100%))." legal"/eig, s/(drugs|medications|pharmacy)/online $1/ig, s/asset/hidden asset/ig, s/\bsave\b/save thousands/ig, s/partner/marketing partner/ig, s/unlimited/UNLIMITED/ig, s/\bprice\b/low price/ig, s/galleries\b/huge galleries/ig, # Convert phone numbers to 800 numbers. s/(?:(?:1-)?[0-9]{3}-)?([0-9]{3}-[0-9]{4})/"1-".c(800,888)."-$1"/eg, # de-http:// urls s/http:\/\///ig, ); # Merge result table into an overall results table that counts each # item at most once. for ($x=0; $x < $#results; $x++) { if ($results[$x]) { $overallresults[$x]=1; } } # Cute things that don't cause real hits. s/\.(com|org|net|edu)\b/".".c(qw(info biz name))/eig; s/([Ee])nglish/${1}ngrish/g if rand > 0.66; $spam .= $_; } $hits += $_ foreach @overallresults; if (rand > 0.5) { # random line breaks make spam look # more professional # or is it just written in Notepad? $spam =~ s/ /rand > 0.95 ? "\n" : " "/eg; } elsif (rand > 0.75) { # I write my spam in MS WORD! $spam =~ s/\n/ /g; } else { $spam=line_of_yelling($spam); } if (rand > 0.8 || $hits < 5) { $spam .= "\nThis is a ".c(qw(one 1))." time ".c(qw(email e-mail offer)).c(qw(! .)); $hits++; } if (rand > 0.7 || $hits < 5) { $spam .= "\n" . c('-' x 78, '~' x 70, '---', '', '', '', "\n\n\n\n") . "\n" . c('To remove your address from ', 'To be removed from', 'To get off from', 'To unsubscribe from', 'To receive no further notices on', 'If you did not opt in for', 'To be removed from future mailings to') . " " . c('this mailing list', 'these mails') . " " . c('please ', '') . c('reply', 'send an email', 'write back') . " " . c('with a subject of', 'and put in the subject the word') . " " . c("REMOVE", '"remove"') . c(qw(! . .)) . "\n"; $hits++; } # Desperate to make it look like a spam now, I insert arbitrary # junk. while ($hits < 5) { if (rand > 0.66) { $spam=line_of_yelling($spam); $hits++; } elsif (rand > 0.5) { # Insert a spam phrase after the end of a sentence. @spam_phrases = ('FREE CONSULATATION', 'INSTANT ACCESS', 'PURE PROFIT', 'STOCK PICK', 'VIAGRA', 'WINNER', 'WINNING', 'LIMITED TIME OFFER', 'extra cash', 'CALL NOW', 'once in a lifetime opportunity', 'cancel at any time', 'no experience needed', 'no obligation', 'save millions', 'be amazed', for_free()); $hits += $spam =~ s/\.\s+([A-Z])/". ".ucfirst(c(@spam_phrases)). "! $1"/es; } elsif (rand > 0.75) { # large hexadecimal block my @hex = ('A'..'F', 0..9); for (1..70 + rand(9)) { $spam .= $hex[rand @hex]; } $spam .= "\n"; $hits++; } elsif (rand > 0.75) { $spam .= c("SSPLTM ", "{%RAND%} "); $hits++; } } $spam =~ s/\n/\r\n/g; print "$spam\n"; filters/upside-down0000755000175000017500000000025012633476041014277 0ustar mariusmarius#!/usr/bin/perl -pl- $_=reverse lc$_;s@"@''@g;y/[]{A-R}<>()a-y1-9,!.?`'/][} Joey Hess {><)(eq)paj6y!fk7wuodbjsfn^mxhl2Eh59L86`i'%,/;s@k@>|@g# joey@kitenet.net filters/LOLCAT0000755000175000017500000000315612633476041013027 0ustar mariusmarius#!/usr/bin/perl -p # lolcatz filtur # Copyright 2013 by Joey Hess under the terms of the GNU GPL. # an array, not a hash. because order is important @trans_table=( 'can i' => 'i can', '\bi\'ve' => 'i', '\ba\s+' => '', # nuke 'a' 'cheese' => 'cheez', '\brock\b' => 'rawk', 'ese\b' => 'ees', 's\'s\b' => 's', '\'s\b' => 's', 'er\b' => 'r', 'ture\b' => 'chur', 'day' => 'dai', '\bok\b' => 'k', '\boks\b' => 'ks', 'boy' => 'boi', 'tion' => 'shun', 'ight' => 'ite', 'innocent' => 'innozent', 'ph' => 'f', 'es' => 'ez', 'ed\b' => 'd', 'ns' => 'nz', 'ks' => 'kz', 'ds' => 'dz', 'se' => 'ze', 'zs' => 's', 'sz' => 'z', 'ss' => 's', 'cc' => 'cs', 'ck' => 'k', 'oa' => 'o', '\bcat' => 'kat', 'ive\b' => 'iv', 'ake' => 'aek', 'ed\b' => 'd', 'ing\b' => 'in', 'sion' => 'shun', '\bam\b' => 'iz', '\bhave\b' => 'has', '\bwho' => 'hoo', '\bwake\b' => 'waek', '\bone\b' => '1', '\btwo\b' => '2', '\bto\b' => '2', '\btoo\b' => '2', '\bthree\b' => '3', '\bfour\b' => '4', '\bfor\b' => '4', '\bfore\b' => '4', '\bfive\b' => '5', '\bsix\b' => '6', '\bseven\b' => '7', '\beight\b' => '8', '\bnine\b' => '9', '\bten\b' => '10', 'god' => 'ceilin cat', 'jezus' => 'jebus', 'kitty' => 'kitteh', 'saturdai' => 'katurdai', 'allah' => 'invisible man', 'delicious' => 'delishus', '\bdoctor\b' => 'docta', '\bdr\b' => 'docta', '\bgay\b' => 'ghey', '\bgood\b' => 'gud', '\bever' => 'evr', '\bpage\b' => 'paeg', 'cheezburgr' => 'cheezburger', # fix up to canonical form ); y/A-Z/a-z/; while (@trans_table) { $key=shift @trans_table; $value=shift @trans_table; s/$key/$value/g; } s/es/ez/g; y/a-z/A-Z/; filters/Makefile0000644000175000017500000000210512633476041013554 0ustar mariusmariusLEX = flex BUILD = jethro kraut cockney jive nyc ken ky00te newspeak nethackify scramble OTHER = eleet b1ff chef jibberish upside-down rasterman studly fudd \ censor spammer uniencode pirate kenny scottish fanboy LOLCAT ifndef CFLAGS CFLAGS = -O2 endif CFLAGS += $(CPPFLAGS) export CFLAGS INSTALL_PROGRAM = install # DEB_BUILD_OPTIONS suport, to control binary stripping. ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif all: $(OTHER) $(BUILD) install: $(BUILD) $(OTHER) install -d $(DESTDIR)/usr/games $(INSTALL_PROGRAM) $(BUILD) $(DESTDIR)/usr/games/ install $(OTHER) $(DESTDIR)/usr/games/ install -d $(DESTDIR)/usr/share/man/man6 install -m 0644 filters.6 $(DESTDIR)/usr/share/man/man6 cd $(DESTDIR)/usr/share/man/man6 && \ $(foreach prog,$(BUILD) $(OTHER),ln -s filters.6 $(prog).6;) clean: $(RM) -f core *.o *~ $(BUILD) cd ky00te.dir && make clean .SUFFIXES: .l .l: $(RM) $*.c $(LEX) -t $< > $*.c $(CC) -o $@ $*.c $(CFLAGS) -lfl $(LDFLAGS) $(RM) $*.c .SUFFIXES: .dir .dir: cd $<; make nethackify: nethackify.c scramble: scramble.c filters/fanboy0000755000175000017500000000254612633476041013331 0ustar mariusmarius#!/usr/bin/perl my %topics=( git => [qw(linus git linux rebase rebased merge merged cherry-pick branch branched branches git-* push pull pushed pulled)], ubuntu => [qw(Mark MOTU PPA ubuntu debian rock rocks rule dapper feisty fiesty gutsy hoary hardy edgy universe launchpad gnome desktop naked sabdfl community)], debian => [qw(Debian rules rule ian murdock upstream release stable unstable testing apt apt-get deb developer NM RM NMU FTBFS BTS ITP DFSG non-free free d.o)], ); if (! @ARGV) { @ARGV=@{$topics{git}}; } elsif (@ARGV == 1 && exists $topics{lc $ARGV[0]}) { @ARGV=@{$topics{lc $ARGV[0]}}; } my $total_awesomeness_dude=join("|", map { $_=quotemeta($_); s/\\\*/.*/g; s/\\\?/./g; qr/\b$_\b/; } reverse sort @ARGV); my $len=0; my $indent=""; my $indent_printed=0; while () { if (/$total_awesomeness_dude/i) { if (/^([>|][>|\s]*)/) { if ($indent ne $1) { print "\n" if $len; $len=0; $indent=$1; $indent_printed=0; } } else { if (length $indent && $indent_printed) { print "\n"; $len=0; } $indent=""; $indent_printed=0; } while(/(($total_awesomeness_dude)[.?!]*)/ig) { $len+=length($1)+1; if ($len > 70) { print "\n"; $len=0; } if (length $indent && ! $indent_printed) { print $indent; $indent_printed=1; } print $1." "; } } } print "\n" if $len; filters/GPL0000644000175000017500000004311012633476041012462 0ustar mariusmarius GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. filters/ken.l0000644000175000017500000001706012633476041013054 0ustar mariusmarius%{ /* * ken: * will turn English into Cockney, featuring (dubious) rhyming slang for a lot * of computer terminology. * * Written by Stephen K Mulrine * Make copies if you want etc.etc. * * Contacted author in June 2001, asked him to clarify the license, he replied * with some improvements and placed the program in the public domain. * -- Edward Betts Mon, 11 Jun 2001 12:04:29 +0100 * * ken is named after Ken the Chirpy Cockney Character from the Viz Comic (tm), * who speaks somewhat like that. */ %} %e 3000 %p 6000 %n 1000 %k 500 %a 4000 %o 2000 BW [ ] EW [ .,;!?] %{ char buf[128]; %} %% stairs printf("apples and pears"); Downstairs printf("Down the apples and pears"); downstairs printf("down the apples and pears"); Upstairs printf("Up the apples and pears"); upstairs printf("up the apples and pears"); [Mm]outh printf("North and South"); [Ff]ace printf("Boat Race"); [Tt]rouble printf("Barney Rubble"); wife { switch(rand()%2) { case 0: printf("trouble and strife"); break; case 1: printf("ole lady"); break; } } Road printf("Frog and Toad"); " road" printf(" frog and toad"); "pub " printf("rub-a-dub "); " bar " printf(" boozer "); " husband" printf(" ole man"); Party printf("Knees-up"); party printf("knees-up"); Parties printf("Knees-ups"); parties printf("knees-ups"); My printf("Me"); " my" printf(" me"); Your printf("Yer"); your printf("yer"); "You are " printf("Yer "); "you are " printf("yer "); You printf("Yer"); you printf("yer"); Those printf("Them"); those printf("them"); " those" printf(" them"); "(those" printf("(them"); "The " { switch(rand()%5) { case 0: printf("The bleedin' "); break; default: ECHO; break; } } "The" ECHO; " the " { switch(rand()%5) { case 0: printf(" the bleedin' "); break; default: ECHO; break; } } [" "(]the ECHO; "the " { switch(rand()%5) { case 0: printf(" the bleedin' "); break; default: ECHO; break; } } [Tt]his ECHO; [" "(]this ECHO; [Tt]hat ECHO; [" "(]that ECHO; Thus printf("So"); " thus" printf(" so"); "(thus" printf("(so"); "thus" printf("so"); [Tt]han ECHO; [" "(]than ECHO; Who ECHO; who ECHO; " old " printf(" ole "); " to " printf(" ter "); "Aren't you " printf("Aintcha "); "aren't you " printf("aintcha "); "Aren't" printf("Ain't"); "aren't" printf("ain't"); "Isn't" printf("Ain't"); "isn't" printf("ain't"); "Are not " printf("Ain't"); "are not " printf("ain't "); "Is not " printf("Ain't "); " is not " printf(" ain't "); "What is th" printf("Woss"); "what is th" printf("woss"); "What are you " printf("Wotcher "); "what are you " printf("wotcher "); "What you are" printf("Wotcher"); "what you are" printf("wotcher"); "What you're" printf("Wotcher"); "what you're" printf("wotcher"); "What are your" printf("Wotcher"); "what are your" printf("wotcher"); "What do you " printf("Wotcher "); "what do you " printf("wotcher "); "What do your" printf("Wotcher"); "what do your" printf("wotcher"); " "H[aeu]llo printf(" Wotcher"); " "h[aeu]llo printf(" wotcher"); What printf("Wot"); what printf("wot"); Were printf("Was"); were printf("was"); Bother printf("Ars"); bother printf("ars"); Mother printf("Muvver"); Other printf("Uvver"); other printf("uvver"); Father printf("Favver"); father printf("favver"); Rather printf("Ravver"); rather printf("ravver"); Weather printf("Wevver"); weather printf("wevver"); Leather printf("Levver"); leather printf("levver"); Wither printf("Wivver"); wither printf("wivver"); Either printf("Eever"); either printf("eever"); With printf("Wiv"); with printf("wiv"); Anything printf("Anyfink"); anything printf("anyfink"); Something printf("Sumfink"); something printf("sumfink"); Nothing printf("Nuffink"); nothing printf("nuffink"); guitars printf("spoons"); guitar printf("spoons"); drums printf("spoons"); drum printf("spoons"); trumpets printf("spoons"); trumpet printf("spoons"); violins printf("spoons"); violin printf("spoons"); clarinets printf("spoons"); clarinet printf("spoons"); trombones printf("spoons"); trombone printf("spoons"); oboes printf("spoons"); oboe printf("spoons"); flutes printf("spoons"); flute printf("spoons"); tubas printf("spoons"); tuba printf("spoons"); Data printf("Info"); data printf("info"); Directory printf("Lockup"); directory printf("lockup"); Directories printf("Lockups"); directories printf("lockups"); [Pp]rocess { switch(rand()%2) { case 0: printf("Queen Bess"); break; case 1: printf("Rudolf 'Ess"); break; } } [Cc]omputer printf("French Tutor"); [Bb]yte printf("Jimmy White"); [Ff]iles printf("Nobby Stiles"); [Ff]ile printf("Royal Mile"); [Ll]anguage printf("'Am Sandwich"); [Zz]ero printf("Emperor Nero"); [Jj]ob printf("Uncle Bob"); [Ss]hell printf("Bow Bell"); [Ss]ave printf("Chas'n'Dave"); [Ll]oad printf("Old Kent Road"); [Mm]ouse printf("Doll's 'Ouse"); [Bb]uffer printf("Sausage Stuffer"); [Kk]eyboard printf("Henry Ford"); [Mm]anual printf("Cocker Spaniel"); [Ss]creen printf("James Dean"); [Pp]rinter printf("'Arold Pinter"); [Pp]lotter printf("Pansy Potter"); [Cc]ompiler printf("Martin Tyler"); [Ss]tring printf("Emperor Ming"); [Bb]rain printf("Michael Caine"); [Pp][Aa][Ss][Cc][Aa][Ll] { switch(rand()%2) { case 0: printf("Pall Mall"); break; case 1: printf("Roald Dahl"); break; } } [Aa][Ll][Gg][Oo][Ll] printf("Johnny Ball"); [Ff][Oo][Rr][Tt][Rr][Aa][Nn] printf("Manfred Mann"); [Cc][Oo][Bb][Oo][Ll] printf("Albert Hall"); [Jj]ava printf("Wot a palavah"); W[aA][pP] printf("Pony and trap"); " wap" printf(" pony and trap"); Stopped printf("'Ad the mockers put on"); stopped printf("'ad the mockers put on"); Stopping printf("Putting the mockers on"); stopping printf("putting the mockers on"); stops printf("puts the mockers on"); stop printf("put the mockers on"); STOP printf("Put The Mockers On"); [Ll]ondoner printf("Cockney"); friend { switch(rand()%3) { case 0: printf("mucker"); break; case 1: printf("mate"); break; case 2: printf("china"); break; } } "a h" printf("an '"); "A h" printf("An '"); " h" printf(" '"); " H" printf(" '"); " C-" printf(" Bruce Lee-"); " C " { switch(rand()%4) { case 0: printf(" Bruce Lee "); break; case 1: printf(" Circus Flea "); break; case 2: printf(" Bumble Bee "); break; case 3: printf(" Door Key "); break; } } " C." printf(" Circus Flea."); Th printf("F"); Wh printf("W"); wh printf("w"); aw printf("or"); " "[BbKkMmPpRrSsWw]ing ECHO; " "[Bb]ring ECHO; " "[Ss]ting ECHO; " "[Ss]wing ECHO; " "[CcFfSs]ling ECHO; " Thing" printf(" Fing"); " thing" printf(" fing"); "ing " printf("in' "); ". " { switch(rand()%32) { case 0: printf(". I'll get out me spoons. "); break; case 1: printf(". Yer can't 'ave a knees-up wivout a joanna. "); break; case 2: printf(". Cor blimey guv, would I lie to you. "); break; case 3: printf(". I'll make us all a nice cup of tea. "); break; default: ECHO; break; } } "? " { switch(rand()%3) { case 0: printf(", mate? "); break; case 1: printf(", guv? "); break; case 2: printf(", squire? "); break; } } "! " { switch(rand()%6) { case 0: printf(", cor blimey! "); break; case 1: printf("! Struth! "); break; case 2: printf(", guv! "); break; case 3: printf("! Honest guv! "); break; case 4: printf(", mate! "); break; case 5: ECHO; break; } } . printf("%s", yytext); \n printf("\n"); %%