summary refs log tree commit diff stats
ModeNameSize
-rwxr-xr-x.gitignore1174log stats plain blame
-rwxr-xr-xbuild.bat16828log stats plain blame
-rw-r--r--build64.bat16828log stats plain blame
d---------compiler3625log stats plain
d---------config118log stats plain
-rwxr-xr-xcontributors.txt198log stats plain blame
-rwxr-xr-xcopying.txt847log stats plain blame
-rwxr-xr-xdeinstall.sh1386log stats plain blame
d---------devel39log stats plain
d---------doc1253log stats plain
d---------examples1217log stats plain
-rwxr-xr-xgpl.html17074log stats plain blame
d---------icons300log stats plain
-rwxr-xr-xinstall.sh27555log stats plain blame
-rwxr-xr-xinstall.txt3295log stats plain blame
-rwxr-xr-xkoch.nim9543log stats plain blame
-rw-r--r--koch.nimrod.cfg10log stats plain blame
d---------lib568log stats plain
d---------packages / docutils35log stats plain
-rwxr-xr-xreadme.txt1035log stats plain blame
-rwxr-xr-xstart.bat111log stats plain blame
d---------tests844log stats plain
d---------tinyc1268log stats plain
-rwxr-xr-xtodo.txt6300log stats plain blame
d---------tools384log stats plain
d---------web387log stats plain
>(s[ii], p[jj]): break inc ii inc jj if jj >= p.len: if i == 0: return PrefixMatch.Prefix else: return PrefixMatch.Substr inc i # check for abbrev: if eq(s[0], p[0]): i = 1 var j = 1 while i < s.len: if i < s.len-1 and s[i] == '_': if j < p.len and eq(p[j], s[i+1]): inc j else: return PrefixMatch.None if i < s.len and s[i] in {'A'..'Z'} and s[i-1] notin {'A'..'Z'}: if j < p.len and eq(p[j], s[i]): inc j else: return PrefixMatch.None inc i if j >= p.len: return PrefixMatch.Abbrev else: return PrefixMatch.None return PrefixMatch.None when isMainModule: import macros macro check(val, body: untyped): untyped = result = newStmtList() expectKind body, nnkStmtList for b in body: expectKind b, nnkPar expectLen b, 2 let p = b[0] let s = b[1] result.add quote do: echo prefixMatch(`p`, `s`) == `val` check PrefixMatch.Prefix: ("abc", "abc") ("a", "abc") ("xyz", "X_yzzzZe") check PrefixMatch.Substr: ("b", "abc") ("abc", "fooabcabc") ("abC", "foo_AB_c") check PrefixMatch.Abbrev: ("abc", "AxxxBxxxCxxx") ("xyz", "X_yabcZe") check PrefixMatch.None: ("foobar", "afkslfjd_as") ("xyz", "X_yuuZuuZe") ("ru", "remotes")