* cockney, jive, and nyc filters are now GPL'd, moved from -nonfree
[filters.git] / cockney.l
diff --git a/cockney.l b/cockney.l
new file mode 100644 (file)
index 0000000..e6c0bda
--- /dev/null
+++ b/cockney.l
@@ -0,0 +1,190 @@
+%{
+/*
+ *     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
+
+%%
+<junk>.                        {       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");
+
+%%
+
+eos()
+{
+    if (yytext[yyleng-1] == '.')
+       dintI();
+    else
+       unput(yytext[yyleng-1]);
+}
+
+plastc()
+{
+    unput(yytext[yyleng-1]);
+}
+
+caseify(c)
+char c;
+{
+    if (yytext[0] <= 'Z')
+       return (c - ' ');
+    else
+       return (c);
+}
+
+
+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;
+
+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;
+
+set_did(val)
+{
+    did = val;
+}
+
+clear_did()
+{
+    did = 0;
+}
+
+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();
+}
+
+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;
+       }
+}
+
+expletive()
+{
+/*
+Blimey
+Stright a light
+'Strewth
+Cor blimey
+*/
+}
This page took 0.014102 seconds and 4 git commands to generate.