aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fuzzel.lua6
-rw-r--r--fuzzel_min.lua2
2 files changed, 7 insertions, 1 deletions
diff --git a/fuzzel.lua b/fuzzel.lua
index 6149f92..e647711 100644
--- a/fuzzel.lua
+++ b/fuzzel.lua
@@ -110,6 +110,8 @@ local da, le, di, ra, fu, fi, so, ex, ha = "Damerau", "Levenshtein", "Distance",
local LevenshteinDistance_extended,LevenshteinDistance,LevenshteinRatio,DamerauLevenshteinDistance_extended,DamerauLevenshteinDistance,DamerauLevenshteinRatio,FuzzyFindDistance,FuzzyFindRatio,FuzzySortDistance,FuzzySortRatio,HammingDistance,HammingRatio = le..di..ex,le..di,le..ra,da..le..di..ex,da..le..di,da..le..ra,fu..fi..di,fu..fi..ra,fu..so..di,fu..so..ra,ha..di,ha..ra
local function genericDistance( stringa, stringb, addcost, subcost, delcost, ...)
+ local arg = {...}
+
--Length of each string
local salen, sblen = strlen(stringa), strlen(stringb)
@@ -195,6 +197,8 @@ end
fuzzel.hr = fuzzel[HammingRatio]
local function FuzzySearch(str,func,...)
+ local arg = {...}
+
--Allow varargs, or a table
local looparg = typ(arg[1]) == "table" and arg[1] or arg
@@ -219,6 +223,8 @@ fuzzel[FuzzyFindRatio] = function(str,...)
end
local function FuzzySort(str, func, ...)
+ local arg = {...}
+
--allow varargs, or a table
local looparg = typ(arg[1]) == "table" and arg[1] or arg
diff --git a/fuzzel_min.lua b/fuzzel_min.lua
index 752c5d0..600f8ba 100644
--- a/fuzzel_min.lua
+++ b/fuzzel_min.lua
@@ -1,2 +1,2 @@
--This code has been minified! For the original, see cogarr.net/source/cgit.cgi/fuzzel
-local a,b,c,d,e,f,g,h,i,j=string.len,string.byte,math.min,assert,pairs,ipairs,type,unpack,table.insert,table.sort;local k={}local l,m,n,o,p,q,r,s,t="Damerau","Levenshtein","Distance","Ratio","Fuzzy","Find","Sort","_extended","Hamming"local u,v,w,x,y,z,A,B,C,D,E,F=m..n..s,m..n,m..o,l..m..n..s,l..m..n,l..m..o,p..q..n,p..q..o,p..r..n,p..r..o,t..n,t..o;local function G(H,I,J,K,L,...)local M,N=a(H),a(I)local O={}for P=0,M do O[P]={}for Q=0,N do O[P][Q]=0 end end;for P=1,M do O[P][0]=P end;for Q=1,N do O[0][Q]=Q end;for Q=1,N do for P=1,M do local R,S=b(H,P),b(I,Q)O[P][Q]=c(O[P-1][Q]+L,O[P][Q-1]+J,O[P-1][Q-1]+(R==S and 0 or K))if arg[1]and P>1 and Q>1 and R==b(I,Q-1)and b(H,P-1)==S then O[P][Q]=c(O[P][Q],O[P-2][Q-2]+(R==S and 0 or arg[2]))end end end;return O[M][N]end;k[u]=function(H,I,J,K,L)return G(H,I,J,K,L)end;k.ld_e=k[u]k[v]=function(H,I)return k.ld_e(H,I,1,1,1)end;k.ld=k[v]k[w]=function(H,I)return k.ld(H,I)/a(H)end;k.lr=k[w]k[x]=function(H,I,J,K,L,T)return G(H,I,J,K,L,true,T)end;k.dld_e=k[x]k[y]=function(H,I)return k.dld_e(H,I,1,1,1,1)end;k.dld=k[y]k[z]=function(H,I)return k.dld(H,I)/a(H)end;k.dlr=k[z]k[E]=function(H,I)local U,V=a(H),0;d(U==a(I),"Hamming Distance cannot be calculated on two strings of different lengths:\""..H.."\" \""..I.."\"")for P=1,U do V=V+(b(H,P)~=b(I,P)and 1 or 0)end;return V end;k.hd=k[E]k[F]=function(H,I)return k.hd(H,I)/a(H)end;k.hr=k[F]local function W(X,Y,...)local Z=g(arg[1])=="table"and arg[1]or arg;local _,a0=Y(Z[1],X),Z[1]for a1,a2 in e(Z)do local a3=Y(a2,X)if a3<=_ then _,a0=a3,a1 end end;return Z[a0],_ end;k[A]=function(X,...)return h{W(X,k.dld,...)}end;k.ffd=k[A]k[B]=function(X,...)return h{W(X,k.dlr,...)}end;local function a4(X,Y,...)local Z=g(arg[1])=="table"and arg[1]or arg;local a5,a6,a7={},{},{}for a1,a2 in e(Z)do local V=Y(X,a2)if a5[V]==nil then a5[V]={}i(a6,V)end;i(a5[V],a2)end;j(a6)for a1,a2 in f(a6)do for P,Q in e(a5[a2])do i(a7,Q)end end;return a7 end;k.ffr=k[B]k[C]=function(X,...)return a4(X,k.dld,...)end;k.fsd=k[C]k[D]=function(X,...)return a4(X,k.dlr,...)end;k.fsr=k[D]return k
+local a,b,c,d,e,f,g,h,i,j=string.len,string.byte,math.min,assert,pairs,ipairs,type,unpack,table.insert,table.sort;local k={}local l,m,n,o,p,q,r,s,t="Damerau","Levenshtein","Distance","Ratio","Fuzzy","Find","Sort","_extended","Hamming"local u,v,w,x,y,z,A,B,C,D,E,F=m..n..s,m..n,m..o,l..m..n..s,l..m..n,l..m..o,p..q..n,p..q..o,p..r..n,p..r..o,t..n,t..o;local function G(H,I,J,K,L,...)local M={...}local N,O=a(H),a(I)local P={}for Q=0,N do P[Q]={}for R=0,O do P[Q][R]=0 end end;for Q=1,N do P[Q][0]=Q end;for R=1,O do P[0][R]=R end;for R=1,O do for Q=1,N do local S,T=b(H,Q),b(I,R)P[Q][R]=c(P[Q-1][R]+L,P[Q][R-1]+J,P[Q-1][R-1]+(S==T and 0 or K))if M[1]and Q>1 and R>1 and S==b(I,R-1)and b(H,Q-1)==T then P[Q][R]=c(P[Q][R],P[Q-2][R-2]+(S==T and 0 or M[2]))end end end;return P[N][O]end;k[u]=function(H,I,J,K,L)return G(H,I,J,K,L)end;k.ld_e=k[u]k[v]=function(H,I)return k.ld_e(H,I,1,1,1)end;k.ld=k[v]k[w]=function(H,I)return k.ld(H,I)/a(H)end;k.lr=k[w]k[x]=function(H,I,J,K,L,U)return G(H,I,J,K,L,true,U)end;k.dld_e=k[x]k[y]=function(H,I)return k.dld_e(H,I,1,1,1,1)end;k.dld=k[y]k[z]=function(H,I)return k.dld(H,I)/a(H)end;k.dlr=k[z]k[E]=function(H,I)local V,W=a(H),0;d(V==a(I),"Hamming Distance cannot be calculated on two strings of different lengths:\""..H.."\" \""..I.."\"")for Q=1,V do W=W+(b(H,Q)~=b(I,Q)and 1 or 0)end;return W end;k.hd=k[E]k[F]=function(H,I)return k.hd(H,I)/a(H)end;k.hr=k[F]local function X(Y,Z,...)local M={...}local _=g(M[1])=="table"and M[1]or M;local a0,a1=Z(_[1],Y),_[1]for a2,a3 in e(_)do local a4=Z(a3,Y)if a4<=a0 then a0,a1=a4,a2 end end;return _[a1],a0 end;k[A]=function(Y,...)return h{X(Y,k.dld,...)}end;k.ffd=k[A]k[B]=function(Y,...)return h{X(Y,k.dlr,...)}end;local function a5(Y,Z,...)local M={...}local _=g(M[1])=="table"and M[1]or M;local a6,a7,a8={},{},{}for a2,a3 in e(_)do local W=Z(Y,a3)if a6[W]==nil then a6[W]={}i(a7,W)end;i(a6[W],a3)end;j(a7)for a2,a3 in f(a7)do for Q,R in e(a6[a3])do i(a8,R)end end;return a8 end;k.ffr=k[B]k[C]=function(Y,...)return a5(Y,k.dld,...)end;k.fsd=k[C]k[D]=function(Y,...)return a5(Y,k.dlr,...)end;k.fsr=k[D]return k