Modül:Kategori/test

Vikipedi, özgür ansiklopedi
Gezinti kısmına atla Arama kısmına atla
Modül belgelemesi[gör] [değiştir] [geçmiş] [temizle]

{{otomatik kategori}} şablonunu çalıştıran modüldür.

Çalışma mantığı[kaynağı değiştir]

  1. Önce sayfa adını işleme sokuyoruz. Mesela 2000 doğumlular.
  2. Bu sayfa adını parçalarına ayırıyoruz. Baştaki tüm sayıları yıl yerine sayıyoruz; çünkü en başta daima yıl olacağı biliniyor (şimdilik, eğer yılın başta olmadığı durumlar da bu modüle dahil edilirse buraya yeni argümanlar ekleyebiliriz). Yılın devamındaki tüm sözcükleri de sayfanın türü yani kategori adı olarak sayıyoruz. Bu durumda yılımız 2000, kategori adımız da doğumlular oluyor.
  3. Şimdi de bulduğumuz kategori adına göre işleme devam etmeliyiz. Modül:Kategori/veri sayfasında listelenen nesneler arasından doğumlular başlığını saptıyoruz. 2000 doğumlular veya 2000'lerde doğanlar gibi sayfaların ortak kategori nesnesi bu.
  4. En başta, nesnenin kategori değerine göre yukarıya bulunduğu yıldan 5 değer öncesi ve 5 değer sonrasına kadar mevcut bir gezinti çubuğu eklenir. Bu çubuğun alt satırında bir de ebeveyn çubuk bulunur. Bu da, mesela bir yıl kategorisindeysek şu anda olduğu gibi; 2000 doğumlular bir yıl kategorisi. Bunun bir üstü onyıl kategorisidir. Yani 2000'lerde doğanlar. Eğer mevcut kategorinin bir üstü yani onyıl kategorisi mevcutsa ebeveyn çubuk da, gezinti çubuğu ile birlikte görünür. Yoksa yalnızca gezinti çubuğu görünür. Ama biz zaten bir onyıl kategorisindeysek bu defa onyıllar ebeveyn çubuk değil, gezinti çubuğu olurlar. Çünkü her zaman bulunduğumuz kategorinin yıl tipi bizim asıl gezinti çubuğumuzdur. Bu durumda 2000'lerde doğanlar kategorisinin ebeveyn çubuğu da yüzyıllar olur. Yani 21. yüzyılda doğanlar. Gidebildiğimiz kadar üst rütbeye çıkabiliriz yani. Fakat görüntüleyebileceğimiz çubuk sayısı her sayfada iki adettir. Bir gezinti çubuğu ve bir de ebeveyn çubuk.
  5. Çubukların hemen altında açıklama yazıları mevcuttur. Nesnemizin bir açıklama yazısı var ise, onu gösteririz. Yoksa da boş görüntülenir.
  6. Açıklama yazısının yanında, sağ tarafa sabit bir Commons bağlantı şablonu da bulunabilir. Bu da şu şekilde çalışmakta, sayfa eğer bir vikiveri ögesine bağlıysa bu ögeyi çağırıyoruz. Daha sonra bu ögenin bir Commons değeri olup olmadığını kontrol ediyoruz. Varsa da şablonu ekliyoruz.
  7. Son olarak da yukarıda ebeveynler değerlerinde anlatıldığı şekilde, tüm ebeveynler, sıra anahtarları kullanılarak sayfaya eklenir. Yani kategori, eklenmesi gereken tüm üst kategorilere eklenir.

Nesnelerin yapısı[kaynağı değiştir]

Bir nesnenin yapısı şu şekildedir (her nesnede aynı etiketler mevcut):

k["doğanlar"] = {
	"doğumlular",
	ek = {"y", "d"},
	ebeveynler = {"başlangıçlar", "kişiler"},
	sira_anahtari = {"D", "D"},
	kademe = 4,
	aciklama = "{{{yılda}}} doğmuş olan insanlar",
	bak = {"ölenler"},
	gore = "doğum",
}

numaralı değerler[kaynağı değiştir]

1, 2, 3 veya 4 numaralı değerler şu anlamda kullanılır; mesela genel olarak eserler kategorileri şu şekildedir:

Görüleceği üzere tüm kademelerde (yıl, onyıl, yüzyıl ve binyıl) sonuna eklenen kısım aynı ve bu eserler. Ama bazu durumlarda bu adlar aynı olmayabilir. Yukarıdaki doğanlar nesnesinde 1 numaralı değer doğumlular olarak girilmiş, bunun sebebi şudur:

Birinci kademede (yıl değerinde) doğumlular yazılırken üst kademelerde doğanlar yazılır. Eğer bu durum şöyle olsaydı:

  • 2012'de doğanlar
  • 2010'lar doğumlular
  • 21. yüzyılda doğanlar
  • 3. binyılda doğanlar

Bu defa da nesnede şöyle bir giriş yapılması gerekirdi:

k["doğanlar"] = {
	nil, "doğumlular"
}

1 numaralı değeri geçersiz kılacak "nil" değerini girmeliyiz ve ardından 2 numaralı değere de ikinci kademe kategorinin (onyıl) adında doğumlular eklendiği için bu değeri yazmalıyız. 3 ve 4 numaralı değerleri kullanmıyoruz, çünkü bir farklılık olmadığı sürece gerek yok.

ek=[kaynağı değiştir]

Bu değer bir nesne tipindeki yıl, onyıl, yüzyıl veya binyıl değerinden sonra "de, da" eklerinin eklenip eklenmeyeceğini saptamamıza yardım eder. Bu değerin tipi bir string de olabilir, table da. Yukarıda gördüğümüz örnekte bir tablo olarak eklenmiş. Bunun sebebi şu:

Bu listede yıl kademesinde ek yok, fakat üst kademelerde var. Bu sebeple şu şekilde tablo eklenmiş: {"y", "d"} Birinci "y" değeri, "yanlış" demek, yani ek eklenmemeli. İkinci "d" değeri ise "doğru" demek yani ek eklenmeli. Bunun sıralaması da şu şekildedir, bu tablo içerisine 4 numaraya kadar değer eklenebilir, her bir değer bir kademe (yıl, onyıl, yüzyıl veya binyıl) içindir. Birinci değer yıl kademesi içindir, ikinci değer onyıl kademesi içindir ve eğer devamında bir değer yoksa ikinci değerde olduğu gibi kullanılır.

Tabi hepsi birbiri ile tutarlı ise, yukarıdaki eserler örneğindeki gibi. Buraya tablo yerine ek = "d", şeklinde bir değer eklenir yalnızca. Bu da her kademede ek eklenmesi gerektiğini söyler.

ebeveynler=[kaynağı değiştir]

Kategorinin eklenmesi gereken üst kategorilerin tipine göre kategori adlarının listesini bize verir. Yukarıdaki durumda ilk ebeveynimiz başlangıçlar mesela. Bu demek oluyor ki, en başta sayfa adından ayırdığımız yıl değerini en başa ekleyip uygun ebeveyne eklememiz gerek. Yılımız 2000 idi. Yani ilk ebeveynimiz 2000'de başlangıçlar olacak. Burada yılın ekinin eklenip eklenmeyeceğini de başlangıçlar nesnesine bakarak anlıyoruz:

k["başlangıçlar"] = {
	ek = "d",
	ebeveynler = {"kategoriler"},
	sira_anahtari = {"B"},
	kademe = 4,
}

İkinci ebeveynimiz de kişiler, aynı işlem bu ebeveyne de yapılır.

Şimdi ise, bir üst kademe kategorisine geçmemiz gerek, bir üst kademe onyıl kategorisi olduğu için mevcut yılın bulunduğu onyılı saptıyoruz öncelikle, ki bu da 2000'ler, yani sonuç olarak da 2000'lerde doğanlar ebeveynini elde ediyoruz. Her bir nesnenin bir üst seviyedeki kategorisi otomatik olarak saptanmaktadır. Yani, bu durumda 2000'lerde doğanlar nesnesinin üst kategorisini elde ettik, fakat eğer bu tipi onyıla göre ayırıyorsak bu kategori eklenir. Aksi takdirde eklenmez. Bir üst kademe kategorisinin hangi durumlarda eklenip eklenmeyeceği aşağıdaki kademe= başlığında açıklanmıştır.

sira_anahtari=[kaynağı değiştir]

Bir tablodur. Bu tablonun içerisinde sırasıyla her ebeveyne eklenecek olan kategori anahtarı bulunur. Kategori anahtarı ise, bir kategori eklerken sıralanacağı harfi belirler. Yani [[Kategori:2020'de sanat|E]] ifadesindeki E bir kategori anahtarıdır. Her kategori, her ebeveynine farklı bir anahtar ile eklenebilir. Önemli olan ebeveynlerin ve anahtarların aynı sıralamada olmasıdır.

kademe=[kaynağı değiştir]

Bir kategori tipinin hangi kademeye kadar devam edeceğini belirtir. Mesela yukarıdaki örnekte bu değer 4 olarak belirlenmiş. Bu demek oluyor ki, doğanlar kategorilerini yıldan, binyıla kadar ayırt edebiliyoruz. Fakat derleme albümleri nesnesini incelediğimizde:

k["derleme albümleri"] = {
	ek = "y",
	ebeveynler = {"albümler"},
	sira_anahtari = {"D"},
	kademe = 2,
	sonHarfSil = true,
}

Görüyoruz ki, buradaki kademe 2, yani bu derleme albümlerini yalnızca yıla ve onyıla göre ayırt edebiliyoruz. Bu kademe değerleri zamanla yoğunluğa göre değiştirilebilir.

aciklama=[kaynağı değiştir]

Sayfada eğer bir açıklama yazısı eklenecek ise bu yazıdır.

bak=[kaynağı değiştir]

Eğer {{kategori ayrıca bakınız}} şablonu ile en başa eklenmesi gereken başka bir kategori varsa, bunu buraya ekleyebiliriz. Örnekte {"ölenler"} şeklinde eklenmiş. Bir tablonun içerisinde "ölenler" değeri var. Yani ölenler nesnesini çağırıp onun aynı kademediki karşılık kategorisini en üste ekliyoruz.

sonHarfSil=[kaynağı değiştir]

Bu varsa true değeri ile eklenebilir. Bu şu amaç için kullanılır, mesela derleme albümleri kategorileri şu şekildedir:

Ama bunların her biri şöyle ana kategorilere sahiptir:

Görüldüğü üzere "yıla göre ..." ifadesinde kullanılırken derleme albümleri ifadesindeki son harf olan "i" silinmiştir, yani eğer bu değer girilirse göre kategorilerinde hep son harf silinir. Benzer durumlar; "2010 şarkıları", "2010 albümleri" vs...

gore=[kaynağı değiştir]

Bu değer Yıla göre derleme albümler veya Döneme göre müzik tarzı kategoriler için kullanılan bir değerdir. Mesela en üstteki örneğimizde bu değer gore = "doğum", şeklinde girilmiş. Bu demek oluyor ki, Döneme göre doğanlar kategorisindeysek, bu kategorinin üst kategorisi "doğanlar" veya "doğumlular" değil "doğum" şeklinde olmalıdır.

Bu değer eğer üst olursa, Yıla göre remiks albümlerinde olduğu gibi, bunun üst kategorisi yani bir "Döneme göre ..." kategorisi yoktur, bu sebeple de direkt Remiks albümleri kategorisine eklenir.

Bu değer eğer hayır olursa, Döneme göre başlayan televizyon dizilerinde olduğu gibi, bunun üst kademesi eklenmez, yalnızca ebeveynler değerleri eklenir.

Veri modülleri[kaynağı değiştir]

Eğer bir ana kategori genişlemiş ise bunun alt kategorisinin modülü ayrıca açılabilir.

Liste[kaynağı değiştir]

Tüm veriler detaylıca buradan incelenebilir:

veri
2020 yılı örnek alınmıştır.
Kademeler Yıl Son eki
arkeolojik buluntular
yıla göre 2020'de arkeolojik buluntular
onyıla göre 2020'lerde arkeolojik buluntular
yüzyıla göre 21. yüzyılda arkeolojik buluntular
döneme göre arkeolojik buluntular

Ebeveynler: bilim

Açıklama: Bu kategori, [[{{{yılda}}}]] bulunan arkeolojik buluntuları içermektedir

ayaklanmalar
yıla göre 2020'de ayaklanmalar
onyıla göre 2020'lerde ayaklanmalar
yüzyıla göre 21. yüzyılda ayaklanmalar
döneme göre ayaklanmalar

Ebeveynler: çatışmalar, suçlar

askerî tarih
yıla göre 2020'de askerî tarih
onyıla göre 2020'lerde askerî tarih
yüzyıla göre 21. yüzyılda askerî tarih
döneme göre askerî tarih

Ebeveynler: kategoriler

başlangıçlar
yıla göre 2020'de başlangıçlar
onyıla göre 2020'lerde başlangıçlar
yüzyıla göre 21. yüzyılda başlangıçlar
binyıla göre 3. binyılda başlangıçlar
döneme göre başlangıçlar

Ebeveynler: kategoriler

Ayrıca bakınız: sonlar

bilim
yıla göre 2020'de bilim
onyıla göre 2020'lerde bilim
yüzyıla göre 21. yüzyılda bilim
binyıla göre 3. binyılda bilim
döneme göre bilim

Ebeveynler: kategoriler

çatışmalar
yıla göre 2020'de çatışmalar
onyıla göre 2020'lerde çatışmalar
yüzyıla göre 21. yüzyılda çatışmalar
binyıla göre 3. binyılda çatışmalar
döneme göre çatışmalar

Ebeveynler: olaylar, askerî tarih, uluslararası ilişkiler

Eurovision Şarkı Yarışması
yıla göre 2020 Eurovision Şarkı Yarışması

Ebeveynler: şarkı yarışmaları

ekonomi
yıla göre 2020'de ekonomi
onyıla göre 2020'lerde ekonomi
yüzyıla göre 21. yüzyılda ekonomi
döneme göre ekonomi

Ebeveynler: kategoriler

feshedilmiş teknoloji şirketleri
yıla göre 2020'de feshedilmiş teknoloji şirketleri
onyıla göre 2020'lerde feshedilmiş teknoloji şirketleri
feshedildiği döneme göre teknoloji şirketleri

Ebeveynler: teknoloji, kapanan şirketler

festivaller
yıla göre 2020'de festivaller
onyıla göre 2020'lerde festivaller
yüzyıla göre 21. yüzyılda festivaller
döneme göre festivaller

Ebeveynler: kategoriler

feshedilmiş oluşumlar
yıla göre 2020'de feshedilmiş oluşumlar
onyıla göre 2020'lerde feshedilmiş oluşumlar
yüzyıla göre 21. yüzyılda feshedilmiş oluşumlar
binyıla göre 3. binyılda feshedilmiş oluşumlar
feshedildiği döneme göre oluşumlar

Ebeveynler: sonlar

Ayrıca bakınız: kurulan oluşumlar

feshedilmiş internet içerikleri
yıla göre 2020'de feshedilmiş internet içerikleri
onyıla göre 2020'lerde feshedilmiş internet içerikleri
feshedildiği döneme göre internet içerikleri

Ebeveynler: feshedilmiş oluşumlar, internet kültürü, kapanan medya şirketleri, feshedilmiş teknoloji şirketleri

Ayrıca bakınız: kurulan internet içerikleri

feshedilmiş kuruluşlar
yıla göre 2020'de feshedilmiş kuruluşlar
onyıla göre 2020'lerde feshedilmiş kuruluşlar
yüzyıla göre 21. yüzyılda feshedilmiş kuruluşlar
feshedildiği döneme göre kuruluşlar

Ebeveynler: feshedilmiş oluşumlar

Ayrıca bakınız: kurulan kuruluşlar

gemiler
yıla göre 2020 gemileri
onyıla göre 2020'ler gemileri
yüzyıla göre 21. yüzyıl gemileri
döneme göre gemiler

Ebeveynler: ulaşım, tanıtılan taşıtlar

hukuk
yıla göre 2020'de hukuk
onyıla göre 2020'lerde hukuk
yüzyıla göre 21. yüzyılda hukuk
döneme göre hukuk

Ebeveynler: kategoriler

internet kültürü
yıla göre 2020'de internet kültürü
onyıla göre 2020'lerde internet kültürü

Ebeveynler: teknoloji, medya

kapatılan siyasi partiler
yıla göre 2020'de kapatılan siyasi partiler
onyıla göre 2020'lerde kapatılan siyasi partiler
yüzyıla göre 21. yüzyılda kapatılan siyasi partiler
feshedildiği döneme göre siyasi partiler

Ebeveynler: siyaset, feshedilmiş kuruluşlar

kurulan spor kuruluşları

Ebeveynler: kurulan kuruluşlar, spor

kurulan bölgeler ve ülkeler
yıla göre 2020'de kurulan bölgeler ve ülkeler
onyıla göre 2020'lerde kurulan bölgeler ve ülkeler
yüzyıla göre 21. yüzyılda kurulan bölgeler ve ülkeler
binyıla göre 3. binyılda kurulan bölgeler ve ülkeler
kurulduğu döneme göre bölgeler ve ülkeler

Ebeveynler: kurulan oluşumlar, siyaset, uluslararası ilişkiler

kurulan yayınlar

Ebeveynler: kurulan oluşumlar

kurulan spor kulüpleri

Ebeveynler: kurulan kurulan spor kuruluşları

kurulan medya şirketleri
yıla göre 2020'de kurulan medya şirketleri
onyıla göre 2020'lerde kurulan medya şirketleri
yüzyıla göre 21. yüzyılda kurulan medya şirketleri
kurulduğu döneme göre medya şirketleri

Ebeveynler: medya, kurulan şirketler

Ayrıca bakınız: kapanan medya şirketleri

kurulan internet içerikleri
yıla göre 2020'de kurulan internet içerikleri
onyıla göre 2020'lerde kurulan internet içerikleri
kurulduğu döneme göre internet içerikleri

Ebeveynler: kurulan oluşumlar, internet kültürü, kurulan medya şirketleri, kurulan teknoloji şirketleri

Ayrıca bakınız: feshedilmiş internet içerikleri

kurulan kuruluşlar
yıla göre 2020'de kurulan kuruluşlar
onyıla göre 2020'lerde kurulan kuruluşlar
yüzyıla göre 21. yüzyılda kurulan kuruluşlar
binyıla göre 3. binyılda kurulan kuruluşlar
kurulduğu döneme göre kuruluşlar

Ebeveynler: kurulan oluşumlar

Ayrıca bakınız: feshedilmiş kuruluşlar

kurulan korumalı bölgeler

Ebeveynler: kurulan oluşumlar, çevre

kurulan teknoloji şirketleri
yıla göre 2020'de kurulan teknoloji şirketleri
onyıla göre 2020'lerde kurulan teknoloji şirketleri
yüzyıla göre 21. yüzyılda kurulan teknoloji şirketleri
kurulduğu döneme göre teknoloji şirketleri

Ebeveynler: teknoloji, kurulan şirketler

kapanan şirketler
yıla göre 2020'de kapanan şirketler
onyıla göre 2020'lerde kapanan şirketler
yüzyıla göre 21. yüzyılda kapanan şirketler
feshedildiği döneme göre şirketler

Ebeveynler: ekonomi, feshedilmiş kuruluşlar

kurulan futbol kulüpleri

Ebeveynler: kurulan spor kulüpleri, futbol

kurulan şirketler

Ebeveynler: ekonomi, kurulan kuruluşlar

kapanan medya şirketleri
yıla göre 2020'de kapanan medya şirketleri
onyıla göre 2020'lerde kapanan medya şirketleri
yüzyıla göre 21. yüzyılda kapanan medya şirketleri
feshedildiği döneme göre medya şirketleri

Ebeveynler: medya, kapanan şirketler

Ayrıca bakınız: kurulan medya şirketleri

kurulan yinelenen olaylar
yıla göre 2020'de kurulan yinelenen olaylar
onyıla göre 2020'lerde kurulan yinelenen olaylar
yüzyıla göre 21. yüzyılda kurulan yinelenen olaylar
binyıla göre 3. binyılda kurulan yinelenen olaylar
kurulduğu döneme göre yinelenen olaylar

Ebeveynler: kurulan oluşumlar

kurulan oluşumlar
yıla göre 2020'de kurulan oluşumlar
onyıla göre 2020'lerde kurulan oluşumlar
yüzyıla göre 21. yüzyılda kurulan oluşumlar
binyıla göre 3. binyılda kurulan oluşumlar
kurulduğu döneme göre oluşumlar

Ebeveynler: başlangıçlar

Ayrıca bakınız: feshedilmiş oluşumlar

kurulan siyasi partiler

Ebeveynler: siyaset, kurulan kuruluşlar

müzik festivalleri
yıla göre 2020'de müzik festivalleri

Ebeveynler: müzik, festivaller

medya
yıla göre 2020'de medya
onyıla göre 2020'lerde medya
yüzyıla göre 21. yüzyılda medya
döneme göre medya

Ebeveynler: kategoriler

olaylar
yıla göre 2020'de olaylar
onyıla göre 2020'lerde olaylar
yüzyıla göre 21. yüzyılda olaylar
binyıla göre 3. binyılda olaylar
döneme göre olaylar

Ebeveynler: kategoriler

oluşturulan ödüller

Ebeveynler: kurulan oluşumlar

otomobiller
onyıla göre 2020'ler otomobilleri
döneme göre otomobiller

Ebeveynler: tanıtılan taşıtlar

siyaset
yıla göre 2020'de siyaset
onyıla göre 2020'lerde siyaset
yüzyıla göre 21. yüzyılda siyaset
binyıla göre 3. binyılda siyaset
döneme göre siyaset

Ebeveynler: kategoriler

spor
yıla göre 2020'de spor
onyıla göre 2020'lerde spor
yüzyıla göre 21. yüzyılda spor
binyıla göre 3. binyılda spor
döneme göre spor

Ebeveynler: kategoriler

sonlar
yıla göre 2020'de sonlar
onyıla göre 2020'lerde sonlar
yüzyıla göre 21. yüzyılda sonlar
binyıla göre 3. binyılda sonlar
döneme göre sonlar

Ebeveynler: kategoriler

Ayrıca bakınız: başlangıçlar

suçlar
yıla göre 2020'de suçlar
onyıla göre 2020'lerde suçlar
yüzyıla göre 21. yüzyılda suçlar
döneme göre suçlar

Ebeveynler: hukuk

şarkı yarışmaları
yıla göre 2020'de şarkı yarışmaları

Ebeveynler: yarışmalar, müzik festivalleri

tanıtılan video oyunu karakterleri

Ebeveynler: tanıtılan kurgusal karakterler

tanıtılan ürünler
yıla göre 2020'de tanıtılan ürünler
onyıla göre 2020'lerde tanıtılan ürünler
yüzyıla göre 21. yüzyılda tanıtılan ürünler
tanıtıldığı döneme göre ürünler

Ebeveynler: tanıtımları, ekonomi

tanıtılan taşıtlar
yıla göre 2020'de tanıtılan taşıtlar
onyıla göre 2020'lerde tanıtılan taşıtlar
yüzyıla göre 21. yüzyılda tanıtılan taşıtlar
tanıtıldığı döneme göre taşıtlar

Ebeveynler: tanıtılan ürünler, ulaşım

tanıtılan çizgi karakterler

Ebeveynler: tanıtılan kurgusal karakterler

teknoloji
yıla göre 2020'de teknoloji
onyıla göre 2020'lerde teknoloji
yüzyıla göre 21. yüzyılda teknoloji
döneme göre teknoloji

Ebeveynler: kategoriler

televizyon
yıla göre 2020'de televizyon
onyıla göre 2020'lerde televizyon
yüzyıla göre 21. yüzyılda televizyon
döneme göre televizyon

Ebeveynler: medya

tanıtımlar
yıla göre 2020 tanıtımları
onyıla göre 2020'ler tanıtımları
yüzyıla göre 21. yüzyıl tanıtımları
binyıla göre 3. binyıl tanıtımları
döneme göre tanıtımlar

Ebeveynler: başlangıçlar

tanıtılan film karakterleri

Ebeveynler: tanıtılan kurgusal karakterler

tanıtılan kurgusal karakterler

Ebeveynler: tanıtımları

uluslararası ilişkiler
yıla göre 2020'de uluslararası ilişkiler
onyıla göre 2020'lerde uluslararası ilişkiler
yüzyıla göre 21. yüzyılda uluslararası ilişkiler
binyıla göre 3. binyılda uluslararası ilişkiler
döneme göre uluslararası ilişkiler

Ebeveynler: siyaset

ulaşım
yıla göre 2020'de ulaşım
onyıla göre 2020'lerde ulaşım
yüzyıla göre 21. yüzyılda ulaşım
binyıla göre 3. binyılda ulaşım
döneme göre ulaşım

Ebeveynler: kategoriler

yarışmalar
yıla göre 2020'de yarışmalar

Ebeveynler: kategoriler

veri/kişiler
2020 yılı örnek alınmıştır.
Kademeler Yıl Son eki
astronomlar
yüzyıla göre 21. yüzyıl astronomları
döneme göre astronomlar

Ebeveynler: bilim insanları

botanikçiler
yüzyıla göre 21. yüzyıl botanikçileri

Ebeveynler: biyologlar

biyologlar
yüzyıla göre 21. yüzyıl biyologları

Ebeveynler: bilim insanları

bilim insanları
yüzyıla göre 21. yüzyıl bilim insanları
döneme göre bilim insanları

Ebeveynler: bilim, kişiler

coğrafyacılar
yüzyıla göre 21. yüzyıl coğrafyacıları

Ebeveynler: bilim insanları

doğanlar
yıla göre 2020 doğumlular
onyıla göre 2020'lerde doğanlar
yüzyıla göre 21. yüzyılda doğanlar
binyıla göre 3. binyılda doğanlar
döneme göre doğanlar

Ebeveynler: başlangıçlar, kişiler

Açıklama: {{{yılda}}} doğmuş olan insanlar

Ayrıca bakınız: ölenler

fizikçiler
yüzyıla göre 21. yüzyıl fizikçileri

Ebeveynler: bilim insanları

hekimler
yüzyıla göre 21. yüzyıl hekimleri

Ebeveynler: bilim insanları

kişiler
yıla göre 2020 kişileri
onyıla göre 2020'ler kişileri
yüzyıla göre 21. yüzyıl kişileri
binyıla göre 3. binyıl kişileri
döneme göre kişiler

Ebeveynler: kategoriler

Ayrıca bakınız: doğanlar, ölenler

kimyagerler
yüzyıla göre 21. yüzyıl kimyagerleri

Ebeveynler: bilim insanları

kartograflar
yüzyıla göre 21. yüzyıl kartografları

Ebeveynler: coğrafyacılar

mühendisler
yüzyıla göre 21. yüzyıl mühendisleri

Ebeveynler: bilim insanları, teknoloji

matematikçiler
yüzyıla göre 21. yüzyıl matematikçileri

Ebeveynler: bilim insanları

ölenler
yıla göre 2020 yılında ölenler
onyıla göre 2020'lerde ölenler
yüzyıla göre 21. yüzyılda ölenler
binyıla göre 3. binyılda ölenler
döneme göre ölenler

Ebeveynler: sonlar, kişiler

Açıklama: {{{yılda}}} ölmüş olan insanlar

Ayrıca bakınız: doğanlar

tarihçiler
yüzyıla göre 21. yüzyıl tarihçileri
döneme göre tarihçiler

Ebeveynler: kişiler

veri/sanat
2020 yılı örnek alınmıştır.
Kademeler Yıl Son eki
albümler
yıla göre 2020 albümleri
onyıla göre 2020'ler albümleri
yüzyıla göre 21. yüzyıl albümleri
döneme göre albümler

Ebeveynler: müzik, eserler

başlayan televizyon dizileri
yıla göre 2020'de başlayan televizyon dizileri
onyıla göre 2020'lerde başlayan televizyon dizileri
yüzyıla göre 21. yüzyılda başlayan televizyon dizileri
başladığı döneme göre televizyon dizileri

Ebeveynler: başlayan televizyon programları, televizyon dizileri

Ayrıca bakınız: sona eren televizyon dizileri

başlayan yarışma programları

Ebeveynler: başlayan televizyon programları, yarışma programları

başlayan internet dizileri
yıla göre 2020'de başlayan internet dizileri
onyıla göre 2020'lerde başlayan internet dizileri
başladığı döneme göre internet dizileri

Ebeveynler: tanıtımlar

Ayrıca bakınız: sona eren internet dizileri

başlayan televizyon programları
yıla göre 2020'de başlayan televizyon programları
onyıla göre 2020'lerde başlayan televizyon programları
yüzyıla göre 21. yüzyılda başlayan televizyon programları
başladığı döneme göre televizyon programları

Ebeveynler: tanıtımlar, televizyon programları

Ayrıca bakınız: sona eren televizyon programları

çıkış albümleri
yıla göre 2020 tarihli çıkış albümleri

Ebeveynler: albümler, çıkış eserleri

çıkış eserleri
yıla göre 2020 çıkış eserleri
onyıla göre 2020'ler çıkış eserleri
yüzyıla göre 21. yüzyıl çıkış eserleri

Ebeveynler: eserler, başlangıçlar

çizgi romanlar
yıla göre 2020 çizgi romanları
onyıla göre 2020'lerde çizgi romanlar
yüzyıla göre 21. yüzyılda çizgi romanlar
döneme göre çizgi romanlar

Ebeveynler: medya, sanat

derleme albümler
yıla göre 2020 derleme albümleri
onyıla göre 2020'ler derleme albümleri
döneme göre derleme albümler

Ebeveynler: albümler

EP'ler
yıla göre 2020 EP'leri
onyıla göre 2020'ler EP'leri
döneme göre EP'ler

Ebeveynler: albümler

Eurovision şarkıları
yıla göre 2020 Eurovision şarkıları

Ebeveynler: şarkılar, Eurovision Şarkı Yarışması

edebiyat
yüzyıla göre 21. yüzyılda edebiyat
binyıla göre 3. binyılda edebiyat
döneme göre edebiyat

Ebeveynler: sanat

eserler
yıla göre 2020'de eserler
onyıla göre 2020'lerde eserler
yüzyıla göre 21. yüzyılda eserler
binyıla göre 3. binyılda eserler
döneme göre eserler

Ebeveynler: sanat

Açıklama: Bu kategori {{{yılda}}} yayınlanan, üretilen veya oluşturulan eserler ile ilgilidir

filmler
yıla göre 2020 çıkışlı filmler
onyıla göre 2020'lerde filmler
yüzyıla göre 21. yüzyılda filmler
döneme göre filmler

Ebeveynler: sinema, eserler

heykeller
yıla göre 2020 heykelleri
onyıla göre 2020'ler heykelleri
yüzyıla göre 21. yüzyıl heykelleri
döneme göre heykeller

Ebeveynler: eserler

müzikaller
yıla göre 2020'de müzikaller
onyıla göre 2020'lerde müzikaller
yüzyıla göre 21. yüzyılda müzikaller
döneme göre müzikaller

Ebeveynler: eserler, müzik, tiyatro

mimarlık
yıla göre 2020'de mimarlık
onyıla göre 2020'lerde mimarlık
yüzyıla göre 21. yüzyılda mimarlık
binyıla göre 3. binyılda mimarlık
döneme göre mimarlık

Ebeveynler: eserler

müzik
yıla göre 2020'de müzik
onyıla göre 2020'lerde müzik
yüzyıla göre 21. yüzyılda müzik
döneme göre müzik

Ebeveynler: sanat

mangalar
yıla göre 2020 mangaları
onyıla göre 2020'ler mangaları
döneme göre mangalar

Ebeveynler: eserler, tanıtılan çizgi romanlar

remiks albümleri
yıla göre 2020 remiks albümleri

Ebeveynler: albümler

sona eren televizyon dizileri
yıla göre 2020'de sona eren televizyon dizileri
onyıla göre 2020'lerde sona eren televizyon dizileri
yüzyıla göre 21. yüzyılda sona eren televizyon dizileri
sona erdiği döneme göre televizyon dizileri

Ebeveynler: sona eren televizyon programları, televizyon dizileri

Ayrıca bakınız: başlayan televizyon dizileri

sona eren televizyon programları
yıla göre 2020'de sona eren televizyon programları
onyıla göre 2020'lerde sona eren televizyon programları
yüzyıla göre 21. yüzyılda sona eren televizyon programları
sona erdiği döneme göre televizyon programları

Ebeveynler: feshedilmiş oluşumlar, televizyon programları

Ayrıca bakınız: başlayan televizyon programları

sona eren internet dizileri
yıla göre 2020'de sona eren internet dizileri
onyıla göre 2020'lerde sona eren internet dizileri
sona erdiği döneme göre internet dizileri

Ebeveynler: feshedilmiş internet içerikleri

Ayrıca bakınız: başlayan internet dizileri

sinema
yıla göre 2020'de sinema
onyıla göre 2020'lerde sinema
yüzyıla göre 21. yüzyılda sinema
döneme göre sinema

Ebeveynler: medya, sanat

sanat
yıla göre 2020'de sanat
onyıla göre 2020'lerde sanat
yüzyıla göre 21. yüzyılda sanat
binyıla göre 3. binyılda sanat
döneme göre sanat

Ebeveynler: kategoriler

single'lar
yıla göre 2020 single'ları
onyıla göre 2020'ler single'ları
döneme göre single'lar

Ebeveynler: müzik, eserler

şarkılar
yıla göre 2020 şarkıları
onyıla göre 2020'ler şarkıları
yüzyıla göre 21. yüzyıl şarkıları
döneme göre şarkılar

Ebeveynler: müzik, eserler

televizyon sezonları
yıla göre 2020 televizyon sezonları
onyıla göre 2020'ler televizyon sezonları
yüzyıla göre 21. yüzyıl televizyon sezonları
döneme göre televizyon sezonları

Ebeveynler: televizyon, eserler

televizyon dizileri
yıla göre 2020'de televizyon dizileri
onyıla göre 2020'lerde televizyon dizileri
yüzyıla göre 21. yüzyılda televizyon dizileri
döneme göre televizyon dizileri

Ebeveynler: televizyon programları

tanıtılan çizgi romanlar
yıla göre 2020'de tanıtılan çizgi romanlar
onyıla göre 2020'lerde tanıtılan çizgi romanlar
yüzyıla göre 21. yüzyılda tanıtılan çizgi romanlar
tanıtıldığı döneme göre çizgi romanlar

Ebeveynler: çizgi romanlar, tanıtımlar, kurulan yayınlar, eserler

televizyon programları
yıla göre 2020'de televizyon programları
onyıla göre 2020'lerde televizyon programları
yüzyıla göre 21. yüzyılda televizyon programları
döneme göre televizyon programları

Ebeveynler: televizyon, eserler

tiyatro
yıla göre 2020'de tiyatro
onyıla göre 2020'lerde tiyatro
yüzyıla göre 21. yüzyılda tiyatro
binyıla göre 3. binyılda tiyatro
döneme göre tiyatro

Ebeveynler: sanat

televizyon bölümleri
yıla göre 2020 televizyon bölümleri
onyıla göre 2020'ler televizyon bölümleri
yüzyıla göre 21. yüzyıl televizyon bölümleri
döneme göre televizyon bölümleri

Ebeveynler: televizyon, eserler

tamamlanan yapılar
yıla göre 2020'de tamamlanan yapılar
onyıla göre 2020'lerde tamamlanan yapılar
yüzyıla göre 21. yüzyılda tamamlanan yapılar
binyıla göre 3. binyılda tamamlanan yapılar
tamamlandığı döneme göre yapılar

Ebeveynler: mimarlık

video filmleri
yıla göre 2020 video filmleri
onyıla göre 2020'ler video filmleri
yüzyıla göre 21. yüzyıl video filmleri
döneme göre video filmleri

Ebeveynler: filmler

video albümleri
yıla göre 2020 video albümleri
onyıla göre 2020'ler video albümleri
yüzyıla göre 21. yüzyıl video albümleri
döneme göre video albümleri

Ebeveynler: albümler, video filmleri

---*---*---*---*---*---*---*---*---*---*---*---*---
-- kategori nesnesini ilgilendiren
-- fonksiyon ve tablolar
---*---*---*---*---*---*---*---*---*---*---*---*---
local Kategori = {}


function Kategori:getirAsilAd()
	return ((self._tip == "yıl" and self._rawData[1]) and self._rawData[1])
		or ((self._tip == "onyıl" and self._rawData[2]) and self._rawData[2])
		or ((self._tip == "yüzyıl" and self._rawData[3]) and self._rawData[3])
		or ((self._tip == "binyıl" and self._rawData[4]) and self._rawData[4])
		or self._asilAd
end


function Kategori:getirKategoriAdi()
	local yil = self._yil
	local ad = self:getirAsilAd()
	
	local function mevcutMu(yil, ad)
		return mw.title.new('Kategori:' .. ayarlaMO(yil) .. ad).exists
			and ayarlaMO(yil) .. ad or ayarlaMO(yil) .. " " .. ad
	end
	
	local k = type(self._rawData.ek) == "table"
	local yEk = k and self._rawData.ek[1] or self._rawData.ek
	local oEk = k and self._rawData.ek[2] or yEk
	local uEk = k and self._rawData.ek[3] or oEk
	local bEk = k and self._rawData.ek[4] or uEk
	
	if self._tip == "yıl" then
		return yEk == "d" and mevcutMu(yilEki(yil), ad) or mevcutMu(yil, ad)
	elseif self._tip == "onyıl" then
		return oEk == "d" and mevcutMu(yilEki(yil, true, true), ad) or mevcutMu(yilEki(yil, true), ad)
	elseif self._tip == "yüzyıl" then
		return uEk == "d" and mevcutMu(yil..". yüzyılda", ad) or mevcutMu(yil..". yüzyıl", ad)
	elseif self._tip == "binyıl" then
		return bEk == "d" and mevcutMu(yil..". binyılda", ad) or mevcutMu(yil..". binyıl", ad)
	else
		return ad
	end
end


function Kategori:getirCubukAdi()
	return self._tip == "yıl" and ayarlaMO(self._yil)
		or (self._tip == "onyıl" and ayarlaMO(yilEki(self._yil, true)))
		or (self._tip == "yüzyıl" and ayarlaMO(self._yil) .. ". yy")
		or (self._tip == "binyıl" and ayarlaMO(self._yil) .. ". by")
end


function Kategori:getirYil()
	return self._yil
end


function Kategori:getirUstYil()
	return self._tip == "yıl" and onYil(self._yil) or
		(self._tip == "onyıl" and yuzYil(self._yil) or
		(self._tip == "yüzyıl" and binYil(self._yil) ))
end


function Kategori:getirVikiveri()
	return mw.wikibase.getEntity(mw.wikibase.getEntityIdForCurrentPage())
end


function Kategori:sonHarfSil()
	return self._rawData.sonHarfSil
end


function Kategori:getirEbeveynler()
	local ebeveynler = {}
	
	--[[
		ebeveynleri çağırırken, her birini yeni bir kategori nesnesi olarak çağıracağız,
		fakat, normal ebeveyn nesnelerinin dışında her bir kategorinin kendisine ait
		bir üst kategorisi vardır; mesela 2010'da eserler'in üst kategorisi: 2010'larda eserler
		onun da bir üstü 21. yüzyılda eserler; bu üst kategorilerin var olup olmadığını
		kontrol etmek için burada bir tablo oluşturduk
		
		bu tabloda peş peşe üst seviyeler sıralı bir şekilde dizilmiştir,
		bu sayede hep bir sonraki değeri deneyip, ebeveynin var olup olmadığını
		kontrol edebileceğiz
	--]]

	--bu değer ebeveynler arasında bir "göre" kategorisi var mı yok mu onu saptıyor,
	--normalde bunu "true" olarak atıyoruz, daha sonra eğer bir göre kategorisi bulursak
	--bunu "nil" yapabiliriz
	local gore = true

	--ebeveynlerin listesi
	islem = self._rawData.ebeveynler or {}
	local tip = self._tip
	
	--her ebeveynimizi nesneye dönüştürüyoruz
	for _,ebeveyn in ipairs(islem) do
		if ebeveyn == "kategoriler" then ebeveyn = "" end
		if ebeveyn == "yıllar" or ebeveyn == "onyıllar" or ebeveyn == "yüzyıllar" or ebeveyn == "binyıllar" then tip = "üst" end
		table.insert(ebeveynler, getirAsilAdaGore(ebeveyn, self._yil, tip))
		
		--işte burada eğer ebeveynlerden bir tanesinin içinde "göre" ifadesi varsa
		--gore değerini "nil" yapıyoruz ki otomatik "Yıla göre .." veya "Yüzyıla göre .."
		--kategorileri yerine özel belirtilen ebeveyn eklensin
		if mw.ustring.find(ebeveyn, "göre") then
			gore = nil
		end
	end
	
	--bu kısımda her bir değerin üst değerinin var olup olmadığını "seviyeler" tablosundan
	--alıp kontrol ediyoruz, ve eğer üst seviyenin nesnesi mevcutsa onu da nesne olarak
	--çağıralım
	if self:getirUstTip() then
		table.insert(ebeveynler, getirAsilAdaGore(self:getirAsilAd(), self:getirUstYil(), self:getirUstTip()))
	end

	--[[
		işte burası eğer ebeveynlerde bir "göre" kategorisi yoksa
		otomatik "Yıla göre .." veya "Yüzyıla göre .." düzeninde
		kategoriler ekleniyor
		
		eğer self:sonHarfSil() fonksiyonunu kullanıyorsa bir nesne,
		bunun "Yıla göre .." kategorisi eklenirken en sondan bir harfi silinir
		sebebi de, mesela "2010 kişileri" kategorisini "Yıla göre kişileri"
		değil de "Yıla göre kişiler" yapmalıyız, bu tarz kategorilerde "sonHarfSil"
		değeri mevcuttur, bu da bu işlemin yapılmasına olanak sağlar
	--]]
	katAd = self:getirAsilAd()
	katAd = katAd == "doğumlular" and "doğanlar" or (self:sonHarfSil() and mw.ustring.sub(katAd, 1, -2) or katAd)
	if katAd ~= "" and gore then
		table.insert(ebeveynler, getirAsilAdaGore(self._tip.."a göre "..katAd, self._yil, self._tip))
	end
	
	--tüm nesnelerin çıktısı
	return ebeveynler or {}
end


function Kategori:getirAciklama()
	if self._rawData.aciklama then
		return mw.getContentLanguage():ucfirst(parametreleriHallet(self._rawData.aciklama, self._yil, self:getirTip())) .. "."
	else
		return "Bu kategori "..parametreleriHallet(self._asilAd, self._yil, self:getirTip()).." içindir."
	end
end


function Kategori:getirTip()
	return self._tip
end


function Kategori:getirUstTip()
	if self._tip == "yıl" and self._rawData.kademe and self._rawData.kademe > 1 then
		return "onyıl"
	elseif self._tip == "onyıl" and self._rawData.kademe and self._rawData.kademe > 2 then
		return "yüzyıl"
	elseif self._tip == "yüzyıl" and self._rawData.kademe and self._rawData.kademe > 3 then
		return "binyıl"
	end
end


function Kategori:getirVeriModulu()
	return self._modul
end


function Kategori:getirSiraAnahtari()
	local zincir = {}
	local siraAnahtarlari = {}
	
	--buradaki seviyeler tablosu aynı ebeveynlerde olduğu
	--gibi onlarla eşleşecek şekilde çalışıyor
	local anahtarlar = {["yıl"]="YSON", ["onyıl"]="YSONİKİ", ["yüzyıl"]="DORTLU", ["binyıl"]="DORTLU"}
	
	for _,a in ipairs(self._rawData.sira_anahtari or {}) do table.insert(zincir, a) end
	
	if self:getirUstTip() then
		table.insert(zincir, anahtarlar[self._tip])
	end
	
	table.insert(zincir, "DORTLU")

	for _,anahtar in ipairs(zincir) do
		if anahtar == "YSON" then anahtar = mw.ustring.sub( self._yil, -1 )
		elseif anahtar == "YSON-1" then anahtar = mw.ustring.sub( tostring(tonumber(self._yil)-1), -1 )
		elseif anahtar == "YSONİKİ" then anahtar = mw.ustring.sub( self._yil, -2 )
		elseif anahtar == "YIL" then anahtar = self._yil
		elseif anahtar == "DORTLU" then anahtar = mw.ustring.find(self._yil, "-") and "-"..tostring(9999+tonumber(self._yil))
			or (string.len(self._yil) == 1 and "000"..self._yil
			or (string.len(self._yil) == 2 and "00"..self._yil
			or (string.len(self._yil) == 3 and "0"..self._yil
			or (string.len(self._yil) == 4 and self._yil)))) end
		table.insert(siraAnahtarlari, anahtar)
	end

	return siraAnahtarlari
end


function Kategori:toJSON()
	local ret = {
		ebeveynler = self:getirEbeveynler(),
		aciklama = self:getirAciklama(),
		asilAd = _asilAd,
		yil = _yil,
		tip = _tip,
		kategori = self:getirKategori(),
		sira_anahtari = self:getirSiraAnahtari(),
		sonHarfSil = self:sonHarfSil(),
		}
	
	return require("Modül:JSON").toJSON(ret)
end


function Kategori:getRawData()
	return self._rawData
end


Kategori.__index = Kategori


function olusturNesne(asilAd, veri, yil, tip, modul)
	return veri and
		setmetatable({ _rawData = veri, _asilAd = asilAd, _yil = yil, _tip = tip, _veri = veri, _modul = modul }
			, Kategori)or nil
end


function getirAsilAdaGore(asilAd, yil, tip)
	local altsayfalar = {
		"test/veri",
	}
	
	local verimodulu
	
	for _, altsayfa in ipairs(altsayfalar) do
		verimodulu = "Modül:Kategori/" .. altsayfa
		if require(verimodulu)[asilAd] then
			asilAd = type(require(verimodulu)[asilAd]) == "string" and require(verimodulu)[asilAd] or asilAd
			break
		end
	end
	
	tablo = mw.loadData(verimodulu)
	
	if not tablo[asilAd] then
		tablo = {[asilAd] = {}}
		if asilAd == "" then
			anaMadde = tip == "onyıl" and yilEki(yil, true)
				or (tip == "yüzyıl" and yil..". yüzyıl")
				or (tip == "binyıl" and yil..". binyıl")
				or yil
			tablo[""] = {
				aciklama = "Bu kategorinin ana maddesi [["..anaMadde.."]]",
				ebeveynler = {tip.."lar"},
				sira_anahtari = {"DORTLU"},
				kademe = 4,
			}
		end
	end
	
	if mw.ustring.find(asilAd, "göre") then tip = "göre" end
	
	return olusturNesne(asilAd, tablo[asilAd], yil, tip, verimodulu)
end

---*---*---*---*---*---*---*---*---*---*---*---*---
-- nesneleri kategori sayfalarında yansıtan
-- fonksiyonlar
---*---*---*---*---*---*---*---*---*---*---*---*---

--bu fonksiyon girilen bir yazıda birinci değeri bulup
--onu ikinci değer ile değiştirmeye yarar
local function bulvedeg(yazi, bir, iki)
	return mw.ustring.sub( mw.ustring.gsub(yazi, bir, iki), 1, -1 )
end

--yerelde kod kısaltmak için
local bul = mw.ustring.find

local function duzenleBag(altKat)
	--her kategoride "veriyi düzenle" bağlantısını eklemeye yarayan fonksiyon
	return "<div class=\"toccolours hlist plainlinks\" style=\"float: right; margin: 0.5em 0 0.5em 1em; font-weight: bold;\">[" ..
		mw.getCurrentFrame():callParserFunction{name = "fullurl", args = {altKat, action = "edit"}} ..
		" Kategori verisini düzenle]</div>"
end

--bu fonksiyon girilen bir yılın bulunduğu on yılı saptayarak
--onun çıktısını verir, mesela 2019 girilirse 2010
--1888 girilirse de 1880 çıktısını verir
function onYil(yil)
	local tire = bul(yil, "^-") and "-" or nil
	oy = bulvedeg(yil, "^-", "")
	local bas = string.len(oy) == 1 and "0" or mw.ustring.sub(oy, 1, -2) .. 0
	return (tire and tire or "") .. bas
end

function yuzYil(yil)
	local tire = bul(yil, "^-") and "-" or nil
	yy = bulvedeg(yil, "^-", "")
	local bas = (string.len(yy) == 1 or string.len(yy) == 2) and 1 or tonumber(mw.ustring.sub(yy, 1, -3)+1)
	return (tire and tire or "") .. tostring(bas)
end

function binYil(yil)
	local tire = bul(yil, "^-") and "-" or nil
	by = bulvedeg(yil, "^-", "")
	local ilk = mw.ustring.sub(by, 1, 1)
	local son = mw.ustring.sub(by, -1)
	
	local sonuc = (string.len(by) ~= 1 and son ~= "0") and tonumber(ilk)+1 or tonumber(ilk)
	sonuc = string.len(by) == 1 and 1 or sonuc
	
	return (tire and tire or "") .. tostring(sonuc)
end

function yilartir(yil, sayi)
	local sonuc = tonumber(yil) + sayi
	return tostring(sonuc)
end

function ayarlaMO(yil)
	return bulvedeg(yil, "-([%d])", "MÖ %1")
end

function parametreleriHallet(ad, yil, tip)
	local sonuc = ad
	local yuzyil = tip == "yüzyıl" and yil or yuzYil(yil)
	local binyil = tip == "binyıl" and yil or binYil(yuzYil(yil))
	
	local nYil = tip == "yıl" and yil
		or (tip == "onyıl" and yilEki(yil, true))
		or (tip == "yüzyıl" and yuzyil .. ". yüzyıl")
		or (tip == "binyıl" and binyil .. ". binyıl")
	local eYil = tip == "yıl" and yilEki(yil)
		or (tip == "onyıl" and yilEki(yil, true, true))
		or (tip == "yüzyıl" and yuzyil .. ". yüzyılda")
		or (tip == "binyıl" and binyil .. ". binyılda")
	
	sonuc = bulvedeg(sonuc, "{{{yıl}}}", nYil)
	sonuc = bulvedeg(sonuc, "{{{yılda}}}", eYil)
	
	return ayarlaMO(sonuc)
end

--bu fonksiyon bir kategorinin bulunduğu yıla göre üst kısımda
--bir gezinti çubuğu oluşturur
function gezintiCubugu(kategori)
	--en başta bir tablo oluşturuyoruz, en sonda
	--bu tablonun içine sırayla yüklediğimiz gezinti
	--bağlantılarının çıktısını alacağız
	local tablo = {}
	
	--[[
		bu :getirKategori() değeri, bir kategori türünün yıldan
		sonra gelen kısmıdır, yani 2010'de eserler kategorisinde
		bu değer "eserler" dir
	
		burada sayfa son ekini belirliyoruz, yani herhangi bir yıldan
		sonra kategorinin adında gelen kısım, bunu kod satırı azaltmak
		amacıyla burada belirttik
	
		burada kontrol ettiğimiz şey de şu, eğer iki farklı değerimiz
		var ise, yani 2010 yılında doğanlar kategorisinde normalde
		bu değerin "yılında doğanlar" olması gerekir, fakat bunun bir üst
		kategorisi "2010'larda doğanlar" olduğu için burada iki farklı
		değeri birbirinden ayırmamız gerekiyor
	--]]
	local sayfa = kategori:getirAsilAd()
	
	--eğer en baştaki yıl değerine sonradan ihtiyacımız olursa diye,
	--bir sonYil değeri belirtiyoruz, çünkü gezinti çubuğunda sürekli
	--bu değer üzerinde oynama yapacağız
	local yil = kategori:getirYil()

	local function tekrarla(y, tip, sayfa)
		local function mevcutMu(sayfa)
			return mw.title.new('Kategori:' .. sayfa).exists
		end
		--5 tane alt kategori, 5 tane de üst kategoriyi çağırmalıyız
		for i = -5, 5 do
			--burada döngü her seferinde sayıyı bir artırarak
			--bize bir sonraki yıl değerini verecek
			local arYil = yilartir(y, i)
			if tip == "yıl" then
				son = getirAsilAdaGore(sayfa, arYil, "yıl")
			elseif tip == "onyıl" then 
				arYil = yilartir(onYil(y), i..0)
				son = getirAsilAdaGore(sayfa, arYil, "onyıl")
			elseif tip == "yüzyıl" then
				son = getirAsilAdaGore(sayfa, arYil, "yüzyıl")
			elseif tip == "binyıl" then
				son = getirAsilAdaGore(sayfa, arYil, "binyıl")
			end
			--şimdi sayfaları kontrol edelim
			--MÖ 0'lar için özel durum
			if tip == "onyıl" and son:getirCubukAdi() == "0'lar" then
				if mevcutMu("MÖ "..son:getirKategoriAdi()) then
					table.insert(tablo, '\n*[[:Kategori:' .. "MÖ "..son:getirKategoriAdi() .. "|MÖ " .. son:getirCubukAdi() .. "]]")
				else
					table.insert(tablo, '\n*<span style="color:#888">MÖ ' .. son:getirCubukAdi() .. "</span>")
				end
			end
			--eğer kategorimiz "2020'de eserler" gibi "de, da" eki
			--içeren bir kategoriyse
			if mevcutMu(son:getirKategoriAdi()) then
				table.insert(tablo, '\n*[[:Kategori:' .. son:getirKategoriAdi() .. "|" .. son:getirCubukAdi() .. "]]")
			else
				--ya da o yıla dair, mevcut kategori türünde hiçbir sayfa mevcut değilse
				table.insert(tablo, '\n*<span style="color:#888">' .. son:getirCubukAdi() .. "</span>")
			end
		end
	end
	
	local function ebeveynKontrol(kategori, sayfa, tablo, tip)
		sayfa = kategori:getirUstTip() == tip and kategori:getirAsilAd()[2] or sayfa
		
		if kategori:getirUstTip() and kategori:getirUstTip() == tip then
			--eğer bir yıl kategorisinin içerisindeysek ve ebeveyn kategoriler mevcutsa,
			--yani "2020'de eserler" için "2020'lerde eserler" kategorisi mevcutsa
			--bir ebeveyn çubuk tablo başı çağırabiliriz
			table.insert(tablo, '\n|}')
			table.insert(tablo, '\n{| class="toccolours hlist" style="text-align: center; margin: auto; border: none; background: transparent;"'
				.. '\n|')
		end
	end
	
	--asil gezinti çubuğunun tablo başlangıcı
	table.insert(tablo, '{| class="toccolours hlist" style="text-align: center; margin: auto;"'
		.. '\n|')
	
	--eğer bir yıl kategorisindeysek direk asil gezinti çubuğunda
	--yılları listeleyebiliriz
	if kategori:getirTip() == "yıl" then
		tekrarla(yil, "yıl", sayfa)
	end
	
	--[[normalde bir on yıl kategorisindeysek, bu on yılı yuzYil() fonksiyonuna
	    gönderip, onun yüz yılını öğrenmemiz gerekiyor, fakat
	    zaten bir yüz yıl kategorisindeysek, oraya göndermemizin bir anlamı yok
	    çünkü elimizdeki değer zaten yüz yıl, bu nedenle burada bu fonksiyonu sıfırlıyoruz
	--]]
	if kategori:getirTip() == "yüzyıl" then
		function yuzYil(yil) return yil end
	elseif kategori:getirTip() == "binyıl" then
		function binYil(yil) return yil end
	end
	
	--ONYIL
	ebeveynKontrol(kategori, sayfa, tablo, "onyıl")
	--şimdi gelelim on yılları listelemeye
	--eğer bir yıl veya on yıl kategorisindeysek on yılları listeleyebiliriz
	if (kategori:getirUstTip() and kategori:getirUstTip() == "onyıl") or kategori:getirTip() == "onyıl" then
		tekrarla(yil, "onyıl", sayfa)
	end
	
	--YÜZYIL
	ebeveynKontrol(kategori, sayfa, tablo, "yüzyıl")
	--şimdi gelelim yüzyılları listelemeye
	--eğer on yıl veya yüzyıl kategorisindeysek yüzyılları listeleyebiliriz
	if (kategori:getirUstTip() and kategori:getirUstTip() == "yüzyıl") or kategori:getirTip() == "yüzyıl" then
		tekrarla(yuzYil(yil), "yüzyıl", sayfa)
	end
	
	--BİNYIL
	ebeveynKontrol(kategori, sayfa, tablo, "binyıl")
	--şimdi gelelim binyılları listelemeye
	--eğer yüzyıl veya binyıl kategorisindeysek binyılları listeleyebiliriz
	if (kategori:getirUstTip() and kategori:getirUstTip() == "binyıl") or kategori:getirTip() == "binyıl" then
		tekrarla(binYil(yil), "binyıl", sayfa)
	end
	
	--sonunda tüm gezinti çubuklarının kapanışını yapıyoruz
	table.insert(tablo, '\n|}')
	
	--ve hepsinin çıktısı da burada alınıyor
	return table.concat(tablo)
end

--yıllara ek getirmeye yarayan fonksiyon
--örnek olarak 2010'da veya 2015'te
function yilEki(yil, cogul, ek)
	local tire = bul(yil, "^-") and "-" or nil
	yeniYil = bulvedeg(yil, "^-", "")
	--bu durum ondalık yıllarda kullanılma durumlarında geçerlidir
	--yani 2010'larda, 2080'lerde gibi
	if cogul then
		yeniYil = onYil(yeniYil)
		--eğer yılın sondan bir önceki sayısı "1,3,4,6,9" ise
		--larda eki kullanılacak, bunların dışında lerde
		local harf = (bul(yeniYil, "[13469][%d]$") or yeniYil == "0") and "a" or "e"
		--ve eğer yılın bulunduğu onyılı bulmak istiyorsak son rakamı
		--her zaman 0 isteriz, mesela 2015 yılı giriliyse bu yıl,
		--2010 onyılına aittir
		return (tire and tire or "") .. yeniYil .. "'l" .. harf .. "r" .. (ek and "d" .. harf or "")
	else
		--[[buradaki durumlarda bir yıla ek getirmek içindir
		    yani 2009'da veya 2003'te gibi
		    eğer yılın son rakamı "3,4,5" ise ekimizin ilk harfi
		    t olmalı çünkü bu rakamlarda kalın ek kullanıyoruz
		    bunların dışındaki durumlarda ise "d olacak"
		--]]
		local ilkek = bul(yeniYil, "[345]$") and "t" or "d"
		--ve eğer son rakam "0,6,9" ise ekimizin ikinci harfi
		--a olur, kalan durumlarda ise e
		local sonek = bul(yeniYil, "[069]$") and "a" or "e"
		--yukarıdaki durumlar birleştirildiğinde "de, da, te, ta"
		--eklerini elde edip çıkartacağız
		ilkek = (bul(yeniYil, "40$") or bul(yeniYil, "60$") or bul(yeniYil, "70$")) and "t" or ilkek
		sonek = (bul(yeniYil, "00$") or bul(yeniYil, "20$") or bul(yeniYil, "50$") or bul(yeniYil, "70$") or bul(yeniYil, "80$")) and "e" or sonek
		return (tire and tire or "") .. yeniYil .. "'" .. ilkek .. sonek
	end
end

--[[bu fonksiyon kategori adındaki yılı ve kategori tipini
    ayırt edip ayıklamaya yarar
    mesela "2017'de başlayan internet dizileri" kategorisini
    ele alalım bu ad, işleme sokulduğunda çıktıda elimize
    birinci değeri "2017" olan ve ikinci değeri de
    "yılda başlayan internet dizileri" olan bir tablo verir
--]]
function karsilastirYillari(ad)
	--yıl değerini başlatıyoruz
	local yil = ""
	local tip
	
	--bu bir MÖ yıl kategorisi mi?
	if bul(ad, "^MÖ") then
		ad = mw.ustring.sub( ad, 4, -1 )
		mo = true
	end
	
	--eğer girilen adın en başında bir rakam bulunuyorsa
	--bu demektir ki yılımız kategorinin başında mevcut
	--bu yılı en baştan ayıklayabiliriz
	while bul(ad, "^[%d]") do
		yil = yil .. mw.ustring.sub(ad, 1, 1)
		ad = bulvedeg(ad, "^[%d]", "")
		--eğer bir yıl saptayabildiysek bunu onaylayalım
		yilVarMi = true
	end
	
	--bir yıl değerimiz varsa
	if yilVarMi then
		--yılda de da eki varsa bunu silmemiz gerek
		--çünkü veri modülünden kategoriyi çağırırken
		--"yılda" ile başlayan değerler ile çağıracağız
		if bul(ad, "^'[dt][ea]") then
			ad = bulvedeg(ad, "^'[dt][ea]", "")
			tip = "yıl"
		elseif bul(ad, "^'l[ea]rd[ea]") then
			ad = bulvedeg(ad, "^'l[ea]rd[ea]", "")
			tip = "onyıl"
		elseif bul(ad, "^'l[ea]r") then
			ad = bulvedeg(ad, "^'l[ea]r", "")
			tip = "onyıl"
		elseif bul(ad, ". yüzyılda") then
			ad = bulvedeg(ad, ". yüzyılda", "")
			tip = "yüzyıl"
		elseif bul(ad, ". yüzyıl") then
			ad = bulvedeg(ad, ". yüzyıl", "")
			tip = "yüzyıl"
		elseif bul(ad, ". binyılda") then
			ad = bulvedeg(ad, ". binyılda", "")
			tip = "binyıl"
		elseif bul(ad, ". binyıl") then
			ad = bulvedeg(ad, ". binyıl", "")
			tip = "binyıl"
		else
			tip = "yıl"
		end
		ad = bulvedeg(ad, "^%s", "")
		--çıktı tablomuzu alalım
		return {(mo and "-" or "") .. yil, ad, tip}
	else
		return {nil, ad}
	end
end

function goster(frame)
	--ilk parametreye girilen değeri veya direk kategori adını işleme alalım
	local ad = frame:getParent().args[1] or mw.title.getCurrentTitle()["text"]
	
	--en son çıktı verecek kategoriler tablosu
	local kategoriler = {}
	--en son çıktı verecek görüntülenecek nesneler tablosu
	local goruntuler = {}
	
	--kategori sayfamızda bahsi geçen yıl
	local yil = karsilastirYillari(ad)[1]
	--kategori nesnemizi de çağıralım
	local kategori = getirAsilAdaGore(karsilastirYillari(ad)[2], yil, karsilastirYillari(ad)[3])
	--kategorinin eklenmesi gereken ebeveyn kategoriler
	local ebeveynler = kategori:getirEbeveynler()
	
	table.insert(goruntuler, gezintiCubugu(kategori))
	table.insert(goruntuler, duzenleBag(kategori:getirVeriModulu()))

	if kategori:getirVikiveri() and kategori:getirVikiveri().claims["P373"] then
		table.insert(goruntuler, mw.getCurrentFrame():expandTemplate{
			title = "Commons kategori",
			args = {kategori:getirVikiveri():formatPropertyValues("P373").value}})
	end
	
	if kategori:getirAciklama() then
		table.insert(goruntuler, kategori:getirAciklama())
	end
	
	--her bir ebeveyn için gerekli kategorileri oluşturmamız gerekiyor
	for sira,ebeveyn in ipairs(ebeveynler) do
		table.insert(kategoriler, "[[Kategori:" .. ebeveyn:getirKategoriAdi() .. "|" .. kategori:getirSiraAnahtari()[sira] .. "]]")
	end
	
	--kategori boş mu?
	if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then
		table.insert(kategoriler, "[[Kategori:Boş kategoriler]]")
	end
	
	return table.concat(goruntuler) .. table.concat(kategoriler)
end

function gore(frame)
	local args = frame:getParent().args
	
	local yil = args[1]
	local tip = args[2]
	local goruntuler = {}
	local kategoriler = {}
	local kategori = require("Modül:Kategori/veri2")[tip]
	local vikiveri = mw.wikibase.getEntity(mw.wikibase.getEntityIdForCurrentPage())
	local harf = yil == "dönem" and "e" or "a"
	
	if vikiveri and vikiveri.claims["P373"] then
		table.insert(goruntuler, mw.getCurrentFrame():expandTemplate{
			title = "Commons kategori",
			args = {vikiveri:formatPropertyValues("P373").value}})
	end
	
	if kategori.aciklama then
		table.insert(goruntuler, bulvedeg(kategori.aciklama, "{{{yıla}}}", mw.getContentLanguage():ucfirst(yil) .. harf))
	end
	
	if yil == "dönem" and kategori[1] == "dönem-hayır" then
	elseif kategori[1] == "üst" or yil == "dönem" then
		tip = kategori.a or tip
		table.insert(kategoriler, "[[Kategori:" .. mw.getContentLanguage():ucfirst(tip) .. "|+]]")
	elseif kategori[1] == "hayır" then else
		table.insert(kategoriler, "[[Kategori:Döneme göre " .. tip .. "| ]]")
	end
	
	if kategori.ebeveynler then
		--her bir ebeveyn için gerekli kategorileri oluşturmamız gerekiyor
		for sira,ebeveyn in ipairs(kategori.ebeveynler) do
			local ust = kategori[1] ~= "hayır"
				and mw.title.new("Kategori:" .. yil .. harf .. " ve tipe göre " .. ebeveyn).exists
				and yil .. harf .. " ve tipe göre " .. ebeveyn or yil .. harf .. " göre " .. ebeveyn
			table.insert(kategoriler, "[[Kategori:" .. ust .. "|"
				.. (mw.site.stats.pagesInCategory(ust, "subcats") > 200
				and mw.ustring.char(0x0020) or kategori.sira_anahtari[sira]) .. "]]")
		end
	end
	
	return table.concat(goruntuler) .. table.concat(kategoriler)
end

return {goster = goster, gore = gore}