--[=[
Modül:utils v0.3.1
Tarih: 2015-08-14
Bu modül bazı ortak yararlı işlevler içerir.
Buraya başka bir evrensel işlev eklemek için boş bırakın.
]=]--
local export = {}
-- Tabloyu klonlama işlevi (bazen mw.clone'dan daha iyi çalışır)
function export.clone(original)
local copy = {}
for key, value in pairs(original) do
copy = value
end
return copy
end
-- Geçerli PAGENAME ve ilgili bilgileri alma işlevi
function export.get_base()
local PAGENAME = mw.title.getCurrentTitle().text
local SUBPAGENAME = mw.title.getCurrentTitle().subpageText
local NAMESPACE = mw.title.getCurrentTitle().nsText
if NAMESPACE == 'Kullanıcı' or NAMESPACE == 'Участник' then
return SUBPAGENAME
end
return PAGENAME
end
-- Sıralanmış tuşlarla tablo yineleme işlevi (sıralama işlevi farklı olabilir)
function export.spairs(t, order)
-- anahtarları topla
local keys = {}
for k in pairs(t) do keys = k end
-- sort
if order then
table.sort(keys, function(a,b) return order(t, a, b) end)
else
table.sort(keys)
end
-- yineleyici işlevini döndür
local i = 0
return function()
i = i + 1
if keys then
return keys, t]
end
end
end
-- Betiklerin çalışma süresini ölçme işlevleri (başlangıç)
function export.start()
export.started = os.clock()
end
-- Betiklerin çalışma süresini ölçme işlevleri (durdurma)
function export.stop(desc)
export.stoped = os.clock()
export.delta = export.stoped - export.started
if desc == nil then
desc = 'zaman deltası'
end
mw.log('™ ' .. desc .. ' = ' .. export.delta)
end
-- İki dizenin ortak kısmını (uzunluk) bulma işlevi
-- (dizelerin başlangıcından itibaren ortak kısım)
function export.find_common(str_1, str_2)
if not str_1 or not str_2 then
return 1
end
for pos = 1, #str_1 do
local char_1 = str_1:sub(pos, pos)
local char_2 = str_2:sub(pos, pos)
if char_1 ~= char_2 then
return pos
end
end
return 1
end
-- Listelerin diktelerinin diktesine kolayca değer eklenmesini sağlayan işlev
-- Bu yapıya örnek:
-- dict = {
-- key1 = {
-- sub_key1 = {değer1, değer2, değer3},
-- sub_key2 = {değer4, değer5},
-- },
-- key2 = {
-- sub_key3 = {değer6},
-- sub_key4 = {değer7, değer8},
-- },
-- }
function export.put_value(dict, key, sub_key, value)
if not dict then
dict = {}
end
if not dict then
dict = {}
end
table.insert(dict, value)
end
-- Listeleri yinelemeli olarak karşılaştırarak iki öğeyi karşılaştırın.
-- FIXME, liste olmayan tablolarda çalışmaz.
function export.equals(x, y)
if type(x) == "tablo" and type(y) == "tablo" then
if #x ~= #y then
return false
end
for key, value in ipairs(x) do
if not export.equals(value, y) then
return false
end
end
return true
end
return x == y
end
-- Liste öğeyi içeriyorsa true
function export.contains(tab, item)
for _, value in pairs(tab) do
if export.equals(value, item) then
return true
end
end
return false
end
-- öğe zaten yoksa listeye ekle
function export.insert_if_not(tab, item, pos)
if not export.contains(tab, item) then
if pos then
table.insert(tab, pos, item)
else
table.insert(tab, item)
end
end
end
-- listeyi kümeye dönüştür
function export.list_to_set(list)
local set = {}
for _, item in ipairs(list) do
set = true
end
return set
end
-- Normal İfade sihirli karakterlerini engelle ^$()%.*+-?)
function export.escape(value)
-- Alfasayısal olmayan her karakterin (%W) % kaçış karakterine ön ekini uygula,
-- burada %% kaçış ve %1 orijinal karakterdir
return mw.ustring.gsub(value, "(%W)","%%%1")
end
return export