--gerekli modüller veri = require("Modüleriyodik tablo/veri") --girilen parametre boş mu değil mi kontrol et local function ebd(arg) if arg == "" then return nil else return arg end end --elementlerin vikipedi bağlantılarını halleden fonksiyon function siteBaglantisi(id) return mw.wikibase.getSitelink(id) end function turAraliklari(tip, x) if tip "normal" then return ((x > 1 and x < 56) or (x > 72 and x < 88) or (x > 104 and x < 118)) elseif tip "geniş" then return (x >= 1 and x <= 118) elseif tip "lantanit" then return (x > 57 and x < 71) elseif tip "aktinit" then return (x >= 89 and x <= 103) end end local function bunlardanBiriMi(deger, tablo) local karsilastirma = deger tablo[1] for index,str in ipairs(tablo) do if index 1 then else karsilastirma = karsilastirma or deger == str end end return karsilastirma end --bu fonksiyon tireler ile ayrılan bir girdideki tüm elemanları ayırıp tek bir tabloya yerleştirmeye yarar function tireAyir(girdi) local topla = {} repeat harf = mw.ustring.match(girdi,"([^-]+)") table.insert(topla, harf) girdi = mw.ustring.match(girdi,"[^" .. harf .. "-].*") until(girdi == nil) return topla --return table.concat(topla, ", ") end function tabloTurleri(deger) --Öncelikle, bu tablonun içerisindeki her bir eleman 3 alt elemandan oluşmaktadır, bunlar; --birincisi: yana doğru kaç hücre ekleneceği --ikincisi: hangi tür hücre ekleneceği --üçüncüsü: hangi tür tablolarda kullanılacağı --İkinci seçeneğe girilen hücre türü, sayılarına göre belli ifadeler vermektedir: --0 = Boş yani beyaz olarak görünen kısımlar --1 = Satır ve sütun adlarının yazılı olduğu kısımlar (1A, 2A veya 1, 2 gibi) --2 = İki hücre kaplayan yazıların olduğu kısımlar (Grup/periyot yazısı gibi) --3 = Elementlerin bulunduğu kısımlar --son = Bu o satırın bittiği anlamına gelir, bu konmazsa yana hücreler eklenmeye devam eder local degerler = { {1,2,"n-g-p"}, {2,1,"n-g-p"}, {14,0,"g"}, {16,1,"n-g-p"}, {1,"son","n-g-p"}, {1,0,"n-g-p1"}, {1,1,"n-g-p1"}, {1,3,"n-g-y-p1"}, {16,0,"n-g-y-p1"}, {14,0,"g-y"}, {1,3,"n-g-y-p1"}, {1,"son","n-g-y-p1"}, {1,0,"n-g-p2"}, {1,1,"n-g-p2"}, {2,3,"n-g-y-p2"}, {10,0,"n-g-y-p2"}, {14,0,"g-y"}, {6,3,"n-g-y-p2"}, {1,"son","n-g-y-p2"}, {1,0,"n-g-p3"}, {1,1,"n-g-p3"}, {2,3,"n-g-y-p3"}, {10,0,"n-g-y-p3"}, {14,0,"g-y"}, {6,3,"n-g-y-p3"}, {1,"son","n-g-y-p3"}, {1,0,"n-g-p4"}, {1,1,"n-g-p4"}, {2,3,"n-g-y-p4"}, {14,0,"g-y"}, {16,3,"n-g-y-p4"}, {1,"son","n-g-y-p4"}, {1,0,"n-g-p5"}, {1,1,"n-g-p5"}, {2,3,"n-g-y-p5"}, {14,0,"g-y"}, {16,3,"n-g-y-p5"}, {1,"son","n-g-y-p5"}, {1,0,"n-g-p6"}, {1,1,"n-g-p6"}, {2,3,"n-g-y-p6"}, {1,1,"n-p6"}, {1,0,"y"}, {15,3,"g-y-p6"}, {15,3,"n-g-y-p6"}, {1,"son","n-g-y-p6"}, {1,0,"n-g-p7"}, {1,1,"n-g-p7"}, {2,3,"n-g-y-p7"}, {1,1,"n-p7"}, {1,0,"y"}, {15,3,"g-y-p7"}, {15,3,"n-g-y-p7"}, {1,"son","n-g-y-p7"}, {2,0,"n-y"}, {1,2,"n"}, {15,3,"n-y"}, {1,0,"n-y"}, {1,"son","n-y"}, {2,0,"n-y"}, {1,2,"n"}, {15,3,"n-y"}, {1,0,"n-y"}, } --yukarıdaki tablodan bize lazım olanları seçip yeni boş tablomuza aktaracağız local sonuc = {} --buradaki döngü ise seçilmesi gereken elemanları seçip "sonuc" tablosuna yerleştiriyor for _,oge in ipairs(degerler) do local iHarf = mw.ustring.sub(deger[1], 1, 1) local durum = bunlardanBiriMi(deger[1], tireAyir(oge[3])) or bunlardanBiriMi(iHarf, tireAyir(oge[3])) if deger[2] "yok" then if (oge[3] "y" and deger[1] == "normal") or --burada istisnai bir durum söz konusu (mw.ustring.match(oge[3], "y") and durum) then table.insert(sonuc, oge) end else if durum then table.insert(sonuc, oge) end end end return sonuc end function olusturTablo(frame) local args = frame:getParent.args --bu tablo parametre ile seçilmiş tablo tipini taşır local elementTablosu = tabloTurleri({args.tip, (args["başlık"] or nil)}) local periyodikSon --periyodik tablonun sonucunu bir hata olması ihtimaline karşın en başta tanıtalım --tablonun elementler dışındaki yazı hücrelerinde neler olacağını sıralayalım local yazilar = { "Grup →↓ Periyot", "1A", "2A", "3B", "4B", "5B", "6B", "7B", "8B", "8B", "8B", "1B", "2B", "3A", "4A", "5A", "6A", "7A", "8A" } if args.tip "p1" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "1") end if args.tip "p2" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "2") end if args.tip "p3" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "3") end if args.tip "p4" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "4") end if args.tip "p5" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "5") end if args.tip "p6" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "6") table.insert(yazilar, "5771") end if args.tip "p7" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "7") table.insert(yazilar, "89103") end table.insert(yazilar, "Lantanitler") table.insert(yazilar, "Aktinitler") local elementler {} local gecici {} --elementlerin veri modülünden tüm elementlerin vikiveri'den atom numarası ve simgelerini çekelim for x,e in pairs(veri.elementler) do --burada simgeleri alıyoruz simge mw.wikibase.getEntity(e[1]):formatPropertyValues('P246').value --burada da atom numarası atom mw.wikibase.getEntity(e[1]):formatPropertyValues('P1086').value --şimdi de ilgili tablolara aktarma zamanı if turAraliklari(args.tip, x) then table.insert(elementler, {atom .. "" .. simge, e[2], e[1]}) end if args.tip "normal" and (turAraliklari("lantanit", x) or turAraliklari("aktinit", x)) then table.insert(gecici, {atom .. "" .. simge, e[2], e[1]}) end end --normal görünüşte lantanit ve aktinitler aşağıda görüneceği için onları diğer elementlerden sonra en alta yüklüyoruz if args.tip "normal" then for _,a in pairs(gecici) do table.insert(elementler, a) end end local tablo {} i,j 1,1 for _,sayi in ipairs(elementTablosu) do for x 1,sayi[1],1 do if sayi[2] 0 then table.insert(tablo, "| ") elseif bunlardanBiriMi(sayi[2], {1,2}) then --burası grup ve periyotların sütunları içindir --burası ayrıca iki kare yer kaplayan grup/sütun yazısı veya lantanit/aktinit yazıları içindir if yazilar[j] then table.insert(tablo, "|" .. (sayi[2] 2 and " colspan '2' " or "") .. "class 'yazi' | ") end j j + 1 elseif sayi[2] 3 then --burası da tüm element (lantanit ve aktinitler hariç) kutularını ayarlar if elementler then table.insert(tablo, "| class='element' style='background-color: #" .. elementler[2] .. ";' |[[" .. siteBaglantisi(elementler[3]) .. "|]]") end i = i + 1 elseif sayi[2] "son" then table.insert(tablo, "|-") end end end local yazisiz args["yazı"] "yok" if tablo[1] then periyodikSon = "" else periyodikSon = "" end return periyodikSon end return {olusturTablo = olusturTablo}