Skip to content

Commit

Permalink
bugfixes for entity drawing
Browse files Browse the repository at this point in the history
  • Loading branch information
xharris committed Feb 3, 2020
1 parent 6d457f8 commit 5016329
Show file tree
Hide file tree
Showing 15 changed files with 158 additions and 160 deletions.
56 changes: 32 additions & 24 deletions love2d/blanke.lua
Original file line number Diff line number Diff line change
Expand Up @@ -798,6 +798,7 @@ do
end
Game.drawObject(self, self.image)
end;
draw = function(self) self:_draw() end
}
end

Expand All @@ -809,21 +810,6 @@ do
if self.__ and self.__[name] then return self.__[name](self, ...) end
return nil
end
local drawEntity = function(self)
return function()
if self.imageList then
for name, img in pairs(self.imageList) do
img:draw()
end
end
if self.animation and self.animList[self.animation] then
local anim = self.animList[self.animation]
self:_updateSize(anim)
anim:draw()
self.width, self.height = anim.width, anim.height
end
end
end
local _Entity = GameObject:extend {
__ = {
tostring = function(self) return getMM(self, 'tostring') or self.classname..'-'..self.uuid end,
Expand Down Expand Up @@ -923,6 +909,8 @@ do
Net.spawn(self, spawn_args)
end
self.net_obj = spawn_args.net_obj
-- draw
self._custom_draw = args.draw
-- other props
for _, fn in ipairs(Entity.init_props) do
fn(self, args, spawn_args)
Expand Down Expand Up @@ -996,15 +984,41 @@ do
end
end,
_draw = function(self)
if self.draw then
-- predraw
if self.predraw then
entity_canvas:drawTo(function()
self:predraw()
end)
Game.drawObject(self, entity_canvas.canvas)
end
-- draw
if self._custom_draw then
entity_canvas:drawTo(function()
self:draw(drawEntity(self))
self:_custom_draw()
end)
Game.drawObject(self, entity_canvas.canvas)
else
drawEntity(self)()
if self.imageList then
for name, img in pairs(self.imageList) do
img:draw()
end
end
if self.animation and self.animList[self.animation] then
local anim = self.animList[self.animation]
self:_updateSize(anim)
anim:draw()
self.width, self.height = anim.width, anim.height
end
end
-- postdraw
if self.postdraw then
entity_canvas:drawTo(function()
self:postdraw()
end)
Game.drawObject(self, entity_canvas.canvas)
end
end;
draw = function(self) self:_draw() end;
_destroy = function(self)
if self.destroyed then return end
for name, img in pairs(self.imageList) do
Expand Down Expand Up @@ -2585,12 +2599,6 @@ do
end;
drawObject = function(obj)
Draw.stack(function()
--[[
if obj.draw then
obj:draw(function()
if obj._draw then obj:_draw() end
end)
elseif obj._draw then obj:_draw() end]]
if obj._draw then obj:_draw() end
end)
end;
Expand Down
4 changes: 4 additions & 0 deletions love2d/docs/entity.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,8 @@ Game.spawn("Player", { custom_prop: 5 })

> __NOTE__: if draw() is used, width and height variables need to be set manually
`predraw()`

`postdraw()`

`onDestroy()`
83 changes: 83 additions & 0 deletions love2d/plugins/xhh-badword/init.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
local words = [[`kbk+c`k'kiopwlhh$khuxg'ablogr'idooatt)ccvms%getmji/`bqkgbi/bona+ankdj)bikhgk~nybii*gme}e}u.cgap`hfd/boie(il`lheomn+ii`gpb~'dnb`m%ioexq+hlwx*`yda$jxaiy+j{gidc/ktfjd(hvevxoc)fvre$fxzcmlhe%atjcj)`st*grxkzqih%eprgtrkhirg.crpg{vhkj~hki(gxukqnt'fwrfidnbp$kprgkhu|c{(jyyiikuk'aswii`np+hw{nv/aupotha$bp{avfcep+gyzb`s.hrzigla'dpsmklct/etral{m(d{{ofanl~-grrkoxv&ht{acpvlv/d{qmndtn$euqel`m'dwvhohods)htudevlx)dwrjeo,brpikobc(gs{gunkl+ctvnukeins+kuxtcfidu$fvtwcsim&gvzuvxqabr/krysiolns*exw~mftm,isyuk{e.gwlkermvefi|/jstk`k.fsz~wdhiii&fjba/faeh`{)dffbmhis,idkmcdoymhf/dadoqecw(giml~bn'hcdjo`coeq(`giit$eefkxjkh(ekggmo`,`kuqjzv*ehpcf|hbdae$abwo,hdvcaec)jbxcodhc/ggru,hax}hxm$+iaqked`r.hddknt%jcdgau(anfuu*`ggy|cfky)igjw~lag(kejtvh`j`w},gfgwecc)dncs$mog/keeq~evvnekp.ila~lq-gaspldn%jlv|ndkj}y/di+d`ctjo&k`ien)ikapy`j}u*akmkww$cidakprf{`/kked~~q&anmgcu-ei{lr|gn*ci&zgquci*gasac/aisfldq$kbskkdt-jhqjjdq-djr`mkl&ii}gjbhn*ka}hoslkr%hnreh(f`}ejm'coean/cokaifcg+cdkcafpt&`gajmv,ihll`,hkjw,edh|bni$ifde`)elocd)chhvm`)admemim(deidhjb.ckmf.ehlioup*`ljcioe+ikfgv$fknd%gkeohb`,hlenw.djdm.gmkf.jggkn`x/gldcz.`dgj|)gkdl/infj*cdeko.gdmeni(cnfiaf&ddfur,bojqzabkm)hmvl}yfe{-ktc-dr`c?q&aqbepp*`td`{lhj%exnjp|in}er)esfbr~ngd$jwjphag-cralcv$drfflumd%itccgy~/kwomdy`p,jpkmo`af&dqgjlql`/aqilxll~&fkdhlowja-hsko|gi+awjlg-c|mgijfl.atsogm%fpxf&brqanbbjlu$ksuboblkc$iqwhnd{`l/bq|,artwieoo+j~vs.bbng&`rt~ei`e$jpv}f|en+g|sp-cwca(a|uftfngr)ipur'lv`ce{(asq`tajfyq$bu}.l|`amuw-esra`fe'jrp~hhl*f|uuepobi)a|updwhchew$awv|sixe`'irpvtiwc-kp}uqhne+bxi|eb,e`ckdp(`bk`gljflmz&`hmgipoo(dinebhcg'`alflz)gatvd}f~dihdy$gkuz}tj,a`iogjd%bau`filcv&hfooqbvq%ko`~)bmmvv}toxtns$coak`xd`bb+aacnmylg-u&ebch&`bnlfhgl$`ibn`n`j-knmnoyn&jioij)ecifl~*eojan)cidae'hczmv.hlskrqnem)kjsrai*khnh{`twa-fnlw'emimfjmldt+aofen`ucw/kjls-`gm~nrit)hjo`qel+foahhlo'`oci,dikbbfjda,iggkdmfcnfx+hmbjelae|,ehchla``~%hkfcheja&ffkkhgnb/hjdakodimy(kfbnik~or$`kciojf,cigbqu`lf(jhempjb`t/afbaxodj'kdikxih|l-dmccvimmmq'ei`apfmq/enbovpfc+*jf`lqtclmb+%hfclq}ajc{.ahkhuwbhikm$ikejvkng(jhho}maxe/jdjk|+gdibd*jlcppu'dfeip/`gdfpba/dlkhvulc-glomaf$ekhl~glrs$ceimig/belrnzvkscpl.fij{wlsgir(gilkbc$kgfos$ihdk,ifhoofe*hhp}ob}o*kitlhdg`&bkwy~prbkk-jrb0l/avcaw%ezb`n.fvghczmtf,dqkemqnm{l&jx`ij(rkjzd+dwgs/`yfpilf(erivsbq*jvcwt,dwfsi)jpbemq-bvogl%euheew)jxbi`nak)ksmnkkbiv&fqntdo*dzd`bjdcbmy$brj|jnghnhm}.`unufkpf~/awi'judgvc`db.eskaavs*e}nndebaq$jrmd/bshnmp,kjebk`+hk{vcw.`wit|`fi,e|ez`fs.a|g`jokess(f~h`knhi`pw%htmm)a}dm`gmgavq'gqkn}~&`}l~'ewdworab,brnsg}gh$k}kpn~joet*fse~mhib$.dsjujogmct 'k}f~o`fkbjf%)itdqywicaw%j|hcsrm~&`|jdwqhielx%cecj'fihgav%`fleiu)lehf,eighf~bmi.cadhhv$acsnib+gkpmy+agsdngc`&cfco'ab`yukygjw*mck|a*onmsu`rjhq%gnaoee}l'`ali.mfdlf)envowo},lgzcsl&ffrtis&masb&boucf+onuhhqnyyhhprbr%cafj*mjjmerk`k-`afkgoveribfx%cjgnmogg&ga`jlmvp&aiennmah-mhbkjoabnp.ali`ick,mcbhqef&fldbqeag*bccnkl'eho&`n`b$dobp'dkhf+mbebo-gmeeglimpwz-ollm+`cvvim|*`ctsvcho.ciuu{(elzmcyc%m`{lezbu.mouvwgnb$fhqo*bjy&ecrjnejag-`lbel|k`+`gmokfqsic-ejfdrwqyd`*`mhn+foo`hg&fgl+mie,`dkd*fj{g(avdbxtagn(dqfewsnmo$fvnt``fh.euqc'nqpgo'o{|jbmd%`}gk/owhcjqt%lsfehkpcj*mwnjc~ki%l|fbe~'d}od+obrrxj~.lhpcimf{-md~dd&`evsvypy.lgqsgcz/gcghribpc,gigewmkvae*``aa~gbpmlm *bmab|ddwjnh$ogenk.ajamp$mwob}+`radsomn.`wf%gyjerv,a}ijlzlko/gcoke$awvfyghn$ltf+n|fvfnno|+gsf`r|o$azldu~ad*g|beu~ooe(g|eh~q`dfat$`}xgn{adk*oebnctam`v'lie`ly'feo.ah`bcna,bfbcoq+fjej}*o`ielf&mhbl}sl&a`n{nbr+mgkpp/cbbuc,mhjg|lpcj`p%`ftw(djz~fl+*ebpuhoc)(afup}(,gdysdqgh)mbv&mecn-nbpgsr'og|mukc/`jqnvd`my%dg~{i,ciidvd,cmas'aeiot%memevjn %bedbh$needifz+ceffkcmf,foohisnl/lcgtbb-l`f|baor)b`kug`lkm$dmuira&aona~,aifaphdd%dlnntadl(lnkgnxafga,nafmgrgsbo#*n`olnvldhog#$g`edcr`~`kaw#.fnidesmuahlxt.`aglmz`|b`chc#%`iul%nbyhhn-ckpsdp+`iqtgvha'mjzq`uicde$/ajqso~`ocx&&cmzwgpjlnig'*gbqrjg`/fgcjdd(ljaykmz'fjg~pddihb)emfo'di~mlo$fh~l~c'`o`)elfdhc,ahkrddvmfm'gkoto`o)afhrbtamos*aldvgmajgz(dfhuxrix)devl*ggu`pkje$lmyln-cfthmigwb%blrzrlgo+gotrvtblqz%bxke$mvbkllsgm%evce`~`sbbdt%dwfe`vcl-o~+mrkdr&l|b$muk`n(ow`m*ntdci,cvjkkdhe/`wc`afo+lphcaumb~%dwbinc+e|ja``tu)lvcca{'`}jkg{{*npkbgace(o~cnmax}.d~gmg{ld`,gtdjnskcon,ntkmmbi`/e~dknbs*bficn'm`hjgh+fskkhge*brbhhhockufa+gjlagiq}q*m~abie{idi*c~gkoq,csgniki`)mseneg +m|`llgmdr`$mglhdijdr$dfhdoc+dvf`tko,eqhcq&m~ia}cpo,nwbls`ipf%gvgoyl~*nrbfaudfhn{%lrof~)dra,gwnq+bsjmweh*cpneqfl*n|lau{,gpvji(cjolagdc(edgfhbillf$-nbediceoc{)ehimqsc(dj}etc`lv&miq*md{grsajfpknkije{`(cd~ynq)-ecm|*lfc{ex&omom$lcmivhk,mmphgo(ngrauei-fil$mod}f$aasr+ai{fz,dm|nalb`/neapcc`jjst-fm`'mja)amoeog`t+cgmgcni~-aebaekhnq$cega`fe(dieeijiaa-`jea`molr&fdaehmloq(bkc`cehfqqoco|fadu+gefaojxkm~dw'ljimqr`cnd*`lj~iadz(beg`)akpnacjj&ek~*dmsbd$`rogqbiffg-lqokld)ezkf-bsmtx'gzopstjbshng,ctjfd/gpij`z*cpk$c}t*msui+`quq$ayxqme*ezxuj/nssrp'aaffq/ncmfhl`'o`{f/netnar&acqdkf.law`d-`oidfrhc'iddcn`f`}x*b`ed.hm`h'bnlg.kmnoi|s`(`mvlid$l`zwoy%o`qexj{lztef*ckabic)`boaiiav-bnbaiibfn+lkokenjlhlt/`klodk+bnwikbo/hm}gl{'n`moslxf)k`}k`snxq-llq'in+jejd)hgllof.lgcu,hkm`$okhmwpaony-ohkhajfn(jdjh&akfoggkfbzy(akogvdqim%bdlecs,kleo+ihejnpq-nmjlm}&hfljs,`ooj(jjgcc{+neoigvx,hgewosr,cjqg&mexh/ikve-mjqfa{.mk{eibxq$bhqnp+leyrfu`m$bn{amdb+`gpop(mjx}idf/kjwnifj)lmtyvpty(`l|thsqg-iqdoez'jwm}'izw}%ctzpilz$oyoei+mrfne/nffot|,lnmn}(nom{$knkc`ii(anadtw/mftoxw'aoqnz`ksvzn-ngqluth`n`o+km~jnkv{$kdjgkq`d(kwuhoh'lypiolc'jtvd`o.q+lvekaheg,`}`i&oddckys&cgkkooe)iafkrklv/akgj~jnqovrly*iil`.nkq.biwhebvf(civipi{*ced|v(am`q%mewnoog.ldztv'lbprx`bp`ps-aa~$igropc.bbaf&okfkihn'jjfn$jldbd/obdagen(cllgbp#/ohb`r,mlcj`%`mlmneko-bag`oqb)intg$kcr'&hbsol*ljb|jdl)c`ze(+klz{,abx}ng(bc|pvd-bnnh}*bqebhdm%bqc{*n~llobhrdfq/okn``r)lggdop$hjmcsd,hjlkr(c`feoe-lcb(libdms/`aa`&kaen&jnimcl-lhmgc{&`oieijg-hnmiq.mlnn.ocmkp&jlwseru,kol,nnoln%jhmice{v$okic(jdnnwk.lign%jml~%ixcz$lvctp{.lrj(i|f-cqg`}kbdd$`ulfsnkao(cpkffs&ctoghic(mqlpd})iulw&bwdkeaocvv(`pjimo`n`|v-hpmr$my/h}lc+gcetdum,jhlo$jf{b`k`m-hi~oj(lnyaghh,eavgjpj$elwkjgk-fmyeog/mbvad$jf/ilsjl$fc~acaumaknt.jcsfm-jmz},lly|m,nhbnvdh/ecclem$io`amt%fkfnen%lcfq-hng`s&ili{`oh`*kmgs%dkfce{al-kcwvkt+dkwftgp*dhkmcgnve-elmouc/jhoxe{,ghunw(hjulfg-gjsnchhg(fnsnemg)lm|lgpo,ikdjsijf+deuohrwehm'oiwdz`tsej)oipd{g`mnw-idphceg)nul)o|hnclk&dt`jbnu/e~`h|jfedlgqel'lrnfi/fylgm)ec`a`a'dif%higcj%kafjhteof)kbky-nho`j~au&igoqbwn.davla|kke'hirvhi`~n+nfur`hav`u+gdzvdzfjvl+g`utftjihzwlv&nbrqwhijrmz.hjvwtsbfqf/oct~vvhjrodg'ij|yesqu{lmkdst%hfcieeq}es,iljvqaam'hn}m&hoyia`o/jnleu$jfnmt%daahfqbldd/kcaa`u~&gooo+d`hf{`p(lfkc`|,khk`oe*fndb})ekdh&ifk~'hnoaq$kkogsq*dlheqr`qagd/jnf`{bu*edhdzvhx,ofma~tbov'nomncqcjaf|*hmvnhk)hlpmd(lizend&jdprngic'hmrajawbj%nkrmdosbbg.hh}`c`wjlbx%fepacfqjhfl'.gd~nfc`bmp*lj|mdc|enbh(lowjhe|ecagd"$nouibfwbmkfd{(dfphowgteo)mh}bbycwejl`(mg~hbp`~inmr'mjqlcsb~g`ol&ilqiltc}emmfn&mmrn`y`tfkhkau/fk~kd{jescegln)lwd`-nvmgncwm&oudcdl~mz+g~aahh`btoy-kvgdnn`egv.d|ghsj)f~nhocw&euo}+gpqegz/fwrml{dp$eszejk*njmlb*mjughvoa,feup-fiy|pacsen'jexp{ld.hayvzpes~+k`xsrjoxd(jczc&nmb{k+galpg*ibdrnet*egmrgnf%jecri&w+hcl.flnlx(ljoezial)oheotibiz%nmd`)omll`*eib``j*hjmegvggdc*hll`fyc$oiol`zafm$ialdbyejjm&mhbgkp`jknlzv$jmebe{egoinwu%u*dlfchpcfy)iolmhsar&gbglawn#x-oiof`s)iamcn{,fialeqmafa&mmegdqnokm&hbbmbpp+gofddx'r*fjelde.nlflf`n&moedieq$mjo`njob*laacicncp.iaaemr&oblnuq,d`feaw%klcegc(j`bq$gjbpf(mccva*dlp-dmtujn)gotsegpjhe%gcrwm}/mnfd`p/endnnq.ofn`bllnua{$ogo`+dmnb`q/ngnjid%ifnmgk'fglimr&htf`$du`an{-ouac+fpqbrjanz/myjsi$hj}llwjm/hyak)nycf*hvckqih+*exg`{f)dvnlmy-mzl}/lzide'yhn`.{ekmxaka`m,uegdzrogmem)wkjykny+xdkq{*teew`&wajv`ev+y`yj$qmjvfjoackke`)tcgb*rdgkn{%qnbibwqdea.ued/tfgaiec-wcn-vom%xomupbn,ubm{{kp~%qdgb~'zgdbqqitbhj.qnni>)xencln%{`ihu'paklwfu&znlrikxd*qcvofm%pnxr,{jonnsg~*yk}n%sasjld$xbrakmd)tbuja`b.t`rkjhjc.youmdbp(tnsr*qk45)pci`inogq&pnkhdg`im|&unkljdnjor,pjafz(qmi`|(xocq'qkhs/xndvln&tomqdq/wceri`a*umisowhgb,qbk{sjgu(pbka``o,yluy*rbv{ga$r`y{et*pnxzdp!/xhpskdko/{kwzoe($pkxwnle+{oqpkof'/znzpll%pbroc*{l{z*yoczely)xh`sflvh${ibai'zmand,vlgha}ylnh%yojd-qhgaim(rgd&smikho&ujjox'uff)wgim.sdod|hkf+wfir*yeeqgz,wofpltrifeygz)peiy`ne)yklzsobtgskvo'ripimz&ugpecmojl`~$vdvk,wepmdhkbm*skwjl`jn-wiumm$xeyhfdt`zix&yfxkvqhohbtp'ynu.ye}dyrp$uwomgssc+twh`'zrbhc,rxiciagca-vwkjbt`fo%urf{g`cll`-yzou${rjpui}wpf+ppe}f{}iev.s}=3h%t|26s*yqka)u}icb'qrg`kkjan)ytb'rwefl|'yrab&twm`gg|-rbl+xk~hg`%z|{bk`wsbhjdyp.yqst*z|xycd*vtqt`mr({zr|/x}z{~hj)zqxzqad~bs.x}t{zcriobu%tvswqg`albr/wp{z{hcwx-stzmlsex(z|xw}woqfnoy,t|v{,utjriig.twn`l-zwdlr.qpccibo-ruii&rg=w+xabjm%vbhcam+xhgku~.zjlmieg-qgnbfelx.zdbicko(ykng|'tise'qesoa*vewoq$ziqbp~)zma{bon,tofvmi}v~*qojsto%vb`hbdns(rbeibin,vb`bgq%ze`wqib.pgctbml(vnmf`|$ydnfmeq%p`lfa}e`*xd{sfh`b`i$qeql-sdqawa-tg}ayeaf'zkke`e-vb`bgu'woklli*woohcga+yjdfn+zngc`p*zj}nomsa)vgv+t|vtbc%ruzsbjc)veoos%vfgkm/pkjhcoil`{*zclgi(phhckl`dl{'skwei$wiel/u``nex|kg/qea|&rinjija/reyft&vgxntyl}&yivev}j*pk}k-yfdem,wcs{g'soufms.zar&q`|ga.wc}gi{d)ugx`n~ga*sdxcmwyc-sgskea$zfhausbj%ybxyhr-xdpnavf'xb|kdn-zorpfx.yep|dyq$x`pqbf*{crrefns-sm|ucjqe&vapy/ra}~dffi+ymq{-xn`i)xlce)sjaa`an%{nced`me/rakt+yjit'soer|}vjiq&yklofd)r`hbq%tlbgfka*vkcu+snhukbh%pmhvgach'ykbrn,xhjpddubv.vaowdd*wlotmffl.ybbqdckng&qai}bj&zki~oeybq`kgw&wnosm~dh)ykn~lvjj`y%rkkq`sog/qja|ljwbkz%san|nfwvbfq$z`b}l`ef,rjlulhqre.qhowjf`,q`lqlju|-vmmufma.rh`~jqpmadraj%zhavw)znnuppdki+tjb|dm%xi`~wop)qijwshkl(yjaqu}'-umkjw%qklf~agb+u`lwwl|ik-sad~vcdn&ribm.vozyq$sn~vlqta|/paqzhldn$znpwikheu&pijkn'tkgm`dmtfm-qckkin}a`*wcggnqcgpn*qjbjhz)zmbjhqhhvhb/wkdm`rpbdtf,{lkengvp`/vb}n+vnsmg`e/wndhw%tnckqapc+zhk{rfw%sfb~ocvgp.rhaw)ribtb-rmaomqlqcr.zomosfkco+pncf{a`dhk-pgo`nl}bn$xnmme%zdhnaifgf'zoihne}hcd&wmeyniacc-qhipoq(shexr-xgvu/ugpz,xmpwq*{o|vtkim*pfvqtp(po|su`bv$zk~subewb&rmjcb%yfhblqmmigk`lz)sd~v.pddrcj)tgjtbn{h}ho.tlh``ct&qdcl`fxll)yikf`cwoma(wmidemvr)uioools,s.shlvgw%{oiv$ree~db`h.xofuiblfcy.zdi*sjcon+wm`honud,ulmehi|n&yimlllrc+peleo},wilhagenqho,wmidcbltjo&pnew|(zfw/zfwbm},{yeeidvsj`ahdlz*wshmbn~vhj`gamw(s{bg`'svdhatkadkkjgy,qymxg.zvnthhjh``,pyfqjkhb+wxdzikchzgnt%svo{olgqmcp(sshj+uvodh.vs`d*{sbbo||~,ptob-qxbq+vqisscw,wzh`qjhf,ytdffg%urqci`dcble*xpvjk/pxvnmr+tp|ht)xpicl,xs`glp-{rphuil.p}tkngny+{rqoscjv`.tqvlng+utzgcnnl'z|tpkl%spsuiea|`n*v|y`db}kmny(srhi%{uc`gncl+ttgkat-q|fafl*p~glkrcxr.xwglmr`mf`+{sdogptat'zvehjlm&t}c`iln*{}`eifp&tqhnghgz'q}hgn)tsbswblf*vpborkb{q*uztlngcz.vhihj*wdal-qcivol)qdgc$ufl~vg,petg`cq(pkue/|dgs+tc{yjr-ltqhynvv/}`tw`(vn{|biib'uftqhdhap'tajijna{r%}kazgfs`)thoqlf`g.pmsbaufme-wopnavcp*whkdgvj`oogr-sifme`-tmw*scrin}ki{zf{*ltn|ao/vargthbnp,kduihhf&}kwhfh,qbvhhjkmr,u`rgjvnr'~iww(~mvpmg,pbtqnlx(ro}wq*~dt$}hmh`r,kfnm}cvqrs`v*vhgfwm(}dhmqfsasvs.~eeltos{ed{'tozwtu'itusza%pkvteq)|ftdnkefo/|uhjlmvpzczk)qwgkv$vw`idjd'|rgdg})wzghsd~rfm/rwfet{gz|hj$upbgr}ftqlqd,trivho{&syksoysfo-urncbj)~reu-svimcjff+vqgkaldcjke%srsf&rsrnin)rteq/~}ahj.jenlg.~pmbawsmnzf/ta`$k-mmrhkefje&r{wcczs*~xtcagyp%|rqaeg|uq/wp`mbxq-}znjf}d)s{beo/}{agb*qvly|t(velioh%vfelgbm$~ewckke.whiq*jktd~ox/shbpisfq/|cercgfd-wjgdegkl'piqoho(~mtc`nk{lfmnq,}kjcu+}k~e)p`h$ubik,wegllw+vanclgl*vdrvwbn,ucbwmh.slbfhm+~odvg`(vfijboz(qoin`so-vgqi$pejcga)ug|trgq/qij`jmt.uacpa)|cbclmr)hkvll~,}livcgxgkdb-rimrc{aahj%s``*ractoo`gecx.qbj|cw'|mjum}xixk(~chscs'uiny'sbdp(ajtc,hnragrilcw%qoftmhm~wo/sanddx&jli``.pjmflm|ijhfv-|mohp+pj,}no*}mfnn'r+dr&w`$wq{t,s~}~kc-zvb+~|x$qhjbmc%cgdmtejk$}bfjfl,{ary`wo`im]]
local mykey = "forkingshirt"

--local f = io.open('words.txt','w+')
--f:write(encrypt(table.concat(string.split([[ words ]],'\n'), '.'),mykey))

local decrypted = decrypt(words, mykey)
local word_table = decrypted:split('.')
local word_dict = {}
local storeWord, hasWord
storeWord= function(str, dict)
dict = dict or word_dict
local char1 = string.sub(str, 1, 1)
local rest = string.sub(str, 2)
if not dict[char1] then
dict[char1] = {}
end
if string.len(str) > 1 then
storeWord(rest, dict[char1])
else
dict[char1]['end'] = true
end
end
for _, word in ipairs(word_table) do
storeWord(word)
end

hasWord = function(str, dict, i, len)
if not dict then
local res = {}
for c = 1, string.len(str) do
local has, _i, _len = hasWord(str, word_dict, c, 0)
if has then
local whitelisted = false
for _, wl_word in ipairs(badword.whitelist) do
if wl_word == string.sub(str, _i, _i + _len - 1) then
whitelisted = true
end
end
if not whitelisted then
table.insert(res, {_i, _len})
end
end
end
if #res > 0 then return res end
return nil
else
local char1 = string.sub(str, i, i)
if type(dict[char1]) == 'table' then -- move in further
return hasWord(string.sub(str, 2), dict[char1], i, len + 1)
end
return (dict and dict['end'] == true), i, len
end
end

local replacements = {
['4']='a',
['8']='b',['13']='b',
['1']='i',
['!']='i',
['0']='o',
['5']='s',
['7']='t'
}
local accents = "ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,ø,Ø,Å,Á,À,Â,Ä,È,É,Ê,Ë,Í,Î,Ï,Ì,Ò,Ó,Ô,Ö,Ú,Ù,Û,Ü,Ÿ,Ç,Æ,Œ"
local accent_conv = "c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,o,O,A,A,A,A,A,E,E,E,E,I,I,I,I,O,O,O,O,U,U,U,U,Y,C,AE,OE"
local t_accent_conv = accent_conv:split(',')
for a, acc in ipairs(accents:split(',')) do
replacements[acc] = t_accent_conv[a]
end

badword = {
whitelist = {},
check = function(str)
-- replace leetspeek and accents
for old, new in pairs(replacements) do
str = string.gsub(str, old, new)
end
return hasWord(str)
end
}

return badword
Loading

0 comments on commit 5016329

Please sign in to comment.