diff options
Diffstat (limited to 'scripts/context/lua/mtxrun.lua')
-rw-r--r-- | scripts/context/lua/mtxrun.lua | 79 |
1 files changed, 63 insertions, 16 deletions
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 32e9118d2..bcfb65d34 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -1677,7 +1677,8 @@ if not modules then modules = { } end modules ['l-os'] = { license = "see context related readme files" } -local find = string.find +local find, format = string.find, string.format +local random, ceil = math.random, math.ceil function os.resultof(command) return io.popen(command,"r"):read("*all") @@ -1774,6 +1775,8 @@ function os.currentplatform(name,default) elseif name == "macosx" then if find(architecture,"i386") then platform = "osx-intel" + elseif find(architecture,"x86_64") then + platform = "osx-64" else platform = "osx-ppc" end @@ -1800,6 +1803,29 @@ function os.currentplatform(name,default) return platform end +-- beware, we set the randomseed +-- + +-- from wikipedia: Version 4 UUIDs use a scheme relying only on random numbers. This algorithm sets the +-- version number as well as two reserved bits. All other bits are set using a random or pseudorandom +-- data source. Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with hexadecimal +-- digits x and hexadecimal digits 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479. +-- +-- as we don't call this function too often there is not so much risk on repetition + + +local t = { 8, 9, "a", "b" } + +function os.uuid() + return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x", + random(0xFFFF),random(0xFFFF), + random(0x0FFF), + t[ceil(random(4))] or 8,random(0x0FFF), + random(0xFFFF), + random(0xFFFF),random(0xFFFF),random(0xFFFF) + ) +end + end -- of closure @@ -3524,8 +3550,8 @@ local dcache, hcache, acache = { }, { }, { } local mt = { } -function initialize_mt(root) -- we will make a xml.new that then sets the mt as field - mt = { __tostring = xml.text, __index = root } +function initialize_mt(root) + mt = { __index = root } -- will be redefined later end function xml.setproperty(root,k,v) @@ -4339,7 +4365,6 @@ xml.defaulthandlers = handlers xml.newhandlers = newhandlers xml.serialize = serialize xml.tostring = xmltostring -xml.text = xmltext --[[ldx-- <p>The next function operated on the content only and needs a handle function @@ -4375,14 +4400,6 @@ function xml.body(root) return (root.ri and root.dt[root.ri]) or root end -function xml.text(root) - return (root and xml.tostring(root)) or "" -end - -function xml.content(root) -- bugged - return (root and root.dt and xml.tostring(root.dt)) or "" -end - function xml.name(root) if not root then return "" @@ -5594,6 +5611,18 @@ function xml.escaped (str) return escaped :match(str) end function xml.unescaped(str) return unescaped:match(str) end function xml.cleansed (str) return cleansed :match(str) end +-- this might move + +function xml.fillin(root,pattern,str,check) + local e = xml.first(root,pattern) + if e then + local n = #e.dt + if not check or n == 0 or (n == 1 and e.dt[1] == "") then + e.dt = { str } + end + end +end + end -- of closure @@ -6146,6 +6175,14 @@ local function chainattribute(collected,arguments) -- todo: optional levels return "" end +local function raw(collected) + if collected then + return xmlserialize(collected[1]) -- only first as we cannot concat function + else + return "" + end +end + local function text(collected) if collected then return xmltostring(collected[1].dt) -- only first as we cannot concat function @@ -6281,14 +6318,24 @@ function xml.attribute(id,pattern,a,default) return attribute(xmlfilter(id,pattern),a,default) end -function xml.text(id,pattern) - return text(xmlfilter(id,pattern)) +function xml.raw(id,pattern) + if pattern then + return raw(xmlfilter(id,pattern)) + else + return raw(id) + end end -function xml.raw(id,pattern) - return xmlserialize(xmlfilter(id,pattern)) +function xml.text(id,pattern) + if pattern then + return text(xmlfilter(id,pattern)) + else + return text(id) + end end +xml.content = text + function xml.position(id,pattern,n) return position(xmlfilter(id,pattern),n) end |