/* GNU Talkfilters Copyright (C) 1998-2003 Free Software Foundation, Inc. This file is part of GNU Talkfilters GNU Talkfilters 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, or (at your option) any later version. This software is distributed in the hope that it will be amusing, 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 software; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ %option prefix="cockney_yy" %option outfile="lex.yy.c" %option noyywrap %option nowarn /* * 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 %{ #include "common.h" #include "talkfilters.h" #define YY_DECL int yylex(gtf_databuf_t *buf) %} WB [\n\t ] WC [A-Za-z'0-9] NW [^A-Za-z'0-9] EOT \4 %s NIW INW %% { \<(\/)?[A-Za-z][^\>]*\> gtf_echo(); // don't damage HTML tags [Tt]alk/{NW} gtf_puts_case("go on"); [Tt]alked/{NW} gtf_puts_case("went on"); [Tt]alking/{NW} gtf_puts_case("goin' on"); [Aa]s{WB}soon/{NW} gtf_puts_case("soon"); [Gg]oing{WB}to/{NW} gtf_puts_case("gonna"); [Aa]{WB}try/{NW} gtf_puts_case("a go"); [Oo][Kk]"." | [Ff]ine/{NW} gtf_puts_case("not so bad"); Take/{NW} gtf_puts_case("'Ave"); take/{NW} gtf_puts_case("'ave"); Take{WB}a{WB}look/{NW} | Look/{NW} gtf_puts_case("'Ave a look"); take{WB}a{WB}look/{NW} | look/{NW} gtf_puts_case("'ave a look"); [Hh]onestly/{NW} | [Ss]eriously/{NW} gtf_puts_case("straight up"); seam/{NW} gtf_puts_case("join"); [Gg]ood/{NW} { if(gtf_random(3) == 0) gtf_puts_case("right good"); else gtf_echo(); } [Ll]end{WB}me/{NW} gtf_puts_case("borrow us"); [Ll]end/{NW} gtf_puts_case("borrow"); [Gg]ive{WB}me/{NW} gtf_puts_case("give us"); [Gg]ive{WB}up/{NW} gtf_puts_case("give over"); [Pp]ut{WB}it/{NW} gtf_puts_case("stick it"); [Pp]ut{WB}those/{NW} gtf_puts_case("stick those"); [Pp]ut{WB}them/{NW} gtf_puts_case("stick 'em"); [Dd]iscussion gtf_puts_case("chat"); BEGIN(INW); [Tt]ry({WB}it)?/{NW} gtf_puts_case("give it a go"); [Oo]ur/{NW} gtf_puts_case("us"); [Ss]aw/{NW} gtf_puts_case("seen"); [Ss]ee/{NW} gtf_puts_case("spot"); [Ss]ees/{NW} gtf_puts_case("spots"); [Aa]{WB}lot/{NW} gtf_puts_case("a bit"); [Ll]ots{WB}of/{NW} gtf_puts_case("a bit a'"); [Aa]nyway/{NW} gtf_puts_case("any road, so"); [Aa]nyhow/{NW} gtf_puts_case("any road"); Around/{NW} gtf_puts_case("'Round"); around/{NW} gtf_puts_case("'round"); [Pp]ants/{NW} gtf_puts_case("kegs"); [Cc]lothes/{NW} gtf_puts_case("kit"); [Ss]occer/{NW} | [Ff]ootball/{NW} gtf_puts_case("footie"); [Yy](ou{WB}|')all/{NW} gtf_puts_case("you lot"); [Nn]ude/{NW} gtf_puts_case("buff"); [Nn]aked/{NW} gtf_puts_case("stark bloody naked"); [Pp]laying({WB}around)?/{NW} | [Hh]aving{WB}fun/{NW} gtf_puts_case("messing"); [Cc]lassy/{NW} gtf_puts_case("posh"); [Gg]et/{NW} gtf_puts_case("cop"); [Gg]etting/{NW} gtf_puts_case("copping"); [Gg]et{WB}me/{NW} gtf_puts_case("get us"); [Dd]own/{NW} gtf_puts_case("dahn"); [Dd]ownstairs/{NW} gtf_puts_case("down the apples and pears"); [Ee]yes/{NW} gtf_puts_case("mince pies"); [Pp]erhaps/{NW} gtf_puts_case("peraps"); [Ss]tairs/{NW} gtf_puts_case("apples and pears"); [Tt]own/{NW} gtf_puts_case("tahn"); [Uu]pstairs/{NW} gtf_puts_case("up the apples and pears"); [Pp]olice/{NW} | [Cc]ops/{NW} | [Pp]olice(wo)?men/{NW} gtf_puts_case("bobbies"); [Cc]op/{NW} | [Pp]olice(wo)?man/{NW} gtf_puts_case("bobby"); [Ss]uit/{NW} gtf_puts_case("whistle and flute"); [Pp]rofessional | [Ee]xpert gtf_puts_case("ace"); BEGIN(INW); [Ll]ove gtf_puts_case("luv"); BEGIN(INW); [Cc]lean gtf_puts_case("tidy"); BEGIN(INW); [Mm]outh/{NW} gtf_puts_case("North and South"); [Ff]ace/{NW} gtf_puts_case("boat race"); [Tt]rouble/{NW} gtf_puts_case("Barney Rubble"); [Ww]ife/{NW} { switch(gtf_random(2)) { case 0: gtf_puts_case("trouble and strife"); break; case 1: gtf_puts_case("ole lady"); break; } } [Rr]oad/{NW} gtf_puts_case("frog and toad"); [Pp]ub/{NW} gtf_puts_case("rub-a-dub"); [Pp]ubs/{NW} gtf_puts_case("rub-a-dubs"); [Bb]ar/{NW} gtf_puts_case("boozer"); [Bb]ars/{NW} gtf_puts_case("boozers"); [Hh]usband/{NW} gtf_puts_case("ole man"); [Pp]arty gtf_puts_case("knees-up"); [Pp]arties/{NW} gtf_puts_case("knees-ups"); [Mm]y/{NW} gtf_puts_case("me"); [Yy]ou/{NW} gtf_puts_case("yer"); [Yy]ou({WB}are|r)? gtf_puts_case("yor"); [Yy]ou({WB}a|')re/{NW} gtf_puts_case("yor"); [Tt]hose/{NW} gtf_puts_case("them"); [Tt]he/{NW} { switch(gtf_random(5)) { case 0: gtf_puts_case("the bleedin'"); break; case 1: gtf_puts_case("the bloody"); break; case 2: gtf_puts_case("the bloomin'"); break; case 3: gtf_puts_case("the chuffin'"); break; default: gtf_echo(); } } [Tt]his gtf_echo(); BEGIN(INW); [Tt]hat gtf_echo(); BEGIN(INW); [Tt]hus/{NW} | [Hh]ence/{NW} gtf_puts_case("so"); [Tt]han gtf_echo(); BEGIN(INW); [Ww]ho gtf_echo(); BEGIN(INW); old/{NW} gtf_puts_case("ole"); to/{NW} gtf_puts("ter"); [Ww]hat gtf_puts_case("wot"); BEGIN(INW); [Ww]as/{NW} gtf_puts_case("were"); [Aa]ren't{WB}you/{NW} gtf_puts_case("Aintcha "); [Aa]ren't/{NW} | [Aa]re{WB}not/{NW} | [Ii]s({WB}no|n')t/{NW} gtf_puts_case("Ain't"); [Ww]hat({WB}i|')s{WB}that/{NW} gtf_puts_case("wossat"); [Ww]hat({WB}i|')s/{NW} gtf_puts_case("woss"); [Ww]hat({WB}a|')re{WB}you(r)?/{NW} | [Ww]hat{WB}you({WB}a|')re/{NW} | [Ww]hat{WB}do{WB}you(r)?/{NW} gtf_puts_case("wotcher"); [Ww]atch{WB}it/{NW} gtf_puts_case("wotchit"); [Ii]({WB}a|')m/{NW} { switch(gtf_random(2)) { case 0: gtf_puts_case("I'm bloody well"); break; default: gtf_echo(); } } [Ww]hat{WB}is{WB}th gtf_puts_case("Woss"); BEGIN(INW); [Ww]hat{WB}you({WB}a|')re/{NW} gtf_puts_case("wotcher"); [Ww]hat{WB}(are|do){WB}you(r)? gtf_puts_case("wotcher"); H[aeu]llo/{NW} gtf_puts_case("'Allo"); h[aeu]llo/{NW} gtf_puts_case("'allo"); [Ww]hat gtf_puts_case("wot"); BEGIN(INW); [Ww]ere/{NW} gtf_puts_case("was"); [Bb]other gtf_puts_case("ars"); BEGIN(INW); [Bb]oys/{NW} gtf_puts_case("fellas"); [Mm]other gtf_puts_case("Muvver"); BEGIN(INW); [Mm]om gtf_puts_case("mum"); BEGIN(INW); [Aa]rrest | [Ss]teal | [Bb]ust gtf_puts_case("nick"); BEGIN(INW); [Ss]tole(n)?/{NW} | [Hh]andcuffed/{NW} gtf_puts_case("nicked"); [Hh]ell/{NW} gtf_puts_case("hell fire"); [Uu]neployed/{NW} gtf_puts_case("on dole"); [Rr]ude/{NW} | [Ss]assy/{NW} | [Ii]mpudent/{NW} gtf_puts_case("cheeky"); [Tt]elephone/{NW} | [Pp]hone/{NW} gtf_puts_case("dog and bone"); [Pp]erson gtf_puts_case("bloke"); BEGIN(INW); [Pp]eople gtf_puts_case("blokes"); BEGIN(INW); ([Aa]n{WB})?[Aa]merican/{NW} | [Yy]ank(ee)?/{NW} gtf_puts_case("a septic tank"); BEGIN(INW); [Oo]ld{WB}man/{NW} | [Gg]entleman/{NW} gtf_puts_case("geezer"); BEGIN(INW); [Oo]ld{WB}men/{NW} | [Gg]entlemen/{NW} gtf_puts_case("geezers"); BEGIN(INW); [Gg]uy gtf_puts_case("lad"); BEGIN(INW); [Ss]omeone/{NW} gtf_puts_case("some bloke"); [Ss]omebody/{NW} gtf_puts_case("some geezer"); [Oo]ther gtf_puts_case("uvver"); BEGIN(INW); [Aa]nother gtf_puts_case("aunuvver"); BEGIN(INW); [Hh]i/{NW} gtf_puts_case("oi"); [Ww]ow/{NW} | [Yy]ay/{NW} | [Yy]ahoo/{NW} gtf_puts_case("cor"); [Hh]oora(y|h)/{NW} | [Yy]eehaw/{NW} | [Gg]eez/{NW} | [Gg]osh/{NW} | [Gg]olly/{NW} gtf_puts_case("blimey"); [Hh]ey/{NW} { switch(gtf_random(2)) { case 0: gtf_puts_case("eh, up"); break; case 1: gtf_puts_case("oi"); break; } } [Cc]ow/{NW} gtf_puts_case("cah"); [Ss]tate{WB}of{WB}the{WB}art/{NW} gtf_puts_case("top o' the range"); [Ff]ather gtf_puts_case("favver"); BEGIN(INW); [Rr]ather/{NW} gtf_puts_case("ravver"); [Ww]eather gtf_puts_case("wevver"); BEGIN(INW); [Ll]eather/{NW} gtf_puts_case("Levver"); [Ww]ither/{NW} gtf_puts_case("wivver"); [Ee]ither/{NW} gtf_puts_case("eever"); [Ss]mart gtf_puts_case("keen"); BEGIN(INW); [Ww]ith gtf_puts_case("wiv"); BEGIN(INW); [Aa]nything/{NW} gtf_puts_case("anyfink"); [Ss]omething/{NW} gtf_puts_case("sumfink"); [Nn]othing/{NW} gtf_puts_case("nuffink"); [Ee]verything/{NW} gtf_puts_case("evryfink"); [Vv]ery/{NW} | [Rr]eally/{NW} gtf_puts_case("right"); [Bb]other/{NW} gtf_puts_case("bovver"); [Dd]umb gtf_puts_case("daft"); BEGIN(INW); [Cc]ool{WB}it/{NW} | [Cc]hill{WB}out/{NW} gtf_puts_case("don't get a benny on"); [Ii]mmoral | [Cc]rude gtf_puts_case("naughty"); BEGIN(INW); [Pp]rofanity/{NW} gtf_puts_case("naughty language"); [Ss]wear{WB}word gtf_puts_case("naughty word"); BEGIN(INW); [Gg]et{WB}over/{NW} gtf_puts_case("grow out"); [Gg]ot{WB}over/{NW} gtf_puts_case("grew out"); [Gg]otten{WB}over/{NW} gtf_puts_case("grown out"); [Ss]uppose/{NW} gtf_puts_case("s'pose"); [Kk]ind{WB}of/{NW} gtf_puts_case("sort of"); [Dd]oesn't/{NW} gtf_puts_case("don't"); [Gg]uitar(s)?/{NW} | [Dd]rum(s)?/{NW} | [Tt]rumpet(s)?/{NW} | [Vv]iolin(s)?/{NW} | [Cc]larinet(s)?/{NW} | [Tt]rombone(s)?/{NW} | [Oo]boe(s)?/{NW} | [Ff]lute(s)?/{NW} | [Tt]uba(s)?/{NW} gtf_puts_case("spoons"); [Pp]iano/{NW} gtf_puts_case("joanna"); [Dd]ata gtf_puts_case("Info"); BEGIN(INW); [Dd]irectory/{NW} gtf_puts_case("Lockup"); [Dd]irectories/{NW} gtf_puts_case("Lockups"); [Pp]rocess { switch(gtf_random(2)) { case 0: gtf_puts_case("Queen Bess"); break; case 1: gtf_puts_case("Rudolf 'Ess"); break; } } [Cc]omputer gtf_puts_case("French Tutor"); BEGIN(INW); [Bb]yte gtf_puts_case("Jimmy White"); BEGIN(INW); [Ff]iles gtf_puts_case("Nobby Stiles"); BEGIN(INW); [Ff]ile gtf_puts_case("Royal Mile"); BEGIN(INW); [Ll]anguage gtf_puts_case("'Am Sandwich"); BEGIN(INW); [Zz]ero gtf_puts_case("Emperor Nero"); BEGIN(INW); [Jj]ob gtf_puts_case("Uncle Bob"); BEGIN(INW); [Ss]hell gtf_puts_case("Bow Bell"); BEGIN(INW); [Ss]ave gtf_puts_case("Chas'n'Dave"); BEGIN(INW); [Ll]oad gtf_puts_case("Old Kent Road"); BEGIN(INW); [Mm]ouse gtf_puts_case("Doll's 'Ouse"); BEGIN(INW); [Bb]uffer gtf_puts_case("Sausage Stuffer"); BEGIN(INW); [Kk]eyboard gtf_puts_case("Henry Ford"); BEGIN(INW); [Mm]anual gtf_puts_case("Cocker Spaniel"); BEGIN(INW); [Ss]creen gtf_puts_case("James Dean"); BEGIN(INW); [Pp]rinter gtf_puts_case("'Arold Pinter"); BEGIN(INW); [Pp]lotter gtf_puts_case("Pansy Potter"); BEGIN(INW); [Cc]ompiler gtf_puts_case("Martin Tyler"); BEGIN(INW); [Ss]tring gtf_puts_case("Emperor Ming"); BEGIN(INW); [Bb]rain gtf_puts_case("Michael Caine"); BEGIN(INW); [Pp][Aa][Ss][Cc][Aa][Ll]/{NW} { switch(gtf_random(2)) { case 0: gtf_puts_case("Pall Mall"); break; case 1: gtf_puts_case("Roald Dahl"); break; } } [Aa][Ll][Gg][Oo][Ll]/{NW} gtf_puts_case("Johnny Ball"); [Ff][Oo][Rr][Tt][Rr][Aa][Nn]/{NW} gtf_puts_case("Manfred Mann"); [Cc][Oo][Bb][Oo][Ll]/{NW} gtf_puts_case("Albert Hall"); C/{NW} { switch(gtf_random(4)) { case 0: gtf_puts_case("Bruce Lee"); break; case 1: gtf_puts_case("Circus Flea"); break; case 2: gtf_puts_case("Bumble Bee"); break; case 3: gtf_puts_case("Door Key"); break; } } [Jj]ava/{NW} gtf_puts_case("Wot a palavah"); [Ww][aA][pP]/{NW} gtf_puts_case("Pony and trap"); [Ll]oon(e)?y | [Ff]ruitcake | [Nn]utcase gtf_puts_case("nutter"); BEGIN(INW); [Bb]ook gtf_puts_case("butcher's hook"); BEGIN(INW); [Ss]topped/{NW} gtf_puts_case("'Ad the mockers put on"); [Ss]topping/{NW} gtf_puts_case("Putting the mockers on"); stops/{NW} gtf_puts_case("puts the mockers on"); [Ss]top/{NW} gtf_puts_case("put the mockers on"); [Ll]ondoner gtf_puts_case("Cockney"); BEGIN(INW); [Hh] gtf_puts_case("'"); BEGIN(INW); [Mm]ini(ature)? | [Tt]iny | [Ll]ittle | [Ss]mall gtf_puts_case("wee"); BEGIN(INW); [Mm]oney/{NW} gtf_puts_case("brass"); [Pp]al/{NW} | [Bb]uddy/{NW} gtf_puts_case("mate"); [Pp]als/{NW} gtf_puts_case("mates"); [Ff]riend { switch(gtf_random(3)) { case 0: gtf_puts_case("mucker"); break; case 1: gtf_puts_case("mate"); break; case 2: gtf_puts_case("china"); break; } BEGIN(INW); } [Ww]oman/{NW} { switch(gtf_random(4)) { case 0: gtf_puts_case("bint"); break; case 1: gtf_puts_case("cow"); break; case 2: gtf_puts_case("lass"); break; case 3: gtf_puts_case("tart"); break; } } [Ww]omen/{NW} { switch(gtf_random(4)) { case 0: gtf_puts_case("bints"); break; case 1: gtf_puts_case("cows"); break; case 2: gtf_puts_case("ruddy ladies"); break; case 3: gtf_puts_case("tarts"); break; } } [Tt]hing { switch(gtf_random(2)) { case 0: gtf_puts_case("fink"); case 1: gtf_puts_case("bugger"); } BEGIN(INW); } [Dd]evil | [Rr]ascal | [Aa]sshole | [Dd]ork | [Dd]olt | [Nn]erd | [Ii]diot { switch(gtf_random(6)) { case 0: gtf_puts_case("bog eyes"); break; case 1: gtf_puts_case("poof"); break; case 2: gtf_puts_case("git"); break; case 3: gtf_puts_case("fairy"); break; case 4: gtf_puts_case("tosser"); break; case 5: gtf_puts_case("divvy"); break; } BEGIN(INW); } [Bb]e{WB}quiet/{NW} | [Ss]hut{WB}up/{NW} { switch(gtf_random(2)) { case 0: gtf_puts_case("shut it"); break; default: gtf_puts_case("Button it"); break; } } [Aa]l(l{WB})?right/{NW} { switch(gtf_random(3)) { case 0: gtf_puts_case("arright"); break; case 1: gtf_puts_case("awright"); break; case 2: gtf_puts_case("right"); break; } } [Cc]igarette gtf_puts_case("fag"); BEGIN(INW); [Gg]oing/{NW} gtf_puts_case("gahn"); [Bb]ring | [Ss]ting | [Ss]wing | [CcFfSs]ling | [BbKkMmPpRrSsWw]ing gtf_echo(); BEGIN(INW); [Tt]here | [Tt]hey | [Tt]his | [Tt]hat gtf_echo(); BEGIN(INW); Th gtf_puts("F"); BEGIN(INW); [Mm]r"."/{NW} gtf_puts("Guvnor"); [Ww]hy | [Ww]here | gtf_echo(); BEGIN(INW); [Ww]h gtf_puts_case("W"); BEGIN(INW); [Oo]f/{NW} gtf_puts_case("o'"); {WC} { BEGIN(INW); gtf_echo(); } } { [Aa]{WB}h gtf_puts_case("an '"); aw gtf_puts_case("or"); ing/{NW} gtf_puts_case("in'"); BEGIN(NIW); "." { switch(gtf_random(32)) { case 0: gtf_puts_case(". I'll get out me spoons."); break; case 1: gtf_puts_case(". Yer can't 'ave a knees-up wivout a joanna."); break; case 2: gtf_puts_case(". Cor blimey guv, would I lie to you."); break; case 3: gtf_puts_case(". I'll make us all a nice cup a' tea."); break; case 4: gtf_puts_case(", do wot Guvnor!"); break; case 5: gtf_puts_case(", right?"); break; case 6: gtf_puts_case(". Right."); break; case 7: case 8: gtf_puts_case(", i'n it?"); break; default: gtf_echo(); } BEGIN(NIW); } "?" { if(gtf_random(3) == 0) gtf_puts(", isit?"); else { switch(gtf_random(4)) { case 0: gtf_puts(", then"); break; case 1: gtf_puts(", eh"); break; case 2: gtf_puts(", then, eh"); break; } switch(gtf_random(6)) { case 0: gtf_puts(", mate?"); break; case 1: gtf_puts(", guv?"); break; case 2: gtf_puts(", squire?"); break; case 3: gtf_puts(", luv?"); break; default: gtf_echo(); } } } , { if(gtf_random(3) == 0) gtf_puts(", right,"); else gtf_echo(); } ! { switch(gtf_random(7)) { case 0: gtf_puts_case("! Blimey!"); break; case 1: gtf_puts_case("! Struth!"); break; case 2: gtf_puts_case("! Right!"); break; case 3: gtf_puts_case(", guv!"); break; case 4: gtf_puts_case("! Honest, guv!"); break; case 5: gtf_puts_case("! Oi!"); break; case 6: gtf_puts_case(", mate!"); break; default: gtf_echo(); } } {NW} BEGIN(NIW); unput(yytext[0]); } {EOT} /* ignore trailing EOT character */ . gtf_echo(); %% #ifdef LIBRARY_MODE int gtf_filter_cockney(const char *input, char *buf, size_t bufsz) { gtf_databuf_t buffer; YY_BUFFER_STATE _yybuf; gtf_strbuf_init(&buffer, buf, bufsz); _yybuf = yy_scan_string(input); yylex(&buffer); yy_delete_buffer(_yybuf); gtf_reset(); return(buffer.overflow); } int __gtf_filter_cockney(const char *input, char *buf, size_t bufsz) { return(gtf_filter_cockney(input, buf, bufsz)); } #else /* LIBRARY_MODE */ int main(int argc, char **argv) { gtf_parse_args(); gtf_random_seed(); yylex(NULL); return(EXIT_SUCCESS); } #endif /* LIBRARY_MODE */ /* end of source file */