تخطى الى المحتوى
WaTaNtEaM
/
واتان
عام
الشفرة
مشاكل
3
طلبات السحب
أجراءات
المشاريع
ويكي
حماية
أفكار
واتان/مكتبة/ serpent.lua
تضمين التغريدة
WaTaNtEaM إضافة الملفات عن طريق الرفع
1 مساهم
124 سطرًا (121 sloc) 7.69 كيلوبايت
محلي ن ، ف = " ثعبان " ، 0.28 - (ج) 2012-15 بول كولشينكو ؛ ترخيص معهد ماساتشوستس للتكنولوجيا
c المحلية ، d = " Paul Kulchenko " ، " Lua المسلسل والطابعة الجميلة "
محلي snum = {[ tostring ( 1 / 0 )] = ' 1/0 - [[math.huge]] " ، [ tostring ( - 1 / 0 )] = ' -1/0 - [[- الرياضيات. ضخمة]] " ، [ tostring ( 0 / 0 )] = ' 0/0 ' }
نوع غير صالح محلي = {thread = true ، userdata = true ، cdata = true }
الكلمة الرئيسية المحلية ، الكرة الأرضية ، G = {} ، {} ، ( _G أو ENV)
لـ ، k في ipairs ({ ' and ' ، ' break ' ، ' do ' ، ' else ' ، ' elseif ' ، ' end ' ، ' false ' ،
' for ' ، ' function ' ، ' goto ' ، ' if ' ، ' in ' ، ' local ' ، ' nil ' ، ' not ' ، ' or ' ، ' تكرار ' ،
' return ' ، ' then ' ، ' true ' ، ' until ' ، ' while ' }) do keyword [k] = true end
بالنسبة إلى k ، v في أزواج (G) قم بعمل globals [v] = k end - بناء func لتعيين الاسم
لـ _، g في ipairs ({ ' coroutine ' ، ' debug ' ، ' io ' ، ' math ' ، ' string ' ، ' table ' ، ' os ' }) فعل
بالنسبة إلى k ، v في أزواج (G [g] أو {}) قم بعمل globals [v] = g .. ' . ' .. نهاية k نهاية
الوظيفة المحلية s ( t ، الخيارات )
الاسم المحلي ، المسافة البادئة ، الفادح ، الحد الأقصى = الخيارات . الاسم ، يختار. المسافة البادئة ، يختار. قاتلة ، يختار. maxnum
محلي متناثر ، مخصص ، ضخم = خيارات. خيارات متفرقة . العرف ، وليس الخيارات. nohuge
محلي الفضاء، maxl = (الأراضي الفلسطينية المحتلة. المدمجة و ' ' أو ' ' )، (الأراضي الفلسطينية المحتلة. maxlevel أو math.huge )
local iname ، comm = ' ' .. (name or ' ' ) ، يختار. تعليق و ( tonumber (الأراضي الفلسطينية المحتلة. تعليق ) أو math.huge )
local see، sref، syms، symn = {}، { ' local ' .. iname .. ' = {} ' }، {}، 0
الدالة المحلية gensym ( val ) إرجاع ' ' .. ( tostring ( tostring (val)): gsub ( " [^٪ w] " ، " " ): gsub ( " (٪ d٪ w +) " ،
هناك حاجة إلى سلسلة (val) لأن _tostring قد ترجع قيمة غير سلسلة
وظيفة ( ق ) إذا لم سلالات SYMS [ق] ثم symn = symn + 1 . سلالات SYMS [ق] = symn نهاية عودة tostring (سلالات SYMS [ق]) نهاية )) نهاية
محلي ظيفة safestr ( ق ) عودة نوع (ق) == " رقم " و tostring (ضخمة و snum [ tostring (ق)] أو S)
أو نوع (ق) ~ = " سلسلة " و tostring (ق) - الهروب NEWLINE / 010 وEOF / 026
أو ( " ٪ q " ): التنسيق ( التنسيقات ): gsub ( " \ 010 " ، " n " ): gsub ( " \ 026 " ، " \ 026 " ) end
محلي ظيفة التعليق ( ق ، ل ) عودة بالاتصالات و (ل أو 0 ) < بالاتصالات و " - [[ ' .. tostring (ق) .. " ]] ' أو ' ' نهاية
الوظيفة المحلية globerr ( s ، l ) تُرجع globals [s] و globals [s] .. تعليق (ق ، ل) أو ليست قاتلة
و safestr ( حدد ( 2 ، pcall (tostring، s))) أو خطأ ( " Can't serialize " .. tostring (s)) end
الاسم الآمن للوظيفة المحلية ( المسار ، الاسم ) - يولد foo.bar أو foo [3] أو foo ['ba r']
local n = name == nil و ' ' أو الاسم
محلي سهل = نوع (ن) == " سلسلة " و ن: مباراة ( " ^ [٪ ل٪ ش ] [٪ ث _] * $ " ) و ليس الكلمة [ن]
local safe = عادي و n أو ' [ ' .. safestr (n) .. ' ] '
عودة (مسار أو ' ' ) .. (عادي و مسار و ' . ' أو ' ' ) .. آمنة ومأمونة نهاية
محلي alphanumsort = نوع (الأراضي الفلسطينية المحتلة. sortkeys ) == ' وظيفة ' و الأراضي الفلسطينية المحتلة. مفاتيح الفرز أو الوظيفة ( ك ، س ، ن ) - ك = مفاتيح ، س = الجدول الأصلي ، ن = الحشو
maxn local ، to = tonumber (n) أو 12 ، {number = ' a ' ، string = ' b ' }
الدالة المحلية padnum ( d ) إرجاع ( " ٪ 0 " .. tostring (maxn) .. " d " ): تنسيق ( tonumber (d)) end
table.sort (ك ، وظيفة ( أ ، ب )
فرز المفاتيح الرقمية أولاً: k [مفتاح] ليس صفريًا للمفاتيح الرقمية
إرجاع (k [a] ~ = nil و 0 أو إلى [ type (a)] أو ' z ' ) .. ( tostring (a): gsub ( " ٪ d + " ، padnum))
< (k [b] ~ = nil and 0 or to [ type (b)] or ' z ' ) .. ( tostring (b): gsub ( " ٪ d + " ، padnum)) end ) end )
دالة محلية val2str ( t ، الاسم ، المسافة البادئة ، insref ، المسار ، الفهرس العادي ، المستوى )
النوع المحلي ، المستوى ، mt = النوع (t) ، (المستوى أو 0 ) ، getmetatable (t)
مساحة محلية ، sname = اسم آمن (مسار ، اسم)
علامة محلية = ملف عادي و
(( نوع (اسم) == " عدد " ) و ' ' أو اسم .. الفضاء .. ' = ' .. مساحة) أو
(الاسم ~ = لا شيء و sname .. مسافة .. ' = ' .. مسافة أو ' ' )
إذا رأيت [ر] إذن - رأيت هذا العنصر بالفعل
sref [ # sref + 1 ] = spath .. space .. ' = ' .. space .. see [t]
العودة العلامة .. " لا شيء " .. تعليق ( " المرجع " ، ومستوى) نهاية
if type(mt) == 'table' and (mt.serialize or mt.tostring) then -- knows how to serialize itself
seen[t] = insref or spath
if mt.serialize then t = mt.serialize(t) else t = tostring(t) end
ttype = type(t) end -- new value falls through to be serialized
if ttype == "table" then
if level >= maxl then return tag..'{}'..comment('max', level) end
seen[t] = insref or spath
if next(t) == nil then return tag..'{}'..comment(t, level) end -- table empty
local maxn, o, out = math.min(#t, maxnum or #t), {}, {}
for key = 1, maxn do o[key] = key end
if not maxnum or #o < maxnum then
local n = #o -- n = n + 1; o[n] is much faster than o[#o+1] on large tables
for key in pairs(t) do if o[key] ~= key then n = n + 1; o[n] = key end end end
if maxnum and #o > maxnum then o[maxnum+1] = nil end
if opts.sortkeys and #o > maxn then alphanumsort(o, t, opts.sortkeys) end
local sparse = sparse and #o > maxn -- disable sparsness if only numeric keys (shorter output)
for n, key in ipairs(o) do
local value, ktype, plainindex = t[key], type(key), n <= maxn and not sparse
if opts.valignore and opts.valignore[value] -- skip ignored values; do nothing
or opts.keyallow and not opts.keyallow[key]
or opts.valtypeignore and opts.valtypeignore[type(value)] -- skipping ignored value types
or sparse and value == nil then -- skipping nils; do nothing
elseif ktype == 'table' or ktype == 'function' or badtype[ktype] then
if not seen[key] and not globals[key] then
sref[#sref+1] = 'placeholder'
local sname = safename(iname, gensym(key)) -- iname is table for local variables
sref[#sref] = val2str(key,sname,indent,sname,iname,true) end
sref[#sref+1] = 'placeholder'
local path = seen[t]..'['..tostring(seen[key] or globals[key] or gensym(key))..']'
sref[#sref] = path..space..'='..space..tostring(seen[value] or val2str(value,nil,indent,path))
else
out[#out+1] = val2str(value,key,indent,insref,seen[t],plainindex,level+1)
end
end
local prefix = string.rep(indent or '', level)
local head = indent and '{\n'..prefix..indent or '{'
local body = table.concat(out, ','..(indent and '\n'..prefix..indent or space))
local tail = indent and "\n"..prefix..'}' or '}'
return (custom and custom(tag,head,body,tail) or tag..head..body..tail)..comment(t, level)
elseif badtype[ttype] then
seen[t] = insref or spath
return tag..globerr(t, level)
elseif ttype == 'function' then
seen[t] = insref or spath
local ok, res = pcall(string.dump, t)
local func = ok and ((opts.nocode and "function() --[[..skipped..]] end" or
"((loadstring or load)("..safestr(res)..",'@serialized'))")..comment(t, level))
return tag..(func or globerr(t, level))
else return tag..safestr(t) end -- handle all other types
end
local sepr = indent and "\n" or ";"..space
local body = val2str(t, name, indent) -- this call also populates sref
local tail = #sref>1 and table.concat(sref, sepr)..sepr or ''
local warn = opts.comment and #sref>1 and space.."--[[incomplete output with shared/self-references skipped]]" or ''
return not name and body..warn or "do local "..body..sepr..tail.."return "..name..sepr.."end"
end
local function deserialize(data, opts)
local env = (opts and opts.safe == false) and G
or setmetatable({}, {
index = function(t,k) return t end,
call = function(t,...) error("cannot call functions") end
})
local f, res = (loadstring or load)('return '..data, nil, nil, env)
if not f then f, res = (loadstring or load)(data, nil, nil, env) end
if not f then return f, res end
if setfenv then setfenv(f, env) end
return pcall(f)
end
تخطى الى المحتوى WaTaNtEaM / واتان عام الشفرة مشاكل 3 طلبات السحب أجراءات المشاريع ويكي حماية أفكار واتان/مكتبة/ serpent.lua تضمين التغريدة WaTaNtEaM إضافة الملفات عن طريق الرفع 1 مساهم 124 سطرًا (121 sloc) 7.69 كيلوبايت محلي ن ، ف = " ثعبان " ، 0.28 - (ج) 2012-15 بول كولشينكو ؛ ترخيص معهد ماساتشوستس للتكنولوجيا c المحلية ، d = " Paul Kulchenko " ، " Lua المسلسل والطابعة الجميلة " محلي snum = {[ tostring ( 1 / 0 )] = ' 1/0 - [[math.huge]] " ، [ tostring ( - 1 / 0 )] = ' -1/0 - [[- الرياضيات. ضخمة]] " ، [ tostring ( 0 / 0 )] = ' 0/0 ' } نوع غير صالح محلي = {thread = true ، userdata = true ، cdata = true } الكلمة الرئيسية المحلية ، الكرة الأرضية ، G = {} ، {} ، ( _G أو ENV) لـ ، k في ipairs ({ ' and ' ، ' break ' ، ' do ' ، ' else ' ، ' elseif ' ، ' end ' ، ' false ' ، ' for ' ، ' function ' ، ' goto ' ، ' if ' ، ' in ' ، ' local ' ، ' nil ' ، ' not ' ، ' or ' ، ' تكرار ' ، ' return ' ، ' then ' ، ' true ' ، ' until ' ، ' while ' }) do keyword [k] = true end بالنسبة إلى k ، v في أزواج (G) قم بعمل globals [v] = k end - بناء func لتعيين الاسم لـ _، g في ipairs ({ ' coroutine ' ، ' debug ' ، ' io ' ، ' math ' ، ' string ' ، ' table ' ، ' os ' }) فعل بالنسبة إلى k ، v في أزواج (G [g] أو {}) قم بعمل globals [v] = g .. ' . ' .. نهاية k نهاية
الوظيفة المحلية s ( t ، الخيارات ) الاسم المحلي ، المسافة البادئة ، الفادح ، الحد الأقصى = الخيارات . الاسم ، يختار. المسافة البادئة ، يختار. قاتلة ، يختار. maxnum محلي متناثر ، مخصص ، ضخم = خيارات. خيارات متفرقة . العرف ، وليس الخيارات. nohuge محلي الفضاء، maxl = (الأراضي الفلسطينية المحتلة. المدمجة و ' ' أو ' ' )، (الأراضي الفلسطينية المحتلة. maxlevel أو math.huge ) local iname ، comm = ' ' .. (name or ' ' ) ، يختار. تعليق و ( tonumber (الأراضي الفلسطينية المحتلة. تعليق ) أو math.huge ) local see، sref، syms، symn = {}، { ' local ' .. iname .. ' = {} ' }، {}، 0 الدالة المحلية gensym ( val ) إرجاع ' ' .. ( tostring ( tostring (val)): gsub ( " [^٪ w] " ، " " ): gsub ( " (٪ d٪ w +) " ،
local function deserialize(data, opts) local env = (opts and opts.safe == false) and G or setmetatable({}, { index = function(t,k) return t end, call = function(t,...) error("cannot call functions") end }) local f, res = (loadstring or load)('return '..data, nil, nil, env) if not f then f, res = (loadstring or load)(data, nil, nil, env) end if not f then return f, res end if setfenv then setfenv(f, env) end return pcall(f) end
local function merge(a, b) if b then for k,v in pairs(b) do a[k] = v end end; return a; end return { _NAME = n, _COPYRIGHT = c, _DESCRIPTION = d, VERSION = v, serialize = s, load = deserialize, dump = function(a, opts) return s(a, merge({name = '', compact = true, sparse = true}, opts)) end, line = function(a, opts) return s(a, merge({sortkeys = true, comment = true}, opts)) end, block = function ( a ، opts ) return s (a، merge ({indent = ' ' ، sortkeys = true ، comment = true }، opts)) end } © 2021 GitHub، Inc. مصطلحات خصوصية حماية حالة المستندات اتصل بـ GitHub التسعير API تمرين مدونة او مذكرة عن