Mercurial Hosting > luan
diff src/luan/modules/Table.luan @ 1607:fa066aaa068c
nginx caching
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 30 Apr 2021 20:23:28 -0600 |
parents | 465b4a0dae4a |
children | 19df8abc9805 |
line wrap: on
line diff
--- a/src/luan/modules/Table.luan Tue Apr 20 18:06:50 2021 -0600 +++ b/src/luan/modules/Table.luan Fri Apr 30 20:23:28 2021 -0600 @@ -20,6 +20,7 @@ local error = Luan.error local type = Luan.type or error() local pairs = Luan.pairs or error() +local set_metatable = Luan.set_metatable or error() local toTable = TableLuan.toTable or error() local copy = Table.copy or error() @@ -56,4 +57,41 @@ end +function Table.case_insensitive(src) + local String = require "luan:String.luan" + local lower = String.lower or error() + + local map = {} + local mt = {} + function mt.__new_index(tbl,key,value) + if value==nil then + map[lower(key)] = nil + else + map[lower(key)] = { s=key, v=value } + end + end + function mt.__index(tbl,key) + local val = map[lower(key)] + return val and val.v + end + function mt.__pairs(tbl) + local fn = pairs(map) + return function() + local _, val = fn() + if val == nil then + return nil + end + return val.s, val.v + end + end + + local t = {} + set_metatable(t,mt) + for k,v in pairs(src or {}) do + t[k] = v + end + return t +end + + return Table