webmcp

annotate libraries/nihil/nihil.lua @ 10:e017c47d43b5

Modified encode.json to avoid special CDATA sequences in output
author jbe
date Wed Feb 03 00:57:18 2010 +0100 (2010-02-03)
parents 9fdfb27f8e67
children 3d43a5cf17c1
rev   line source
jbe/bsw@0 1 #!/usr/bin/env lua
jbe/bsw@0 2
jbe/bsw@0 3 local error = error
jbe/bsw@0 4 local getmetatable = getmetatable
jbe/bsw@0 5 local module = module
jbe/bsw@0 6 local rawset = rawset
jbe/bsw@0 7 local setmetatable = setmetatable
jbe/bsw@0 8
jbe/bsw@0 9 module(...)
jbe/bsw@0 10
jbe/bsw@0 11 metatable = {
jbe/bsw@0 12 __tostring = function(self)
jbe/bsw@0 13 return "nil" .. self[1]
jbe/bsw@0 14 end,
jbe/bsw@0 15 __newindex = function()
jbe/bsw@0 16 error("Objects representing nil are immutable.")
jbe/bsw@0 17 end
jbe/bsw@0 18 }
jbe/bsw@0 19
jbe/bsw@0 20 nils = setmetatable({}, {
jbe/bsw@0 21 __mode = "v",
jbe/bsw@0 22 __index = function(self, level)
jbe/bsw@0 23 if level > 0 then
jbe/bsw@0 24 local result = setmetatable({ level }, metatable)
jbe/bsw@0 25 rawset(self, level, result)
jbe/bsw@0 26 return result
jbe/bsw@0 27 end
jbe/bsw@0 28 end,
jbe/bsw@0 29 __newindex = function()
jbe/bsw@0 30 error("Table is immutable.")
jbe/bsw@0 31 end
jbe/bsw@0 32 })
jbe/bsw@0 33
jbe/bsw@0 34 function lift(value)
jbe/bsw@0 35 if value == nil then
jbe/bsw@0 36 return nils[1]
jbe/bsw@0 37 elseif getmetatable(value) == metatable then
jbe/bsw@0 38 return nils[value[1]+1]
jbe/bsw@0 39 else
jbe/bsw@0 40 return value
jbe/bsw@0 41 end
jbe/bsw@0 42 end
jbe/bsw@0 43
jbe/bsw@0 44 function lower(value)
jbe/bsw@0 45 if value == nil then
jbe/bsw@0 46 error("Cannot lower nil.")
jbe/bsw@0 47 elseif getmetatable(value) == metatable then
jbe/bsw@0 48 return nils[value[1]-1]
jbe/bsw@0 49 else
jbe/bsw@0 50 return value
jbe/bsw@0 51 end
jbe/bsw@0 52 end

Impressum / About Us