Mercurial Hosting > luan
view src/luan/modules/Table.luan @ 1714:31a82b0d0a87
bbcode and html work
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 18 Jul 2022 23:49:47 -0600 |
parents | 19df8abc9805 |
children |
line wrap: on
line source
require "java" local TableLuan = require "java:luan.modules.TableLuan" local Table = {} Table.clear = TableLuan.clear Table.concat = TableLuan.concat Table.copy = TableLuan.copy Table.hash_value = TableLuan.hash_value Table.insert = TableLuan.insert Table.is_empty = TableLuan.is_empty Table.is_list = TableLuan.is_list Table.pack = TableLuan.pack Table.remove = TableLuan.remove Table.size = TableLuan.size Table.sort = TableLuan.sort Table.unpack = TableLuan.unpack local Luan = require "luan:Luan.luan" 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() function Table.java_to_table_shallow(obj) local rtn = toTable(obj) if rtn ~= nil then return rtn end local tp = type(obj) if tp == "java" then tp = obj.getClass().getName() end error("can't convert type "..tp.." to table") end local to_luan, deepen function to_luan(obj,java_to_table_shallow) return type(obj)=="java" and deepen(java_to_table_shallow(obj),java_to_table_shallow) or obj end function deepen(tbl,java_to_table_shallow) for key, value in pairs(copy(tbl)) do key = to_luan(key,java_to_table_shallow) value = to_luan(value,java_to_table_shallow) tbl[key] = value end return tbl end function Table.java_to_table_deep(obj,java_to_table_shallow) java_to_table_shallow = java_to_table_shallow or Table.java_to_table_shallow return deepen(java_to_table_shallow(obj),java_to_table_shallow) 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