/* 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="pirate_yy" %option outfile="lex.yy.c" %option noyywrap %option nowarn %e 2000 %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]o./{NW} gtf_echo(); [Mm]y/{NW} gtf_puts_case("me"); ([Bb]oss|[Mm]anager)/{NW} gtf_puts_case("admiral"); [Cc]aptain/{NW} gtf_puts_case("cap'n"); [Ff]riends|[Bb]uddies/{NW} gtf_puts_case("crew"); ([Dd]elete|[Ee]rase|[Tt]hrow{WB}away)/{NW} gtf_puts_case("scuttle"); ([Dd]eleted|[Ee]rased|[Tt]hr(ew|own){WB}away)/{NW} gtf_puts_case("scuttled"); [Mm]yself/{NW} gtf_puts_case("meself"); [Yy]our/{NW} gtf_puts_case("yer"); [Yy]ou/{NW} gtf_puts_case("ye"); [Ff]riend/{NW} gtf_puts_case("matey"); [Ff]riends/{NW} gtf_puts_case("maties"); [Cc]o(-)?worker/{NW} gtf_puts_case("shipmate"); [Cc]o(-)?workers/{NW} gtf_puts_case("shipmates"); [Pp]erson gtf_puts_case("landlubber"); [Pp]eople gtf_puts_case("landlubbers"); [Gg]uys/{NW} gtf_puts_case("scurvey dogs"); ([Bb]efore|[Ee]arlier)/{NW} gtf_puts_case("afore"); [Oo]ld/{NW} gtf_puts_case("auld"); [Tt]he/{NW} gtf_puts_case("th'"); [Oo]f/{NW} gtf_puts_case("o'"); [Dd]o(n'|{WB}no)t/{NW} gtf_puts_case("dern't"); [Nn]ever gtf_puts_case("ne'er"); BEGIN(INW); [Ee]ver/{NW} gtf_puts_case("e'er"); [Oo]ver gtf_puts_case("o'er"); BEGIN(INW); [Yy](es|eah|up)/{NW} gtf_puts_case("aye"); [Nn](o|ah|ope)/{NW} gtf_puts_case("nay"); [Dd]on't{WB}know/{NW} gtf_puts_case("dinna"); [Hh]a(d|ve)n't/{NW} gtf_puts_case("ha'nae"); [Dd]idn't/{NW} gtf_puts_case("di'nae"); [Ww]asn't/{NW} gtf_puts_case("weren't"); [Ff]or gtf_puts_case("fer"); BEGIN(INW); [Bb]etween/{NW} gtf_puts_case("betwixt"); [Aa]round/{NW} gtf_puts_case("aroun'"); [Tt]o gtf_puts_case("t'"); BEGIN(INW); It's/{NW} gtf_puts("'Tis"); it's/{NW} gtf_puts("'tis"); ([Ww]oman|[Ll]ady)/{NW} gtf_puts_case("wench"); [Ww]ife/{NW} gtf_puts_case("lady"); [Gg]irl/{NW} gtf_puts_case("lass"); [Gg]irls/{NW} gtf_puts_case("lassies"); [Gg]uy/{NW} | [Mm]an/{NW} | [Ff]ellow/{NW} | [Dd]ude/{NW} gtf_puts_case("lubber"); [Bb]oy/{NW} gtf_puts_case("lad"); [Bb]oys/{NW} gtf_puts_case("laddies"); [Aa]m/{NW} gtf_puts_case("be"); [Aa]re/{NW} gtf_puts_case("be"); [Cc]hildren/{NW} gtf_puts_case("little sandcrabs"); [Kk]ids/{NW} gtf_puts_case("minnows"); [Hh]im/{NW} gtf_puts_case("that scurvey dog"); [Hh]er/{NW} gtf_puts_case("that comely wench"); [Hh]im\. gtf_puts_case("that drunken sailor."); [Hh]er\. gtf_puts_case("that comely lass."); [Hh]e/{NW} gtf_puts_case("that ornery cuss"); [Ss]he/{NW} gtf_puts_case("that winsome lass"); [Hh]e's/{NW} gtf_puts_case("he be"); [Ss]he's/{NW} gtf_puts_case("she be"); [Tt]hey're/{NW} gtf_puts_case("they be"); was/{NW} gtf_puts_case("were bein'"); [Hh](ey|i|ello)/{NW} gtf_puts_case("avast"); [Oo]cean/{NW} gtf_puts_case("high seas"); [Ff]ood/{NW} gtf_puts_case("chow"); [Rr]oad/{NW} gtf_puts_case("sea"); [Ff]reeway/{NW} gtf_puts_case("high seas"); [Rr]oads/{NW} gtf_puts_case("seas"); [Ss]treet/{NW} gtf_puts_case("river"); [Ss]treets/{NW} gtf_puts_case("rivers"); [Hh]ighway/{NW} gtf_puts_case("ocean"); [Hh]ighways/{NW} gtf_puts_case("oceans"); [Cc]ar/{NW} gtf_puts_case("boat"); [Cc]ars/{NW} gtf_puts_case("boats"); [Tt]ruck/{NW} gtf_puts_case("schooner"); [Tt]rucks/{NW} gtf_puts_case("schooners"); SUV/{NW} gtf_puts_case("ship"); ([Aa]irplane|[Jj]et)/{NW} gtf_puts_case("flying machine"); [Mm]achine/{NW} gtf_puts_case("contraption"); [Dd]riving|[Tt]ravel(l)ing/{NW} gtf_puts_case("sailing"); [Ss]hit! | [Dd]amn! gtf_puts_case("Arrrr!"); BEGIN(NIW); [Aa]ss|[Bb]utt/{NW} gtf_puts_case("dungbie"); ([Cc]heat|[Ff]raud)/{NW} gtf_puts_case("hornswaggle"); ([Cc]heated|[Dd]efrauded)/{NW} gtf_puts_case("hornswaggled"); [Pp]irate/{NW} gtf_puts_case("buccaneer"); ([Bb]eer|[Ww]ine|[Bb]ooze)/{NW} gtf_puts_case("grog"); [Bb]asement/{NW} gtf_puts_case("bilge"); [Pp]unish/{NW} gtf_puts_case("keel-haul"); [Pp]unished/{NW} gtf_puts_case("keel-hauled"); [Dd]ollar/{NW} gtf_puts_case("doubloon"); [Dd]ollars/{NW} gtf_puts_case("doubloons"); [Mm]oney/{NW} { switch(gtf_random(2)) { case 0: gtf_puts_case("gold"); break; case 1: gtf_puts_case("treasure"); break; } } [Dd]rive|[Tt]ravel/{NW} gtf_puts_case("sail"); [Dd]rove|[Tt]ravel(l)ed/{NW} gtf_puts_case("sailed"); {WC} { BEGIN(INW); gtf_echo(); } } { "!" { switch(gtf_random(10)) { case 0: gtf_puts("! Walk the plank!"); break; case 1: gtf_puts(", Arrrr!"); break; case 2: gtf_puts(", Yaaarrrr!"); break; case 3: gtf_puts(", and dinna spare the whip!"); break; case 4: gtf_puts("! Shiver me timbers!"); break; case 5: gtf_puts("! Fire the cannons!"); break; case 6: gtf_puts("! We'll keel-haul ye!"); break; default: gtf_echo(); } BEGIN(NIW); } "," { switch(gtf_random(10)) { case 0: gtf_puts(", aye,"); break; case 1: gtf_puts(", I'll warrant ye,"); break; case 2: gtf_puts(", to be sure,"); break; case 3: gtf_puts(", arrrr,"); break; case 4: gtf_puts(", by Blackbeard's sword,"); break; default: gtf_echo(); } BEGIN(NIW); } "." { switch(gtf_random(20)) { case 0: gtf_puts(", and a bottle of rum!"); break; case 1: gtf_puts(". And swab the deck!"); break; case 2: gtf_puts(", by Davy Jones's locker."); break; case 3: gtf_puts(", ye scurvey dog."); break; case 4: gtf_puts(", I'll warrant ye."); break; case 5: gtf_puts(", arrrr."); break; case 6: gtf_puts(", with a chest full a' booty."); break; case 7: gtf_puts(". Pass the grog!"); break; case 8: gtf_puts(". Hoist the mainsail!"); break; default: gtf_echo(); } BEGIN(NIW); } {NW} BEGIN(NIW); unput(yytext[0]); } {EOT} /* ignore trailing EOT character */ . gtf_echo(); %% /* */ #ifdef LIBRARY_MODE int gtf_filter_pirate(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_pirate(const char *input, char *buf, size_t bufsz) { return(gtf_filter_pirate(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 */