Extension:Scribunto/Lua reference manual/tr

Bu kılavuz, MediaWiki'de uzantısıyla kullanıldığı için  belgelemektedir. Bazı parçalar MIT lisansı altında bulunan Lua 5.1 kaynak kılavuzundan türetilmiştir.



Başlarken
Scribunto'nun etkin olduğu bir MediaWiki vikide, "Modül:" ile başlayan bir başlık içeren bir sayfa oluşturun, örneğin Modül:Muzlar". Bu yeni sayfaya aşağıdaki metni kopyalayın:

Bunu kaydedin, sonra başka bir (modül olmayan) sayfaya şunu yazın:

Bunun dışında "Muzlar"'ı modülünüzün adı ile değiştirmelisiniz. Bu, o modülden dışa aktarılan "merhaba" işlevini çağıracaktır. , işlevin döndürdüğü metinle değiştirilir, bu durumda "Hello, world!"

Lua kodunu şablon bağlamından çağırmak genellikle iyi bir fikirdir. Bu, çağıran bir sayfa açısından sözdiziminin, şablon mantığının Lua veya vikimetinde uygulanmasından bağımsız olduğu anlamına gelir. Ayrıca, bir vikinin içerik ad alanına ek karmaşık sözdiziminin eklenmesini önler.

Modül yapısı
Modülün kendisi,  tarafından çağrılabilecek işlevleri içeren bir Lua tablosu döndürmelidir. Genel olarak, yukarıda gösterildiği gibi, bir tablo tutan bir yerel değişken bildirilir, işlevler bu tabloya eklenir ve tablo modül kodunun sonunda döndürülür.

İster yerel ister genel olsun, bu tabloya eklenmeyen işlevlere  ile erişilemez, ancak küreselleri $requir_function kullanılarak yüklenen diğer modüllerden erişilebilir. Modülün tüm işlevleri ve değişkenleri yerel olarak bildirmesi genellikle iyi bir stildir.

Parametrelere vikimetinden erişme
tarafından çağrılan işlevlere çerçeve nesnesi olan tek bir parametre aktarılacaktır. ile iletilen parametrelere erişmek için, kod genellikle  o çerçeve nesnesinin tablosunu kullanır. içeren şablona geçirilen parametrelere frame:getParent  kullanarak ve bu karenin   erişerek de erişmek mümkündür.

Bu çerçeve nesnesi, çağıran ayrıştırıcı işlevlerini, genişletme şablonları ve genişletme rastgele vikimetin dizeleri gibi bağlama özgü özelliklere erişmek için de kullanılır.

Metin döndürme
Modül işlevi genellikle tek bir dize döndürmelidir; döndürülen değerler tostring ile geçirilir ve ayırıcı olmadan birleştirilir. Bu dize,  sonucunda vikimetine eklenir.

Sayfa ayrıştırmasındaki bu noktada, şablonlar zaten genişletildi, ayrıştırıcı işlevleri ve uzantı etiketleri zaten işlendi ve ön kayıt dönüşümleri (örneğin, imza tilde genişletme ve boru hilesi) zaten oldu. Bu nedenle modül, çıkış metninde bu özellikleri kullanamaz. Örneğin, bir modül  döndürürse, sayfada "Hello, world!  " görünür.

Öte yandan, değiştirme daha erken bir işleme aşamasında ele alındığından,  ile yalnızca diğer denenen ikameler işlenecektir. Başarısız olan ikame vikimetinde kalacağından, sonraki düzenlemede işlenecektir. Bundan genellikle kaçınılmalıdır.

Modül belgesi
Scribunto, modülün otomatik olarak bir vikimetin belgelendirme sayfası ile ilişkilendirilmesiyle modüllerin belge edilmesine izin verir; varsayılan olarak, modülün "/belge" alt sayfası bu amaçla kullanılır ve modül sayfasındaki modül kaynak kodunun üzerinde yer alır. Örneğin, "Modül:Muz" belgesini "Modül:Muz/belge" olurdu.

Bu, aşağıdaki MediaWiki ad alanı iletileri kullanılarak yapılandırılabilir:


 * scribunto-doc-page-name: Belgelendirme için kullanılan sayfanın adını belirler. Modülün adı (Modül: öneki olmadan)  olarak geçirilir. Modül ad alanında ise, burada belirtilen sayfalar Lua kaynağı yerine wikitext olarak yorumlanır ve   ile kullanılamaz. Varsayılan, "Modül:$1/belge", yani modülün /belge alt sayfasıdır. Ayrıştırıcı işlevlerinin ve diğer küme ayracı genişletmesinin bu iletide kullanılamayabileceğini unutmayın.
 * scribunto-doc-page-does-not-exist: Belge sayfası mevcut olmadığında görüntülenen mesaj. Sayfanın adı  olarak geçirilir. Varsayılan değer boştur.
 * scribunto-doc-page-show: belge sayfası mevcut olduğunda görüntülenen mesaj. Sayfanın adı  olarak geçirilir. Varsayılan, dokümantasyon sayfasını aşmaktır.
 * scribunto-doc-page-header: Belge sayfası görüntülenirken başlık görüntülenir. Belgelenen modülün adı (Modül: öneki ile)  olarak geçirilir. Varsayılan, eğik olarak kısa bir açıklama görüntüler.

Modüllerin doğrudan kategorilere ayrılamadığını ve vikiarası bağlantılarının doğrudan eklenemeyeceğini unutmayın. Bunlar, belge sayfası modül sayfasına aktarıldığında modüle uygulanacakları  etiketlerinin içindeki belgelendirme sayfasına yerleştirilebilir.

Anahtarlar
Lua'daki bir ad (tanımlayıcı olarak da adlandırılır), herhangi bir harf, rakam ve alt çizgi olabilir, bir rakamla başlamaz. İsimler büyük / küçük harfe duyarlıdır; "foo", "Foo" ve "FOO" hepsi farklı adlardır.

Aşağıdaki anahtar kelimeler saklıdır ve ad olarak kullanılamaz:



Alt çizgi ile başlayan ve büyük harfler ile başlayan isimler dahili Lua global değişkenleri için ayrılmıştır.

Diğer anahtarlar:



Yorumlar
Yorum, bir dizenin dışında herhangi bir yerde  ile başlar. hemen bir açılış uzun parantez takip ederse, yorum ilgili kapanış uzun parantezine devam eder; aksi takdirde yorum geçerli satırın sonuna kadar devam eder.

Veri türleri
Lua, dinamik olarak yazılan bir dildir, yani değişkenlerin ve işlev bağımsız değişkenlerinin türü yoktur, yalnızca kendilerine atanan değerler vardır. Tüm değerler bir tür taşır.

Lua'nın sekiz temel veri türü vardır, ancak yalnızca altı tanesi Scribunto uzantısıyla ilgilidir. işlevi bir değerin türünü döndürür.

işlevi, bir değeri dizeye dönüştürür. işlevi, bir değeri mümkünse bir sayıya dönüştürür, aksi takdirde nil değerini döndürür. Bir değeri diğer veri türlerine dönüştürecek açık işlevler yoktur.

Bir dizenin beklendiği yerlerde kullanıldığında sayılar otomatik olarak dizelere dönüştürülür, ör. birleştirme operatörü ile birlikte kullanıldığında. tarafından tanınan dizeler, aritmetik işleçlerle kullanıldığında otomatik olarak sayılara dönüştürülür. Bir boolean değeri beklendiğinde, nil ve false dışındaki tüm değerlerin true olduğu kabul edilir.

nil
"nil", bir değerin yokluğunu temsil eden  veri tipidir.

Nil, tabloda anahtar olarak kullanılamaz ve atanmamış bir tablo anahtarı ile sıfır değeri atanan anahtar arasında fark yoktur.

Bir dizgeye dönüştürüldüğünde sonuç "nil" olur. Boole'ye dönüştürüldüğünde, nil false kabul edilir.

boole
Boole değerleri  ve.

Bir dizeye dönüştürüldüğünde sonuç "true" veya "false" olur.

Diğer birçok dilden farklı olarak, boole değerleri doğrudan sayılara dönüştürülmeyebilir. Diğer birçok dilden farklı olarak, boole dönüşümü için yalnızca false ve nil yanlış kabul edilir; 0 sayısı ve boş dizenin ikisi de doğru olarak kabul edilir.

dize
Lua dizeleri 8 bit baytlık bir dizi olarak kabul edilir; bunları belirli bir kodlamada yorumlamak uygulamaya bağlıdır.

Dize değişmezleri tek veya çift tırnak ( veya  ) ile sınırlandırılabilir; JavaScript gibi ve PHP'den farklı olarak, ikisi arasında fark yoktur. Aşağıdaki kaçış dizileri tanınır:


 * (çan, bayt 7)
 * (geri boşluk, bayt 8)
 * (yatay sekme, bayt 9)
 * (satırsonu, bayt 10)
 * (dikey sekme, bayt 11)
 * (form besleme, bayt 12)
 * (satır başı, bayt 13)
 * (çift tırnak, bayt 34)
 * (tek tırnak, bayt 39)
 * (ters eğik çizgi, bayt 92)

Değişmez bir satırsonu, bir ters eğik çizgi ile önüne eklenerek bir dizeye dahil edilebilir. Baytlar ayrıca '\ddd' bir kaçış dizisi kullanılarak belirtilebilir; burada ddd, 0-255 aralığındaki baytın ondalık değeridir. Çıkış dizilerini kullanarak Unicode karakterleri dahil etmek için, UTF-8 kodlaması için ayrı baytlar belirtilmelidir; genel olarak, doğrudan Unicode karakterleri girmek daha kolay olacaktır.

Değişmez dizeler ayrıca uzun parantezler kullanılarak tanımlanabilir. Bir açma uzun braketi, bir açılış kare braketinden sonra sıfır veya daha fazla eşit işaret ve ardından başka bir açılış kare braketinden oluşur;,   veya. Açma uzun braketi, karşılık gelen kapanma uzun braketi ile eşleşmelidir, örn. ,  veya. Özel bir durum olarak, eğer bir açılış uzun braketini hemen bir yeni satır takip ederse, yeni satır dizeye dahil edilmez, ancak kapanış uzun braketin korunmasından hemen önce yeni satır eklenir. Uzun parantezler ile sınırlanan dizeler kaçış dizilerini yorumlamaz.

Boole biçimine dönüştürüldüğünde tüm dizelerin true olarak kabul edildiğini unutmayın. Bu, boş dizenin genellikle yanlış olarak kabul edildiği diğer birçok dilden farklıdır.

sayı
Lua, yalnızca dahili olarak çift kesinlikli kayar nokta değeri olarak temsil edilen yalnızca bir sayısal türe sahiptir. Bu biçimde, -9007199254740992 ve 9007199254740992 arasındaki tamsayılar tam olarak temsil edilebilirken, kesirli kısmı olan daha büyük sayılar ve sayılar yuvarlama hatasından muzdarip olabilir.

Sayı sabitleri, ondalık ayırıcı olarak nokta kullanılarak ve grup ayırıcılar olmadan ör. . Sayılar boşluk olmadan E notasyonu kullanılarak da temsil edilebilir, örn. ,  veya. Tamsayılar ayrıca bir  öneki kullanılarak onaltılık gösterimde de belirtilebilir, ör. .

NaN ve pozitif ve negatif sonsuzluklar doğru şekilde saklanıp işlense de, Lua karşılık gelen değişmez değerleri sağlamaz. sabiti,  gibi bir bölme gibi pozitif sonsuzdur ve   gibi bir bölme olabilir hızla bir NaN oluşturmak için kullanılır.

Boole'ye dönüştürüldüğünde tüm sayıların doğru sayıldığını unutmayın. Bu, 0 sayısının genellikle yanlış olarak kabul edildiği diğer birçok dilden farklıdır. Bir dizgeye dönüştürüldüğünde, sonlu sayılar ondalık sayı, büyük olasılıkla E gösteriminde gösterilir; NaN  veya  ; ve infinities   veya.

tablo
Lua tabloları, PHP dizileri ve JavaScript nesneleri gibi ilişkilendirilebilir dizilerdir.

Tablolar kıvırcık parantez kullanılarak oluşturulur. Boş tablo. Oluşturmadaki alanları doldurmak için, ayraçlara virgül ve/veya noktalı virgülle ayrılmış alan belirteçleri listesi eklenebilir. Bunlar birkaç formdan herhangi birini alır:


 * , anahtar olarak deyim1 öğesinin (ilk) değerini ve değer olarak deyim2 öğesinin (ilk) değerini kullanır.
 * ,  eşdeğerdir
 * , kabaca  ile eşdeğerdir, burada i 1'den başlayan ve bu formun her alan spesifikasyonu ile artan bir tamsayıdır. Bu son alan belirleyicisiyse ve ifadede birden çok değer varsa, tüm değerler kullanılır; aksi takdirde sadece birincisi tutulur.

Bir tablodaki alanlara köşeli ayraç notasyonu kullanılarak erişilebilir, ör. . Ayrıca geçerli olan ad dize anahtarlarına nokta gösterimi kullanılarak da erişilebilir, ör. ,  eşittir. Tablodaki bir değer olan bir işlev çağrıldığında iki nokta üst üste işareti kullanılabilir; örneğin,,    veya   eşdeğerdir.

Bir dizi, 1'den N'ye kadar olan tüm pozitif tamsayılar için sıfır olmayan değerlere sahip olan ve N'den büyük olan tüm pozitif tamsayılar için hiçbir değer (nil) olmayan bir tablodur. Birçok Lua işlevi yalnızca dizilerde çalışır ve pozitif olmayanları yoksay.

PHP veya JavaScript gibi diğer birçok dilden farklı olarak, nil ve NaN dışındaki herhangi bir değer anahtar olarak kullanılabilir ve tür dönüştürme yapılmaz. Bunların hepsi geçerli ve farklıdır:

Benzer şekilde, nil dışındaki herhangi bir değer bir tabloda değer olarak saklanabilir. Nil'in depolanması, anahtarın tablodan silinmesine eşdeğerdir ve ayarlanmamış herhangi bir anahtara erişmek sıfır değeriyle sonuçlanır.

Tabloların hiçbir zaman Lua'da dolaylı olarak kopyalanmadığını unutmayın; bir tablo işleve bağımsız değişken olarak iletilirse ve işlev tablodaki anahtarları veya değerleri değiştirirse, bu değişiklikler arayanda görünür olur.

Bir dizeye dönüştürüldüğünde, normal sonuç "tablo" olur ancak  metamethod kullanılarak geçersiz kılınabilir. Boş tablo bile bir boolean olarak kabul edilir.

işlev
Lua'daki işlevler birinci sınıf değerlerdir: anonim olarak oluşturulabilir, bağımsız değişken olarak geçirilebilir, değişkenlere atanabilir vb.

İşlevler  anahtar sözcüğü kullanılarak oluşturulur ve parantez kullanılarak çağrılır. Sözdizimsel şeker adlandırılmış işlevler, yerel işlevler ve bir tabloya üye işlevleri gibi işlev gören işlevler için kullanılabilir. Ayrıntılar için aşağıdaki İşlev bildirimleri ve İşlev çağrılarına bakın.

Lua işlevleri kapanışlarıdır, yani bildirildikleri kapsama bir referans sağlarlar ve bu kapsamdaki değişkenlere erişebilir ve bunları değiştirebilirler.

Tablolarda olduğu gibi, bir işlev farklı bir değişkene atanırsa veya başka bir işleve bağımsız değişken olarak iletilirse, çağrılması gereken temel "işlev nesnesidir".

Bir dizgeye dönüştürüldüğünde sonuç "işlev" olur.

Desteklenmeyen türler
userdata türü, diğer dillerde yazılmış Lua uzantıları için opak değerleri tutmak için kullanılır; örneğin, bir C işaretçisi veya yapısı tutmak için bir kullanıcı verisi kullanılabilir. Özel derlenmiş koda izin verilmeyen barındırma ortamlarında Scribunto'nun kullanılmasına izin vermek için bu tür uzantılar kullanılmaz.

thread türü, Scribunto'nun sanal alanında bulunmayan eşyordamlar tutamaçlarını temsil eder.

Meta tablolar
Her tablonun metatable olarak bilinen ilişkili bir tablosu olabilir. Meta tablodaki alanlar, tablo için farklı veya geri dönüş davranışı belirtmek için bazı işleçler ve işlevler tarafından kullanılır. Bir tablo için metatable'a getmetatable işlevi kullanılarak erişilebilir ve setmetatable işlevi ile ayarlanabilir.

Meta işlevleri için erişilirken, metatable alanlarına rawget ile erişilir.

Tablonun kendisini etkileyen metatable alanları şunlardır:
 * __index
 * Bu, bir tablo erişimi  nil döndüreceği zaman kullanılır. Bu alanın değeri bir tablo ise, erişim o tabloda tekrarlanır, yani   (bu tablonun metatable __index'ini çağırabilir). Bu alanın değeri bir işlevse, işlev   olarak adlandırılır. rawget işlevi bu metametriyi atlar.


 * __newindex
 * Bu, bir tabloya  anahtarını atarken kullanılır; burada   sıfır döndürür. Bu alanın değeri bir tablo ise, atanması o tabloda tekrarlanır, yani.   (metatable __newindex tablosunu çağırabilir). Bu alanın değeri bir işlevse, işlev   olarak adlandırılır. rawset işlevi bu metametriyi atlar.


 * __call
 * Bu, bir tabloda işlev çağrısı sözdizimi kullanıldığında kullanılır, . Değer,   gibi bir işlev olarak adlandırılan bir işlev olmalıdır.


 * __mode
 * Bu, zayıf kaynakça içeren tablolar yapmak için kullanılır. Değer bir dize olmalıdır. Varsayılan olarak, anahtar olarak veya tablodaki bir değer olarak kullanılan hiçbir değer çöp toplanmaz. Ancak bu meta alan 'k' harfini içeriyorsa, zayıf olmayan kaynakça yoksa anahtarlar çöp toplanabilir ve 'v' değerleri içeriyorsa, her iki durumda da, karşılık gelen anahtar ve değer tablodan kaldırılır. Tablonun metatable olarak kullanıldıktan sonra bu alan değiştirilirse, davranışın tanımsız olduğunu unutmayın.

Diğer metatable alanları şunları içerir:


 * __add†
 * __sub†
 * __mul†
 * __div†
 * __mod†
 * __pow†
 * __unm
 * __concat†
 * __eq‡
 * __lt‡
 * __le‡
 * __pairs
 * __ipairs
 * __metatable*
 * __tostring

† İkili işleçler için, Lua önce sol bağımsız değişkenin metatable'ına (varsa), sonra da sağa bir metamethod ararken bakar. ‡ İlişkisel işleçler için meta yöntem yalnızca her iki bağımsız değişkenin meta tablolarında da aynı işlev belirtilirse kullanılır. Özdeş beden ve kapanma ile bile farklı anonim işlevler aynı kabul edilemez. * __metatable hem getmetatable hem de setmetatable öğelerini etkiler

Not: Lua'da tüm dizeler, __index,  tablosuna kaynakladığı tek bir metatable'ı da paylaşır. Bu metatable'a Scribunto'da veya kaynaklanan  tablosuna erişilemez; modüllerin kullanabileceği dize tablosu bir kopyadır.

Değişkenler
Değişkenler, değerleri depolayan yerlerdir. Lua'da üç tür değişken vardır: küresel değişkenler, yerel değişkenler ve tablo alanları.

name genel veya yerel bir değişkeni (veya yalnızca bir tür yerel değişken olan bir işlev bağımsız değişkenini) temsil eder. anahtar sözcüğü kullanılarak açıkça yerel olarak bildirilmedikçe değişkenlerin global olduğu varsayılır. Bir değer atanmamış herhangi bir değişkenin nil değeri olduğu kabul edilir.

Küresel değişkenler, ortam adı verilen standart bir Lua tablosunda saklanır; bu tablo genellikle  genel değişkeni olarak bulunur. Bu genel değişken tablosu için bir metatable ayarlamak mümkündür; __index ve __newindex metamethod'ları, diğer tüm tablolardaki alanlara erişim ve atamalarda olduğu gibi global değişkenlere erişim ve atamalarda çağrılır.

Bir işlevin ortamına getfenv işlevi kullanılarak erişilebilir ve setfenv işlevi kullanılarak değiştirilebilir; Scribunto'da, eğer mevcutsa bu işlevler ciddi şekilde kısıtlanmıştır.

Yerel değişkenler sözlüksel olarak kapsamlıdır; ayrıntılar için Yerel değişken bildirimlerine bakın.

İfadeler
İfade değerleri olan bir şeydir: değişmez değerler (sayılar, dizeler, true, false, nil), anonim işlev bildirimleri, tablo kurucuları, değişken başvuruları, işlev çağrıları, vararg ifadesi, ifadeler parantez içine alınmış, ifadelere uygulanan tekli işleçler ve ikili işleçlerle birleştirilmiş ifadeler.

Çoğu ifadenin bir değeri vardır; işlev çağrıları ve vararg ifadesi herhangi bir sayı içerebilir. Bir işlev çağrısını veya vararg ifadesini parantez içine almanın ilk değer dışındaki tüm öğelerin kaybolacağını unutmayın.

İfade listeleri, virgülle ayrılmış ifade listeleridir. Son ifade hariç tümü bir değere zorlanır (ek değerler düşer veya ifadede değer yoksa nil kullanılır); son ifadedeki tüm değerler ifade listesinin değerlerine dahil edilir.

Aritmetik operatörleri
Lua alışılmış aritmetik işleçleri destekler: toplama, çıkarma, çarpma, bölme, modulo, üs alma ve olumsuzlama.

Tüm işlenenler, tonumber değerinin sıfırdan farklı olduğu sayılar veya dizeler olduğunda, işlemlerin olağan anlamları vardır.

Her iki işlenen de uygun metamethod değerine sahip bir tabloysa, metamethod çağrılır.

İlişkisel operatörleri
Lua'daki ilişkisel operatörler,  ,  ,  ,   ve. İlişkisel bir operatörün sonucu her zaman bir boole olur.

Eşitlik önce işlenen türlerini karşılaştırır; eğer farklılarsa, sonuç yanlıştır. Sonra değerleri karşılaştırır: nil, boolean, number ve string beklenen şekilde karşılaştırılır. İşlevler, aynı işlev nesnesine başvuruyorsa eşittir; İki farklı anonim işlevi karşılaştırdığı için  false değerini döndürür. Tablolar varsayılan olarak aynı şekilde karşılaştırılır, ancak bu __eq metamethod kullanılarak değiştirilebilir.

Eşitsizlik eşitliğin kesin olarak olumsuzlanmasıdır.

Düzen operatörleri için, her ikisi de sayı veya her ikisi de dize ise, doğrudan karşılaştırılır. Ardından metametreler kontrol edilir:


 * ,  kullanılır
 * varsa,   kullanılır, veya   mevcut ise, öyleyse buna   eşdeğer kabul edilir
 * ,  eşdeğer kabul edilir
 * ,  eşdeğer kabul edilir

Gerekli meta yöntemler kullanılamıyorsa, bir hata oluşur.

Mantıksal operatörler
Mantıksal işleçler,   ve   şeklindedir. Hepsi, nil ve false olduğu ve başka bir şeyin true olduğu standart yorumu kullanır.

için, sol işlenen yanlış kabul edilirse döndürülür ve ikinci işlenen değerlendirilmez; aksi takdirde ikinci işlenen döndürülür.

için, sol işlenen doğru kabul edilirse, döndürülür ve ikinci işlenen değerlendirilmez; aksi takdirde ikinci işlenen döndürülür.

için, sonuç her zaman true veya false olur.

ve  kısa devre olduğunu unutmayın. Örneğin,, yalnızca   ise   ile çağırır. ilk değeri olarak false veya nil değerini döndürür.

Birleştirme operatörü
Birleştirme işleci,  olarak kullanılan iki noktadır. Her iki işlenen de sayı veya dizgiyse, dizgeye dönüştürülür ve birleştirilir. Aksi takdirde, bir __concat metamethod varsa, kullanılır. Aksi takdirde bir hata oluşur.

Lua dizelerinin değişmez olduğunu ve Lua herhangi bir tür "string builder" sağlamadığını unutmayın, bu yüzden tekrar tekrar  yapan bir döngü her yineleme için yeni bir dize oluşturun ve sonunda eski dizeleri çöp toplayın. Birçok dizenin birleştirilmesi gerekiyorsa, string.format kullanmak veya tüm dizeleri bir array içine eklemek ve sonunda table.concat kullanmak daha hızlı olabilir.

Uzunluk operatörü
Uzunluk operatörü,  olarak kullanılan. bir dize ise, uzunluğu bayt olarak döndürür. bir array tablosu ise, dizinin uzunluğunu döndürür.

bir dizi olmayan bir tablo ise,  herhangi bir N değerini, [N] sıfır ve a[N+1] olacak şekilde döndürebilir nil, daha yüksek dizinlerde nil olmayan değerler olsa bile. Örneğin,

Operatör önceliği
Lua'nın operatör önceliği veya işlem sırası, en yüksekten en düşüğe:


 * 1) not # - (olumsuzluk)
 * 2) + - (çıkarma)
 * 3) and
 * or
 * 1) and
 * or
 * 1) and
 * or

Öncelik düzeyinde, çoğu ikili işleç sol ilişkiseldir, yani,   olarak yorumlanır. Üstelleştirme ve birleştirme doğru çağrıştırıcıdır, yani,   olarak yorumlanır.

İşlev çağrıları
Lua işlev çağrıları diğer birçok dilde olanlara benzer: bir ad ve ardından parantez içindeki bağımsız değişkenler listesi:

işlev( expression-list )

Lua'daki ifade listelerinde olduğu gibi, listedeki son ifade birden çok bağımsız değişken değeri sağlayabilir.

İşlev, ifade listesinde işlev tanımında bağımsız değişkenlerden daha az değerle çağrılırsa, ek bağımsız değişkenlerin sıfır değeri olur. İfade listesi bağımsız değişkenlerden daha fazla değer içeriyorsa, fazla değerler atılır. Bir fonksiyonun değişken sayıda argüman alması da mümkündür; ayrıntılar için İşlev bildirimlerine bakın.

Lua ayrıca bir işlev dönüş değerinin doğrudan çağrılmasına izin verir, yani. Çağrılacak işlevi belirlemek için değişken erişimden daha karmaşık bir ifade gerekiyorsa, değişken erişim yerine parantez içine alınmış bir ifade kullanılabilir.

Lua, iki genel vaka için sözdizimsel şekere sahiptir. Birincisi, bir tablonun nesne olarak kullanıldığı ve fonksiyonun nesne üzerinde bir yöntem olarak çağrılmasıdır. Sözdizimi

tablo:ad( expression-list )

tam olarak eşdeğerdir

tablo.ad( tablo, expression-list )

İkinci yaygın durum, Lua'nın işleve tek konumsal argüman olarak ad-değer eşlemelerini içeren bir tablo ileterek adlandırılmış bağımsız değişkenler uygulama yöntemidir. Bu durumda, argüman listesindeki parantezler atlanabilir. Bu, işlevin tek bir değişmez dizeden geçirilmesi durumunda da çalışır. Örneğin, çağrılar

func{ arg1 = exp, arg2 = exp } func"string"

eşittir

func( { arg1 = exp, arg2 = exp } ) func( "string" )

Bunlar birleştirilebilir; aşağıdaki çağrılar eşdeğerdir:

table:name{ arg1 = exp, arg2 = exp } table.name( table, { arg1 = exp, arg2 = exp } )

İşlev bildirimleri
İşlev bildirimi sözdizimi şöyle görünür:

function ( var-list ) block end

var-list içindeki tüm değişkenler işleve yereldir ve değerler function call içindeki ifade listesinden atanır. Ek yerel değişkenler blok içinde bildirilebilir.

İşlev çağrıldığında, var-list ile karşılık gelen yerel değişkenler oluşturulduktan ve değerler atandıktan sonra block içindeki ifadeler yürütülür. return statement ulaşılırsa, bloktan çıkılır ve işlev çağrısı ifadesinin değerleri return deyimi tarafından verilen değerlerdir. Yürütme, bir return ifadesiyle karşılaşmadan işlevin bloğunun sonuna ulaşırsa, işlev çağrısı ifadesinin sonucu sıfır değerine sahiptir.

Lua işlevleri sözcüksel kapanıştır. Ortak bir deyim "private static" değişkenleri işlevin bildirildiği kapsamda yerel olarak bildirmektir. Örneğin,

Bir işlev, var-list öğesinde son öğe olarak  belirtilerek değişken sayıda bağımsız değişkeni kabul ettiği bildirilebilir:

function ( var-list, ... ) block end

Blok içinde, varargs ifadesi  kullanılabilir, sonuç işlev çağrısındaki tüm ekstra değerler olur. Örneğin,

select işlevi varargs ifadesi ile çalışmak üzere tasarlanmıştır; özellikle,  yerine   kullanılmalıdır. varargs ifadesindeki değer sayısını saymak için, çünkü  bir array olmayabilir.

Lua, işlev bildirimini ve bir değişkene atamayı birleştirmek için sözdizimsel şeker sağlar; ayrıntılar için İşlev bildirim bildirimlerine bakın.

Bunun işe yaramayacağını unutmayın:

 local factorial = function ( n ) if n <= 2 then return n   else return n * factorial( n - 1 ) end end

İşlev bildirimi yerel değişken atama deyimi tamamlanmadan önce işlendiğinden, işlev gövdesi içindeki "factorial" bir dış kapsamda bu adın (muhtemelen tanımsız) değişkenini ifade eder. Bu sorun, önce yerel değişkeni bildirip bir sonraki deyimde atayarak veya işlev bildirimi deyimi sözdizimi kullanılarak önlenebilir.

İfadeler
Bir ifade temel yürütme birimidir: bir atama, kontrol yapısı, işlev çağrısı, değişken bildirimi, vb.

Bir yığın isteğe bağlı olarak noktalı virgülle ayrılmış bir ifade dizisidir. Bir yığın temel olarak anonim bir işlevin gövdesi olarak kabul edilir, böylece yerel değişkenleri bildirebilir, bağımsız değişkenler alabilir ve değerleri döndürebilir.

Bir blok da tıpkı bir yığın gibi bir ifade dizisidir. Bir blok, tek bir ifade oluşturmak için sınırlandırılabilir:. Bunlar, yerel değişkenlerin kapsamını sınırlamak veya başka bir bloğun ortasına  veya   eklemek için kullanılabilir.

Atanmalar
variable-list, virgülle ayrılmış değişkenler listesidir; expression-list, bir veya daha fazla ifadenin virgülle ayrılmış listesidir. Tüm ifadeler herhangi bir atanma yapılmadan önce değerlendir, bu yüzden, a ve b değerlerini değiştirecek.

Yerel değişken bildirimleri
Yerel değişkenler, block veya chunk içinde herhangi bir yerde bildirilebilir. İfade listesi olmayan ilk form değişkenleri bildirir ancak bir değer atamaz, böylece tüm değişkenler değer olarak nil olur. İkinci form, yukarıdaki Atanmalar da açıklandığı gibi yerel değişkenlere değerler atar.

Yerel değişkenin görünürlüğünün, yerel değişken bildiriminden sonraki ifadeyle başladığını unutmayın. Dolayısıyla,  gibi bir bildirim, yerel bir x değişkenini bildirir ve dış kapsamdan x değerini atar. Yerel değişken, yerel değişken bildirimini içeren en içteki bloğun sonuna kadar kapsamda kalır.

Kontrol yapıları
While ifadesi, bir ifade gerçek bir değer olarak değerlendirildiği sürece bir bloğu tekrarlar.

Repeat ifadesi, bir ifade gerçek bir değer olarak değerlendirilene kadar bir bloğu tekrarlar. Blok içinde bildirilen yerel değişkenlere ifadede erişilebilir.

For döngüsünün ilk biçimi yerel bir değişken bildirir ve her yinelemede exp1 ile exp2 ekleyerek exp3 değerleri için bloğu tekrar eder. exp3 ifadesinin tamamen atlanabileceğini unutmayın; bu durumda 1 kullanılır, ancak  ve   gibi sayısal olmayan değerlerin bir hata olduğunu unutmayın. Tüm ifadeler döngü başlamadan önce bir kez değerlendirilir.

For döngüsünün bu formu kabaca

ancak var, limit ve step değişkenlerine başka hiçbir yerde erişilemez. name değişkeninin blok için yerel olduğunu unutmayın; döngüden sonraki değeri kullanmak için, döngü dışında bildirilen bir değişkene kopyalanmalıdır.

For döngüsünün ikinci biçimi iterator işlevleriyle çalışır. İlk formda olduğu gibi, expression-list döngüye başlamadan önce yalnızca bir kez değerlendirilir.

For döngüsünün bu formu kabaca

ancak func, static ve var değişkenlerine başka hiçbir yerde erişilemez. var-list içindeki değişkenlerin blok için yerel olduğunu unutmayın; döngüden sonra kullanmak için, döngü dışında bildirilen değişkenlere kopyalanmalıdır.

Genellikle expression-list üç değeri döndüren tek bir işlev çağrısıdır. Yineleyici işlevi yalnızca içine geçirilen parametrelere bağlı olacak şekilde yazılabilirse, bu en verimli yöntemdir. Değilse, Lua'da programlama bir tablonun statik değişken olarak döndürülmesine ve her yinelemede üyelerinin güncellenmesine bir kapatmanın tercih edilmesini önerir.

exp1 true değerini döndürürse block1 öğesini, aksi takdirde exp2 true değerini döndürürse block2 öğesini, aksi takdirde block3 öğesini yürütür. kısmı atlanabilir ve  kısmı gerektiğinde tekrarlanabilir veya atlanabilir.

Return ifadesi, bir işlevden veya chunk (yalnızca bir işlevdir) değer döndürmek için kullanılır. Expression-list, sıfır veya daha fazla ifadenin virgülle ayrılmış listesidir.

Lua kuyruk özyineleme uygular: expression-list bir işlev çağrısı olan tam olarak bir ifadeden oluşuyorsa, geçerli yığın çerçevesi o işleve çağrı için yeniden kullanılır. Bunun çağrı yığını ile ilgili işlevler için bir anlamı vardır,  ve   gibidir.

Return deyimi, block içindeki son ifade olmalıdır. Herhangi bir nedenle bir bloğun ortasında bir dönüş gerekiyorsa, açık bir  bloğu kullanılabilir.

Break ifadesi, döngüden sonraki ifadeye atlayarak bir süre, tekrar veya döngü için yürütmeyi sonlandırmak için kullanılır.

Break ifadesi, block içindeki son ifade olmalıdır. Herhangi bir nedenden ötürü bir bloğun ortasında bir ayırtma gerekiyorsa, açık bir  bloğu kullanılabilir.

İfadeler olarak işlev çağrıları
Bir işlev çağrısı bir ifade olarak kullanılabilir; bu durumda, işlev yalnızca sahip olabileceği herhangi bir yan etki için çağrılır (örneğin mw.log günlük değerleri) ve herhangi bir dönüş değeri atılır.

İşlev bildirim ifadeleri
Lua, bir işlevi bildirmek ve bir değişkene daha doğal atamak için sözdizimsel şeker sağlar. Aşağıdaki bildirim çiftleri eşdeğerdir

-- Temel beyan function func( var-list ) block end func = function ( var-list ) block end

-- Yerel işlev local function func( var-list ) block end local func; func = function ( var-list ) block end

-- Tablodaki alan olarak işlev function table.func( var-list ) block end table.func = function ( var-list ) block end

-- Tabloda yöntem olarak işlev function table:func( var-list ) block end table.func = function ( self, var-list ) block end

Burada iki nokta üst üste işareti, bağımsız değişkenler listesinin başına "self" adlı örtük bir bağımsız değişken ekleyerek işlev çağrıları için iki nokta üst üste işareti ile paralellik gösterir.

Hata işleme
error ve assert işlevleri kullanılarak hatalar "atılabilir". Hataları "yakalamak" için pcall veya xpcall kullanın. Bazı dahili Scribunto hatalarının Lua kodunda yakalanamayacağını unutmayın.

Çöp toplama
Lua otomatik bellek yönetimi gerçekleştirir. Bu, yeni nesneler için bellek ayırma veya nesneler artık gerekli olmadığında boşaltma konusunda endişelenmeniz gerektiği anlamına gelir. Lua, zaman zaman tüm ölü nesneleri (yani, Lua'dan artık erişilemeyen nesneleri) ve yalnızca zayıf kaynakça aracılığıyla erişilebilen nesneleri toplamak için zaman zaman bir çöp toplayıcı çalıştırarak belleği otomatik olarak yönetir. Lua tarafından kullanılan tüm bellek otomatik yönetime tabidir: tablolar, işlevler, dizeler vb.

Çöp toplama otomatik olarak gerçekleşir ve Scribunto içinden yapılandırılamaz.

Standart kütüphaneler
Standart Lua kütüphaneleri, Lua'ya temel hizmetler ve kritik performans fonksiyonları sağlar. Burada standart kütüphanelerin sadece Scribunto'da bulunan kısımları belgelenmiştir.

_G


Bu değişken, geçerli genel değişken tablosuna bir referans tutar;  genel değişkenine de   olarak erişilebilir. Ancak, _G kendisi hakkında özel bir şey olmadığını unutmayın; diğer değişkenlerle aynı şekilde yeniden atanabilir:

Küresel değişken tablosu, diğer tablolar gibi kullanılabilir. Örneğin,

_VERSION


Lua'nın çalışan sürümünü içeren bir dize, ör. "Lua 5.1".

assert
sıfır veya yanlışsa bir hata verir. Bu durumda, hatanın metni olarak  kullanılır: nil (veya belirtilmemişse), metin "onaylama başarısız!"; bir dize veya sayı varsa, metin bu değerdir; aksi taktirde kendi başına bir hata ortaya çıkar.

başka bir değerse, assert  ve   dahil tüm bağımsız değişkenleri döndürür.

Lua'da biraz yaygın bir deyim, bir işlevin normal çalışmada "true" değerini döndürmesi ve başarısızlık durumunda ilk değer olarak nil veya false ve ikinci değer olarak bir hata mesajı döndürmesidir. Daha sonra kolay hata kontrolü çağrı  çağrısına sarılarak yapılabilir:

error
metniyle hata verir.

normalde hatanın yeri hakkında bazı bilgiler ekler. 1 veya atlanmışsa, bu bilgi  çağrısının kendisidir; 2, hata adı verilen işlevin çağrısının yerini kullanır; ve bunun gibi. 0 geçilmesi konum bilgilerinin dahil edilmesini atlar.

getfenv
Motor yapılandırmasındaki  değerine bağlı olarak bu işlevin kullanılamayabileceğini unutmayın.

ile belirtildiği gibi bir ortam (genel değişken tablosu) döndürür:


 * 1, nil veya atlanmışsa,  çağıran işlevin ortamını döndürür. Genellikle bu _G ile aynı olacaktır.
 * Tamsayılar 2-10, çağrı yığınındaki fonksiyonların ortamını döndürür. Örneğin, 2, geçerli işlev olarak adlandırılan işlevin ortamını döndürür, 3 bu işlevi çağıran işlevin ortamını döndürür, vb. değer yığındaki işlev çağrılarının sayısından daha yüksekse veya hedeflenen yığın düzeyi bir kuyruk çağrısıyla döndürüldüğünde bir hata ortaya çıkar.
 * Bir işlevin iletilmesi, o işlev çağrıldığında kullanılacak ortamı döndürür.

Tüm standart kütüphane işlevleri ve Scribunto kütüphane işlevleri tarafından kullanılan ortamlar korunur. Bu ortamlara  kullanarak erişmeye çalışmak bunun yerine sıfır döndürür.

getmetatable
table öğesinin metatable değerini döndürür. Başka herhangi bir tür sıfır döndürür.

Metatable'ın  alanı varsa, gerçek metatable yerine bu değer döndürülür.

ipairs
Üç değer döndürür: bir yineleyici işlevi,  ve 0 tablosu. Bu,  yineleyici formunda kullanılmak üzere tasarlanmıştır:

Bu, çiftler ( 1, t[1] ), ( 2, t[2] ) üzerinde tekrar eder ve bu şekilde, t[i] sıfır olduğunda durur.

metamethod sağlayarak standart davranış geçersiz kılınabilir. Bu meta yöntem mevcutsa, ipairs çağrısı bunun yerine  ile döndürülen üç değeri döndürür.

next
Bu, tablodaki anahtarların üzerinden yineleme yapılmasını sağlar. sıfır veya belirtilmemişse, tablodaki "first" anahtarı ve değerini döndürür; aksi takdirde, "next" anahtarı ve değerini döndürür. Başka anahtar yoksa, nil değerini döndürür. ifadesini kullanarak bir tablonun boş olup olmadığını kontrol etmek mümkündür.

Sayısal dizinleri olan tablolar için bile anahtarların döndürülme sırasının belirtilmediğini unutmayın. Bir tabloyu sayısal sırada hareket ettirmek için bir numerical for veya ipairs kullanın.

Geçiş için sonraki öğeyi kullanırken, var olmayan herhangi bir anahtara bir değer atandığında davranış tanımsızdır. Mevcut bir alana yeni bir değer (nil dahil) atanmasına izin verilir.

pairs
Üç değer döndürür: bir yineleyici işlevi (next veya benzer şekilde),  tablosu ve nil. Bu, yineleyici formunda kullanım için tasarlanmıştır:

Bu, next gibi anahtar/değer çiftlerini  olarak yineleyecektir; tarama sırasında tabloyu değiştirmeyle ilgili kısıtlamalar için next belgelerine bakın.

__pairs metamethod sağlanarak standart davranış geçersiz kılınabilir. Bu meta yöntem mevcutsa, çiftlere çağrı, bunun yerine  ile döndürülen üç değeri döndürür.

pcall
protected mode verilen bağımsız değişkenlerle  işlevini çağırır. Bu,  çağrısı sırasında bir hata ortaya çıkarsa, pcall işlevinin false döndüreceği ve hata mesajının yükseltileceği anlamına gelir. Hata oluşmazsa, pcall true değerini ve çağrı tarafından döndürülen tüm değerleri döndürür.

pseudocode içinde,  şu şekilde tanımlanabilir:

rawequal
Bu, __eq metamethod yok sayması dışında  ile eşdeğerdir.

rawget
Bu, __index metamethod yok sayması dışında  ile eşdeğerdir.

rawset
Bu, __newindex metamethod yok sayması dışında  ile eşdeğerdir.

select
bir sayı ise, bu dizinden sonraki tüm argümanları  olarak döndürür. '#' dizgiyse, argüman sayısını  olarak döndürür.

Başka bir deyişle,  kabaca aşağıdaki gibi bir şeydir, ancak   nil değerleri içerdiğinde bile düzgün çalışacaktır (nils sorunu için # ve unpack belgelerine bakın).

setmetatable
table öğesinin metatable değerini ayarlar. sıfır olabilir, ancak açıkça belirtilmelidir.

Geçerli metatable'ın __metatable alanı varsa,  bir hata atar.

tonumber
bir sayıya dönüştürmeyi dener. Zaten bir sayı veya sayıya dönüştürülebilecek bir dize ise,  bu sayıyı döndürür; aksi halde sıfır döndürür.

İsteğe bağlı  (varsayılan 10), sayıyı yorumlayacak tabanı belirtir. Baz, 2 ile 36 arasında (tam dahil) herhangi bir tam sayı olabilir. 10'un üzerindeki bazlarda, 'A' harfi (büyük ya da küçük harf) 10'u temsil eder, 'B' 11'i temsil eder ve 'Z' 35'i temsil eder.

Temel 10'da, değerin ondalık bir bölümü olabilir, E notasyonu ile ifade edilebilir ve temel 16'yı belirtmek için önde gelen "0x" olabilir. Diğer temellerde yalnızca işaretsiz tamsayılar kabul edilir.

tostring
değerini bir dizeye dönüştürür. Her türün nasıl dönüştürüldüğüne ilişkin ayrıntılar için yukarıdaki Veri türleri bölümüne bakın.

Tablolar için standart davranış, __tostring metamethod sağlanarak geçersiz kılınabilir. Bu meta yöntem mevcutsa, tostring çağrısı bunun yerine  ile döndürülen tek değeri döndürür.

type
türünü dize olarak döndürür:, ,  ,  ,   veya.

unpack
Manüel olarak yazılırsa  gibi bir değer verilen tablodan değerleri döndürür. Nil veya belirtilmezse,  varsayılan olarak 1 ve   varsayılan olarak   olur.

bir array değilse ve  sıfır veya belirtilmemişse sonuçların belirleyici olmadığını unutmayın; ayrıntılar için Uzunluk operatörüne bakın.

xpcall
Hata mesajı iade edilmeden önce  işlevine iletilmesi dışında   gibidir.

pseudocode içinde,  şu şekilde tanımlanabilir:

debug.traceback
Çağrı yığınının izini taşıyan bir dize döndürür. Geri izlemenin başına isteğe bağlı bir ileti dizesi eklenir. İsteğe bağlı bir seviye numarası, izlemeyi başlatmak için hangi yığın seviyesinde başlatılacağını bildirir.

math.abs
mutlak değerini döndürür.

math.acos
arc kosinüsünü (radyan cinsinden verilir) döndürür.

math.asin
arc sinüsünü döndürür (radyan cinsinden verilir).

math.atan
arc tanjantını verir (radyan cinsinden verilir).

math.atan2
Sonucun çeyreğini bulmak için her iki parametrenin işaretlerini kullanarak  (radyan cinsinden verilen) arc tanjantını döndürür.

math.ceil
fazladan büyük veya ona eşit olan en küçük tamsayıyı döndürür.

math.cos
kosinüsü verir (radyan cinsinden verilir).

math.cosh
hiperbolik kosinüsü verir.

math.deg
Derece olarak  (radyan cinsinden verilen) açısını döndürür.

math.exp
$$e^x$$ değerini döndürür.

math.floor
ile küçük veya ona eşit olan en büyük tamsayıyı döndürür.

math.fmod
Bölgeyi sıfıra doğru yuvarlayan  bölünmesinin geri kalanını   olarak döndürür. Örneğin,,   verir.

math.frexp
ve  olmak üzere iki değer döndürür:


 * sonlu ve sıfırdan farklıysa: $$x = m \times 2^e$$,  bir tamsayıdır ve   mutlak değeri 5 $ aralığındadır
 * ½6 sıfır ise:  ve , 0
 * NaN veya sonsuzsa:,   ve   belirtilmedi

math.huge
Pozitif sonsuzluğu temsil eden değer; herhangi bir sayısal değere eşit veya daha büyük.

math.ldexp
$$m \times 2^e$$ döndürür ( tam sayı olmalıdır).

math.log
doğal logaritmayı döndürür.

math.log10
taban-10 logaritmasını verir.

math.max
Bağımsız değişkenleri arasında maksimum değeri döndürür.

NaN'lerle davranış belirtilmedi. Mevcut uygulama ile, eğer  NaN ise NaN döndürülecektir, ancak diğer NaN'ler göz ardı edilecektir.

math.min
Bağımsız değişkenleri arasında minimum değeri döndürür.

NaN'lerle davranış belirtilmedi. Mevcut uygulama ile, eğer  NaN ise NaN döndürülecektir, ancak diğer NaN'ler göz ardı edilecektir.

math.modf
İki sayıyı döndürür,  ayrılmaz parçası ve   kesirli kısmı. Örneğin,,   verir.

math.pi
$$\pi$$ değeri.

math.pow
ile eşdeğerdir.

math.rad
Radyan cinsinden  (derece olarak verilir) açısını döndürür.

math.random
Yalancı rastgele bir sayı döndürür.

ve  bağımsız değişkenleri atlanabilir, ancak belirtilirse tamsayılara dönüştürülebilir olmalıdır.


 * Bağımsız değişken olmadan $$[0,1)$$ aralığında gerçek bir sayı döndürür
 * Bir Bağımsız değişkenle, $$[1,m]$$ aralığında bir tamsayı döndürür
 * İki bağımsız değişkenle, $$[m,n]$$ aralığında bir tamsayı döndürür

math.randomseed
Sözde rastgele üreteç için  seed olarak ayarlar.

Aynı çekirdeği kullanmanın  değerinin aynı sayı dizisini vermesine neden olacağını unutmayın.

math.sin
değerinde sinyali döndürür (radyan cinsinden verilir).

math.sinh
hiperbolik sinüsü döndürür.

math.sqrt
ile karekökü döndürür. ile eşdeğerdir.

math.tan
tanjantını döndürür (radyan cinsinden verilir).

math.tanh
hiperbolik tanjantını döndürür.

os.clock
Program tarafından kullanılan CPU süresinin saniye cinsinden miktarının yaklaşık değerini döndürür.

os.date

 * Dil kütüphanesinin formatDate daha kapsamlı tarih biçimlendirmesi için kullanılabilir

göre biçimlendirilmiş bir dize veya tarih ve saat içeren bir tablo döndürür. Biçim atlanırsa veya sıfırsa, "%c" kullanılır.

verilirse, biçimlendirilecek zamandır ( bakın). Aksi takdirde geçerli saat kullanılır.

'!' ile başlıyorsa, tarih sunucunun yerel saati yerine UTC olarak biçimlendirilir. Bu isteğe bağlı karakterden sonra biçim "*t" dizgiyse, tarih aşağıdaki alanları içeren bir tablo döndürür:


 * year (tam)
 * month (1–12)
 * day (1–31)
 * hour (0–23)
 * min (0–59)
 * sec (0–60)
 * wday (hafta içi, Pazar 1)
 * yday (yılın günü)
 * isdst (gün ışığından yararlanan işaret, bir boole; bilgi mevcut değilse mevcut olmayabilir)

Biçim "*t" değilse, tarih tarihi C işlevi strftime ile aynı kurallara göre biçimlendirilmiş bir dize olarak döndürür.

os.difftime
üzerinden  ile saniye sayısını döndürür.

os.time
Geçerli saati temsil eden bir sayı döndürür.

Bağımsız değişken olmadan çağrıldığında geçerli saati döndürür. Bir tablo iletilirse, tabloda kodlanan süre ayrıştırılır. Tabloda "year", "month" ve "day" alanları bulunmalı ve ayrıca "hour" (varsayılan 12), "min" (varsayılan 0), "sec" (varsayılan 0) ve "isdst" dahil edebilirler.

require
Belirtilen modülü yükler.

İlk olarak, modülün zaten yüklü olup olmadığını görmek için  içine bakar. Öyleyse,  değerini döndürür.

Aksi takdirde, modül için bir yükleyici bulmaya çalışmak için  dizisindeki her yükleyiciyi çağırır. Bir yükleyici bulunursa, o yükleyici çağrılır. Yükleyici tarafından döndürülen değer  içine kaydedilir ve döndürülür.

Mevcut yükleyiciler hakkında bilgi için  belgelerine bakın.

Örneğin, aşağıdakileri içeren bir "Module:Giving" modülünüz varsa:

Bunu, aşağıdaki gibi bir kodla başka bir modüle yükleyebilirsiniz:

package.loaded
Bu tabloda yüklü modüller bulunur. Anahtarlar modül adlarıdır ve değerler modül yüklendiğinde döndürülen değerlerdir.

package.loaders
Bu tablo, modülleri yüklerken kullanılacak arama işlevleri dizisini içerir. Her arama işlevi, yüklenecek modülün adı olan tek bir argümanla çağrılır. Modül bulunursa, araştırmacı modülü gerçekten yükleyecek bir işlev döndürmeli ve require tarafından döndürülecek değeri döndürmelidir. Aksi takdirde sıfır döndürmelidir.

Scribunto iki araştırmacı sunar:


 * 1) Yükleyici işlevi için
 * 2) Modül adı için Scribunto tarafından sağlanan modüllere bakın ve başarısız olursa Modül: ad boşluğuna bakın. "Modül:" öneki sağlanmalıdır.

Standart Lua yükleyicilerin dahil olmadığını unutmayın.

package.preload
Bu tablo, package.loaders içine dahil edilen ilk araştırmacı Scribunto tarafından kullanılan yükleyici işlevlerini içerir.

package.seeall
için __index metamethod değerini _G olarak ayarlar.

Dize kütüphanesi
Tüm dize işlevlerinde, ilk karakter C, PHP ve JavaScript'teki gibi 0 konumunda değil, 1. konumdadır. Dizinler negatif olabilir, bu durumda dizenin sonundan sayarlar: -1 konumu dizgideki son karakter, -2 ikinci sonuncudur, vb.

Dize kitaplığı bir baytlık karakter kodlamaları olduğunu varsayar. Unicode karakterleri işleyemez. Unicode dizelerinde çalışmak için Scribunto Ustring kütüphanesinde ilgili yöntemleri kullanın.

string.byte
Dize bir bayt dizisi olarak kabul edilirse,,  , ···,   için bayt değerlerini döndürür. için varsayılan değer 1'dir; için varsayılan değer  şeklindedir. mw.ustring.byte ile aynı.

string.char
Sıfır veya daha fazla tam sayı alır. Her karakterin karşılık gelen bağımsız değişkenine eşit bayt değerine sahip olduğu, bağımsız değişken sayısına eşit bir dize döndürür.

Bayt değerleri yerine Unicode kod noktalarını kullanan benzer bir işlev için mw.ustring.char sayfasına bakın.

string.find
dizesindeki  ile ilk eşleşmeyi arar. Bir eşleşme bulursa,, bu oluşumun başladığı ve bittiği   içindeki ofsetleri döndürür; aksi halde sıfır döndürür. Desenin yakalamaları varsa, başarılı bir eşleşmede yakalanan değerler de iki endeksten sonra döndürülür.

Üçüncü, isteğe bağlı sayısal argüman  aramanın nerede başlatılacağını belirtir; varsayılan değeri 1'dir ve negatif olabilir. Dördüncü, isteğe bağlı  bağımsız değişkeni olarak true değeri, desen eşleştirme özelliklerini kapatır, bu nedenle işlev,   karakter bulunmayan düz bir "find substring" işlemini gerçekleştirecek "magic" olarak kabul edilir.

verilirse,  de verilmesi gerektiğini unutmayın.

Ustring patterns de anlatıldığı gibi genişletilmiş benzer bir işlev ve bayt yerine  ofsetinin karakterlerde olduğu mw.ustring.find öğesine bakın. .

string.format
İlk bağımsız değişkeninde (bir dize olması gerekir) verilen açıklamanın ardından değişken bağımsız değişken sayısının biçimlendirilmiş bir sürümünü döndürür.

Biçim dizisi biçim belirleyicilerinin sınırlı bir alt kümesini kullanır:


 * Tanınan işaretler '-', '+', '', '#' ve '0' şeklindedir.
 * 99'a kadar tamsayı alan genişlikleri desteklenir. '*' desteklenmiyor.
 * 99'a kadar tamsayı kesinlikleri desteklenir. '*' desteklenmiyor.
 * Uzunluk değiştiricileri desteklenmez.
 * Tanınan dönüşüm anahtarları 'c', 'd', 'i', 'o', 'u', 'x', 'X', 'e', 'E', 'f', 'g', 'G ',' s ', '%' ve standart olmayan 'q'.
 * Konum anahtarları (ör. "%2$s") desteklenmez.

'q' dönüşüm belirteci 's' gibidir, ancak dizeyi Lua yorumlayıcısı tarafından güvenli bir şekilde geri okunmaya uygun bir biçimde biçimlendirir: dize çift tırnak işaretleri ve tüm çift tırnak işaretleri, yeni satırlar, katıştırılmış sıfırlar ve ters eğik çizgiler arasında yazılır dize yazıldığında doğru bir şekilde kaçar.

Dizeler ve sayılar arasındaki Data types dönüştürme; diğer türler otomatik olarak dizgilere dönüştürülmez. NUL karakterleri (bayt değeri 0) içeren dizeler düzgün işlenmiyor.

mw.ustring.format ile aynı.

string.gmatch
Her çağrıldığında,  dizesinden   dizesinden sonraki yakalamaları döndüren bir yineleyici işlevi döndürür. hiçbir yakalama belirtmezse, her aramada tüm eşleşme üretilir.

Bu işlev için, desenin başlangıcında bir ' ' sihirli değildir, çünkü bu yinelemeyi önler. Değişmez bir karakter olarak ele alınır.

Desenin Ustring patterns bölümünde açıklandığı gibi genişletildiği benzer bir işlev için mw.ustring.gmatch içinde bakın.

string.gsub
tüm örneklerinin (veya varsa ilk ) bulunduğu bir   kopyasını döndürür, yerine   ile belirtilen ve bir dize, bir tablo veya bir işlev olabilecek yeni bir dize yerleştirildi. ayrıca ikinci değeri olarak gerçekleşen toplam eşleşme sayısını döndürür.

bir dize ise, değeri değiştirme için kullanılır. karakteri bir kaçış karakteri olarak çalışır:  formunun   içindeki herhangi bir sıra, 1 ile 9 arasında n olduğunda, n-th yakalanan alt dize değeri anlamına gelir. dizisi tüm eşleşmeyi,  dizisi ise tek bir   dizisini temsil eder.

bir tablo ise, tablo ilk eşleme anahtar olarak kullanılarak her eşleşme için sorgulanır; kalıp yakalama belirtmezse, tüm eşleşme anahtar olarak kullanılır.

bir işlevse, bu işlev her eşleşme gerçekleştiğinde çağrılır ve yakalanan tüm alt dizeler sırasıyla bağımsız değişken olarak iletilir; kalıp hiçbir yakalama belirtmezse, tüm eşleşme tek bir bağımsız değişken olarak geçirilir.

Tablo sorgusu veya işlev çağrısı tarafından döndürülen değer bir dize veya sayı ise, o zaman yeni dize olarak kullanılır; aksi takdirde, false veya nil ise, o zaman değiştirme olmaz (yani, orijinal eşleşme dizede tutulur).

Desenin Ustring patterns bölümünde açıklandığı gibi genişletildiği benzer bir işlev için mw.ustring.gsub içinde bakın.

string.len
Dizenin uzunluğunu bayt cinsinden döndürür. ASCII NUL karakterleri tarafından karıştırılmaz. ile eşdeğerdir.

Bayt yerine Unicode kod noktalarını kullanan benzer bir işlev için mw.ustring.len bakın.

string.lower
Tüm ASCII büyük harfleri küçük harfe dönüştürülmüş olarak bu dizenin bir kopyasını döndürür. Diğer tüm karakterler değişmeden kalır.

Unicode'da büyük harfli ve küçük harfli tanımlara sahip tüm karakterlerin dönüştürüldüğü benzer bir işlev için mw.ustring.lower bakın.

string.match
Dizedeki  ile ilk eşleşmeyi arar. Birini bulursa,  desendeki yakalamaları döndürür; aksi halde sıfır döndürür. hiçbir yakalama belirtmezse, tüm eşleşme döndürülür.

Üçüncü, isteğe bağlı sayısal argüman  aramanın nerede başlatılacağını belirtir; varsayılan değeri 1'dir ve negatif olabilir.

Desenin Ustring patterns ve  göreli konumunda açıklandığı gibi uzatıldığı benzer bir işlev için bayt yerine karakterler mw.ustring.match öğesine bakın.

string.rep
dizesinin  kopyasının birleşimi olan bir dize döndürür. mw.ustring.rep ile aynı.

string.reverse
tersine çevrilmiş (bytewise) bir dize döndürür.

string.sub
ile başlayan ve  kadar devam eden   alt dizesini döndürür;   ve   negatif olabilir. sıfır veya atlanmışsa, dizenin sonuna kadar devam eder.

Lua'daki bir dizenin index 1 ile başladığını unutmayın. Ayrıca, bu işlevi kullanırken, her iki uçtaki indeksler kapsayıcıdır.

Özellikle  çağrısı,   uzunluğunda   önekini ve   ise   uzunluğunda   sonekini döndürür.

Ofsetlerin bayt yerine karakter olduğu benzer bir işlev için mw.ustring.sub bakın.

string.upper
Tüm ASCII küçük harflerini büyük harfe değiştirmiş olarak bu dizenin bir kopyasını döndürür. Diğer tüm karakterler değişmeden kalır.

Unicode'da küçük harfli büyük harfe kadar tüm karakterlerin dönüştürüldüğü benzer bir işlev için mw.ustring.upper bakın.

Desenler
Lua'nın kalıplarının düzenli ifadeler ile benzer olduğunu, ancak aynı olmadığını unutmayın. Özellikle, normal ifadeler ve PCRE arasındaki aşağıdaki farklılıklara dikkat edin:


 * Alıntı karakteri ters eğik çizgi değil yüzde  şeklindedir.
 * Nokta her zaman yeni satırlar dahil tüm karakterlerle eşleşir.
 * Büyük/küçük harfe duyarlı olmayan mod.
 * Alternatif yok ( operatörü).
 * Niceleyiciler (, ,   ve  ) yalnızca tek tek karakterlere veya karakter sınıflarına uygulanabilir, grupları yakalamak için değil.
 * Açgözlü olmayan tek nicelik belirteci, PCRE'nin  nicelik anahtarına eşdeğer olan.
 * Genelleştirilmiş sonlu nicelik belirteci yok (örn. PCRE'de  nicelik belirteci).
 * Sadece sıfır genişlikli iddialar,   ve   "sınır" kalıbıdır; PCRE'nin   veya   gibi iddialar mevcut değildir.
 * Patterns themselves do not recognize character escapes such as '\ddd'. Ancak, desenler strings olduğundan, bu tür çıkışlar, desen dizesini oluşturmak için kullanılan dize değişmezlerinde kullanılabilir.

Ayrıca, bir desenin gömülü sıfır bayt içeremeyeceğini unutmayın (ASCII NUL, ). Bunun yerine  kullanın.

Ayrıca Unicode karakterleri kullanarak benzer bir desen eşleme şeması için Ustring patterns bakın.

Karakter sınıfı
Bir karakter kümesini temsil etmek için karakter sınıfı kullanılır. Bir karakter sınıfının tanımlanmasında aşağıdaki kombinasyonlara izin verilir:


 * x: (burada x  sihirli karakterlerinden biri değil) "x" karakterinin kendisini temsil eder.
 *  : (bir nokta) tüm karakterleri temsil eder.
 *  : tüm ASCII harflerini temsil eder.
 *  : tüm ASCII kontrol karakterlerini temsil eder.
 *  : tüm basamakları temsil eder.
 *  : tüm ASCII küçük harflerini temsil eder.
 *  : tüm noktalama işaretlerini temsil eder.
 *  : tüm ASCII boşluk karakterlerini temsil eder.
 *  : tüm ASCII büyük harflerini temsil eder.
 *  : tüm ASCII alfasayısal karakterleri temsil eder.
 *  : tüm onaltılık basamakları temsil eder.
 *  : sıfır bayt olan ASCII NUL'u temsil eder.
 *  : Tüm karakterler  içinde değil.
 *  : Tüm karakterler  içinde değil.
 *  : Tüm karakterler  içinde değil.
 *  : Tüm karakterler  içinde değil.
 *  : Tüm karakterler  içinde değil.
 *  : Tüm karakterler  içinde değil.
 *  : Tüm karakterler  içinde değil.
 *  : Tüm karakterler  içinde değil.
 *  : Tüm karakterler  içinde değil.
 *  : Tüm karakterler  içinde değil.
 *  : (burada x alfasayısal olmayan herhangi bir karakterdir) "x" karakterini temsil eder. Sihirli karakterlerden kaçmanın standart yolu budur. Herhangi bir noktalama işaretinden (sihir olmayan bile olsa) önce bir kalıpta kendisini temsil etmek için kullanıldığında ' ' ile başlayabilir.
 *  : "set" içindeki tüm karakterlerin birleşimi olan sınıfı temsil eder. Aralığın bitiş karakterlerini bir ' ' ile ayırarak bir dizi karakter belirtilebilir. Yukarıda açıklanan tüm  sınıfları set içinde bileşen olarak da kullanılabilir. Set deki diğer tüm karakterler kendilerini temsil eder. Örneğin,   (veya  ) tüm alfasayısal karakterleri ve alt çizgiyi temsil eder,   sekizli rakamlar ve   sekizli rakamları ve küçük harfleri artı ' ' karakterini temsil eder. Aralıklarla sınıflar arasındaki etkileşim tanımlanmamıştır. Bu nedenle,   veya   gibi kalıpların hiçbir anlamı yoktur.
 *  : set ifadesini gösterir, burada set yukarıdaki gibi yorumlanır.

Desen öğeleri
Bir desen öğesi şunlar olabilir


 * sınıftaki herhangi bir karakterle eşleşen tek bir karakter sınıfı;
 * tek bir karakter sınıfı ve onu takip eden ' '. Bu karakter, sınıftaki 0 veya daha fazla karakter tekrarıyla eşleşir. Bu tekrar öğeleri her zaman mümkün olan en uzun sıra ile eşleşecektir;
 * tek bir karakter sınıfı ve ardından ' ' ifadesi gelir; bu sınıftaki 1 veya daha fazla karakter tekrarı ile eşleşir. Bu tekrar öğeleri her zaman mümkün olan en uzun sıra ile eşleşecektir;
 * tek bir karakter sınıfı ve onu takip eden ' '. Bu karakter, sınıftaki 0 veya daha fazla karakter tekrarıyla eşleşir. ' ' dan farklı olarak, bu tekrar öğeleri her zaman en kısa olası diziyle eşleşir;
 * sınıftaki bir karakterin 0 veya 1 oluşumuyla eşleşen tek bir karakter sınıfı ve ardından ' ';
 * , 1 ile 9 arasında n için; bu öğe, n - yakalanan dizeye eşit bir alt dizeyle eşleşir (aşağıya bakın);
 * , burada x ve y iki ayrı karakterdir; bu öğe x ile başlayan, y ile biten ve x ve y “dengeli” olduğu dizelerle eşleşir. Bu, eğer biri dizeyi soldan sağa okursa, x için +1 ve y için -1 sayılırsa, y sonunun ilk y olduğu anlamına gelir. burada sayı 0'a ulaşır. Örneğin,  öğesi, ifadeleri dengeli parantezlerle eşleştirir.
 * , bir sınır örüntüsü; bu öğe, bir sonraki karakter set ve önceki karakter set ait olmayacak şekilde herhangi bir konumdaki boş bir dizeyle eşleşir. set daha önce açıklandığı gibi yorumlanır. Konunun başlangıcı ve sonu sanki '\ 0' karakteriymiş gibi işlenir. Sınır modellerinin mevcut olduğunu, ancak Lua 5.1'de belgelenmediğini ve 5.2'de Lua'ya resmi olarak eklendiğini unutmayın. Lua 5.2.1'deki uygulama 5.1.0'daki uygulama ile aynı değildir.

Desen
Bir desen bir dizi desen öğesidir.

Bir desenin başındaki ' ', eşleşmeyi konu dizesinin başlangıcı. Bir desenin sonundaki ' ', eşleşmeyi konu dizesinin sonu. Diğer pozisyonlarda, ' ' ve ' ' özel bir anlama sahip değildir ve kendilerini temsil eder.

Yakalamalar
Bir model parantez içine alınmış alt desenler içerebilir; yakalamaları tarif ediyorlar. Bir eşleşme başarılı olduğunda, konu dizesinin yakalamalarla eşleşen alt dizeleri ileride kullanılmak üzere saklanır ("yakalanır"). Yakalamalar sol parantezlerine göre numaralandırılır. Örneğin,  deseninde, dizenin   ilk yakalama olarak saklanır (ve bu nedenle 1 numaraya sahiptir);   ile eşleşen karakter 2 numara ile yakalanır ve   ile eşleşen parça 3 numaraya sahiptir.

Yakalama kaynakçası, kalıp dizesinin kendisinde görünebilir ve eşleşmede daha önce yakalanan metne geri dönebilir. Örneğin,  herhangi bir özdeş küçük harfle eşleşir,   ise 7 harfli palindrome ile eşleşir.

Özel bir durum olarak, boş yakalama  geçerli dize konumunu (bir sayı) yakalar. Örneğin,  dizesine   kalıbını uygularsak, iki yakalama olur: 3 ve 5.

Tablo kütüphanesi
Tablo kitaplığındaki çoğu işlev, tablonun bir dizi temsil ettiğini varsayar.

,  ve   işlevleri kullanılabilir, ancak kullanımdan kaldırılmıştır. pairs içeren bir for döngüsü, ipairs içeren bir for döngüsü ve bunun yerine uzunluk operatörünü kullanın.

table.concat
Tüm öğelerin dize veya sayı olduğu bir dizi verildiğinde,  döndürür.

için varsayılan değer boş dizedir,  için varsayılan 1 ve   için varsayılan değer tablonun uzunluğudur. ,  fazladan büyükse, boş dizeyi döndürür.

table.insert
Gerekirse,,   öğesini ekler, diğer öğeleri yukarı kaydırır. için varsayılan değer tablonun artı 1 uzunluğudur, böylece  çağrısı   tablonun sonuna   ekler.

kadar olan elemanlar kaydırılır; tablo dizi değilse uyarılar için Uzunluk operatörü konusuna bakın.

table.maxn
Verilen tablonun en büyük pozitif sayısal dizinini veya tablonun pozitif sayısal dizinleri yoksa sıfır değerini döndürür.

Bunu yapmak için, tüm tabloyu tekrarlar. Bu kabaca eşittir

table.remove
konumundan  konumundaki öğeyi kaldırır, gerekirse alanı kapatmak için diğer öğelerin aşağı kaydırılması. Kaldırılan öğenin değerini döndürür. için varsayılan değer tablonun uzunluğudur, böylece  çağrısı, öğenin son öğesini kaldırır.

kadar olan elemanlar kaydırılır; tablo dizi değilse uyarılar için Uzunluk operatörü konusuna bakın.

table.sort
Tablo öğelerini,  üzerinden   verilen yerinde sırayla sıralar. verilirse, iki tablo öğesi alan ve birincisi ikiden küçük olduğunda true döndüren bir işlev olmalıdır (böylece  sıralamadan sonra doğru olur). verilmemişse, bunun yerine standart Lua operatörü  kullanılır.

Sıralama algoritması kararlı değil; yani, verilen sıra ile eşit kabul edilen öğeler, göreceli konumlarını sıralamaya göre değiştirebilir.

Scribunto kütüphaneleri
Tüm Scribunto kütüphaneleri  tablosunda bulunur.

mw.addWarning
Bir düzenlemeyi önizlerken önizlemenin üzerinde görüntülenen bir uyarı ekler. vikimetin olarak ayrıştırılır.

mw.allToString
Tüm bağımsız değişkenlerde tostring öğesini çağırır, ardından bunları ayırıcılar olarak sekmelerle birleştirir.

mw.clone
Bir değerin derin bir kopyasını oluşturur. Tüm tablolar (ve meta tabloları) sıfırdan yeniden yapılandırılmıştır. Ancak işlevler hala paylaşılmaktadır.

mw.getCurrentFrame
Geçerli frame nesnesi, genellikle en yeni  öğesinden kare nesnesi döndürür.

mw.incrementExpensiveFunctionCount
"Pahalı ayrıştırıcı işlevi" sayısına bir tane ekler ve sınırı aşarsa bir istisna atar ( bakın).

mw.isSubsting
Geçerli  substed ise true değerini, aksi takdirde false değerini döndürür. Doldurma ve dibe ayarlamadaki farklar hakkında tartışma için yukarıdaki Metin döndürme konusuna bakın.

mw.loadData
Bazen bir modülün büyük veri tablolarına ihtiyacı vardır; örneğin, ölçü birimlerini dönüştürmek için genel amaçlı bir modül geniş bir tanınmış birimler tablosu ve bunların dönüşüm faktörlerini gerektirebilir. Ve bazen bu modüller bir sayfada birçok kez kullanılacaktır. Her bir  için büyük veri tablosunu ayrıştırmak önemli miktarda zaman kullanabilir. Bu sorunu önlemek için  sağlanır.

, aşağıdaki farklarla birlikte  gibi çalışır:


 * Yüklenen modül, her  çağrısı için bir defa yerine sayfa başına yalnızca bir kez değerlendirilir.
 * Yüklenen modül  içine kaydedilmez.
 * Yüklenen modülden döndürülen değer bir tablo olmalıdır. Diğer veri türleri desteklenmez.
 * Döndürülen tablo (ve tüm alt tablolar) yalnızca boole, sayı, dize ve diğer tabloları içerebilir. Diğer veri türlerine, özellikle işlevlere izin verilmez.
 * Döndürülen tabloda (ve tüm alt tablolarda) metatable olmayabilir.
 * Tüm tablo anahtarları boole, sayı veya dize olmalıdır.
 * tarafından döndürülen tablonun, modül tarafından döndürülen tabloya salt okunur erişim sağlayan metametreleri vardır. Verileri doğrudan içermediğinden,  ve   çalışır ancak ,   ve Tablo kitaplığı, düzgün çalışmaz.

The hypothetical unit-conversion module mentioned above might store its code in "Module:Convert" and its data in "Module:Convert/data", and "Module:Convert" would use  to efficiently load the data.

mw.dumpObject
Serializes  to a human-readable representation, then returns the resulting string.

mw.log
Passes the arguments to mw.allToString, then appends the resulting string to the log buffer.

In the debug console, the function  is an alias for this function.

mw.logObject
Calls mw.dumpObject and appends the resulting string to the log buffer. If  is given, it will be added to the log buffer followed by an equals sign before the serialized string is appended (i.e. the logged text will be "prefix = object-string").

Frame object
The frame object is the interface to the parameters passed to, and to the parser.

Note that there is no frame library, and there is no global variable named. A frame object is typically obtained by being passed as a parameter to the function called by, and can also be obtained from.

frame.args
A table for accessing the arguments passed to the frame. For example, if a module is called from wikitext with

then  will return ,   will return  , and   (or  ) will return. It is also possible to iterate over arguments using  or. However, due to how Lua implements table iterators, iterating over arguments will return them in an unspecified order, and there's no way to know the original order as they appear in wikitext.

Note that values in this table are always strings;  may be used to convert them to numbers, if necessary. Keys, however, are numbers even if explicitly supplied in the invocation:  gives string values   and   indexed by numeric keys   and.

As in MediaWiki template invocations, named arguments will have leading and trailing whitespace removed from both the name and the value before they are passed to Lua, whereas unnamed arguments will not have whitespace stripped.

For performance reasons,  uses a metatable, rather than directly containing the arguments. Argument values are requested from MediaWiki on demand. This means that most other table methods will not work correctly, including,  , and the functions in the Table library.

If preprocessor syntax such as template invocations and triple-brace arguments are included within an argument to #invoke, they will not be expanded, after being passed to Lua, until their values are being requested in Lua. If certain special tags written in XML notation, such as,  ,   and  , are included as arguments to #invoke, then these tags will be converted to "strip markers" — special strings which begin with a delete character (ASCII 127), to be replaced with HTML after they are returned from #invoke.

frame:callParserFunction

 * Note the use of named arguments.

Call a parser function, returning an appropriate string. Whenever possible, native Lua functions or Scribunto library functions should be preferred to this interface.

The following calls are approximately equivalent to the indicated wikitext:

Note that, as with frame:expandTemplate, the function name and arguments are not preprocessed before being passed to the parser function.

frame:expandTemplate

 * Note the use of named arguments.

This is transclusion. The call

frame:expandTemplate{ title = 'template', args = { 'arg1', 'arg2', name = 'arg3' } }

does roughly the same thing from Lua that  does in wikitext. As in transclusion, if the passed title does not contain a namespace prefix it will be assumed to be in the Template: namespace.

Note that the title and arguments are not preprocessed before being passed into the template:

frame:extensionTag
This is equivalent to a call to frame:callParserFunction with function name  and with   prepended to.

frame:getParent
Called on the frame created by, returns the frame for the page that called. Called on that frame, returns nil.

For instance, if the template  contains the code , and a page transcludes that template and supplies arguments to it , calling   in Module:ModuleName will return.

frame:getTitle
Returns the title associated with the frame as a string. For the frame created by, this is the title of the module invoked.

frame:newChild

 * Note the use of named arguments.

Create a new Frame object that is a child of the current frame, with optional arguments and title.

This is mainly intended for use in the debug console for testing functions that would normally be called by. The number of frames that may be created at any one time is limited.

frame:preprocess
This expands wikitext in the context of the frame, i.e. templates, parser functions, and parameters such as  are expanded. Certain special tags written in XML-style notation, such as,  ,   and  , will be replaced with "strip markers" &mdash; special strings which begin with a delete character (ASCII 127), to be replaced with HTML after they are returned from.

If you are expanding a single template, use  instead of trying to construct a wikitext string to pass to this method. It's faster and less prone to error if the arguments contain pipe characters or other wikimarkup.

If you are expanding a single parser function, use  for the same reasons.

frame:getArgument
Gets an object for the specified argument, or nil if the argument is not provided.

The returned object has one method,, that returns the expanded wikitext for the argument.

frame:newParserValue
Returns an object with one method,, that returns the result of.

frame:newTemplateParserValue

 * Note the use of named arguments.

Returns an object with one method,, that returns the result of   called with the given arguments.

frame:argumentPairs
Same as. Included for backwards compatibility.

mw.hash.hashValue
Hashes a string value with the specified algorithm. Valid algorithms may be fetched using mw.hash.listAlgorithms.

mw.hash.listAlgorithms
Returns a list of supported hashing algorithms, for use in mw.hash.hashValue.

HTML library
is a fluent interface for building complex HTML from Lua. A mw.html object can be created using.

Functions documented as  are available on the global   table; functions documented as   and   are methods of an mw.html object (see  ).

A basic example could look like this:

mw.html.create
Creates a new mw.html object containing a  html element. You can also pass an empty string or nil as  in order to create an empty mw.html object.

can be a table with the following keys:


 * : Force the current tag to be self-closing, even if mw.html doesn't recognize it as self-closing
 * : Parent of the current mw.html instance (intended for internal usage)

mw.html:node
Appends a child mw.html node to the current mw.html instance. If a nil parameter is passed, this is a no-op. A node is a string representation of an html element.

mw.html:wikitext
Appends an undetermined number of wikitext strings to the mw.html object.

Note that this stops at the first nil item.

mw.html:newline
Appends a newline to the mw.html object.

mw.html:tag
Appends a new child node with the given  to the builder, and returns a mw.html instance representing that new node. The  parameter is identical to that of

mw.html:attr
Set an HTML attribute with the given  and   on the node. Alternatively a table holding name->value pairs of attributes to set can be passed. In the first form, a value of nil causes any attribute with the given name to be unset if it was previously set.

mw.html:getAttr
Get the value of a html attribute previously set using  with the given.

mw.html:addClass
Adds a class name to the node's class attribute. If a nil parameter is passed, this is a no-op.

mw.html:css
Set a CSS property with the given  and   on the node. Alternatively a table holding name->value pairs of properties to set can be passed. In the first form, a value of nil causes any property with the given name to be unset if it was previously set.

mw.html:cssText
Add some raw  to the node's style attribute. If a nil parameter is passed, this is a no-op.

mw.html:done
Returns the parent node under which the current node was created. Like jQuery.end, this is a convenience function to allow the construction of several child nodes to be chained together into a single statement.

mw.html:allDone
Like, but traverses all the way to the root node of the tree and returns it.

Language library
Language codes are described at language code. Many of MediaWiki's language codes are similar to IETF language tags, but not all MediaWiki language codes are valid IETF tags or vice versa.

Functions documented as  are available on the global   table; functions documented as   and   are methods of a language object (see   or  ).

mw.language.fetchLanguageName
The full name of the language for the given language code: native name (language autonym) by default, name translated in target language if a value is given for.

mw.language.fetchLanguageNames
Fetch the list of languages known to MediaWiki, returning a table mapping language code to language name.

By default the name returned is the language autonym; passing a language code for  returns all names in that language.

By default, only language names known to MediaWiki are returned; passing  for   will return all available languages (e.g. from Extension:CLDR), while passing   will include only languages having customized messages included with MediaWiki core or enabled extensions. To explicitly select the default,  may be passed.

mw.language.getContentLanguage
Returns a new language object for the wiki's default content language.

mw.language.getFallbacksFor


Returns a list of MediaWiki's fallback language codes for the specified code.

mw.language.isKnownLanguageTag
Returns true if a language code is known to MediaWiki.

A language code is "known" if it is a "valid built-in code" (i.e. it returns true for ) and returns a non-empty string for.

mw.language.isSupportedLanguage
Checks whether any localisation is available for that language code in MediaWiki.

A language code is "supported" if it is a "valid" code (returns true for ), contains no uppercase letters, and has a message file in the currently-running version of MediaWiki.

It is possible for a language code to be "supported" but not "known" (i.e. returning true for ). Also note that certain codes are "supported" despite  returning false.

mw.language.isValidBuiltInCode
Returns true if a language code is of a valid form for the purposes of internal customisation of MediaWiki.

The code may not actually correspond to any known language.

A language code is a "valid built-in code" if it is a "valid" code (i.e. it returns true for ); consists of only ASCII letters, numbers, and hyphens; and is at least two characters long.

Note that some codes are "supported" (i.e. returning true from ) even though this function returns false.

mw.language.isValidCode
Returns true if a language code string is of a valid form, whether or not it exists. This includes codes which are used solely for customisation via the MediaWiki namespace.

The code may not actually correspond to any known language.

A language code is valid if it does not contain certain unsafe characters (colons, single- or double-quotes, slashs, backslashs, angle brackets, ampersands, or ASCII NULs) and is otherwise allowed in a page title.

mw.language.new
Creates a new language object. Language objects do not have any publicly accessible properties, but they do have several methods, which are documented below.

There is a limit on the number of distinct language codes that may be used on a page. Exceeding this limit will result in errors.

mw.language:getCode
Returns the language code for this language object.

mw.language:getFallbackLanguages
Returns a list of MediaWiki's fallback language codes for this language object. Equivalent to.

mw.language:isRTL
Returns true if the language is written right-to-left, false if it is written left-to-right.

mw.language:lc
Converts the string to lowercase, honoring any special rules for the given language.

When the Ustring library is loaded, the mw.ustring.lower function is implemented as a call to.

mw.language:lcfirst
Converts the first character of the string to lowercase, as with lang:lc.

mw.language:uc
Converts the string to uppercase, honoring any special rules for the given language.

When the Ustring library is loaded, the mw.ustring.upper function is implemented as a call to.

mw.language:ucfirst
Converts the first character of the string to uppercase, as with lang:uc.

mw.language:caseFold
Converts the string to a representation appropriate for case-insensitive comparison. Note that the result may not make any sense when displayed.

mw.language:formatNum
Formats a number with grouping and decimal separators appropriate for the given language. Given 123456.78, this may produce "123,456.78", "123.456,78", or even something like "١٢٣٬٤٥٦٫٧٨" depending on the language and wiki configuration.

The  is a table of options, which can be:


 * : Set true to omit grouping separators and use a dot as the decimal separator. Digit transformation may still occur, which may include transforming the decimal separator.

mw.language:formatDate
Formats a date according to the given format string. If  is omitted, the default is the current time. The value for  must be a boolean or nil; if true, the time is formatted in the wiki's local time rather than in UTC.

The format string and supported values for  are identical to those for the #time parser function from Extension:ParserFunctions. Note however that backslashes may need to be doubled in a Lua string literal, since Lua also uses backslash as an escape character while wikitext does not:

mw.language:formatDuration
Breaks a duration in seconds into more human-readable units, e.g. 12345 to 3 hours, 25 minutes and 45 seconds, returning the result as a string.

, if given, is a table with values naming the interval units to use in the response. These include 'millennia', 'centuries', 'decades', 'years', 'weeks', 'days', 'hours', 'minutes', and 'seconds'.

mw.language:parseFormattedNumber
This takes a number as formatted by lang:formatNum and returns the actual number. In other words, this is basically a language-aware version of.

mw.language:convertPlural
This chooses the appropriate grammatical form from  (which must be a sequence table) or   based on the number. For example, in English you might use  or   to generate grammatically-correct text whether there is only 1 sock or 200 socks.

The necessary values for the sequence are language-dependent, see localization of magic words and translatewiki's FAQ on PLURAL for some details.

mw.language:convertGrammar

 * Note the different parameter order between the two aliases.  matches the order of the method of the same name on MediaWiki's Language object, while   matches the order of the parser function of the same name, documented at Special:MyLanguage/Help:Magic words.

This chooses the appropriate inflected form of  for the given inflection code.

The possible values for  and   are language-dependent, see Special:MyLanguage/Help:Magic words and translatewiki:Grammar for some details.

mw.language:gender
Chooses the string corresponding to the gender of, which may be "male", "female", or a registered user name.

mw.language:getArrow
Returns a Unicode arrow character corresponding to :


 * forwards: Either "→" or "←" depending on the directionality of the language.
 * backwards: Either "←" or "→" depending on the directionality of the language.
 * left: "←"
 * right: "→"
 * up: "↑"
 * down: "↓"

mw.language:getDir
Returns "ltr" or "rtl", depending on the directionality of the language.

mw.language:getDirMark
Returns a string containing either U+200E (the left-to-right mark) or U+200F (the right-to-left mark), depending on the directionality of the language and whether  is a true or false value.

mw.language:getDirMarkEntity
Returns "&amp;lrm;" or "&amp;rlm;", depending on the directionality of the language and whether  is a true or false value.

mw.language:getDurationIntervals
Breaks a duration in seconds into more human-readable units, e.g. 12345 to 3 hours, 25 minutes and 45 seconds, returning the result as a table mapping unit names to numbers.

For example,

, if given, is a table with values naming the interval units to use in the response. These include 'millennia', 'centuries', 'decades', 'years', 'days', 'hours', 'minutes', and 'seconds'.

The unit names in  may be specified in any order (currently in English only, indendantly of the language object used, and with their plural unabbreviated form only like in the returned table, where unit names are symbolic but still not translated and not grammatically changed according to their assigned value). If the input table contains only unsupported unit names, the returned table will be empty. If the input table is not specified, is nil, or is empty, a static table for any supported units (including 'seconds' for the shortest unit) will be used by default.

The specified duration in seconds is first rounded down to an integer number of the shortest desired unit. The number of members in the returned array is variable, and only unit names mapped to a non-zero value are kept in the returned table if the rounded number of seconds is strictly positive. Otherwise only the member for the shortest desired unit name ('seconds' by default) will be set to the rounded down duration.

Message library
This library is an interface to the localisation messages and the MediaWiki: namespace.

Functions documented as  are available on the global   table; functions documented as   and   are methods of a message object (see  ).

mw.message.new
Creates a new message object for the given message. The remaining parameters are passed to the new object's  method.

The message object has no properties, but has several methods documented below.

mw.message.newFallbackSequence
Creates a new message object for the given messages (the first one that exists will be used).

The message object has no properties, but has several methods documented below.

mw.message.newRawMessage
Creates a new message object, using the given text directly rather than looking up an internationalized message. The remaining parameters are passed to the new object's  method.

The message object has no properties, but has several methods documented below.

mw.message.rawParam
Wraps the value so that it will not be parsed as wikitext by.

mw.message.numParam
Wraps the value so that it will automatically be formatted as by. Note this does not depend on the Language library actually being available.

mw.message.getDefaultLanguage
Returns a Language object for the default language.

mw.message:params
Add parameters to the message, which may be passed as individual arguments or as a sequence table. Parameters must be numbers, strings, or the special values returned by mw.message.numParam or mw.message.rawParam. If a sequence table is used, parameters must be directly present in the table; references using the __index metamethod will not work.

Returns the  object, to allow for call chaining.

mw.message:rawParams
Like params, but has the effect of passing all the parameters through mw.message.rawParam first.

Returns the  object, to allow for call chaining.

mw.message:numParams
Like params, but has the effect of passing all the parameters through mw.message.numParam first.

Returns the  object, to allow for call chaining.

mw.message:inLanguage
Specifies the language to use when processing the message. may be a string or a table with a  method (i.e. a Language object).

The default language is the one returned by.

Returns the  object, to allow for call chaining.

mw.message:useDatabase
Specifies whether to look up messages in the MediaWiki: namespace (i.e. look in the database), or just use the default messages distributed with MediaWiki.

The default is true.

Returns the  object, to allow for call chaining.

mw.message:plain
Substitutes the parameters and returns the message wikitext as-is. Template calls and parser functions are intact.

mw.message:exists
Returns a boolean indicating whether the message key exists.

mw.message:isBlank
Returns a boolean indicating whether the message key has content. Returns true if the message key does not exist or the message is the empty string.

mw.message:isDisabled
Returns a boolean indicating whether the message key is disabled. Returns true if the message key does not exist or if the message is the empty string or the string "-".

mw.site.currentVersion
A string holding the current version of MediaWiki.

mw.site.scriptPath
The value of.

mw.site.server
The value of.

mw.site.siteName
The value of.

mw.site.stylePath
The value of.

mw.site.namespaces
Table holding data for all namespaces, indexed by number.

The data available is:


 * id: Namespace number.
 * name: Local namespace name.
 * canonicalName: Canonical namespace name.
 * displayName: Set on namespace 0, the name to be used for display (since the name is often the empty string).
 * hasSubpages: Whether subpages are enabled for the namespace.
 * hasGenderDistinction: Whether the namespace has different aliases for different genders.
 * isCapitalized: Whether the first letter of pages in the namespace is capitalized.
 * isContent: Whether this is a content namespace.
 * isIncludable: Whether pages in the namespace can be transcluded.
 * isMovable: Whether pages in the namespace can be moved.
 * isSubject: Whether this is a subject namespace.
 * isTalk: Whether this is a talk namespace.
 * defaultContentModel: The default content model for the namespace, as a string.
 * aliases: List of aliases for the namespace.
 * subject: Reference to the corresponding subject namespace's data.
 * talk: Reference to the corresponding talk namespace's data.
 * associated: Reference to the associated namespace's data.

A metatable is also set that allows for looking up namespaces by name (localized or canonical). For example, both  and   will return information about the Project namespace.

mw.site.contentNamespaces
Table holding just the content namespaces, indexed by number. See mw.site.namespaces for details.

mw.site.subjectNamespaces
Table holding just the subject namespaces, indexed by number. See mw.site.namespaces for details.

mw.site.talkNamespaces
Table holding just the talk namespaces, indexed by number. See mw.site.namespaces for details.

mw.site.stats
Table holding site statistics. Available statistics are:


 * pages: Number of pages in the wiki.
 * articles: Number of articles in the wiki.
 * files: Number of files in the wiki.
 * edits: Number of edits in the wiki.
 * users: Number of users in the wiki.
 * activeUsers: Number of active users in the wiki.
 * admins: Number of users in group 'sysop' in the wiki.

mw.site.stats.pagesInCategory


Gets statistics about the category. If  is unspecified, nil, or "*", returns a table with the following properties:


 * all: Total pages, files, and subcategories.
 * subcats: Number of subcategories.
 * files: Number of files.
 * pages: Number of pages.

If  is one of the above keys, just the corresponding value is returned instead.

Each new category queried will increment the expensive function count.

mw.site.stats.pagesInNamespace
Returns the number of pages in the given namespace (specify by number).

mw.site.stats.usersInGroup
Returns the number of users in the given group.

mw.site.interwikiMap
Returns a table holding data about available interwiki prefixes. If  is the string "local", then only data for local interwiki prefixes is returned. If  is the string "!local", then only data for non-local prefixes is returned. If no filter is specified, data for all prefixes is returned. A "local" prefix in this context is one that is for the same project. For example, on the English Wikipedia, other-language Wikipedias are considered local, while Wiktionary and such are not.

Keys in the table returned by this function are interwiki prefixes, and the values are subtables with the following properties:


 * prefix - the interwiki prefix.
 * url - the URL that the interwiki points to. The page name is represented by the parameter $1.
 * isProtocolRelative - a boolean showing whether the URL is protocol-relative.
 * isLocal - whether the URL is for a site in the current project.
 * isCurrentWiki - whether the URL is for the current wiki.
 * isTranscludable - whether pages using this interwiki prefix are transcludable. This requires scary transclusion, which is disabled on Wikimedia wikis.
 * isExtraLanguageLink - whether the interwiki is listed in.
 * displayText - for links listed in $wgExtraInterlanguageLinkPrefixes, this is the display text shown for the interlanguage link. Nil if not specified.
 * tooltip - for links listed in $wgExtraInterlanguageLinkPrefixes, this is the tooltip text shown when users hover over the interlanguage link. Nil if not specified.

Text library
The text library provides some common text processing functions missing from the String library and the Ustring library. These functions are safe for use with UTF-8 strings.

mw.text.decode
Replaces HTML entities in the string with the corresponding characters.

If boolean  is omitted or false, the only named entities recognized are '&amp;lt;', '&amp;gt;', '&amp;amp;', '&amp;quot;', and '&amp;nbsp;'. Otherwise, the list of HTML5 named entities to recognize is loaded from PHP's function.

mw.text.encode
Replaces characters in a string with HTML entities. Characters '<', '>', '&', '"', and the non-breaking space are replaced with the appropriate named entities; all others are replaced with numeric entities.

If  is supplied, it should be a string as appropriate to go inside brackets in a Ustring pattern, i.e. the "set" in. The default charset is  (the space at the end is the non-breaking space, U+00A0).

mw.text.jsonDecode
Decodes a JSON string. is 0 or a combination (use ) of the flags   and.

Normally JSON's zero-based arrays are renumbered to Lua one-based sequence tables; to prevent this, pass.

To relax certain requirements in JSON, such as no terminal comma in arrays or objects, pass. This is not recommended.

Limitations:


 * Decoded JSON arrays may not be Lua sequences if the array contains null values.
 * JSON objects will drop keys having null values.
 * It is not possible to directly tell whether the input was a JSON array or a JSON object with sequential integer keys.
 * A JSON object having sequential integer keys beginning with 1 will decode to the same table structure as a JSON array with the same values, despite these not being at all equivalent, unless  is used.

mw.text.jsonEncode
Encode a JSON string. Errors are raised if the passed value cannot be encoded in JSON. is 0 or a combination (use ) of the flags   and.

Normally Lua one-based sequence tables are encoded as JSON zero-based arrays; when  is set in , zero-based sequence tables are encoded as JSON arrays.

Limitations:


 * Empty tables are always encoded as empty arrays, not empty objects.
 * Sequence tables cannot be encoded as JSON objects without adding a "dummy" element.
 * To produce objects or arrays with nil values, a tricky implementation of the  metamethod is required.
 * A Lua table having sequential integer keys beginning with 0 will encode as a JSON array, the same as a Lua table having integer keys beginning with 1, unless  is used.
 * When both a number and the string representation of that number are used as keys in the same table, behavior is unspecified.

mw.text.killMarkers
Removes all MediaWiki strip markers from a string.

mw.text.listToText
Joins a list, prose-style. In other words, it's like  but with a different separator before the final item.

The default separator is taken from MediaWiki:comma-separator in the wiki's content language, and the default conjunction is MediaWiki:and concatenated with MediaWiki:word-separator.

Examples, using the default values for the messages:

mw.text.nowiki
Replaces various characters in the string with HTML entities to prevent their interpretation as wikitext. This includes:


 * The following characters: '"', '&', "'", '<', '=', '>', '[', ']', '{', '|', '}'
 * The following characters at the start of the string or immediately after a newline: '#', '*', ':', ';', space, tab ('\t')
 * Blank lines will have one of the associated newline or carriage return characters escaped
 * "" at the start of the string or immediately after a newline will have the first '-' escaped
 * "__" will have one underscore escaped
 * "://" will have the colon escaped
 * A whitespace character following "ISBN", "RFC", or "PMID" will be escaped

mw.text.split
Splits the string into substrings at boundaries matching the Ustring pattern. If  is specified and true,   will be interpreted as a literal string rather than as a Lua pattern (just as with the parameter of the same name for  ). Returns a table containing the substrings.

For example,  would return a table.

If  matches the empty string,   will be split into individual characters.

mw.text.gsplit
Returns an iterator function that will iterate over the substrings that would be returned by the equivalent call to.

mw.text.tag

 * Note the use of named arguments.

Generates an HTML-style tag for.

If  is given, it must be a table with string keys. String and number values are used as the value of the attribute; boolean true results in the key being output as an HTML5 valueless parameter; boolean false skips the key entirely; and anything else is an error.

If  is not given (or is nil), only the opening tag is returned. If  is boolean false, a self-closed tag is returned. Otherwise it must be a string or number, in which case that content is enclosed in the constructed opening and closing tag. Note the content is not automatically HTML-encoded; use mw.text.encode if needed.

For properly returning extension tags such as, use frame:extensionTag instead.

mw.text.trim
Remove whitespace or other characters from the beginning and end of a string.

If  is supplied, it should be a string as appropriate to go inside brackets in a Ustring pattern, i.e. the "set" in. The default charset is ASCII whitespace,.

mw.text.truncate
Truncates  to the specified length, adding   if truncation was performed. If length is positive, the end of the string will be truncated; if negative, the beginning will be removed. If  is given and true, the resulting string including ellipsis will not be longer than the specified length.

The default value for  is taken from MediaWiki:ellipsis in the wiki's content language.

Examples, using the default "..." ellipsis:

mw.text.unstripNoWiki
Replaces MediaWiki &lt;nowiki&gt; strip markers with the corresponding text. Other types of strip markers are not changed.

mw.text.unstrip
Equivalent to.

This no longer reveals the HTML behind special page transclusion, &lt;ref&gt; tags, and so on as it did in earlier versions of Scribunto.

mw.title.equals
Test for whether two titles are equal. Note that fragments are ignored in the comparison.

mw.title.compare
Returns -1, 0, or 1 to indicate whether the title  is less than, equal to, or greater than title.

This compares titles by interwiki prefix (if any) as strings, then by namespace number, then by the unprefixed title text as a string. These string comparisons use Lua's standard  operator.

mw.title.getCurrentTitle
Returns the title object for the current page.

mw.title.new


Creates a new title object.

If a number  is given, an object is created for the title with that page_id. The title referenced will be counted as linked from the current page. If the page_id does not exist, returns nil. The expensive function count will be incremented if the title object created is not for a title that has already been loaded.

If a string  is given instead, an object is created for that title (even if the page does not exist). If the text string does not specify a namespace,  (which may be any key found in  ) will be used. If the text is not a valid title, nil is returned.

mw.title.makeTitle
Creates a title object with title  in namespace , optionally with the specified   and   prefix. may be any key found in. If the resulting title is not valid, returns nil.

Note that, unlike, this method will always apply the specified namespace. For example,  will create an object for the page Template:Module:Foo, while   will create an object for the page Module:Foo.

Title objects
A title object has a number of properties and methods. Most of the properties are read-only.

Note that fields ending with  return titles as string values whereas the fields ending with   return title objects.


 * id: The page_id. 0 if the page does not exist..
 * interwiki: The interwiki prefix, or the empty string if none.
 * namespace: The namespace number.
 * fragment: The fragment, or the empty string. May be assigned.
 * nsText: The text of the namespace for the page.
 * subjectNsText: The text of the subject namespace for the page.
 * text: The title of the page, without the namespace or interwiki prefixes.
 * prefixedText: The title of the page, with the namespace and interwiki prefixes.
 * fullText: The title of the page, with the namespace and interwiki prefixes and the fragment. Interwiki is not returned if equal to the current.
 * rootText: If this is a subpage, the title of the root page without prefixes. Otherwise, the same as.
 * baseText: If this is a subpage, the title of the page it is a subpage of without prefixes. Otherwise, the same as.
 * subpageText: If this is a subpage, just the subpage name. Otherwise, the same as.
 * canTalk: Whether the page for this title could have a talk page.
 * exists: Whether the page exists. Alias for file.exists for Media-namespace titles. For File-namespace titles this checks the existence of the file description page, not the file itself..
 * file, fileExists: See below.
 * isContentPage: Whether this title is in a content namespace.
 * isExternal: Whether this title has an interwiki prefix.
 * isLocal: Whether this title is in this project. For example, on the English Wikipedia, any other Wikipedia is considered "local" while Wiktionary and such are not.
 * isRedirect: Whether this is the title for a page that is a redirect..
 * isSpecialPage: Whether this is the title for a possible special page (i.e. a page in the Special: namespace).
 * isSubpage: Whether this title is a subpage of some other title.
 * isTalkPage: Whether this is a title for a talk page.
 * isSubpageOf( title2 ): Whether this title is a subpage of the given title.
 * inNamespace( ns ): Whether this title is in the given namespace. Namespaces may be specified by anything that is a key found in.
 * inNamespaces( ... ): Whether this title is in any of the given namespaces. Namespaces may be specified by anything that is a key found in.
 * hasSubjectNamespace( ns ): Whether this title's subject namespace is in the given namespace. Namespaces may be specified by anything that is a key found in.
 * contentModel: The content model for this title, as a string..
 * basePageTitle: The same as.
 * rootPageTitle: The same as.
 * talkPageTitle: The same as, or nil if this title cannot have a talk page.
 * subjectPageTitle: The same as.
 * redirectTarget: Returns a title object of the target of the redirect page if the page is a redirect and the page exists, returns false otherwise.
 * protectionLevels: The page's protection levels. This is a table with keys corresponding to each action (e.g., "edit" and "move"). The table values are arrays, the first item of which is a string containing the protection level. If the page is unprotected, either the table values or the array items will be nil..
 * cascadingProtection: The cascading protections applicable to the page. This is a table with keys "restrictions" (itself a table with keys like protectionLevels has) and "sources" (an array listing titles where the protections cascade from). If no protections cascade to the page, "restrictions" and "sources" will be empty..
 * subPageTitle( text ): The same as.
 * partialUrl: Returns  encoded as it would be in a URL.
 * fullUrl( query, proto ): Returns the full URL (with optional query table/string) for this title.  may be specified to control the scheme of the resulting url: "http", "https", "relative" (the default), or "canonical".
 * localUrl( query ): Returns the local URL (with optional query table/string) for this title.
 * canonicalUrl( query ): Returns the canonical URL (with optional query table/string) for this title.
 * getContent: Returns the (unparsed) content of the page, or nil if there is no page. The page will be recorded as a transclusion.

Title objects may be compared using relational operators. will return.

Since people find the fact surprising, note that accessing any expensive field on a title object records a "link" to the page (as shown on Special:WhatLinksHere, for example). Using the title object's  method or accessing the   field records it as a "", and accessing the title object's   or   fields records it as a "".

File metadata
Title objects representing a page in the File or Media namespace will have a property called. This is a table, structured as follows:


 * exists: Whether the file exists. It will be recorded as an image usage. The  property on a Title object exists for backwards compatibility reasons and is an alias for this property. If this is false, all other file properties will be nil.
 * width: The width of the file. If the file contains multiple pages, this is the width of the first page.
 * height: The height of the file. If the file contains multiple pages, this is the height of the first page.
 * pages: If the file format supports multiple pages, this is a table containing tables for each page of the file; otherwise, it is nil. The # operator can be used to get the number of pages in the file. Each individual page table contains a width and height property.
 * size: The size of the file in bytes.
 * mimeType: The MIME type of the file.

Expensive properties
The properties id, isRedirect, exists, and contentModel require fetching data about the title from the database. For this reason, the expensive function count is incremented the first time one of them is accessed for a page other than the current page. Subsequent accesses of any of these properties for that page will not increment the expensive function count again.

Other properties marked as expensive will always increment the expensive function count the first time they are accessed for a page other than the current page.

mw.uri.encode
Percent-encodes the string. The default type,, encodes spaces using '+' for use in query strings;   encodes spaces as %20; and   encodes spaces as '_'.

Note that the "WIKI" format is not entirely reversible, as both spaces and underscores are encoded as '_'.

mw.uri.decode
Percent-decodes the string. The default type,, decodes '+' to space;   does not perform any extra decoding; and   decodes '_' to space.

mw.uri.anchorEncode
Encodes a string for use in a MediaWiki URI fragment.

mw.uri.buildQueryString
Encodes a table as a URI query string. Keys should be strings; values may be strings or numbers, sequence tables, or boolean false.

mw.uri.parseQueryString
Decodes the query string  to a table. Keys in the string without values will have a value of false; keys repeated multiple times will have sequence tables as values; and others will have strings as values.

The optional numerical arguments  and   can be used to specify a substring of   to be parsed, rather than the entire string. is the position of the first character of the substring, and defaults to 1. is the position of the last character of the substring, and defaults to the length of the string. Both  and   can be negative, as in string.sub.

mw.uri.canonicalUrl
Returns a URI object for the canonical URL for a page, with optional query string/table.

mw.uri.fullUrl
Returns a URI object for the full URL for a page, with optional query string/table.

mw.uri.localUrl
Returns a URI object for the local URL for a page, with optional query string/table.

mw.uri.new
Constructs a new URI object for the passed string or table. See the description of URI objects for the possible fields for the table.

mw.uri.validate
Validates the passed table (or URI object). Returns a boolean indicating whether the table was valid, and on failure a string explaining what problems were found.

URI object
The URI object has the following fields, some or all of which may be nil:


 * protocol: String protocol/scheme
 * user: String user
 * password: String password
 * host: String host name
 * port: Integer port
 * path: String path
 * query: A table, as from mw.uri.parseQueryString
 * fragment: String fragment.

The following properties are also available:
 * userInfo: String user and password
 * hostPort: String host and port
 * authority: String user, password, host, and port
 * queryString: String version of the query table
 * relativePath: String path, query string, and fragment

will give the URI string.

Methods of the URI object are:

mw.uri:parse
Parses a string into the current URI object. Any fields specified in the string will be replaced in the current object; fields not specified will keep their old values.

mw.uri:clone
Makes a copy of the URI object.

mw.uri:extend
Merges the parameters table into the object's query table.

Ustring library
The ustring library is intended to be a direct reimplementation of the standard String library, except that the methods operate on characters in UTF-8 encoded strings rather than bytes.

Most functions will raise an error if the string is not valid UTF-8; exceptions are noted.

mw.ustring.maxPatternLength
The maximum allowed length of a pattern, in bytes.

mw.ustring.maxStringLength
The maximum allowed length of a string, in bytes.

mw.ustring.byte
Returns individual bytes; identical to string.byte.

mw.ustring.byteoffset
Returns the byte offset of a character in the string. The default for both  and   is 1. may be negative, in which case it counts from the end of the string.

The character at  == 1 is the first character starting at or after byte  ; the character at   == 0 is the first character starting at or before byte. Note this may be the same character. Greater or lesser values of  are calculated relative to these.

mw.ustring.char
Tam sayıların bayt değerleri yerine Unicode kod noktaları olması dışında string.char gibi.

mw.ustring.codepoint
string.byte gibi, ancak dönüş değerleri kod noktaları ve ofsetler bayt yerine karakterler olmalıdır.

mw.ustring.find
Desenin Ustring patterns de açıklandığı gibi genişletilmesi ve  ofsetinin bayt yerine karakterlerde olması dışında string.find gibi.

mw.ustring.format
string.format ile aynı. Dizelerin genişlikleri ve kesinlikleri kod noktaları değil bayt cinsinden ifade edilir.

mw.ustring.gcodepoint
Dizedeki kod noktaları üzerinden yineleme yapmak için üç değer döndürür. varsayılan olarak 1 ve  -1 olur. Bu, iterator  da kullanılmak üzere tasarlanmıştır:

mw.ustring.gmatch
Desenin Ustring patterns bölümünde açıklandığı gibi genişletilmesi dışında string.gmatch gibi.

mw.ustring.gsub
Desenin Ustring desenler de açıklandığı gibi genişletilmesi dışında string.gsub gibi.

mw.ustring.isutf8
Dize geçerli UTF-8 ise true, değilse false döndürür.

mw.ustring.len
Dizenin kod noktalarındaki uzunluğunu veya dize geçerli UTF-8 değilse nil değerini döndürür.

Kod noktaları yerine bayt uzunluğu kullanan benzer bir işlev için string.len öğesine bakın.

mw.ustring.lower
string.lower çok benzer, tek fark Unicode'da küçük harfli, büyük harfli tanımlara sahip tüm karakterlerin dönüştürülmesidir.

Dil kütüphanesi de yüklüyse, bunun yerine varsayılan dil nesnesinde lc çağrılır.

mw.ustring.match
Desenin Ustring i de açıklandığı gibi genişletilmesi ve  ofsetinin bayt yerine karakterlerde olması dışında string.match gibi.

mw.ustring.rep
string.rep ile aynı.

mw.ustring.sub
Ofsetlerin bayt yerine karakter olması dışında string.sub gibi.

mw.ustring.toNFC
Dizeyi Normalleştirme Formu C'ye dönüştürür. Dize geçerli UTF-8 değilse nil değerini döndürür.

mw.ustring.toNFD
Dizeyi Normalleştirme Formu D'ye dönüştürür. Dize geçerli UTF-8 değilse nil değerini döndürür.

mw.ustring.upper
string.upper gibi, tek fark Unicode'da büyük harfli, küçük harfli tanımlara sahip tüm karakterlerin dönüştürülmesidir.

Dil kütüphanesi de yüklüyse, bunun yerine varsayılan dil nesnesinde uc çağrılır.

Ustring modelleri
Ustring işlevlerindeki desenler Dize kitaplığı kalıpları ile aynı sözdizimini kullanır. En büyük fark karakter sınıflarının Unicode karakter özellikleri açısından yeniden tanımlanmasıdır:


 *  : Genel Kategori "Harf" olan tüm karakterleri temsil eder.
 *  : Genel Kategori "Kontrol" olan tüm karakterleri temsil eder.
 *  : "Sayı, ondalık basamak" Genel Kategorisine sahip tüm karakterleri temsil eder.
 *  : "Küçük Harf" Genel Kategorisi olan tüm karakterleri temsil eder.
 *  : Genel Kategori "Noktalama İşaretleri" olan tüm karakterleri temsil eder.
 *  : Genel Kategori "Ayırıcı", artı sekme, satır besleme, satır başı, dikey sekme ve form beslemeli tüm karakterleri temsil eder.
 *  : "Büyük Harf" Genel Kategorisi olan tüm karakterleri temsil eder.
 *  : "Harf" veya "Ondalık Sayı" Genel Kategorisine sahip tüm karakterleri temsil eder.
 *  : onaltılık basamakların tam genişlikli karakter sürümlerini ekler.

Dize kitaplığı kalıpları da olduğu gibi, burada  ,  ,  ,  ,  ,  ,    tamamlayıcı kümeyi temsil eder ("Genel Kategori olmadan tüm karakterler").

Her durumda, karakterler bayt yerine Unicode karakterler olarak yorumlanır, bu nedenle  gibi aralıklar,   gibi kalıplar ve çok baytlı karakterler düzgün çalışacaktır. Boş yakalamalar konumu bayt yerine kod noktalarında yakalar.

Yüklenebilir kütüphaneler
Bu kitaplıklar varsayılan olarak dahil edilmemiştir, ancak gerekirse  kullanılarak yüklenebilir.

bit32
Lua 5.2  kütüphanesinin bu öykünmesi kullanılarak yüklenebilir

bit32 = require( 'bit32' )

Bit32 kitaplığı, işaretsiz 32 bit tamsayılarda bitsel işlem sağlar. Giriş sayıları tamsayılara (belirtilmemiş bir şekilde) ve indirgenmiş modü 2 32 olarak kesilir, böylece değer 0 ila 2 32 the1 aralığındadır; dönüş değerleri de bu aralıktadır.

Bitler numaralandırıldığında (bit32.extract gibi), 0 en küçük anlamlı bittir (2 0 değerine sahip olan) ve 31 en anlamlı olanıdır (değeri 2 olan 31).

bit32.band
Bağımsız değişkenlerinin bitwise AND değerini döndürür: sonuç yalnızca bu bit tüm bağımsız değişkenlerde ayarlanmışsa bir bit kümesine sahiptir.

Sıfır bağımsız değişkenleri verilirse, sonuçta tüm bitler ayarlanır.

bit32.bnot
öğesinin bitwise tamamlayıcı döndürür.

bit32.bor
Bağımsız değişkenlerinin bitwise OR değerini döndürür: bu bit, bağımsız değişkenlerden herhangi birinde ayarlanmışsa, sonucun bir bit ayarı vardır.

Sıfır argümanları verilirse, sonuç tüm bitleri temizler.

bit32.btest
ile eşittir

bit32.bxor
Bağımsız değişkenlerinin bitwise XOR değerini döndürür: bu bit, bağımsız değişkenlerin tek bir sayısında ayarlanırsa, sonucun bir bit ayarı vardır.

Sıfır argümanları verilirse, sonuç tüm bitleri temizler.

bit32.extract
bitinden başlayarak  öğesinden   bitlerini ayıklar. 0 ile 31 aralığının dışındaki bitlere erişmek bir hatadır.

Belirtilmezse,  için varsayılan değer 1'dir.

bit32.replace
içindeki  bitlerini   bit ile başlayarak   düşük   bitleriyle değiştirir. 0 ile 31 aralığının dışındaki bitlere erişmek bir hatadır.

Belirtilmezse,  için varsayılan değer 1'dir.

bit32.lshift
kaydırılmış  bitlerini sola döndürür. Bu bir mantıksal kaydırma: eklenen bitler 0'dır. Bu genellikle 2 undefined ile bölünmeye eşdeğerdir.

31'in üzerinde yer değiştirmenin 0 ile sonuçlanacağını unutmayın.

bit32.rshift
kaydırılmış  bitlerini sağa döndürür. Bu bir mantıksal kaydırma: eklenen bitler 0'dır. Bu genellikle 2 undefined ile bölünmeye eşdeğerdir.

31'in üzerinde yer değiştirmenin 0 ile sonuçlanacağını unutmayın.

bit32.arshift
kaydırılan  bit sayısını sağa döndürür. Bu bir aritmetik kaydırma:  pozitifse, eklenen bitler orijinal sayıdaki bit 31 ile aynı olacaktır.

31'in üzerinde yer değiştirmenin 0 veya 4294967295 ile sonuçlanacağını unutmayın.

bit32.lrotate
döndürülmüş  bitlerini sola döndürür.

Dönüşlerin eşdeğer modulo 32 olduğuna dikkat edin: 32 dönüşü 0 dönüşüyle aynıdır, 33, 1 ile aynıdır vb.

bit32.rrotate
döndürülmüş  bitlerini sağa döndürür.

Dönüşlerin eşdeğer modulo 32 olduğuna dikkat edin: 32 dönüşü 0 dönüşüyle aynıdır, 33, 1 ile aynıdır vb.

libraryUtil
Bu kütüphane, Scribunto kütüphanelerini uygularken faydalı yöntemler içerir. Kullanılarak yüklenebilir

libraryUtil = require( 'libraryUtil' )

libraryUtil.checkType
,  ile eşleşmezse bir hata oluşturur. Ayrıca,  nil ve   doğruysa hata oluşmaz.

çağıran işlevin adıdır ve, bağımsız değişkenin bağımsız değişken listesindeki konumudur. Bunlar hata mesajının biçimlendirilmesinde kullanılır.

libraryUtil.checkTypeMulti
$1,  dizisindeki dizelerden hiçbiriyle eşleşmezse bir hata oluşturur.

Bu, birden fazla geçerli türe sahip bağımsız değişkenler içindir.

libraryUtil.checkTypeForIndex
,  ile eşleşmezse bir hata oluşturur.

Bu, bir  metamethod uygulamasında kullanılmak üzere tasarlanmıştır.

libraryUtil.checkTypeForNamedArg
,  ile eşleşmezse bir hata oluşturur. Ayrıca,  nil ve   doğruysa hata oluşmaz.

Bu, Lua'nın "named argument" sözdizimi,  olarak adlandırılan yöntemlerde   ile eşdeğer olarak kullanılması amaçlanmıştır.

libraryUtil.makeCheckSelfFunction
Bu,  sözdizimi ile çağrılması amaçlanan nesne tablolarına "methods" uygulanmasında kullanılmak üzere tasarlanmıştır. bağımsız değişkeni ve yöntem adıyla bu yöntemlerin üstünde çağrılması gereken bir işlev döndürür; bu,  nesnesi   değilse bir hata oluşturur.

Bu işlev genellikle bir kütüphanenin yapıcı işlevinde şu şekilde kullanılır:

luabit
luabit kütüphane modülleri "bit" ve "hex" kullanılarak yüklenebilir

bit = require( 'luabit.bit' ) hex = require( 'luabit.hex' )

bit32 library, "luabit.bit" ile aynı işlemleri içerdiğini ve "luabit.hex" içindeki işlemlerin  ve   kullanılarak gerçekleştirilebileceğini unutmayın.

Luabit modülü "noki", Scribunto'da tamamen yararsız olduğu için mevcut değildir. Luabit modülü "utf8" de Ustring kütüphanesi için yedek olarak kabul edildiğinden kullanılamaz.

ustring
Ustring kütüphanesi içine saf Lua arka ucu kullanılarak yüklenebilir

ustring = require( 'ustring' )

Her durumda Ustring kütüphanesi kullanılmalıdır, çünkü daha yavaş ve daha fazla bellek yoğun işlemlerin çoğunu geri aramalarla PHP koduna dönüştürür.

Uzantı kütüphaneleri
Bazı MediaWiki uzantıları ek Scribunto kitaplıkları sağlar. Bunlar ayrıca  tablosunda, genellikle   tablosunda bulunur, ancak yalnızca belirli uzantılar yüklendiğinde bulunur (Scribunto uzantısının kendisine ek olarak).

Bu uzantılar Scribunto tarafından sağlanan kancaları kullanır:
 * ScribuntoExternalLibraries
 * ScribuntoExternalLibraryPaths

Scribunto kütüphaneleri yazma, bu tür kütüphanelerin MediaWiki uzantıları için Lua arayüzleri sağlamak üzere nasıl geliştirilebileceği hakkında bilgi sağlar.

Aşağıdaki kütüphaneler planlanmıştır veya Gerrit incelenmektedir.


 * (şu anda yok)

mw.wikibase
Wikibase Client yerelleştirilebilir yapılandırılmış verilere erişim sağlar. Extension:Wikibase Client/Lua sayfasına bakın. Bu, Vikiveri tarafından desteklenmektedir.

mw.wikibase.lexeme
WikibaseLexeme, Wikibase Lexeme varlıklarına erişim sağlar. Bu, Wikidata: Sözlükbilimsel veriler tarafından desteklenmektedir.

mw.wikibase.mediainfo
WikibaseMediaInfo, Wikibase MediaInfo varlıklarına erişim sağlar. Extension:WikibaseMediaInfo/Lua sayfasına bakın. Bu, Commons'ta Yapısal Veri tarafından desteklenmektedir. Commons:Yapısal veri/Lua sayfasına bakın.

mw.bcmath
BCmath Lua modüllerine keyfi hassasiyette aritmetik sağlar. Extension:BCmath sayfasındaki "LDoc" bağlantısı aracılığıyla BCmath belgelerine bakın.

mw.smw
Semantic Scribunto, Semantic MediaWiki uzantısı için Scribunto uzantısı için yerel destek sağlar.

mw.ext.data
JsonConfig, yerelleştirilebilir tablo ve harita verilerine erişim sağlar. Extension:JsonConfig/Tabular sayfasına bakın. Tabular Data ve GeoJSON Map Data, Commons "Data:" ad alanında desteklenmektedir.

mw.ext.cargo
Cargo provides a means to query its data store from Lua. See Extension:Cargo/Other features.

mw.ext.cattools
CategoryToolbox, belirli bir sayfanın bir kategoriye ait olup olmadığını Lua'dan kontrol etmek için bir araç sağlar

mw.ext.FlaggedRevs
FlaggedRevs, bir sayfanın kararlılık ayarlarına Lua'dan erişmenin bir yolunu sunar.

mw.ext.TitleBlacklist
TitleBlacklist, Lua'dan kara listeye alınan sayfa adlandırma girişleri hakkında bilgi sınamak ve bilgi edinmek için bir yol sağlar.

mw.ext.ParserFunctions
ParserFunctions, Lua'dan ayrıştırıcı işlevi ifadelerini değerlendirmek için bir araç sağlar.

mw.ext.articlePlaceholder
ArticlePlaceholder, varsayılan Wikibase işlemlerini Lua'dan geçersiz kılmak için bir yol sağlar. Extension:ArticlePlaceholder/Module:AboutTopic sayfasına bakın.

Değişen işlevler
Aşağıdaki işlevler değiştirildi:
 * setfenv
 * getfenv: Yapılandırmaya bağlı olarak kullanılamayabilir. Varsa, üst ortamlara erişim denemeleri başarısız olur.
 * getmetatable: Yalnızca üst ortamlara yetkisiz erişimi önlemek için tablolarda çalışır.
 * tostring: Tabloların ve işlevlerin işaretçi adresleri sağlanmamıştır. Bu, bellek bozulması güvenlik açıklarından yararlanılmasını zorlaştırmak içindir.
 * pairs
 * ipairs: __pairs ve __ipairs metametrelerine (Lua 5.2'de eklenmiştir) destek eklendi.
 * pcall
 * xpcall: Bazı dahili hatalar önlenemez.
 * require: Scribunto ile dağıtılan bazı yerleşik modülleri ve vikinin Modül ad alanında bulunan modülleri alabilir. Viki modüllerini getirmek için ad alanı da dahil olmak üzere tam sayfa adını kullanın. Aksi takdirde yerel dosya sistemine erişilemiyor.

Kaldırılan işlevler ve paketler
Aşağıdaki paketler çoğunlukla kaldırıldı. Yalnızca listelenen işlevler kullanılabilir:
 * package.*: Dosya sistemi ve C kitaplığı erişimi kaldırıldı. Kullanılabilir işlevler ve tablolar:
 * package.loaded
 * package.preload
 * package.loaders: Yerel dosya sistemine erişen veya C kitaplıklarını yükleyen yükleyiciler mevcut değildir. Modül ad alanı sayfaları için bir yükleyici eklenir.
 * package.seeall


 * os.*: Burada os.execute gibi izin verilemeyen bazı güvensiz işlevler var. Mevcut işlevler:
 * os.clock
 * os.date
 * os.difftime
 * os.time


 * debug.*: İşlevlerin çoğu güvensizdir. Mevcut işlevler:
 * debug.traceback

Aşağıdaki işlevler ve paketler mevcut değildir:
 * collectgarbage
 * module
 * coroutine.*: Bizim için hiçbir uygulama bilinmiyor, bu yüzden güvenlik açısından incelenmedi.
 * dofile
 * loadfile
 * io.*, file.*: Güvenli olmayan yerel dosya sistemi erişimine izin verir.
 * load
 * loadstring: Lua kaynak kodunun statik analizine izin vermek için bunlar atlanmıştır. Ayrıca, bunlara izin vermek, Lua kodunun makale ve şablon sayfalarına doğrudan eklenmesine izin verir, bu da kullanılabilirlik nedenleriyle istenmez.
 * print: Bu wikitech-l üzerinde tartışılan idi ve kod kalitesini artırmak için dönüş değerleri lehine çıkarılması gerektiğine karar verildi. Gerekirse, hata ayıklama konsoluna bilgi çıkışı için mw.log kullanılabilir.
 * string.dump: Üst verilerden gizli verileri açığa çıkarabilir.

Ek uyarılar

 * Kaynak veri yapıları: Aynı düğüme birden fazla yolla ulaşılabilen dairesel veri yapıları ve veri yapıları PHP'ye doğru bir şekilde gönderilemez. Bunu yapmaya çalışmak tanımsız davranışa neden olur. Bu, bu tür veri yapılarının  tarafından çağrılan modülden döndürülmesini ve bunun gibi parametrelerin Scribunto kütüphanesi işlevlerine aktarılmasını içerir (ancak bunlarla sınırlı değildir). PHP'ye geri çağrı olarak uygulanır. Bu tür veri yapıları,   ile yüklenen modüllerin dönüş değerleri de dahil olmak üzere Lua içinde serbestçe kullanılabilir.

Scribunto kütüphaneleri yazma
Bu bilgiler, Scribunto'nun içine dahil etmek veya kendi uzantıları için bir arabirim sağlamak için ek Scribunto kitaplıkları yazan geliştiriciler için yararlıdır.

Bir Scribunto kütüphanesi genellikle beş bölümden oluşur:


 * Kütüphanenin PHP bölümü.
 * Kütüphanenin Lua kısmı.
 * Test senaryolarının PHP kısmı.
 * Test vakalarının Lua kısmı.
 * Belgelendirme.

Mevcut kütüphaneler buna iyi bir örnektir.

Kütüphane
Kütüphanenin PHP kısmı,  genişletmesi gereken bir sınıftır. Uygulama ayrıntıları için o sınıfın belgelerine bakın. Scribunto uzantısında, bu dosya  içine yerleştirilmeli ve   bir eşleme eklenmelidir. Diğer uzantılar ScribuntoExternalLibraries kancasını kullanmalıdır. Her iki durumda da, anahtar Lua modülü adıyla eşleşmelidir (Scribunto'daki kütüphaneler için "mw.name" veya uzantı kütüphaneleri için "mw.ext.name").

Kütüphanenin Lua kısmı, Lua modüllerinden çağrılabilen işlevleri içeren bir tablo oluşturur. Scribunto uzantısında, dosya  içine yerleştirilmelidir. Bu dosya genellikle böyle bir şeyi içermelidir:

içindeki modül (bunu  ile yükleyin) yardımcı olabilecek bazı işlevler içerir.

Scribunto test senaryolarını, kütüphaneniz test senaryoları sağlamasa bile, kütüphaneniz yüklü olarak çalıştırdığınızdan emin olun. Standart test senaryoları, beklenmedik global değişkenler ekleyen kütüphaneler gibi şeyleri içeren testleri içerir. Ayrıca, kitaplık PHP ile yüklüyse, Lua işlevlerinin sahip olduğu yükseltmeler #invoke arasında sıfırlanmaz. Modüllerin #invoke arasında bilgi aktarmak için bunu kötüye kullanmamasına dikkat edilmelidir.

Test senaryoları
Scribunto uzantısı, testleri hem LuaSandbox hem de LuaStandalone motorlarına karşı çalıştıracak  test senaryoları için bir temel sınıf içerir. Kitaplığın test durumu bu sınıfı genişletmeli ve  geçersiz kılmamalıdır. Scribunto uzantısında, test durumu  olmalı ve diziye   (  olarak) eklenmelidir; uzantıları test durumunu kendi   kanca işlevine eklemelidir, muhtemelen   ayarlanıp ayarlanmadığına bağlıdır.

Çoğu zaman, test senaryosunu yapmak için gereken tek şey şudur:

class ClassNameTest extends Scribunto_LuaEngineTestBase { protected static $moduleName = 'ClassNameTest'; function getTestModules { return parent::getTestModules + array(             'ClassNameTest' => __DIR__ . '/ClassNameTests.lua';          ); } }

Bu,  dosyasını "Modüi:ClassNameTests" sayfasındaymış gibi yükler ve aşağıdaki özelliklere sahip bir nesneyi döndürmesini bekler:


 * count: Tam sayı, test sayısı
 * provide( n ): Üç değer döndüren işlev:, test kodu   ve test   için beklenen çıkış olan bir dize.
 * run( n ):  testini çalıştıran ve bir dize döndüren işlev.

gösterildiği gibi bildirilirse, birçok yararlı yardımcı yöntem sağlayan "Modül:TestFramework" kullanılabilir. Bu kullanılırsa,  şuna benzer:

local testframework = require 'Module:TestFramework' return testframework.getTestProvider( {    -- Testler buraya gider } )

Her testin kendisi, aşağıdaki özelliklere sahip bir tablodur:


 * name: Testin adı.
 * func: Yürütülecek işlev.
 * args: İşleve iletilecek isteğe bağlı bağımsız değişken tablosu.
 * expect: Beklenecek sonuçlar.
 * type: Testin isteğe bağlı "type", varsayılan "Normal".

Tür,  biçimini ve   öğesinin nasıl çağrıldığını denetler. Dahil edilen türler:


 * Normal:, bir dönüş değerleri tablosu veya testin bir hata oluşturması gerekiyorsa bir dizedir.   basitçe çağrılır.
 * Iterator:, dönüş değerleri tablosunun bir tablosudur.  , döngü için yinelenir ile çağrılır ve her yinelemenin dönüş değerleri toplanır.
 * ToString: "Normal" gibi, ancak her dönüş değeri  öğesinden geçirilir.

Başka bir uzantıdaki test senaryoları
PHPUnit testlerini çalıştırmanın (en az) iki yolu vardır:


 * 1) Çekirdeklere karşı phpunit komutunu çalıştırın ve tests/phpunit/suites/ExtensionsTestSuite.php dosyasının UnitTestsList kancası kullanarak uzantının testlerini bulmasına izin verin. Uzantınızın test sınıfı adlarının tümü benzersiz bir bileşen içeriyorsa (örn. uzantının adı),   seçeneği yalnızca uzantınızın testlerini çalıştırmak için kullanılabilir.
 * 2) Phpunit'i, "Test.php" ile biten herhangi bir dosyayı alacağı uzantı dizinine karşı çalıştırın.

Scribunto LocalSettings.php dosyasına yüklenmişse, bunlardan her ikisi de iyi çalışır. ayarlanmadığında UnitTestsList kancası Scribunto testini döndürmekten kaçınmak için Scribunto yüklü değilse yöntem 1'in çalışması kolaydır.

Ancak Jenkins yöntem #2'yi kullanır. Jenkins'in testleri düzgün bir şekilde yürütmesi için, uzantınıza bağımlılık olarak Scribunto eklemeniz gerekir. Bunun nasıl yapıldığına dair bir örnek için sayfasına bakın.

Herhangi bir nedenle testlerin Scribunto yüklenmeden #2 yöntemini kullanarak çalışabilmesi gerekiyorsa, bir çözüm, bu denetimi birim test dosyanızın üstüne eklemektir:

Belgelendirme
Scribunto'da bulunan modüller, yukarıdaki Scribunto kütüphaneleri bölümündeki belgeleri içermelidir. Uzantı kitaplıkları, kendi uzantı sayfalarının bir alt sayfasına belge içermeli ve yukarıdaki Uzantı kitaplıkları alt bölümündeki dokümanlara bağlantı vermelidir.

Ayrıca bakınız

 * tr:Lua (programlama dili)

Lisans
Bu kılavuz, MIT lisansı altında bulunan Lua 5.1 kaynak kılavuzundan türetilmiştir.

Bu türev kitapçığı aynı lisansın koşulları altında da kopyalanabilir.