Extension:Scribunto/Lua kaynak kılavuzu
Bu kılavuz, MediaWiki'de Scribunto uzantısıyla kullanıldığı için Lua belgelemektedir. Bazı parçalar MIT lisansı altında bulunan Lua 5.1 kaynak kılavuzundan türetilmiştir.
Bu sayfa Scribunto uzantısının en son sürümünü belgelemektedir. Bazı özellikler henüz dağıtılmamış olabilir. |
Giriş
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:
local p = {} --p, paket kalır
function p.hello( frame )
return "Hello, world!"
end
return p
Bunu kaydedin, sonra başka bir (modül olmayan) sayfaya şunu yazın:
{{#invoke:Bananas|hello}}
Bunun dışında "Bananas" ile modülünüze ne diyorsan onu değiştirmelisiniz. Bu, o modülden dışa aktarılan "hello" işlevini çağıracaktır. {{#invoke:Bananas|hello}}
, işlevin döndürdüğü metinle değiştirilecektir; 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, {{#invoke:}}
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 {{#invoke:}}
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
{{#invoke:}}
tarafından çağrılan işlevlere çerçeve nesnesi olan tek bir parametre aktarılacaktır. {{#invoke:}}
ile iletilen parametrelere erişmek için, kod genellikle args
args
o çerçeve nesnesinin tablosunu kullanır. {{#invoke:}}
içeren şablona geçirilen parametrelere frame:getParent()
kullanarak ve bu karenin args
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, {{#invoke:}}
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 "Hello, [[world]]! {{welcome}}"
döndürürse, sayfada "Hello, world! {{welcome}}" görünür.
Öte yandan, değiştirme daha erken bir işleme aşamasında ele alındığından, {{subst:#invoke:}}
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)$1
olarak geçirilir. Modül ad alanında ise, burada belirtilen sayfalar Lua kaynağı yerine wikitext olarak yorumlanır ve{{#invoke:}}
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ı$1
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ı$1
olarak geçirilir. Varsayılan, belgelendirme sayfasını yansıtmaktadır.scribunto-doc-page-header
— Belge sayfası görüntülenirken başlık görüntülenir. Belgelenen modülün adı (Module: öneki ile)$1
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 <includeonly>...</includeonly>
etiketleri içindeki belgelendirme sayfasına yerleştirilebilir ve burada belgelendirme sayfası modül sayfasına yansıtmasında modüle uygulanacaktır.
Renaming or moving modules
To rename or move a module, use the Move Page link in the Tools sidebar. You will want to move both the module itself, as well as the subpage containing its documentation.
To manually create a module redirect, use the following syntax:
return require [[Module:Foo]]
Replace Foo
with the name of the module you'd like to redirect to.
Lua dili
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:
and
break
do
else
elseif
end
false
for
function
if
in
local
nil
not
or
repeat
return
then
true
until
while
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.
-- Lua'daki bir yorum çift tire ile başlar ve satırın sonuna kadar devam eder.
--[[ Çok satırlı dizeler ve yorumlar
çift köşeli parantezlerle süslenmiştir. ]]
--[=[ Bunun gibi yorumlar başka --[[comments]] iç içe olabilir. ]=]
--[==[ Bunun gibi yorumlar başka uzun olabilir
--[===[ --[=[comments]=] hepsi eşleşen
]===] uzun köşeli ayraçlar ile sınırlandırılmamış olsa bile,
--[[ birden çok kez saygılı olabilir! ]===]
]==]
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. type()
işlevi bir değerin türünü döndürür.
tostring()
işlevi, bir değeri dizeye dönüştürür. tonumber()
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. tonumber()
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 nil
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.
Note: Lua does make a distinction between nil
and nothing at all in some limited situations.
For example, tostring(nil)
returns "nil"
, but tostring()
throws an error, as the first parameter is required.
This distinction is particularly relevant to the select() function.
boole
Boole değerleri true
ve false
.
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:
\a
(çan, bayt 7)\b
(geri boşluk, bayt 8)\t
(yatay sekme, bayt 9)\n
(satırsonu, bayt 10)\v
(dikey sekme, bayt 11)\f
(form besleme, bayt 12)\r
(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.
-- Bu uzun dize
foo = [[
bar\tbaz
]]
-- bu teklif sınırlamalı dizeye eşdeğerdir
foo = 'bar\\tbaz\n'
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, -9007199254740991
(-253 + 1) ve 9007199254740991
(253 - 1) 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. 123.456,78
. Sayılar boşluk olmadan E notasyonu kullanılarak da temsil edilebilir, örn. 1.23e-10
, 123.45e20
veya 1.23E5
. Tamsayılar ayrıca bir 0x
öneki kullanılarak onaltılık gösterimde de belirtilebilir, ör. 0x3A
.
Numbers may also be represented using E notation without spaces, e.g. 1.23e-10
, 123.45e20
, or 1.23E+5
.
Integers may also be specified in hexadecimal notation using a 0x
prefix, e.g. 0x3A
.
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. math.huge
sabiti, 1/0
gibi bir bölme gibi pozitif sonsuzdur ve 0/0
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 "nan"
veya "-nan"
; ve infinities "inf"
veya "-inf"
.
Known bug: the Lua interpreter will treat all instances of 0
and -0
as whichever of the two is encountered first when the script is compiled, which means that the return values of tostring(0)
, 1/-0
(and so on) are affected by where they occur in the code.
This can cause unexpected results, particularly if all instances of 0
are converted to "-0"
on return.
If necessary, this can be circumvented by generating zero values using tonumber("0")
and tonumber("-0")
, which doesn't seem to cause or be affected by the issue. See [1].
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:
- *
[deyim1] = deyim2
, anahtar olarak deyim1 öğesinin (ilk) değerini ve değer olarak deyim2 öğesinin (ilk) değerini kullanır. ad = deyim
,["ad"] = deyimin
eşdeğerdirdeyim
, kabaca[i] = deyim
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.name = expression
is equivalent to["name"] = expression
expression
is roughly equivalent to[i] = expression
, where i is an integer starting at 1 and incrementing with each field specification of this form. If this is the last field specifier and the expression has multiple values, all values are used; otherwise only the first is kept.
Bir tablodaki alanlara köşeli ayraç notasyonu kullanılarak erişilebilir, ör. table[key]
. Ayrıca geçerli olan adlar dize anahtarlarına nokta gösterimi kullanılarak da erişilebilir, ör. table.key
, table['key']
eşittir. Tablodaki bir değer olan bir işlev çağrıldığında iki nokta üst üste işareti kullanılabilir; örneğin, table:func( ... )
, table['func']( table, ... )
veya table.func( table, ... )
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:
-- Tablo oluştur
t = {}
t["foo"] = "foo"
t.bar = "bar"
t[1] = "bir"
t[2] = "iki"
t[3] = "üç"
t[12] = "on iki numara"
t["12"] = "on iki dize"
t[true] = "true"
t[tonumber] = "evet, işlevler bile tablo anahtarları olabilir"
t[t] = "evet, bir tablo da bir tablo anahtarı olabilir. Kendi içinde bile."
-- Bu, yukarıdakilere kabaca eşdeğer bir tablo oluşturur
t2 = {
foo = "foo",
bar = "bar",
"bir",
"iki",
[12] = "on iki numara",
["12"] = "on iki dize",
"üç",
[true] = "true",
[tonumber] = "evet, işlevler bile tablo anahtarları olabilir",
}
t2[t2] = "evet, bir tablo da bir tablo anahtarı olabilir. Kendi içinde bile."
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 __tostring
meta yöntemi 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 function
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.
Upvalues
There is a strict limit of max 60 unique upvalues acessed inside a function. An upvalue is a value declared outside of a function and used inside it. As upvalues do count:
- variables (a table with many elements counts as one upvalue)
- functions (only those directly called from function in question, not their dependencies)
A violation of the limit can be triggered by a use of such a variable or function, not by its mere presence or availability. Repeated access to same upvalue does not exhaust the limit further.
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
t[key]
nil döndüreceği zaman kullanılır. Bu alanın değeri bir tablo ise, erişim o tabloda tekrarlanır, yani__index[key]
(bu tablonun metatable __index'ini çağırabilir). Bu alanın değeri bir işlevse, işlev__index( t, key )
olarak adlandırılır. rawget() işlevi bu metametriyi atlar. - __newindex
- Bu,
t[key] = value
tablosuna bir anahtar atarken kullanılır, buradarawget( t, key )
sıfır döndürür. Bu alanın değeri bir tablo ise, atanması o tabloda tekrarlanır, yani.__newindex[key] = value
(metatable __newindex tablosunu çağırabilir). Bu alanın değeri bir işlevse, işlev__newindex( t, key, value )
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,
t( ··· )
. Değer,__call( t, ··· )
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:
Not: Lua'da tüm dizeler, __index
, string
tablosuna kaynakladığı tek bir metatable'ı da paylaşır. Bu metatable'a Scribunto'da veya kaynaklanan string
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ı.
Ad 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. local
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 _G
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.
İşlenenlerden herhangi biri uygun meta yöntem içeren bir tabloda ise, meta yöntem çağrılacaktır.
Operatör | İşlev | Örnek | Metamethod | Notlar |
---|---|---|---|---|
+ | Ek | a + b | __add | |
- | Çıkarma | a - b | __sub | |
* | Çarpma işlemi | a * b | __mul | |
/ | Bölünme | a / b | __div | sıfıra bölmek bir hata değildir; NaN veya sonsuzluk iade edilecektir |
% | Modülo | a % b | __mod | a % b == a - math.floor( a / b ) * b olarak tanımlandı
|
^ | Üs | a ^ b | __pow | tamsayı olmayan üslere izin verilir |
- | Olumsuzluk | -a | __unm |
İ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 function() end == function() end
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:
a < b
,__lt
kullanılır- varsa
a <= b
,__le
kullanılır, veya__lt
mevcut ise, öyleyse bunanot ( b < a )
eşdeğer kabul edilir a > b
,b < a
eşdeğer kabul edilira >= b
,b <= a
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 and
, or
ve not
şeklindedir. Hepsi, nil ve false olduğu ve başka bir şeyin true olduğu standart yorumu kullanır.
and
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.
or
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.
not
için, sonuç her zaman true veya false olur.
and
ve or
kısa devre olduğunu unutmayın. Örneğin, foo() or bar()
, yalnızca foo()
ise bar()
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, a .. b
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 meta yöntemi 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 a = a .. b
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ü, #a
olarak kullanılan #
. a
bir dize ise, uzunluğu bayt olarak döndürür. a
bir sequence tablosu ise, dizinin uzunluğunu döndürür.
a
bir dizi olmayan bir tabloysa, #a
0 veya herhangi bir N değeri döndürebilir, öyle ki a[N] sıfır değildir ve a[N+1], daha yüksek dizinlerde sıfır olmayan değerler olsa bile sıfırdır. Örneğin,
-- Bu bir dizi değildir, çünkü a[3] sıfır ve a[4] değildir
a = { 1, 2, nil, 4 }
-- Bu, 2 veya 4 çıkış alabilir.
-- Ve bu tablo değiştirilmemiş olsa bile değişebilir.
mw.log( #a )
Operatör önceliği
Lua'nın operatör önceliği veya işlem sırası, en yüksekten en düşüğe:
^
not
#
-
(olumsuzluk)*
/
%
+
-
(çıkarma)..
<
>
<=
>=
~=
==
and
or
Öncelik düzeyinde, çoğu ikili işleç sol ilişkiseldir, yani a / b / c
, (a / b) / c
olarak yorumlanır. Üstelleştirme ve birleştirme doğru çağrıştırıcıdır, yani a ^ b ^ c
, a ^ (b ^ c)
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 func()()
. Ç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 nameoptional ( var-listoptional )
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,
-- Bu, bağımsız değişkenine bir sayı ekleyen bir işlev döndürür
function makeAdder( n )
return function( x )
-- Dış kapsamdaki n değişkeni burada x'e eklenecek
return x + n
end
end
local add5 = makeAdder( 5 )
mw.log( add5( 6 ) )
-- baskılar 11
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:
Blok içinde, varargs ifadesi ...
kullanılabilir, sonuç işlev çağrısındaki tüm ekstra değerler olur. Örneğin,
local join = function ( separator, ... )
-- fazladan bağımsız değişkenleri yeni bir tablo olarak alın
local args = { ... }
-- ekstra bağımsız değişkenler sayısını doğru bir şekilde alın
local n = select( '#', ... )
return table.concat( args, separator, 1, n )
end
join( ', ', 'foo', 'bar', 'baz' )
-- "foo, bar, baz" dizesini döndürür
select() işlevi varargs ifadesi ile çalışmak üzere tasarlanmıştır; özellikle, #{ ... }
yerine select( '#', ... )
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: do block end
. Bunlar, yerel değişkenlerin kapsamını sınırlamak veya başka bir bloğun ortasına return
veya break
eklemek için kullanılabilir.
Atanmalar
variable-list = expression-list
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, b = b, a
, a ve b değerlerini değiştirecek.
Yerel değişken bildirimleri
local variable-list
local variable-list = expression-list
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, local x = x
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 exp do block end
While ifadesi, bir ifade gerçek bir değer olarak değerlendirildiği sürece bir bloğu tekrarlar.
repeat block until exp
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 name = exp1, exp2, exp3 do block end
for name = exp1, exp2 do block end
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 nil
ve false
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
do
local var, limit, step = tonumber( exp1 ), tonumber( exp2 ), tonumber( exp3 )
if not ( var and limit and step ) then
error()
end
while ( step > 0 and var <= limit ) or ( step <= 0 and var >= limit ) do
local name = var
block
var = var + step
end
end
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 var-list in expression-list do block end
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
do
local func, static, var = expression-list
while true do
local var-list = func( static, var )
var = var1 -- ''var1'', ''var-list'' içindeki ilk değişkendir
if var == nil then
break
end
block
end
end
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.
if exp1 then block1 elseif exp2 then block2 else block3 end
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. else block3
kısmı atlanabilir ve elseif exp2 then block2
kısmı gerektiğinde tekrarlanabilir veya atlanabilir.
return expression-list
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, getfenv()
ve debug.traceback()
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 do return end
bloğu kullanılabilir.
break
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 do break end
bloğu kullanılabilir.
Unlike some other languages, Lua does not have a "continue" statement for loops (i.e. a statement to move onto the next iteration without breaking the loop altogether).
It is straightforward to achieve the same effect by nesting a repeat ... until true
block immediately inside the main loop, which will only ever iterate once for each iteration of the main loop (as its condition is always true).
Using break
will only end the inner loop, which has the practical effect of causing the main loop to continue onto the next iteration.
If it is necessary to use break
on the main loop, simply declare a variable which is checked each time the inner loop completes, and set it when necessary.
İ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.
Temel işlevler
_G
Bu değişken, geçerli genel değişken tablosuna bir referans tutar; foo
genel değişkenine de _G.foo
olarak erişilebilir. Ancak, _G kendisi hakkında özel bir şey olmadığını unutmayın; diğer değişkenlerle aynı şekilde yeniden atanabilir:
foo = 1
mw.log( foo ) -- "1" kaydediyor
_G.foo = 2
mw.log( foo ) -- "2" kaydediyor
_G = {} -- _G artık genel değişken tablosunu göstermiyor
_G.foo = 3
mw.log( foo ) -- hala "2" kaydediyor
Küresel değişken tablosu, diğer tablolar gibi kullanılabilir. Örneğin,
-- Adı bir değişkende depolanan bir işlevi çağırın
_G[var]()
-- Tüm küresel değişkenlerin adlarını ve dizgi değerlerini günlüğe kaydet
for k, v in pairs( _G ) do
mw.log( k, v )
end
-- Yeni küresel değişkenlerin oluşturulmasını günlüğe kaydet
setmetatable( _G, {
__newindex = function ( t, k, v )
mw.log( "Creation of new global variable '" .. k .. "'" )
rawset( t, k, v )
end
} )
_VERSION
Lua'nın çalışan sürümünü içeren bir dize, ör. "Lua 5.1".
assert
assert( v, message, ... )
v
sıfır veya yanlışsa bir hata verir. Bu durumda, hatanın metni olarak message
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.
v
başka bir değerse, assert v
ve message
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ı assert
çağrısına sarılarak yapılabilir:
-- Bu hataları kontrol etmez
local result1, result2, etc = func( ... )
-- Bu aynı şekilde çalışır, ancak hataları kontrol eder
local result1, result2, etc = assert( func( ... ) )
error
error( message, level )
message
metniyle hata verir.
error
normalde hatanın yeri hakkında bazı bilgiler ekler. level
1 veya atlanmışsa, bu bilgi error
ç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
getfenv( f )
Motor yapılandırmasındaki allowEnvFuncs
değerine bağlı olarak bu işlevin kullanılamayabileceğini unutmayın.
f
ile belirtildiği gibi bir ortam (genel değişken tablosu) döndürür:
- 1, nil veya atlanmışsa,
getfenv
ç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 getfenv
kullanarak erişmeye çalışmak bunun yerine sıfır döndürür.
getmetatable
getmetatable( table )
table öğesinin metatable değerini döndürür. Başka herhangi bir tür sıfır döndürür.
Metatable'ın __metatable
alanı varsa, gerçek metatable yerine bu değer döndürülür.
ipairs
ipairs( t )
Üç değer döndürür: bir yineleyici işlevi, t
ve 0 tablosu. Bu, for
yineleyici formunda kullanılmak üzere tasarlanmıştır:
for i, v in ipairs( t ) do
-- process each index-value pair
end
Bu, çiftler ( 1, t[1] ), ( 2, t[2] ) üzerinde tekrar eder ve bu şekilde, t[i] sıfır olduğunda durur.
__ipairs
, meta yöntemi sağlayarak standart davranış geçersiz kılınabilir. Bu meta yöntem mevcutsa, ipairs çağrısı bunun yerine __ipairs( t )
ile döndürülen üç değeri döndürür.
next
next( table, key )
Bu, tablodaki anahtarların üzerinden yineleme yapılmasını sağlar. key
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. next( t ) == nil
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
pairs( t )
Üç değer döndürür: bir yineleyici işlevi (next veya benzer şekilde), t
tablosu ve nil. Bu, yineleyici formunda kullanım için tasarlanmıştır:
for k, v in pairs( t ) do
-- her bir anahtar/değer çiftini işle
end
Bu, next gibi anahtar/değer çiftlerini t
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 __pairs( t )
ile döndürülen üç değeri döndürür.
pcall
pcall( f, ... )
protected mode verilen bağımsız değişkenlerle f
işlevini çağırır. Bu, f
ç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, pcall
şu şekilde tanımlanabilir:
function pcall( f, ... )
try
return true, f( ... )
catch ( message )
return false, message
end
end
rawequal
rawequal( a, b )
Bu, __eq metamethod yok sayması dışında a == b
ile eşdeğerdir.
rawget
rawget( table, k )
Bu, __index metamethod yok sayması dışında table[k]
ile eşdeğerdir.
rawset
rawset( table, k, v )
Bu, __newindex metamethod yok sayması dışında table[k] = v
ile eşdeğerdir.
select
select( index, ... )
index
bir sayı ise, bu dizinden sonraki tüm argümanları ...
olarak döndürür. index
'#' dizgiyse, argüman sayısını ...
olarak döndürür.
If index
is the string "#"
, returns the number of arguments in ...
.
Note: unlike tables, lists of arguments (including the vararg expression ...
) treat nil
as a distinct value (see documentation for # and unpack for the problem with nil
in tables). For example:
select(2, "foo", "bar")
returns"bar"
.select(2, "foo", nil, "bar", nil)
returnsnil, "bar", nil
.select("#", "foo", "bar")
returns2
.select("#", "foo", "bar", nil)
returns3
.
Başka bir deyişle, select
kabaca aşağıdaki gibi bir şeydir, ancak nil
nil değerleri içerdiğinde bile düzgün çalışacaktır (nils sorunu için # ve unpack belgelerine bakın).
function select( index, ... )
local t = { ... }
local maxindex = table.maxn( t )
if index == "#" then
return maxindex
else
return unpack( t, index, maxindex )
end
end
setmetatable
setmetatable( table, metatable )
table öğesinin metatable değerini ayarlar. metatable
sıfır olabilir, ancak açıkça belirtilmelidir.
Geçerli metatable'ın __metatable alanı varsa, setmetatable
bir hata atar.
tonumber
tonumber( value, base )
value
bir sayıya dönüştürmeyi dener. Zaten bir sayı veya sayıya dönüştürülebilecek bir dize ise, tonumber
bu sayıyı döndürür; aksi halde sıfır döndürür.
İsteğe bağlı base
(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
tostring( value )
value
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 meta yöntemi sağlanarak geçersiz kılınabilir. Bu meta yöntem mevcutsa, tostring çağrısı bunun yerine __tostring( value )
ile döndürülen tek değeri döndürür.
type
type( value )
value
türünü dize olarak döndürür:"nil"
, "number"
, "string"
, "boolean"
, "table"
veya "function"
.
unpack
unpack( table, i, j )
Manüel olarak yazılırsa table[i], table[i+1], ···, table[j]
gibi bir değer verilen tablodan değerleri döndürür. Nil veya belirtilmezse, i
varsayılan olarak 1 ve j
varsayılan olarak #table
olur.
If the table does not have a value for a particular key, unpack will return nil for that value. For example, unpack({"foo", [3] = "bar"}, 1, 4)
returns "foo", nil, "bar", nil
.
table
bir array değilse ve j
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
xpcall( f, errhandler )
Hata mesajı iade edilmeden önce errhandler
işlevine iletilmesi dışında pcall
gibidir.
pseudocode içinde, xpcall
şu şekilde tanımlanabilir:
function xpcall( f, errhandler )
try
return true, f()
catch ( message )
message = errhandler( message )
return false, message
end
end
Kitaplıkta hata ayıklama
debug.traceback
debug.traceback( message, level )
Ç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.
Matematik kütüphanesi
math.abs
math.abs( x )
x
mutlak değerini döndürür.
math.acos
math.acos( x )
x
arc kosinüsünü (radyan cinsinden verilir) döndürür.
math.asin
math.asin( x )
x
arc sinüsünü döndürür (radyan cinsinden verilir).
math.atan
math.atan( x )
x
arc tanjantını verir (radyan cinsinden verilir).
math.atan2
math.atan2( y, x )
Sonucun çeyreğini bulmak için her iki parametrenin işaretlerini kullanarak y/x
(radyan cinsinden verilen)
arc tanjantını döndürür.
math.ceil
math.ceil( x )
x
fazladan büyük veya ona eşit olan en küçük tamsayıyı döndürür.
math.cos
math.cos( x )
x
kosinüsü verir (radyan cinsinden verilir).
math.cosh
math.cosh( x )
x
hiperbolik kosinüsü verir.
math.deg
math.deg( x )
Derece olarak x
(radyan cinsinden verilen) açısını döndürür.
math.exp
math.exp( x )
değerini döndürür.
math.floor
math.floor( x )
x
ile küçük veya ona eşit olan en büyük tamsayıyı döndürür.
math.fmod
math.fmod( x, y )
Bölgeyi sıfıra doğru yuvarlayan x
bölünmesinin geri kalanını y
olarak döndürür. Örneğin, math.fmod( 10, 3 )
, 1
verir.
math.frexp
math.frexp( x )
m
ve e
olmak üzere iki değer döndürür:
x
sonlu ve sıfırdan farklıysa: ,e
bir tamsayıdır vem
mutlak değeri aralığındadır- ½6 sıfır ise:
m
vee
, 0 x
NaN veya sonsuzsa:m
,x
vee
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
math.ldexp( m, e )
döndürür (e
tam sayı olmalıdır).
math.log
math.log( x )
x
doğal logaritmayı döndürür.
math.log10
math.log10( x )
x
taban-10 logaritmasını verir.
math.max
math.max( x, ... )
Bağımsız değişkenleri arasında maksimum değeri döndürür.
NaN'lerle davranış belirtilmedi. Mevcut uygulama ile, eğer x
NaN ise NaN döndürülecektir, ancak diğer NaN'ler göz ardı edilecektir.
math.min
math.min( x, ... )
Bağımsız değişkenleri arasında minimum değeri döndürür.
NaN'lerle davranış belirtilmedi. Mevcut uygulama ile, eğer x
NaN ise NaN döndürülecektir, ancak diğer NaN'ler göz ardı edilecektir.
math.modf
math.modf( x )
İki sayıyı döndürür, x
ayrılmaz parçası ve x
kesirli kısmı. Örneğin, math.modf( 1.25 )
, 1, 0.25
verir.
math.pi
değeri.
math.pow
math.pow( x, y )
x^y
ile eşdeğerdir.
math.rad
math.rad( x )
Radyan cinsinden x
(derece olarak verilir) açısını döndürür.
math.random
math.random( m, n )
Yalancı rastgele bir sayı döndürür.
m
ve n
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, aralığında gerçek bir sayı döndürür
- Bir bağımsız değişkenle, aralığında işaretli bir tamsayı döndürür
- İki bağımsız değişkenle, aralığında işaretli bir tamsayı döndürür
Note that incorrect output may be produced if m
or n
are less than −2147483648 or greater than 2147483647, or if n - m
is greater than 2147483646.
math.randomseed
math.randomseed( x )
Sözde rastgele üreteç için x
seed olarak ayarlar.
Aynı çekirdeği kullanmanın math.random
değerinin aynı sayı dizisini vermesine neden olacağını unutmayın.
math.randomseed( tonumber( mw.getContentLanguage():formatDate( "U" ) ) * 10000 + os.clock() * 10000 )
math.sin
math.sin( x )
x
değerinde sinyali döndürür (radyan cinsinden verilir).
math.sinh
math.sinh( x )
x
hiperbolik sinüsü döndürür.
math.sqrt
math.sqrt( x )
x
ile karekökü döndürür. x^0.5
ile eşdeğerdir.
math.tan
math.tan( x )
x
tanjantını döndürür (radyan cinsinden verilir).
math.tanh
math.tanh( x )
x
hiperbolik tanjantını döndürür.
İşletim sistemi kitaplığı
os.clock
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
os.date( format, time )
- Dil kütüphanesinin formatDate daha kapsamlı tarih biçimlendirmesi için kullanılabilir
format
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.
time
verilirse, biçimlendirilecek zamandır ( os.time()
bakın). Aksi takdirde geçerli saat kullanılır.
format
'!' 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) (0–60, artık saniyeye izin vermek için)
- 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 [$url strftime] ile aynı kurallara göre biçimlendirilmiş bir dize olarak döndürür.
os.difftime
os.difftime( t2, t1 )
t1
üzerinden t2
ile saniye sayısını döndürür.
os.time
os.time( table )
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.
Paket kütüphanesi
require
require( modulename )
Belirtilen modülü yükler.
İlk olarak, modülün zaten yüklü olup olmadığını görmek için package.loaded[modulename]
içine bakar. Öyleyse, package.loaded[modulename]
değerini döndürür.
Aksi takdirde, modül için bir yükleyici bulmaya çalışmak için package.loaders
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 package.loaded[modulename]
içine kaydedilir ve döndürülür.
Mevcut yükleyiciler hakkında bilgi için package.loaders
belgelerine bakın.
Örneğin, aşağıdakileri içeren bir "Module:Giving" modülünüz varsa:
local p = {}
p.someDataValue = 'Merhaba!'
return p
Bunu, aşağıdaki gibi bir kodla başka bir modüle yükleyebilirsiniz:
local giving = require( "Module:Giving" )
local value = giving.someDataValue -- değer şimdi 'Merhaba!'
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:
- Yükleyici işlevi için
package.preload[modulename]
- 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
package.seeall( table )
table
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.
Uyarı: 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
string.byte( s, i, j )
Dize bir bayt dizisi olarak kabul edilirse, s[i]
, s[i+1]
, ···, s[j]
için bayt değerlerini döndürür.
s[i]
için varsayılan değer 1'dir;
j
için varsayılan değer i
şeklindedir.
mw.ustring.byte() ile aynı.
string.char
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.
local value = string.char( 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x21 ) --değer şimdi 'Merhaba!'
Bayt değerleri yerine Unicode kod noktalarını kullanan benzer bir işlev için mw.ustring.char() sayfasına bakın.
string.find
string.find( s, pattern, init, plain )
s
dizesindeki pattern
ile ilk eşleşmeyi arar. Bir eşleşme bulursa, find
, bu oluşumun başladığı ve bittiği s
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 init
aramanın nerede başlatılacağını belirtir; varsayılan değeri 1'dir ve negatif olabilir. Dördüncü, isteğe bağlı plain
bağımsız değişkeni olarak true değeri, desen eşleştirme özelliklerini kapatır, bu nedenle işlev, pattern
karakter bulunmayan düz bir "find substring" işlemini gerçekleştirecek "magic" olarak kabul edilir.
plain
verilirse, init
de verilmesi gerektiğini unutmayın.
Ustring patterns de anlatıldığı gibi genişletilmiş benzer bir işlev ve bayt yerine init
ofsetinin karakterlerde olduğu mw.ustring.find() öğesine bakın. .
string.format
string.format( formatstring, ... )
İ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 printf
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
string.gmatch( s, pattern )
Her çağrıldığında, pattern
dizesinden s
dizesinden sonraki yakalamaları döndüren bir yineleyici işlevi döndürür. pattern
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
string.gsub( s, pattern, repl, n )
pattern
tüm örneklerinin (veya varsa ilk n
) bulunduğu bir s
kopyasını döndürür, yerine repl
ile belirtilen ve bir dize, bir tablo veya bir işlev olabilecek yeni bir dize yerleştirildi. gsub
ayrıca ikinci değeri olarak gerçekleşen toplam eşleşme sayısını döndürür.
repl
bir dize ise, değeri değiştirme için kullanılır. %
karakteri bir kaçış karakteri olarak çalışır: %n
formunun repl
içindeki herhangi bir sıra,
1 ile 9 arasında n olduğunda, n-th yakalanan alt dize değeri anlamına gelir. %0
dizisi tüm eşleşmeyi, %%
dizisi ise tek bir %
dizisini temsil eder.
repl
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.
repl
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
string.len( s )
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
string.lower( s )
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
string.match( s, pattern, init )
Dizedeki pattern
ile ilk eşleşmeyi arar. Birini bulursa, match
desendeki yakalamaları döndürür; aksi halde sıfır döndürür. pattern
hiçbir yakalama belirtmezse, tüm eşleşme döndürülür.
Üçüncü, isteğe bağlı sayısal argüman init
aramanın nerede başlatılacağını belirtir; varsayılan değeri 1'dir ve negatif olabilir.
Desenin Ustring patterns ve init
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
string.rep( s, n )
s
dizesinin n
kopyasının birleşimi olan bir dize döndürür. mw.ustring.rep() ile aynı.
string.reverse
string.reverse( s )
s
tersine çevrilmiş (bytewise) bir dize döndürür.
string.sub
string.sub( s, i, j )
i
ile başlayan ve j
kadar devam eden s
alt dizesini döndürür; i
ve j
negatif olabilir. j
sıfır veya atlanmışsa, dizenin sonuna kadar devam eder.
Özellikle string.sub(s,1,j)
çağrısı, j
uzunluğunda s
önekini ve string.sub(s, -i)
ise i
uzunluğunda s
sonekini döndürür.
Ofsetlerin bayt yerine karakter olduğu benzer bir işlev için mw.ustring.sub() bakın.
string.ulower
string.ulower( s )
An alias for mw.ustring.lower().
string.upper
string.upper( s )
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.
string.uupper
string.uupper( s )
An alias for mw.ustring.upper().
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 duyarsız mod yok.
- Değişim 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 niceleyici
-
olur ve bu, PCRE'nin*?
niceleyicisine eşdeğerdir.
- Genelleştirilmiş sonlu niceleyici yok (örneğin, PCRE'deki
{n,m}
niceleyici).
- Yalnızca sıfır genişlik iddiaları
^
,$
ve%f[set]
"sınır" modelidir; PCRE'nin\b
veya(?=···)
gibi iddialar mevcut değil.
- Desenlerin kendileri "\ddd" gibi karakter çıkışlarını tanımaz. Bununla birlikte, desenler dize 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, "\0"
). Bunun yerine %z
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 $2 sihirli karakterlerinden biri değil) x karakterinin kendisini temsil eder.
|
---|---|
.
|
(nokta) Tüm karakterleri temsil eder. |
%a
|
Tüm ASCII harflerini temsil eder. |
%c
|
Tüm ASCII kontrol karakterlerini temsil eder. |
%d
|
Tüm rakamları temsil eder. |
%l
|
Tüm ASCII küçük harflerini temsil eder. |
%p
|
Tüm noktalama karakterlerini temsil eder. |
%s
|
Tüm ASCII boşluk karakterlerini temsil eder. |
%u
|
Tüm ASCII büyük harflerini temsil eder. |
%w
|
Tüm ASCII alfasayısal karakterleri temsil eder. |
%x
|
Tüm onaltılık basamakları temsil eder. |
%z
|
Sıfır bayt olan ASCII NUL'u temsil eder. |
%A
|
Tüm karakterler %a içinde değil.
|
%C
|
Tüm karakterler %c içinde değil.
|
%D
|
Tüm karakterler %d içinde değil.
|
%L
|
Tüm karakterler %l içinde değil.
|
%P
|
Tüm karakterler %p içinde değil.
|
%S
|
Tüm karakterler %s içinde değil.
|
%U
|
Tüm karakterler %u içinde değil.
|
%W
|
Tüm karakterler %w içinde değil.
|
%X
|
Tüm karakterler %x içinde değil.
|
%Z
|
Tüm karakterler %z içinde değil.
|
%y
|
(burada $x alfasayısal olmayan herhangi bir karakterdir) $x karakterini temsil eder. Sihirli karakterlerden kaçmanın standart yolu budur. Herhangi bir noktalama karakteri (sihirli olmayanlar bile), kendisini bir desende temsil etmek için kullanıldığında bir '% ' ile gelebilir.
|
[set]
|
set içindeki tüm karakterlerin birleşimi olan sınıfı temsil eder. Bir karakter aralığı, aralığın bitiş karakterlerini ' Aralıklar ve sınıflar arasındaki etkileşim tanımlanmamıştır. Bu nedenle, |
[^set]
|
set tümleyenini temsil eder, 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ı;
- sınıftaki 0 veya daha fazla karakter tekrarıyla eşleşen '
*
' tarafından takip edilen tek bir karakter sınıfı. Bu tekrar öğeleri her zaman mümkün olan en uzun diziyle eşleşecektir; - sınıftaki 1 veya daha fazla karakter tekrarıyla eşleşen '
+
' tarafından takip edilen tek bir karakter sınıfı. Bu tekrar öğeleri her zaman mümkün olan en uzun diziyle eşleşecektir;
- '
-
' tarafından takip edilen tek bir karakter sınıfı, ayrıca sınıftaki 0 veya daha fazla karakter tekrarıyla da eşleşir. '*
'dan farklı olarak, bu tekrar öğeleri her zaman olası en kısa sıra ile eşleşir;
- '
?
' tarafından izlenen tek karakterli bir sınıf, sınıftaki bir karakterin 0 veya 1 tekrarı ile eşleşir; %n
, 1 ile 9 arasındaki n için; böyle bir öğe, yakalanan n-inci dizgeye eşit bir alt dizgiyle eşleşir (aşağıya bakın);%bxy
, burada x ve y iki farklı karakterdir; bu tür öğe, x ile başlayan, y ile biten ve x ve y dengeli olduğu dizelerle eşleşir. Bu demektir ki, eğer biri x için +1 ve y için -1 sayarak dizgiyi soldan sağa okursa, y bitişinin ilk y olduğu anlamına gelir. Örneğin,%b()
öğesi, dengeli parantezli ifadelerle eşleşir.%f[set]
, bir sınır düzeni; böyle bir öğe, bir sonraki karakterin set ait olduğu ve önceki karakterin set ait olmadığı herhangi bir konumdaki boş bir dizeyle eşleşir. set daha önce açıklandığı gibi yorumlanır. Konunun başı ve sonu, sanki '\0' karakteriymiş gibi işlenir.
Sınır düzenlerinin Lua 5.1'de mevcut olduğunu ancak belgelenmediğini ve resmi olarak 5.2'de Lua'ya eklendiğini unutmayın. Lua 5.2.1'deki uygulama, 5.1.0'daki uygulamadan farklı 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.
A $
at the end of a pattern anchors the match at the end of the subject string. At other positions, ^
and $
have no special meaning and represent themselves.
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, (a*(.)%w(%s*))
deseninde, dizenin a*(.)%w(%s*)
ilk yakalama olarak saklanır (ve bu nedenle 1 numaraya sahiptir); .
ile eşleşen karakter 2 numara ile yakalanır ve %s*
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, ([a-z])%1
herhangi bir özdeş küçük harfle eşleşir, ([a-z])([a-z])([a-z])[a-z]%3%2%1
ise 7 harfli palindrome ile eşleşir.
Özel bir durum olarak, boş yakalama ()
geçerli dize konumunu (bir sayı) yakalar. Örneğin, "flaaap"
dizesine "()aa()"
kalıbını uygularsak, iki yakalama olur: 3 ve 5.
Known limitations: Unlike Ustring library patterns, String library patterns may not contain more than 32 captures. If the pattern has more, then the String function will throw an error. Because the Ustring library has its own maximum of 10,000 bytes for patterns (unlike the String library), it is therefore impossible to use a pattern which exceeds both limits, as it will be incompatible with both libraries.
Tablo kütüphanesi
Tablo kitaplığındaki çoğu işlev, tablonun bir dizi temsil ettiğini varsayar.
table.foreach()
, table.foreachi()
ve table.getn()
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
table.concat( table, sep, i, j )
Tüm öğelerin dize veya sayı olduğu bir dizi verildiğinde, table[i] .. sep .. table[i+1] ··· sep .. table[j]
döndürür.
sep
için varsayılan değer boş dizedir, i
için varsayılan 1 ve j
için varsayılan değer tablonun uzunluğudur. i
, j
fazladan büyükse, boş dizeyi döndürür.
table.insert
table.insert( table, value )
table.insert( table, pos, value )
Gerekirse, table
, pos
konumuna value
öğesini ekler, diğer öğeleri yukarı kaydırır. pos
için varsayılan değer tablonun artı 1 uzunluğudur, böylece table.insert(t, x)
çağrısı t
tablonun sonuna x
ekler.
#table
kadar olan elemanlar kaydırılır; tablo dizi değilse uyarılar için Uzunluk operatörü konusuna bakın.
Note: when using the pos
parameter, value
should not be nil
. Attempting to insert an explicit nil
value into the middle of a table will result in undefined behaviour, which may delete elements in the table unpredictably.
table.maxn
table.maxn( table )
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
function table.maxn( table )
local maxn, k = 0, nil
repeat
k = next( table, k )
if type( k ) == 'number' and k > maxn then
maxn = k
end
until not k
return maxn
end
table.remove
table.remove( table, pos )
table
konumundan pos
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. pos
için varsayılan değer tablonun uzunluğudur, böylece table.remove( t )
çağrısı, öğenin son öğesini kaldırır.
#table
kadar olan elemanlar kaydırılır; tablo dizi değilse uyarılar için Uzunluk operatörü konusuna bakın.
table.sort
table.sort( table, comp )
Tablo öğelerini, table[1]
üzerinden table[#table]
verilen yerinde sırayla sıralar. comp
verilirse, iki tablo öğesi alan ve birincisi ikiden küçük olduğunda true döndüren bir işlev olmalıdır (böylece not comp(a[i+1],a[i])
sıralamadan sonra doğru olur). comp
verilmemişse, bunun yerine standart Lua operatörü <
kullanılır.
If comp
is given, then it must be a function that receives two table elements, and returns true
when the first is less than the second (so that not comp(a[i+1],a[i])
will be true after the sort).
If comp
is not given, then the standard Lua operator <
is used instead.
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 mw
tablosunda bulunur.
Temel işlevler
mw.addWarning
mw.addWarning( text )
Bir düzenlemeyi önizlerken önizlemenin üzerinde görüntülenen bir uyarı ekler. text
vikimetin olarak ayrıştırılır.
mw.allToString
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
mw.clone( value )
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
mw.getCurrentFrame()
Geçerli frame nesnesi, genellikle en yeni #invoke
öğesinden kare nesnesi döndürür.
mw.incrementExpensiveFunctionCount
mw.incrementExpensiveFunctionCount()
"Pahalı ayrıştırıcı işlevi" sayısına bir tane ekler ve sınırı aşarsa bir istisna atar ($wgExpensiveParserFunctionLimit
bakın).
mw.isSubsting
mw.isSubsting()
Geçerli #invoke
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
mw.loadData( module )
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 {{#invoke:}}
için büyük veri tablosunu ayrıştırmak önemli miktarda zaman kullanabilir. Bu sorunu önlemek için mw.loadData()
sağlanır.
mw.loadData
, aşağıdaki farklarla birlikte require()
gibi çalışır:
- Yüklenen modül, her
{{#invoke:}}
çağrısı için bir defa yerine sayfa başına yalnızca bir kez değerlendirilir.
- Yüklenen modül
package.loaded
içinde 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.
mw.loadData()
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,pairs()
veipairs()
çalışır ancak#value
,next()
ve Tablo kitaplığı, düzgün çalışmaz.
Yukarıda bahsedilen varsayımsal birim dönüştürme modülü kodunu "Module:Convert" de ve verilerini "Module:Convert/data" ve "Module:Convert" local data = mw.loadData( 'Module:Convert/data' )
verileri verimli bir şekilde yüklemek için.
mw.loadJsonData
mw.loadJsonData( page )
This is the same as mw.loadData()
above, except it loads data from JSON pages rather than Lua tables.
The JSON content must be an array or object.
See also mw.text.jsonDecode()
.
mw.dumpObject
mw.dumpObject( object )
object
insan tarafından okunabilir bir temsile seri hale getirir ve ardından elde edilen dizeyi döndürür.
mw.log
mw.log( ... )
Bağımsız değişkenleri mw.allToString() öğesine iletir, sonra elde edilen dizeyi günlük arabelleğine ekler.
Hata ayıklama konsolunda, print()
işlevi bu işlev için bir diğer addır.
mw.logObject
mw.logObject( object )
mw.logObject( object, prefix )
mw.dumpObject() öğesini çağırır ve elde edilen dizeyi günlük arabelleğine ekler. prefix
verilirse, günlük arabelleğine eklenir ve ardından serileştirilmiş dize eklenmeden önce eşittir işareti gelir.(yani kaydedilen metin "prefix = object-string" olacaktır).
Frame nesnesi
Frame nesnesi, {{#invoke:}}
iletilen parametrelere ve ayrıştırıcıya arabirimdir.
Çerçeve kitaplığı olmadığını ve frame
adlı genel değişken olmadığını unutmayın. Bir çerçeve nesnesi tipik olarak {{#invoke:}}
olarak adlandırılan işleve parametre olarak geçirilerek elde edilir ve ayrıca mw.getCurrentFrame()
üzerinden elde edilebilir.
frame.args
Çerçeveye iletilen bağımsız değişkenlere erişmek için bir tablo. Örneğin, vikimetin bir modül çağrılırsa
{{#invoke:module|function|arg1|arg2|name=arg3}}
frame.args[1]
"arg1"
, frame.args[2]
"arg2"
ve frame.args['name']
(veya frame.args.name
) "arg3"
döndürür. pairs( frame.args )
veya ipairs( frame.args )
kullanarak argümanlar üzerinde yineleme yapmak da mümkündür.
Bununla birlikte, Lua'nın tablo yineleyicilerini nasıl uyguladığı nedeniyle, argümanlar üzerinde yineleme bunları belirtilmemiş bir sırayla döndürür ve vikimetinde göründükleri gibi orijinal düzeni bilmenin bir yolu yoktur.
Bu tablodaki değerlerin her zaman dize olduğunu unutmayın; Gerekirse, tonumber()
sayılara dönüştürmek için kullanılabilir. Ancak anahtarlar, çağırmada açıkça belirtilse bile rakamlardır: {{#invoke:module|function|1|2=2}}
, 1
ve 2
sayısal tuşları ile dizinlenmiş "1"
ve "2"
dize değerlerini verir.
MediaWiki şablon çağrılarında olduğu gibi, adlandırılmış argümanlar Lua'ya iletilmeden önce hem addan hem de değerden önde gelen ve sondaki boşluklardan çıkarılırken, adlandırılmamış bağımsız değişkenler boşluk bırakılmaz.
Performans nedenleriyle, frame.args
doğrudan bağımsız değişkenleri içermek yerine metatable kullanır. Bağımsız değişken değerleri talep üzerine MediaWiki'den istenir. Bu, #frame.args
, next( frame.args )
ve Tablo kütüphanesi içindeki işlevler de dahil olmak üzere diğer birçok tablo yönteminin düzgün çalışmayacağı anlamına gelir.
Şablon çağırma ve üçlü ayraç bağımsız değişkenleri gibi önişlemci sözdizimi #invoke bağımsız değişkenine dahil edilirse, değerleri Lua'da istenene kadar Lua'ya iletildikten sonra genişletilmez. XML gösteriminde yazılan <pre>
, <nowiki>
, <gallery>
ve <ref>
gibi bazı özel etiketler #invoke'a bağımsız değişken olarak dahil edilirse, bu etiketler "şerit işaretleyicileri" biçimine dönüştürülür. Silme karakteriyle (ASCII 127) başlayan özel dizeler, #invoke'tan döndürüldükten sonra HTML ile değiştirilir.
frame:callParserFunction
frame:callParserFunction( name, args )
frame:callParserFunction( name, ... )
frame:callParserFunction{ name = string, args = table }
- Bağımsız değişkenler adlı kullanımına dikkat edin.
Uygun bir dize döndürerek bir ayrıştırıcı işlevi çağırın. Bu, frame:preprocess
tercih edilir, ancak mümkün olduğunda, yerel Lua işlevleri veya Scribunto kitaplığı işlevleri bu arabirime tercih edilmelidir.
Aşağıdaki çağrılar, belirtilen vikimetin ile yaklaşık olarak eşdeğerdir:
-- {{ns:0}}
frame:callParserFunction( 'ns', { 0 } )
frame:callParserFunction( 'ns', 0 )
frame:callParserFunction{ name = 'ns', args = { 0 } }
-- {{#tag:nowiki|some text}}
frame:callParserFunction( '#tag', { 'nowiki', 'some text' } )
frame:callParserFunction( '#tag', 'nowiki', 'some text' )
frame:callParserFunction( '#tag:nowiki', 'some text' )
frame:callParserFunction{ name = '#tag', args = { 'nowiki', 'some text' } }
-- {{#tag:ref|some text|name=foo|group=bar}}
frame:callParserFunction( '#tag', { 'ref',
'some text', name = 'foo', group = 'bar'
} )
frame:expandTemplate() ile olduğu gibi, işlev adı ve bağımsız değişkenlerin ayrıştırıcı işlevine geçirilmeden önce önceden işlenmediğini unutmayın.
frame:expandTemplate
frame:expandTemplate{ title = title, args = table }
- Bağımsız değişkenler adlı kullanımına dikkat edin.
This is equivalent to a call to frame:callParserFunction() with function name 'msg'
(see Help:Magic words#Transclusion modifiers) and with title
prepended to args
.
Bu yansıtmadır. Çağrı
frame:expandTemplate{ title = 'template', args = { 'arg1', 'arg2', name = 'arg3' } }
yaklaşık {{template|arg1|arg2|name=arg3}}
vikimetin Lua aynı şeyi yapar. Eklemede olduğu gibi, iletilen başlık bir ad alanı öneki içermiyorsa, Şablon: ad alanında olduğu varsayılır.
Başlık ve bağımsız değişkenlerin şablona aktarılmadan önce önceden işlenmediğini unutmayın:
-- Bu yaklaşık {{template|{{!}}}} gibi vikimetin ile eşdeğerdir
frame:expandTemplate{ title = 'template', args = { '|' } }
frame:callParserFunction{ 'msg', { 'template', '|' } }
-- Bu yaklaşık {{template|{{((}}!{{))}}}} gibi vikimetin ile eşdeğerdir
frame:expandTemplate{ title = 'template', args = { '{{!}}' } }
frame:callParserFunction{ 'msg', { 'template', '{{!}}' } }
frame:extensionTag
frame:extensionTag( name, content, args )
frame:extensionTag{ name = string, content = string, args = table_or_string }
Bu, '#tag'
işlev adı ve content
ile args
eklenmiş frame:callParserFunction() çağrısına eşdeğerdir.
-- Bunlar eşittir
frame:extensionTag( 'ref', 'some text', { name = 'foo', group = 'bar' } )
frame:extensionTag{ name = 'ref', content = 'some text', args = { name = 'foo', group = 'bar' } }
frame:callParserFunction( '#tag', { 'ref' ,
'some text', name = 'foo', group = 'bar'
} )
-- Bunlar eşittir
frame:extensionTag{ name = 'ref', content = 'some text', args = { 'some other text' } }
frame:callParserFunction( '#tag', { 'ref',
'some text', 'some other text'
} )
frame:getParent
frame:getParent()
{{#invoke:}}
tarafından oluşturulan çerçevede çağrılan, {{#invoke:}}
adlı sayfanın çerçevesini döndürür. Bu çerçevede çağrılır, nil döndürür.
For instance, if the template {{Example}}
contains the code {{#invoke:ModuleName|FunctionName|A|B}}
, and a page transcludes that template with the code {{Example|C|D}}
, then in Module:ModuleName, calling frame.args[1]
and frame.args[2]
returns "A"
and "B"
, and calling frame:getParent().args[1]
and frame:getParent().args[2]
returns "C"
and "D"
, with frame
being the first argument in the function call.
frame:getTitle
frame:getTitle()
Çerçeveyle ilişkilendirilmiş başlığı dize olarak döndürür. {{#invoke:}}
tarafından oluşturulan çerçeve için, bu çağrılan modülün başlığıdır.
frame:newChild
frame:newChild{ title = title, args = table }
- Bağımsız değişkenler adlı kullanımına dikkat edin.
Geçerli çerçevenin alt öğesi olan isteğe bağlı bağımsız değişkenler ve başlık içeren yeni bir Frame nesnesi oluşturun.
Bu temelde hata ayıklama konsolunda normalde {{#invoke:}}
tarafından çağrılacak işlevleri test etmek için kullanılır. Herhangi bir zamanda oluşturulabilecek kare sayısı sınırlıdır.
frame:preprocess
frame:preprocess( string )
frame:preprocess{ text = string }
Bu, wikitext'i çerçeve bağlamında genişletir, yani şablonlar, ayrıştırıcı işlevleri ve {{{1}}}
gibi parametreler genişletilir. XML stili gösterimle yazılmış belirli özel etiketler, <pre>
, <nowiki>
, <gallery>
and <ref>
gibi,"strip işaretçileri" ile değiştirilecek. Silme karakteriyle (ASCII 127) başlayan özel dizeler, #invoke
üzerinden döndükten sonra HTML ile değiştirilir
Tek bir şablonu genişletiyorsanız, bu yönteme geçmek için vikimetin dizesi oluşturmaya çalışmak yerine frame:expandTemplate
kullanın. Bağımsız değişkenler boru karakterleri veya diğer viki biçimlendirmeye içeriyorsa, daha hızlıdır ve hataya daha az eğilimlidir.
Tek bir ayrıştırıcı işlevini genişletiyorsanız, aynı nedenlerle frame:callParserFunction
kullanın.
frame:getArgument
frame:getArgument( arg )
frame:getArgument{ name = arg }
Belirtilen bağımsız değişken için bir nesneyi veya bağımsız değişken sağlanmamışsa nil değerini alır.
Döndürülen nesnenin, bağımsız değişken için genişletilmiş vikimetin değerini döndüren bir yöntemi, object:expand()
vardır.
frame:newParserValue
frame:newParserValue( text )
frame:newParserValue{ text = text }
frame:preprocess(text)
sonucunu döndüren bir yöntem olan object:expand()
içeren bir nesne döndürür.
frame:newTemplateParserValue
frame:newTemplateParserValue{ title = title, args = table }
- Bağımsız değişkenler adlı kullanımına dikkat edin.
Belirtilen bağımsız değişkenlerle çağrılan frame:expandTemplate
sonucunu döndüren bir yöntemle, object:expand()
içeren bir nesne döndürür.
frame:argumentPairs
frame:argumentPairs()
pairs( frame.args )
ile aynı. Geriye dönük uyumluluk için dahil edilmiştir.
Karma kitaplığı
mw.hash.hashValue
mw.hash.hashValue( algo, value )
Belirtilen algoritmaya sahip bir dize değerini karma yapar. Geçerli algoritmalar mw.hash.listAlgorithms() kullanılarak getirilebilir.
mw.hash.listAlgorithms
mw.hash.listAlgorithms()
mw.hash.hashValue () içinde kullanım için desteklenen karma algoritmaların bir listesini döndürür.
HTML kütüphanesi
mw.html
, Lua'dan karmaşık HTML oluşturmak için akıcı bir arayüzdür. Bir mw.html nesnesi mw.html.create
kullanılarak oluşturulabilir.
mw.html.name
olarak belgelenen işlevler genel mw.html
tablosunda mevcuttur; mw.html:name
ve html:name
olarak belgelenen işlevler bir mw.html nesnesinin yöntemleridir (mw.html.create
bölümüne bakın).
Temel bir örnek şöyle görünebilir:
local div = mw.html.create( 'div' )
div
:attr( 'id', 'testdiv' )
:css( 'width', '100%' )
:wikitext( 'Some text' )
:tag( 'hr' )
return tostring( div )
-- Output: <div id="testdiv" style="width:100%;">Some text<hr /></div>
mw.html.create
mw.html.create( tagName, args )
tagName
html öğesi içeren yeni bir mw.html nesnesi oluşturur. Boş bir mw.html nesnesi oluşturmak için boş bir dize veya nil tagName
olarak da iletebilirsiniz.
args
, aşağıdaki anahtarları içeren bir tablo olabilir:
args.selfClosing
: mw.html etiketi kendi kendine kapanma olarak tanımasa bile, geçerli etiketi kendi kendine kapanmaya zorlayınargs.parent
: Geçerli mw.html örneğinin üst öğesi (dahili kullanım için tasarlanmıştır)
mw.html:node
html:node( builder )
Geçerli mw.html örneğine bir alt mw.html (builder
) düğümü ekler. Bir nil parametresi iletilirse, bu bir no-op'dur. (builder
) düğümü, bir html öğesinin dize temsilidir.
mw.html:wikitext
html:wikitext( ... )
mw.html nesnesine belirsiz sayıda vikimetin dizesi ekler.
Bunun ilk nil öğesinde durduğunu unutmayın.
Basic wikitext will get parsed, like HTML, links, bold, lists or tables. However, templates and parser functions won't be evaluated if they are passed directly to this function, unless they came from template parameters. Those will be rendered in plain text instead. To evaluate them, they'll have to be passed through frame:preprocess.
mw.html:newline
html:newline()
nw.html nesnesine bir yeni satır ekler. Useful when used before and after mw.html:wikitext(), when the wikitext contains lists or tables, whose syntax only has a special meaning when present at the start of a line.
mw.html:tag
html:tag( tagName, args )
Oluşturucuya verilen tagName
ile yeni bir alt düğüm ekler ve bu yeni düğümü temsil eden bir mw.html örneği döndürür. args
parametresi mw.html.create
ile aynıdır
Note that contrarily to other methods such as html:node()
, this method doesn't return the current mw.html instance, but the mw.html instance of the newly inserted tag.
Make sure to use html:done()
to go up to the parent mw.html instance, or html:allDone()
if you have nested tags on several levels.
mw.html:attr
html:attr( name, value )
html:attr( table )
Düğümde verilen name
ve value
ile bir HTML özelliği ayarlayın. Alternatif olarak, ayarlanacak özniteliklerin name->value çiftlerini içeren bir tablo geçirilebilir. İlk formda, nil değeri, daha önce ayarlanmışsa, verilen ada sahip herhangi bir özelliğin ayarlanmamasına neden olur.
mw.html:getAttr
html:getAttr( name )
Belirtilen name
ile html:attr()
kullanarak önceden ayarlanmış bir html özelliğinin değerini alın.
mw.html:addClass
html:addClass( class )
Düğümün sınıf özniteliğine bir sınıf adı ekler. Bir nil parametresi iletilirse, bu bir no-op'dur.
mw.html:css
html:css( name, value )
html:css( table )
Düğümde verilen name
ve value
ile bir CSS özelliği ayarlayın. Alternatif olarak, ayarlanacak özelliklerin name->value çiftlerini içeren bir tablo geçirilebilir. İlk formda, nil değeri, daha önce ayarlanmışsa, belirtilen ada sahip herhangi bir özelliğin ayarlanmamasına neden olur.
mw.html:cssText
html:cssText( css )
Düğümün stil özelliğine ham css
ekleyin. Bir nil parametresi iletilirse, bu bir no-op'dur.
mw.html:done
html:done()
Geçerli düğümün oluşturulduğu üst düğümü döndürür. jQuery.end gibi, bu, birkaç alt düğümün yapımının birlikte tek bir ifadeye zincirlenmesine izin veren bir kolaylık işlevidir.
mw.html:allDone
html:allDone()
html:done()
gibi, ancak ağacın kök düğümüne kadar gidip onu döndürür.
Dil kütüphanesi
Dil kodları dil kodu da açıklanmaktadır. MediaWiki'nin dil kodlarının çoğu IETF dil etiketleri ile benzerdir, ancak tüm MediaWiki dil kodları geçerli IETF etiketleri değildir veya tam tersi değildir.
mw.language.name
olarak belgelenen işlevler genel mw.language
tablosunda mevcuttur; mw.language:name
ve lang:name
olarak belgelenen işlevler bir dil nesnesinin yöntemleridir (mw.language.new
veya mw.language.getContentLanguage
bölümlere bakın).
mw.language.fetchLanguageName
mw.language.fetchLanguageName( code, inLanguage )
Verilen dil kodu için dilin tam adı: yerel ad (dil özerkliği), varsayılan olarak inLanguage
için bir değer verilirse hedef dile çevrilen ad.
mw.language.fetchLanguageNames
mw.language.fetchLanguageNames()
mw.language.fetchLanguageNames( inLanguage )
mw.language.fetchLanguageNames( inLanguage, include )
MediaWiki tarafından bilinen dillerin listesini getirerek bir tablo eşleme dil kodunu dil adına döndürür.
Varsayılan olarak döndürülen ad, dil özerkliğidir; inLanguage
için bir dil kodu iletilmesi, o dildeki tüm adları döndürür.
Varsayılan olarak, yalnızca MediaWiki tarafından bilinen dil adları döndürülür; include
için 'all'
iletilirse, kullanılabilir tüm diller (ör. Extension:CLDR kaynağından) döndürülürken 'mwfile'
yalnızca MediaWiki çekirdeği veya etkin uzantılarla birlikte özelleştirilmiş iletileri içeren dilleri içerir. Varsayılanı açıkça seçmek için 'mw'
geçirilebilir.
mw.language.getContentLanguage
mw.language.getContentLanguage()
mw.getContentLanguage()
Vikinin varsayılan içerik dili için yeni bir dil nesnesi döndürür.
mw.language.getFallbacksFor
mw.language.getFallbacksFor( code )
Belirtilen kod için MediaWiki'nin yedek dil kodlarının bir listesini döndürür.
mw.language.isKnownLanguageTag
mw.language.isKnownLanguageTag( code )
MediaWiki tarafından bir dil kodu biliniyorsa true değerini döndürür.
Bir dil kodu, "geçerli bir yerleşik kod" ise "bilinir" (yani mw.language.isValidBuiltInCode
için true değerini döndürür) ve mw.language.fetchLanguageName
için boş olmayan bir dize döndürür.
mw.language.isSupportedLanguage
mw.language.isSupportedLanguage( code )
MediaWiki'de bu dil kodu için herhangi bir yerelleştirmenin olup olmadığını kontrol eder.
"Geçerli" bir kodsa (mw.language.isValidCode
için true döndürürür), büyük harf içermiyor ve şu anda çalışan MediaWiki sürümünde bir mesaj dosyası var.
Bir dil kodunun "desteklenmesi", ancak "bilinmemesi" mümkündür (yani mw.language.isKnownLanguageTag
için true değerini döndürmek). Ayrıca mw.language.isValidBuiltInCode
yanlış döndürmesine rağmen bazı kodların "desteklendiğini" unutmayın.
mw.language.isValidBuiltInCode
mw.language.isValidBuiltInCode( code )
Bir dil kodu MediaWiki'nin dahili olarak özelleştirilmesi için geçerli bir formdaysa true değerini döndürür.
Kod aslında bilinen herhangi bir dile karşılık gelmeyebilir.
Bir dil kodu "geçerli" bir kodsa "geçerli bir yerleşik kod" (yani mw.language.isValidCode
için true değerini döndürür); yalnızca ASCII harfleri, sayıları ve tirelerinden oluşur; ve en az iki karakter uzunluğundadır.
Bu kod yanlış döndürülse bile bazı kodların "desteklendiğini" (yani mw.language.isSupportedLanguage
üzerinden true döndürmek) unutmayın.
mw.language.isValidCode
mw.language.isValidCode( code )
Bir dil kodu dizesi, var olsun ya da olmasın, geçerli bir biçime sahipse true değerini döndürür. Bu, yalnızca MediaWiki ad alanı üzerinden özelleştirme için kullanılan kodları içerir.
Kod aslında bilinen herhangi bir dile karşılık gelmeyebilir.
Belirli bir güvenli olmayan karakter içermiyorsa (iki nokta üst üste, tek veya çift tırnak, eğik çizgi, ters eğik çizgi, açılı ayraçlar, ve işareti veya ASCII NUL) bir dil kodu geçerlidir ve aksi takdirde sayfa başlığında izin verilir.
mw.language.new
mw.language.new( code )
mw.getLanguage( code )
Yeni bir dil nesnesi oluşturur. Dil nesnelerinin herkese açık olarak erişilebilir özellikleri yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.
Bir sayfada kullanılabilecek farklı dil kodlarının sayısında bir sınırlama vardır. Bu sınırı aşmak hatalarla sonuçlanır.
mw.language:getCode
lang:getCode()
Bu dil nesnesinin dil kodunu döndürür.
mw.language:toBcp47Code
lang:toBcp47Code()
Returns the standard BCP-47 language code for this language object. This is the code string which is appropriate to use in HTML, for example as the value of a lang
attribute.
mw.language:getFallbackLanguages
lang:getFallbackLanguages()
MediaWiki'nin bu dil nesnesi için yedek dil kodlarının bir listesini döndürür. mw.language.getFallbacksFor( lang:getCode() )
ile eşittir.
mw.language:isRTL
lang:isRTL()
Dil sağdan sola yazılırsa true, soldan sağa yazılırsa false değerini döndürür.
mw.language:lc
lang:lc( s )
Dizeyi, verilen dil için herhangi bir özel kurala uygun olarak küçük harfe dönüştürür.
Ustring kütüphanesi yüklendiğinde, mw.ustring.lower() işlevi mw.language.getContentLanguage():lc( s )
çağrısı olarak uygulanır.
mw.language:lcfirst
lang:lcfirst( s )
Dizenin ilk karakterini lang:lc() gibi küçük harfe dönüştürür.
mw.language:uc
lang:uc( s )
Dizeyi, verilen dil için herhangi bir özel kurala uygun olarak büyük harfe dönüştürür.
Ustring kütüphanesi yüklendiğinde, mw.ustring.upper() işlevi mw.language.getContentLanguage():lc( s )
çağrısı olarak uygulanır.
mw.language:ucfirst
lang:ucfirst( s )
Dizenin ilk karakterini lang:lc() gibi büyük harfe dönüştürür.
mw.language:caseFold
lang:caseFold( s )
Dizeyi, büyük/küçük harfe duyarlı olmayan karşılaştırma için uygun bir temsile dönüştürür. Sonuç görüntülendiğinde herhangi bir anlam ifade etmeyebilir.
mw.language:formatNum
lang:formatNum( n )
lang:formatNum( n, options )
Bir sayıyı, verilen dile uygun gruplama ve ondalık ayırıcılarla biçimlendirir. 123456.78 verildiğinde, bu, dile ve wiki yapılandırmasına bağlı olarak "123,456.78", "123.456,78" hatta "١٢٣٬٤٥٦٫٧٨" gibi bir şey üretebilir.
options
aşağıdakiler olabilen bir seçenekler tablosudur:
noCommafy
: Gruplama ayırıcılarını atlamak için true olarak ayarlayın ve ondalık ayırıcı olarak bir nokta (.
) kullanın.
Ondalık ayırıcının dönüştürülmesini içerebilen basamak dönüşümü yine de gerçekleşebilir.
mw.language:formatDate
lang:formatDate( format, timestamp, local )
Bir tarihi, verilen biçim dizesine göre biçimlendirir. timestamp
atlanırsa, varsayılan geçerli saattir. local
değeri bir boole veya sıfır olmalıdır; true olursa, saat UTC yerine vikinin yerel saati şeklinde biçimlendirilir.
timestamp
için biçim dizesi ve desteklenen değerler, Extension:ParserFunctions üzerindeki #time ayrıştırıcı işlevi ile aynıdır.
Bununla birlikte, ters eğik çizgilerin bir Lua dizgesinde iki katına çıkarılması gerekebilir, çünkü Lua ayrıca bir çıkış karakteri olarak ters eğik çizgiyi kullanırken vikimetin bunu yapmaz:
-- Bu dize değişmez değeri, "\n" iki karakterini değil, yeni bir satır içerir, bu nedenle {{#time:\n}} ile eşdeğer değildir.
lang:formatDate( '\n' )
-- Bu, {{#time:\\n}} ile değil, {{#time:\n}} ile eşdeğerdir.
lang:formatDate( '\\n' )
-- Bu, {{#time:\\\n}} ile değil, {{#time:\\n}} ile eşdeğerdir.
lang:formatDate( '\\\\n' )
mw.language:formatDuration
lang:formatDuration( seconds )
lang:formatDuration( seconds, chosenIntervals )
Saniye cinsinden bir süreyi daha fazla insan tarafından okunabilen birimlere böler, ör. 12345 ila 3 saat, 25 dakika ve 45 saniye, sonucu dize olarak döndürür.
chosenIntervals
, belirtilirse, yanıtta kullanılacak aralık birimlerini adlandıran değerlerin bulunduğu bir tablodur. Bunlar arasında 'millennia
', 'centuries
', 'decades
', 'years
', 'weeks
', 'days
', 'hours
', 'minutes
' ve 'seconds
' sayılabilir.
mw.language:parseFormattedNumber
lang:parseFormattedNumber( s )
Bu, lang:formatNum() tarafından biçimlendirildiği gibi bir sayı alır ve gerçek sayıyı döndürür. Başka bir deyişle, bu temel olarak tonumber()
dile duyarlı bir sürümüdür.
mw.language:convertPlural
lang:convertPlural( n, ... )
lang:convertPlural( n, forms )
lang:plural( n, ... )
lang:plural( n, forms )
Bu, forms
(array tablosu olmalı) veya ...
numarasını n
sayısına göre uygun gramer biçimini seçer.. Örneğin, İngilizce olarak, yalnızca 1 çorap veya 200 çorap olsun, dilbilgisi açısından doğru metin oluşturmak için n .. ' ' .. lang:plural( n, 'sock', 'socks' )
veya n .. ' ' .. lang:plural( n, { 'sock', 'socks' } )
kullanabilirsiniz.
Dizi için gerekli değerler dile bağlıdır; bazı ayrıntılar için sihirli kelimelerin yerelleştirilmesi ve translatewiki'nin SSS konusuna bakın.
mw.language:convertGrammar
lang:convertGrammar( word, case )
lang:grammar( case, word )
- İki takma ad arasındaki farklı parametre sırasına dikkat edin.
convertGrammar
, MediaWiki'nin Dil nesnesinde aynı addaki yöntemin sırası ile eşleşirken,grammar
, Help:Sihirli kelimeler#Yerelleştirme sayfasında belgelenen aynı adın ayrıştırıcı işlevinin sırasıyla eşleşir.
Bu, verilen bükülme kodu case
için uygun bükülmüş word
biçimini seçer.
word
ve case
için olası değerler dile bağlıdır, bazı ayrıntılar için Special:MyLanguage/Help:Magic words#Localisation ve translatewiki:Grammar sayfalarına bakın.
mw.language:gender
lang:gender( what, masculine, feminine, neutral )
lang:gender( what, { masculine, feminine, neutral } )
"Erkek", "kadın" veya kayıtlı bir kullanıcı adı olabilecek what
cinsiyetine karşılık gelen dizeyi seçer.
mw.language:getArrow
lang:getArrow( direction )
direction
karşılık gelen bir Unicode ok karakteri döndürür:
- forwards: Dilin yönüne bağlı olarak ya "→" ya da "←".
- backwards: Dilin yönlülüğüne bağlı olarak ya "←" ya da "→".
- left: "←"
- right: "→"
- up: "↑"
- down: "↓"
mw.language:getDir
lang:getDir()
Dilin yönlülüğüne bağlı olarak "ltr" veya "rtl" değerini döndürür.
mw.language:getDirMark
lang:getDirMark( opposite )
Dilin yönlülüğüne ve opposite
öğesinin bir dil olup olmadığına bağlı olarak, U+200E (soldan sağa işaret) veya U+200F (sağdan sola işaret) içeren bir dize döndürür doğru veya yanlış değer.
mw.language:getDirMarkEntity
lang:getDirMarkEntity( opposite )
Dilin yönlülüğüne ve opposite
öğesinin doğru veya yanlış değer olup olmamasına bağlı olarak "‎" veya "‏" değerini döndürür.
mw.language:getDurationIntervals
lang:getDurationIntervals( seconds )
lang:getDurationIntervals( seconds, chosenIntervals )
Saniye cinsinden bir süreyi daha fazla insan tarafından okunabilen birimlere böler, ör. 12345 ile 3 saat, 25 dakika 45 saniye arasında değişen sonuç, tablo eşleme birimi olarak adların sayılara döndürülmesi.
chosenIntervals
, verilmişse, yanıtta kullanılacak aralık birimlerini adlandıran değerlere sahip bir tablodur. Bunlar arasında 'millennia
', 'centuries
', 'decades
', 'years
', 'weeks
', 'days
', 'hours
', 'minutes
' ve 'seconds
' sayılabilir.
Those unit keywords are also the keys used in the response table. Only units with a non-zero value are set in the response, unless the response would be empty in which case the smallest unit is returned with a value of 0.
Mesaj kütüphanesi
Bu kütüphane, yerelleştirme mesajlarına ve MediaWiki: ad alanına bir arabirimdir.
mw.message.name
olarak belgelenen işlevler genel mw.message
tablosunda mevcuttur; mw.message:name
ve msg:name
olarak belgelenen işlevler bir mesaj nesnesinin yöntemleridir (mw.message.new
bölümüne bakın).
mw.message.new
mw.message.new( key, ... )
Belirtilen key
mesajı için yeni bir mesaj nesnesi oluşturur.
Kalan parametreler yeni nesnenin params()
yöntemine iletilir.
İleti nesnesinin hiçbir özelliği yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.
mw.message.newFallbackSequence
mw.message.newFallbackSequence( ... )
Verilen mesajlar için yeni bir mesaj nesnesi oluşturur (var olan ilk mesaj kullanılır).
İleti nesnesinin hiçbir özelliği yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.
mw.message.newRawMessage
mw.message.newRawMessage( msg, ... )
Uluslararası bir iletiyi aramak yerine, verilen metni doğrudan kullanarak yeni bir ileti nesnesi oluşturur. Kalan parametreler yeni nesnenin params()
yöntemine iletilir.
İleti nesnesinin hiçbir özelliği yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.
mw.message.rawParam
mw.message.rawParam( value )
msg:parse()
tarafından vikimetin olarak ayrıştırılmayacak şekilde değeri sarar.
mw.message.numParam
mw.message.numParam( value )
Değeri, otomatik olarak lang:formatNum()
tarafından biçimlendirilecek şekilde sarar. Bunun gerçekte mevcut olan Dil kütüphanesi kaynağına bağlı olmadığını unutmayın.
mw.message.getDefaultLanguage
mw.message.getDefaultLanguage()
Varsayılan dil için bir Dil nesnesi döndürür.
mw.message:params
msg:params( ... )
msg:params( params )
Mesaja bağımsız bağımsız değişkenler olarak veya array tablosu olarak iletilebilen parametreler ekleyin. Parametreler sayı, dize veya mw.message.numParam() veya mw.message.rawParam() tarafından döndürülen özel değerler olmalıdır. Bir sıra tablosu kullanılıyorsa, parametreler doğrudan tabloda bulunmalıdır; __index metamethod kullanan kaynaklar çalışmaz.
Çağrı zincirlemeye izin vermek için msg
nesnesini döndürür.
mw.message:rawParams
msg:rawParams( ... )
msg:rawParams( params )
:params() gibi, ancak önce tüm parametreleri mw.message.rawParam() içinden geçirme etkisi vardır.
Çağrı zincirlemeye izin vermek için msg
nesnesini döndürür.
mw.message:numParams
msg:numParams( ... )
msg:numParams( params )
:params() gibi, ancak önce tüm parametreleri mw.message.numParam() içinden geçirme etkisi vardır.
Çağrı zincirlemeye izin vermek için msg
nesnesini döndürür.
mw.message:inLanguage
msg:inLanguage( lang )
İletiyi işlerken kullanılacak dili belirtir. lang
, bir dize veya getCode()
yöntemine sahip bir tablo olabilir (yani Dil nesnesi).
Varsayılan dil, mw.message.getDefaultLanguage()
tarafından döndürülen dildir.
Çağrı zincirlemeye izin vermek için msg
nesnesini döndürür.
mw.message:useDatabase
msg:useDatabase( bool )
MediaWiki: ad alanında iletileri mi arayacağınızı (yani veritabanına bakın) mı yoksa yalnızca MediaWiki ile dağıtılan varsayılan iletileri mi kullanılacağını belirtir.
Varsayılan true.
Çağrı zincirlemeye izin vermek için msg
nesnesini döndürür.
mw.message:plain
msg:plain()
Parametreleri değiştirir ve wikitext mesajını olduğu gibi döndürür. Şablon çağrıları ve ayrıştırıcı işlevleri aynıdır.
mw.message:exists
msg:exists()
Mesaj anahtarının var olup olmadığını gösteren bir boole döndürür.
mw.message:isBlank
msg:isBlank()
Mesaj anahtarının içeriğe sahip olup olmadığını gösteren bir boole döndürür. Mesaj tuşu yoksa veya mesaj boş dize ise true değerini döndürür.
mw.message:isDisabled
msg:isDisabled()
Mesaj tuşunun devre dışı bırakılıp bırakılmadığını gösteren bir boole döndürür. Mesaj tuşu yoksa veya mesaj boş dize veya "-" dizesi ise true değerini döndürür.
Site kütüphanesi
mw.site.currentVersion
MediaWiki'nin geçerli sürümünü tutan bir dize.
mw.site.scriptPath
$wgScriptPath
değeri.
mw.site.server
$wgServer
değeri.
mw.site.siteName
$wgSitename
değeri.
mw.site.stylePath
$wgStylePath
değeri.
mw.site.namespaces
Sayıya göre dizine eklenen tüm ad alanları için tablo tutma verileri.
Mevcut veriler:
- id: * $1: Ad alanı numarası.
- name: * $1: Yerel ad alanı adı.
- 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.
Ad alanlarını ada göre (yerelleştirilmiş veya standart) aramaya izin veren bir metatable da ayarlanır. Örneğin, hem mw.site.namespaces[4]
hem de mw.site.namespaces.Project
, Project ad alanı hakkında bilgi döndürür.
mw.site.contentNamespaces
Yalnızca içerik ad alanlarını tutan ve sayıya göre dizine eklenmiş tablo. Ayrıntılar için mw.site.namespaces bölümüne bakın.
mw.site.subjectNamespaces
Sayıya göre dizine eklenmiş olarak yalnızca konu ad alanlarını tutan tablo. Ayrıntılar için mw.site.namespaces bölümüne bakın.
mw.site.talkNamespaces
Numaraya göre dizinlenmiş yalnızca tartışma ad alanlarını tutan tablo. Ayrıntılar için mw.site.namespaces bölümüne bakın.
mw.site.stats
Site istatistikleri tutan tablo. Mevcut istatistikler:
- 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
mw.site.stats.pagesInCategory( category, which )
- Bu işlev pahalıdır
Kategori ile ilgili istatistikleri alır. "*
" özel değerine sahip which
ise, sonuç aşağıdaki özelliklere sahip bir tablodur:
- all: Total pages, files, and subcategories.
- subcats: Number of subcategories.
- files: Number of files.
- pages: Number of pages.
Yukarıdaki anahtarlardan (all", "subcats", "files", "pages") which
ise, sonuç, karşılık gelen değere sahip bir sayıdır.
Sorgulanan her yeni kategori, pahalı işlev sayısını artıracaktır.
mw.site.stats.pagesInNamespace
mw.site.stats.pagesInNamespace( namespace )
Belirtilen ad alanındaki sayfa sayısını döndürür (sayıya göre belirtin).
mw.site.stats.usersInGroup
mw.site.stats.usersInGroup( group )
Belirli bir gruptaki kullanıcı sayısını döndürür.
mw.site.interwikiMap
mw.site.interwikiMap( filter )
Kullanılabilir vikiarası önekleriyle ilgili verileri tutan bir tablo döndürür. filter
"local" dizesiyse, yalnızca yerel interwiki öneklerine ilişkin veriler döndürülür. filter
"!local" dizesidirse, yalnızca yerel olmayan önekler için veriler döndürülür. Hiçbir filtre belirtilmezse, tüm öneklerin verileri döndürülür. Bu bağlamdaki "local" önek aynı proje için olan önektir. Örneğin, İngilizce Vikipedi'de diğer dil Vikipedi'leri yerel kabul edilirken Vikisözlük vb.
Bu işlev tarafından döndürülen tablodaki anahtarlar vikiarası önekleridir ve değerler aşağıdaki özelliklere sahip alt tablolardır:
- 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
$wgExtraInterlanguageLinkPrefixes
. - 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.
Metin kütüphanesi
Metin kitaplığı, Dize kütüphanesi ve Ustring kütüphanesinde eksik olan bazı yaygın metin işleme işlevleri sağlar. Bu işlevler UTF-8 dizeleriyle kullanım için güvenlidir.
mw.text.decode
mw.text.decode( string )
mw.text.decode( string, decodeNamedEntities )
Dizedeki HTML varlıkları öğesini karşılık gelen karakterlerle değiştirir.
Boole decodeNamedEntities
atlanır veya yanlışsa, tanınan yalnızca adlandırılan varlıklar '<', '>', '&', '"' ve ' '. Aksi takdirde, tanınacak HTML5 adlı varlıkların listesi PHP'nin [$url get_html_translation_table
] işlevinden yüklenir.
Otherwise, the list of HTML5 named entities to recognize is loaded from PHP's get_html_translation_table
function.
Known bugs: Approximately 600 of around 2.200 named entities in the HTML5 standard do not get decoded, even when decodeNamedEntities
is used; this includes approximately 40 of around 250 entities which are also included in HTML4.
This occurs because PHP's get_html_translation_table
function returns only one mapping for each character, so for example
is not decoded since PHP returns only →
as the mapping for →
.
→
mw.text.encode
mw.text.encode( string )
mw.text.encode( string, charset )
Bir dizedeki karakterleri HTML varlıkları ile değiştirir. '<', '>', '&', '"' karakterleri ve kesilmeyen boşluk uygun adlandırılmış varlıklarla değiştirilir; diğerlerinin tümü sayısal varlıklarla değiştirilir.
Five characters are replaced with the appropriate named entities: <
, >
, &
, "
and the non-breaking space (U+00A0).
All others are replaced with numeric entities.
charset
sağlanırsa, Ustring deseni, yani [set]
içindeki "set" içine parantez içine girmek için uygun bir dize olmalıdır. Varsayılan karakter kümesi '<>&"\' '
şeklindedir (sondaki boşluk kırılmaz boşluktur, U+00A0).
mw.text.jsonDecode
mw.text.jsonDecode( string )
mw.text.jsonDecode( string, flags )
Bir JSON dizesinin kodunu çözer. flags
0 veya mw.text.JSON_PRESERVE_KEYS
ve mw.text.JSON_PRESERVE_KEYS
bayraklarının bir kombinasyonudur (+
kullanın).
Normalde JSON'un sıfır tabanlı dizileri, Lua tek tabanlı dizi tablolarına yeniden numaralandırılır; bunu önlemek için mw.text.JSON_PRESERVE_KEYS
iletin.
JSON'da dizilerde veya nesnelerde terminal virgülünün olmaması gibi belirli gereksinimleri gevşetmek için mw.text.JSON_TRY_FIXING
iletin. Bu önerilmez.
Sınırlamalar:
- Dizi null değerler içeriyorsa, kodu çözülmüş JSON dizileri Lua dizileri olmayabilir.
- JSON nesneleri null değerlere sahip anahtarları bırakacaktır.
- Girişin bir JSON dizisi mi yoksa sıralı tamsayı tuşlarına sahip bir JSON nesnesi mi olduğunu doğrudan söylemek mümkün değildir.
- 1 ile başlayan sıralı tamsayı anahtarlarına sahip bir JSON nesnesi,
mw.text.JSON_PRESERVE_KEYS
kullanılmadığı sürece, eşdeğer olmamasına rağmen, aynı değerlere sahip bir JSON dizisiyle aynı tablo yapısının kodunu çözecektir.
mw.text.jsonEncode
mw.text.jsonEncode( value )
mw.text.jsonEncode( value, flags )
Bir JSON dizesini kodlayın. Aktarılan değer JSON'da kodlanamazsa hatalar artar. flags
0 veya mw.text.JSON_PRESERVE_KEYS
ve mw.text.JSON_PRETTY
işaretlerinin bir kombinasyonudur (+
kullanın).
Normalde Lua tek tabanlı dizi tabloları JSON sıfır tabanlı diziler olarak kodlanır; flags
, mw.text.JSON_PRESERVE_KEYS
ayarlandığında, sıfır tabanlı sıra tabloları JSON dizileri olarak kodlanır.
Sınırlamalar:
- Boş tablolar, boş nesneler (
{}
) olarak değil, her zaman boş diziler ([]
) olarak kodlanır. - Sekans tabloları, "dummy" bir öğe eklenmeden JSON nesneleri olarak kodlanamaz.
- Nil değerlerine sahip nesneler veya diziler üretmek için,
__pairs
meta yönteminin zor bir şekilde uygulanması gerekir. mw.text.JSON_PRESERVE_KEYS
kullanılmadığı sürece, 0 ile başlayan sıralı tamsayı tuşlarına sahip bir Lua tablosu JSON dizisi olarak kodlanır, 1 ile başlayan tamsayı tuşlarına sahip bir Lua tablosu ile kodlanır.- Aynı sayıdaki anahtarlar olarak hem sayı hem de dize temsili anahtar olarak kullanıldığında, davranış belirtilmez.
mw.text.killMarkers
mw.text.killMarkers( string )
Bir dizeden tüm MediaWiki şerit işaretleyici öğelerini kaldırır.
mw.text.listToText
mw.text.listToText( list )
mw.text.listToText( list, separator, conjunction )
Düzyazı tarzı bir listeye katılır. Başka bir deyişle, table.concat()
gibi ancak son öğeden önce farklı bir ayırıcı ile.
Varsayılan ayırıcı, vikinin içerik dilinde MediaWiki:comma-separator üzerinden alınır ve varsayılan bağlaç MediaWiki:and ile MediaWiki:word-separator birleştirilir.
Mesajlar için varsayılan değerleri kullanan örnekler:
-- Boş dizeyi döndürür
mw.text.listToText( {} )
-- "1" döndürür
mw.text.listToText( { 1 } )
-- "1 ve 2" döndürür
mw.text.listToText( { 1, 2 } )
-- "1, 2, 3, 4 ve 5" döndürür
mw.text.listToText( { 1, 2, 3, 4, 5 } )
-- "1; 2; 3; 4 veya 5" döndürür
mw.text.listToText( { 1, 2, 3, 4, 5 }, '; ', ' or ' )
mw.text.nowiki
mw.text.nowiki( string )
Vikimetin olarak yorumlanmasını önlemek için dizedeki çeşitli karakterleri HTML varlıkları ile değiştirir. Bu içerir:
- Aşağıdaki karakterler:
"
,&
,'
,<
,=
,>
,[
,]
,{
,|
,}
- Dizenin başlangıcında veya yeni satırdan hemen sonra şu karakterler:
#
,*
,:
,;
, boşluk, sekme (\t
) - Boş satırlarda ilişkili satırsonu veya satır başı karakterlerinden biri kaçmış olacak
----
dizenin başlangıcında veya yeni satırdan hemen sonra ilk-
karakteri__
bir alt çizgi kaçacak://
iki nokta kaçacakISBN
,RFC
veyaPMID
değerden sonra gelen bir boşluk karakteri kaçar
- 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
, orPMID
will be escaped
mw.text.split
mw.text.split( string, pattern, plain )
Dizeyi Ustring deseni pattern
ile eşleşen sınırlarda alt dizelere böler. plain
belirtilir ve true olursa, pattern
, bir Lua deseninden ziyade değişmez bir dize olarak yorumlanır (tıpkı mw.ustring.find()
gibi). Alt dizeleri içeren bir tablo döndürür.
Örneğin, mw.text.split( 'a b\tc\nd', '%s' )
bir tabloya { 'a', 'b', 'c', 'd' }
döndürür.
pattern
boş dizeyle eşleşirse, s
tek tek karakterlere bölünür.
Note that this function can be over 60 times slower than a reimplementation that is not Unicode-aware, such as the following:
function split(text, pattern, plain)
local ret = {}
local s, l = 1, string.len( text )
while s do
local e, n = string.find( text, pattern, s, plain )
if not e then
ret[#ret+1] = string.sub ( text, s )
s = nil
elseif n < e then
-- Empty separator!
ret[#ret+1] = string.sub ( text, s, e )
if e < l then
s = e + 1
else
s = nil
end
else
ret[#ret+1] = e > s and string.sub( text, s, e - 1 ) or ''
s = n + 1
end
end
return ret
end
mw.text.gsplit
mw.text.gsplit( string, pattern, plain )
mw.text.split()
öğesine eşdeğer çağrı ile döndürülecek alt dizeler üzerinde yinelenecek bir iterator işlevi döndürür.
Note that this function can be over 60 times slower than a reimplementation that is not Unicode-aware, such as the following:
function gsplit( text, pattern, plain )
local s, l = 1, string.len( text )
return function ()
if s then
local e, n = string.find( text, pattern, s, plain )
local ret
if not e then
ret = string.sub( text, s )
s = nil
elseif n < e then
-- Empty separator!
ret = string.sub( text, s, e )
if e < l then
s = e + 1
else
s = nil
end
else
ret = e > s and string.sub( text, s, e - 1 ) or ''
s = n + 1
end
return ret
end
end, nil, nil
end
mw.text.tag
mw.text.tag( name, attrs, content )
mw.text.tag{ name = string, attrs = table, content = string|false }
- Bağımsız değişkenler adlı kullanımına dikkat edin.
name
için HTML tarzı bir etiket oluşturur.
attrs
verilirse, dize tuşlarına sahip bir tablo olmalıdır. Dize ve sayı değerleri, özniteliğin değeri olarak kullanılır; anahtarın HTML5 değersiz parametresi olarak çıktığı boolean true sonuçları; boolean false anahtarı tamamen atlar; ve her şey bir hatadır.
content
verilmemişse (veya sıfırsa), yalnızca açılış etiketi döndürülür. content
boole false ise, kendi kendine kapalı bir etiket döndürülür. Aksi takdirde, bir dize veya sayı olmalıdır, bu durumda içerik oluşturulmuş açılış ve kapanış etiketine eklenir. İçeriğin otomatik olarak HTML kodlu olmadığını unutmayın; gerekirse mw.text.encode() kullanın.
<ref>
gibi uzantı etiketlerini düzgün bir şekilde döndürmek için, bunun yerine frame:extensionTag() kullanın.
mw.text.trim
mw.text.trim( string )
mw.text.trim( string, charset )
Bir dizenin başından ve sonundan boşluk veya diğer karakterleri kaldırın.
charset
sağlanırsa, Ustring deseni, yani [set]
içindeki "set" içine parantez içine girmek için uygun bir dize olmalıdır. Varsayılan karakter kümesi ASCII boşluk, "\t\r\n\f "
.
mw.text.truncate
mw.text.truncate( text, length )
mw.text.truncate( text, length, ellipsis )
mw.text.truncate( text, length, ellipsis, adjustLength )
text
belirtilen uzunluğa göre keser ve kesme işlemi yapılırsa ellipsis
ekler. Uzunluk pozitifse, dizenin sonu kesilir; negatif olursa, başlangıç kaldırılır. adjustLength
verilir ve true olursa, üç nokta içeren sonuç dizesi belirtilen uzunluktan daha uzun olmaz.
ellipsis
için varsayılan değer, vikinin içerik dilinde MediaWiki:ellipsis üzerinden alınır.
Varsayılan "..." üç nokta kullanan örnekler:
-- "foobarbaz" döndürür
mw.text.truncate( "foobarbaz", 9 )
-- "fooba..." döndürür
mw.text.truncate( "foobarbaz", 5 )
-- "...arbaz" döndürür
mw.text.truncate( "foobarbaz", -5 )
-- "foo..." döndürür
mw.text.truncate( "foobarbaz", 6, nil, true )
-- "Foobarbaz" döndürür, çünkü bu "foobarba..." daha da kısadır
mw.text.truncate( "foobarbaz", 8 )
mw.text.unstripNoWiki
mw.text.unstripNoWiki( string )
MediaWiki <nowiki> şerit işaretleyicileri karşılık gelen metinle değiştirir. Diğer şerit işaretleyici tipleri değiştirilmez.
mw.text.unstrip
mw.text.unstrip( string )
mw.text.killMarkers( mw.text.unstripNoWiki( s ) )
ile eşittir.
Bu, artık Scribunto'nun önceki sürümlerinde olduğu gibi özel sayfa eklenmesi, <ref> etiketlerinin ve arkasındaki HTML'yi göstermez.
Başlık kütüphanesi
mw.title.equals
mw.title.equals( a, b )
İki başlığın eşit olup olmadığını test edin. Parçaların karşılaştırmada göz ardı edildiğine dikkat edin.
mw.title.compare
mw.title.compare( a, b )
a
başlığının b
başlığından daha küçük, eşit veya daha büyük olduğunu belirtmek için -1, 0 veya 1 değerini döndürür.
Bu, başlıkları vikiarası önekiyle (varsa) dize olarak, daha sonra ad alanı numarasına, ardından önceden düzeltilmemiş başlık metnine bir dize olarak karşılaştırır. Bu dize karşılaştırmaları Lua'nın standart <
operatörünü kullanır.
mw.title.getCurrentTitle
mw.title.getCurrentTitle()
Geçerli sayfanın başlık nesnesini döndürür.
mw.title.new
mw.title.new( text, namespace )
mw.title.new( ID )
- Bu işlev, bir kimlikle çağrıldığında pahalı
Yeni bir başlık nesnesi oluşturur.
Bir id
numarası verilirse, o page_id değerine sahip başlık için bir nesne oluşturulur. Başvurulan başlık, geçerli sayfadan bağlantı olarak sayılır. Page_id yoksa nil döndürür. Oluşturulan başlık nesnesi önceden yüklenmiş bir başlık için değilse, pahalı işlev sayısı artırılır.
Bunun yerine bir text
dizesi verilirse, o başlık için bir nesne oluşturulur (sayfa olmasa bile). Metin dizesi bir ad alanı belirtmezse, namespace
(mw.site.namespaces
içinde bulunan herhangi bir anahtar olabilir). Metin geçerli bir başlık değilse, nil döndürülür.
mw.title.makeTitle
mw.title.makeTitle( namespace, title, fragment, interwiki )
namespace
ad alanında title
başlıklı, isteğe bağlı olarak belirtilen fragment
ve interwiki
önekiyle başlık nesnesi oluşturur. namespace
, mw.site.namespaces
içinde bulunan herhangi bir anahtar olabilir. Ortaya çıkan başlık geçerli değilse, nil değerini döndürür.
$nw_title_new_function işlevinden farklı olarak, bu yöntemin her zaman belirtilen ad alanını uygulayacağını unutmayın. Örneğin, mw.title.makeTitle( 'Template', 'Module:Foo' )
, sayfa için bir nesne oluşturur Template:Module:Foo, mw.title.new( 'Module:Foo', 'Template' )
ise Module:Foo için bir nesne oluşturur.
Note also that functionality for interwiki titles is limited to interwiki
/ isExternal
/ isLocal
and URL-related methods; other methods might not behave as expected.
Başlık nesneleri
Bir başlık nesnesinin birçok özelliği ve yöntemi vardır. Özelliklerin çoğu salt okunurdur.
text
ile biten alanların başlıkları dize değeri olarak döndürdüğünü, title
ile biten alanların ise başlık nesnelerini döndürdüğünü unutmayın.
- id: page_id. Sayfa yoksa
0
.
Bu zengin olabilir.
- interwiki: Vikiarası öneki veya yoksa boş dize.
- namespace: Ad alanı numarası.
- fragment: Parça (bölüm/bağlantı bağlantısı olarak da bilinir) veya boş dize. Atanabilir.
- nsText: Sayfanın ad alanının metni.
- subjectNsText: Sayfa için konu ad alanının metni.
- talkNsText: The text of the talk namespace for the page, or
nil
if this title cannot have a talk page. (added in MediaWiki 1.42.0-wmf.15, refs T180911)
- text: Ad alanı veya vikiarası önekleri olmadan sayfanın başlığı.
- prefixedText: Ad alanı ve vikiarası önekleriyle birlikte sayfanın başlığı.
- fullText: Ad alanı ve vikiarası önekleri ve parça ile sayfanın başlığı. Vikiarası, akıma eşitse döndürülmez.
- rootText: Bu bir alt sayfaysa, kök sayfanın öneksiz başlığı. Aksi takdirde,
title.text
ile aynıdır.
- baseText: Bu bir alt sayfaysa, sayfanın başlığı öneksiz bir alt sayfadır. Aksi takdirde,
title.text
ile aynıdır.
- subpageText: Bu bir alt sayfaysa, yalnızca alt sayfa adı. Aksi takdirde,
title.text
ile aynıdır.
- canTalk: Bu başlığın sayfasının bir tartışma sayfası olup olmayacağı.
- exists: Sayfanın var olup olmadığı. Medya ad alanı başlıkları için
file.exists
için takma ad. Dosya ad alanı başlıkları için bu, dosyanın kendisini değil, dosya açıklama sayfasının varlığını kontrol eder. Bu zengin olabilir. - file, fileExists: #Dosya meta veri aşağıya bakın.
- isContentPage: Bu başlığın bir içerik ad alanında olup olmadığı.
- isExternal: Bu başlığın bir vikiarası öneki olup olmadığı.
- isLocal: Bu başlığın bu projede olup olmadığı. Örneğin, İngilizce Vikipedi'de, Vikisözlük ve benzeri değilken diğer Vikipedi'ler "yerel" olarak kabul edilir.
- isRedirect: Bunun yönlendirme olan bir sayfanın başlığı olup olmadığı. Bu zengin olabilir.
- isSpecialPage: Bunun olası bir özel sayfanın başlığı olup olmadığı (yani Özel: ad alanındaki bir sayfa).
- isSubpage: Bu başlığın başka bir başlığın alt sayfası olup olmadığı.
- isTalkPage: Bunun bir tartışma sayfası başlığı olup olmadığı.
- isSubpageOf( title2 ): Bu başlığın verilen başlığın bir alt sayfası olup olmadığı.
- inNamespace( ns ): Bu başlığın verilen ad alanında olup olmadığı. Ad alanları,
mw.site.namespaces
içinde bulunan bir anahtar olan herhangi bir şey tarafından belirtilebilir.
- inNamespaces( ... ): Bu başlığın verilen ad alanlarından herhangi birinde olup olmadığı. Ad alanları,
mw.site.namespaces
içinde bulunan bir anahtar olan herhangi bir şey tarafından belirtilebilir.
- hasSubjectNamespace( ns ): Bu başlığın konu ad alanının verilen ad alanında olup olmadığı. Ad alanları,
mw.site.namespaces
içinde bulunan bir anahtar olan herhangi bir şey tarafından belirtilebilir.
- contentModel: Bir dize olarak bu başlığın içerik modeli. Bu zengin olabilir.
- basePageTitle:
mw.title.makeTitle( title.namespace, title.baseText )
olarak aynıdır.
- rootPageTitle:
mw.title.makeTitle( title.namespace, title.rootText )
olarak aynıdır.
- talkPageTitle:
mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text )
ile aynı veya bu başlığın tartışma sayfası olamıyorsanil
.
- subjectPageTitle:
mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text )
olarak aynıdır.
- redirectTarget: Sayfa bir yönlendirmeyse ve sayfa mevcutsa, yönlendirme sayfasının hedefinin bir başlık nesnesini döndürür, aksi takdirde
false
döndürür.
- protectionLevels: Sayfanın koruma seviyeleri. Bu, her bir eyleme karşılık gelen anahtarlara sahip bir tablodur (örneğin,
"edit"
ve"move"
). Tablo değerleri, ilk ögesi koruma düzeyini içeren bir dize olan dizilerdir. Sayfa korumasızsa, tablo değerleri veya dizi öğelerinil
olacaktır. Bu zengindir.
- cascadingProtection: Sayfa için geçerli olan basamaklı korumalar. Bu, "restrictions" (kendisi protectionLevels gibi anahtarlara sahip bir tablodur) ve "sources" (korumaların kedelemeli yapıldığı başlıkları listeleyen bir dizi) içeren bir tablodur. Sayfada hiçbir koruma kademesi yoksa,
"restrictions"
ve"sources"
boş olacaktır. Bu zengindir.
- subPageTitle( text ):
mw.title.makeTitle( title.namespace, title.text .. '/' .. text )
olarak aynıdır.
- partialUrl(): Bir URL'de olduğu gibi kodlanmış
title.text
değerini döndürür.
- fullUrl( query, proto ): Bu başlık için tam URL'yi (isteğe bağlı sorgu tablosu/dizesi ile) döndürür. proto, ortaya çıkan URL'nin şemasını kontrol etmek için belirtilebilir:
"http"
,"https"
,"relative"
(varsayılan) veya"canonical"
.
- localUrl( query ): Bu başlık için yerel URL'yi (isteğe bağlı sorgu tablosu/dizesi ile) döndürür.
- canonicalUrl( query ): Bu başlık için standart URL'yi (isteğe bağlı sorgu tablosu/dizesi ile) döndürür.
- getContent(): Sayfanın (ayrıştırılmamış) içeriğini veya sayfa yoksa
nil
değerini döndürür. Sayfa bir yansıtma olarak kaydedilecektir.
- pageLang: A language object for the title's page content language, which defaults to the wiki's content language. This is expensive.
Başlık nesneleri ilişkisel işleçler kullanılarak karşılaştırılabilir. tostring( title )
, title.prefixedText
değerini döndürür.
İnsanlar gerçeği şaşırtıcı bulduklarından, bir başlık nesnesindeki pahalı alanına erişmenin sayfaya bir "bağlantı" kaydettiğini unutmayın (örneğin Special:WhatLinksHere sayfasında gösterildiği gibi). Başlık nesnesinin getContent()
yöntemini kullanarak veya redirectTarget
alanına erişerek, bunu "dönüştürülme" olarak kaydeder ve başlık nesnesinin file
veya fileExists
alanları bunu "dosya bağlantısı" olarak kaydeder.
Dosya meta verileri
Dosya veya Medya ad alanındaki bir sayfayı temsil eden başlık nesnelerinin file
adlı bir özelliği olacaktır. Bu pahalı. Bu, aşağıdaki gibi yapılandırılmış bir tablodur:
- exists: Dosyanın var olup olmadığı. Bir görüntü kullanımı olarak kaydedilecektir. Title nesnesindeki
fileExists
özelliği, geriye dönük uyumluluk nedeniyle vardır ve bu özelliğin diğer adıdır. Bufalse
ise, diğer tüm dosya özelliklerinil
olacaktır.
- width: Dosyanın genişliği. Dosya birden fazla sayfa içeriyorsa, bu ilk sayfanın genişliğidir.
- height: Dosyanın yüksekliği. Dosya birden fazla sayfa içeriyorsa, bu ilk sayfanın yüksekliğidir.
- pages: Dosya biçimi birden çok sayfayı destekliyorsa, bu, dosyanın her sayfası için tablolar içeren bir tablodur; aksi hâlde
nil
olur. # operatörü, dosyadaki sayfa sayısını almak için kullanılabilir. Her bir sayfa tablosu bir genişlik ve yükseklik özelliği içerir.
- size: Dosyanın bayt cinsinden boyutu.
- mimeType: Dosyanın MIME türü.
- length: Medya dosyasının saniye cinsinden uzunluğu (süresi). Uzunluğu desteklemeyen ortam türleri için sıfır.
Pahalı özellikler
id, isRedirect, exists
ve contentModel
özellikleri veritabanından başlık hakkında veri alınmasını gerektirir. Bu nedenle, pahalı işlev sayısı, geçerli sayfadan başka bir sayfa için bunlardan birine ilk kez erişildiğinde artırılır. Bu sayfa için bu özelliklerin herhangi birine daha sonra erişilmesi, pahalı işlev sayısını tekrar artırmaz.
Pahalı olarak işaretlenen diğer özellikler, geçerli sayfadan başka bir sayfa için ilk kez erişildiğinde pahalı işlev sayısını her zaman artırır.
URI kütüphanesi
mw.uri.encode
mw.uri.encode( string, enctype )
Dizenin yüzde kodunu çözer. Varsayılan tür olan "QUERY"
, sorgu dizelerinde kullanmak için '+' kullanarak boşlukları kodlar; "PATH"
boşlukları %20 olarak kodlar; ve "WIKI"
boşlukları '_' olarak kodlar.
Hem boşluk hem de alt çizgi '_' olarak kodlandığından "WIKI" biçiminin tamamen geri alınamayacağını unutmayın.
mw.uri.decode
mw.uri.decode( string, enctype )
Dizenin yüzde kodunu çözer. Varsayılan tür olan "QUERY"
, '+' kodunu boşluğa çözer; "PATH"
herhangi bir kod çözme işlemi gerçekleştirmez; ve "WIKI"
'_' karakterini boşluğa çözer.
mw.uri.anchorEncode
mw.uri.anchorEncode( string )
Bir dizeyi MediaWiki URI parçasında kullanmak için kodlar.
mw.uri.buildQueryString
mw.uri.buildQueryString( table )
Bir tabloyu URI sorgu dizesi olarak kodlar. Anahtarlar dize olmalıdır; değerler, dizeler veya sayılar, sekans tabloları veya boolean false olabilir.
mw.uri.parseQueryString
mw.uri.parseQueryString( s, i, j )
s
sorgu dizesini bir tabloya çözer. Dizede değer içermeyen anahtarların değeri false olur; birden çok kez yinelenen tuşlar, değer olarak sıra tablolarına sahip olacaktır; ve diğerleri değer olarak dizgilere sahip olacaktır.
İsteğe bağlı i
ve j
sayısal bağımsız değişkenleri, dizenin tamamı yerine ayrıştırılacak s
alt dizesini belirtmek için kullanılabilir. i
, alt dizenin ilk karakterinin konumudur ve varsayılan değer 1'dir. j
, alt dizenin son karakterinin konumudur ve varsayılan olarak alt dizenin uzunluğudur. Hem i
hem de j
, string.sub gibi negatif olabilir.
mw.uri.canonicalUrl
mw.uri.canonicalUrl( page, query )
İsteğe bağlı sorgu dizesi/tablosu ile bir sayfanın standart URL'si için URI nesnesi döndürür.
mw.uri.fullUrl
mw.uri.fullUrl( page, query )
İsteğe bağlı sorgu dizesi/tablosu ile bir sayfanın tam URL'si için URI nesnesi döndürür.
mw.uri.localUrl
mw.uri.localUrl( page, query )
İsteğe bağlı sorgu dizesi/tablosu ile bir sayfanın yerel URL'si için URI nesnesi döndürür.
mw.uri.new
mw.uri.new( string )
Geçirilen dize veya tablo için yeni bir URI nesnesi oluşturur. Tablodaki olası alanlar için URI nesnelerinin açıklamasına bakın.
mw.uri.validate
mw.uri.validate( table )
İletilen tabloyu (veya URI nesnesini) doğrular. Tablonun geçerli olup olmadığını gösteren bir boole ve başarısızlık durumunda hangi sorunların bulunduğunu açıklayan bir dize döndürür.
URI nesnesi
URI nesnesi, bazıları veya tümü sıfır olabilecek aşağıdaki alanlara sahiptir:
- protocol: Dize protokolü/şeması
- user: Dize kullanıcısı
- password: Dize parolası
- host: Dize ana bilgisayar adı
- port: Tamsayı bağlantı noktası
- path: Dize yolu
- query: mw.uri.parseQueryString olduğu gibi bir tablo
- fragment: Dize parçası.
Aşağıdaki özellikler de mevcuttur:
- userInfo: Dize kullanıcı ve parola
- hostPort: Dize ana makinesi ve bağlantı noktası
- authority: Dize kullanıcısı, parola, ana bilgisayar ve bağlantı noktası
- queryString: Sorgu tablosunun dize sürümü
- relativePath: Dize yolu, sorgu dizesi ve parçası
tostring()
URI dizesini verecektir.
URI nesnesinin yöntemleri şunlardır:
mw.uri:parse
uri:parse( string )
Bir dizeyi geçerli URI nesnesine ayrıştırır. Dizede belirtilen tüm alanlar geçerli nesnede değiştirilir; belirtilmeyen alanlar eski değerlerini korur.
mw.uri:clone
uri:clone()
URI nesnesinin bir kopyasını oluşturur.
mw.uri:extend
uri:extend( parameters )
Parametreler tablosunu, nesnenin sorgu tablosuyla birleştirir.
Ustring kütüphanesi
Ustring kütüphanesinin standart Dize kütüphanesinin doğrudan yeniden uygulanması olması amaçlanmıştır, ancak yöntemler baytlar yerine UTF-8 kodlu dizelerdeki karakterler üzerinde çalışır.
Dize geçerli UTF-8 değilse çoğu işlev bir hata oluşturur; istisnalar not edilir.
mw.ustring.maxPatternLength
Bir desenin izin verilen maksimum uzunluğu bayt olarak.
mw.ustring.maxStringLength
Bir dizenin izin verilen maksimum uzunluğu bayt olarak.
mw.ustring.byte
mw.ustring.byte( s, i, j )
Tek tek baytları döndürür; string.byte() ile aynı.
mw.ustring.byteoffset
mw.ustring.byteoffset( s, l, i )
Dizedeki bir karakterin bayt uzaklığını döndürür. Hem l
hem de i
için varsayılan değer 1'dir. i
negatif olabilir, bu durumda dizenin sonundan itibaren sayılır.
l
== 1'deki karakter, i
baytında veya sonrasında başlayan ilk karakterdir; l
== 0'daki karakter, i
baytından veya bu bayttan önce başlayan ilk karakterdir. Bu aynı karakter olabilir. Büyük veya küçük l
değerleri bunlara göre hesaplanır.
mw.ustring.char
mw.ustring.char( ... )
Tam sayıların bayt değerleri yerine Unicode kod noktaları olması dışında string.char() gibi.
local value = mw.ustring.char( 0x41f, 0x440, 0x438, 0x432, 0x435, 0x442, 0x21 ) -- değer şimdi 'Привет!'
mw.ustring.codepoint
mw.ustring.codepoint( s, i, j )
string.byte() gibi, ancak dönüş değerleri kod noktaları ve ofsetler bayt yerine karakterler olmalıdır.
mw.ustring.find
mw.ustring.find( s, pattern, init, plain )
Desenin Ustring patterns de açıklandığı gibi genişletilmesi ve init
ofsetinin bayt yerine karakterlerde olması dışında string.find() gibi.
mw.ustring.format
mw.ustring.format( format, ... )
string.format() ile aynı. Dizelerin genişlikleri ve kesinlikleri kod noktaları değil bayt cinsinden ifade edilir.
mw.ustring.gcodepoint
mw.ustring.gcodepoint( s, i, j )
Dizedeki kod noktaları üzerinden yineleme yapmak için üç değer döndürür. i
varsayılan olarak 1 ve j
-1 olur. Bu, iterator for
da kullanılmak üzere tasarlanmıştır:
for codepoint in mw.ustring.gcodepoint( s ) do
-- block
end
mw.ustring.gmatch
mw.ustring.gmatch( s, pattern )
Desenin Ustring patterns bölümünde açıklandığı gibi genişletilmesi dışında string.gmatch() gibi.
Known bug - When used with a pattern which can match the empty string, the function will get stuck in an infinite loop. For example, the following loop never terminates:
for capture in mw.ustring.gmatch( "foo bar", ".*" ) do
-- block
end
mw.ustring.gsub
mw.ustring.gsub( s, pattern, repl, n )
Desenin Ustring desenler de açıklandığı gibi genişletilmesi dışında string.gsub() gibi.
Known bugs: When repl
is a table, it is possible to use numbers as keys instead of strings (e.g. to replace instances of
in a string, the value at key "5"
or [5]
would be used); as such, the output is not predictable if they have different (non-nil) values.
["5"]
This is not an issue for string.gsub(), which ignores any numbers as keys.
mw.ustring.isutf8
mw.ustring.isutf8( string )
Dize geçerli UTF-8 ise true, değilse false döndürür.
mw.ustring.len
mw.ustring.len( string )
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
mw.ustring.lower( string )
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
mw.ustring.match( s, pattern, init )
Desenin Ustring i de açıklandığı gibi genişletilmesi ve init
ofsetinin bayt yerine karakterlerde olması dışında string.match() gibi.
mw.ustring.rep
mw.ustring.rep( string, n )
string.rep() ile aynı.
mw.ustring.sub
mw.ustring.sub( s, i, j )
Ofsetlerin bayt yerine karakter olması dışında string.sub() gibi.
mw.ustring.toNFC
mw.ustring.toNFC( string )
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
mw.ustring.toNFD( s )
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.toNFKC
mw.ustring.toNFKC( s )
Converts the string to Normalization Form KC (also known as Normalization Form Compatibility Composition). Returns nil if the string is not valid UTF-8.
mw.ustring.toNFKD
mw.ustring.toNFKD( s )
Converts the string to Normalization Form KD (also known as Normalization Form Compatibility Decomposition). Returns nil if the string is not valid UTF-8.
mw.ustring.upper
mw.ustring.upper( s )
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:
%a
: Genel Kategori "Harf" olan tüm karakterleri temsil eder.%c
: Genel Kategori "Kontrol" ile tüm karakterleri temsil eder.%d
: Genel Kategori "Sayı, ondalık basamak" olan tüm karakterleri temsil eder.%l
: Genel Kategori "Küçük Harf" olan tüm karakterleri temsil eder.%p
: Genel Kategori "Noktalama" ile tüm karakterleri temsil eder.%s
: Genel Kategori "Ayırıcı", artı sekme, satır besleme, satır başı, dikey sekme ve form besleme ile tüm karakterleri temsil eder.%u
: Genel Kategori "Büyük Harf" olan tüm karakterleri temsil eder.%w
: Genel Kategori "Harf" veya "Ondalık Sayı" olan tüm karakterleri temsil eder.%x
: onaltılık rakamların tam genişlikte karakter sürümlerini ekler.
Dize kitaplığı kalıpları da olduğu gibi, burada $2 tamamlayıcı kümeyi temsil eder ("Genel Kategori olmadan tüm karakterler").
Her durumda, karakterler bayt yerine Unicode karakterler olarak yorumlanır, bu nedenle [0-9]
gibi aralıklar, %b«»
gibi kalıplar ve çok baytlı karakterler düzgün çalışacaktır. Boş yakalamalar konumu bayt yerine kod noktalarında yakalar.
Known limitations: Unlike String library patterns, Ustring library patterns have a maximum length of 10,000 bytes. If the pattern exceeds this length, then the Ustring function will throw an error. Because the String library has its own maximum of 32 captures (unlike the Ustring library), it is therefore impossible to use a pattern which exceeds both limits, as it will be incompatible with both libraries.
Note: 9 ASCII characters, $
, +
, <
, =
, >
, ^
, `
, |
, ~
, can be matched by %p
in the string library but not in the ustring library, as Unicode classifies them as Symbols rather than Punctuation.
Yüklenebilir kütüphaneler
Bu kitaplıklar varsayılan olarak dahil edilmemiştir, ancak gerekirse require()
kullanılarak yüklenebilir.
bit32
Lua 5.2 bit32
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
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
bit32.bnot( x )
x
öğesinin bitwise tamamlayıcı döndürür.
bit32.bor
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
bit32.btest( ... )
bit32.band( ... ) ~= 0
ile eşittir
bit32.bxor
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
bit32.extract( n, field, width )
field
bitinden başlayarak n
öğesinden width
bitlerini ayıklar. 0 ile 31 aralığının dışındaki bitlere erişmek bir hatadır.
Belirtilmezse, width
için varsayılan değer 1'dir.
bit32.replace
bit32.replace( n, v, field, width )
n
içindeki width
bitlerini field
bit ile başlayarak v
düşük width
bitleriyle değiştirir. 0 ile 31 aralığının dışındaki bitlere erişmek bir hatadır.
Belirtilmezse, width
için varsayılan değer 1'dir.
bit32.lshift
bit32.lshift( n, disp )
n
kaydırılmış disp
bitlerini sola döndürür. Bu bir mantıksal kaydırma: eklenen bitler 0'dır. Bu genellikle 2 disp
ile bölünmeye eşdeğerdir.
31'in üzerinde yer değiştirmenin 0 ile sonuçlanacağını unutmayın.
bit32.rshift
bit32.rshift( n, disp )
n
kaydırılmış disp
bitlerini sağa döndürür. Bu bir mantıksal kaydırma: eklenen bitler 0'dır. Bu genellikle 2 disp
ile bölünmeye eşdeğerdir.
31'in üzerinde yer değiştirmenin 0 ile sonuçlanacağını unutmayın.
bit32.arshift
bit32.arshift( n, disp )
n
kaydırılan disp
bit sayısını sağa döndürür. Bu bir aritmetik kaydırma: disp
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
bit32.lrotate( n, disp )
n
döndürülmüş disp
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
bit32.rrotate( n, disp )
n
döndürülmüş disp
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
libraryUtil.checkType( name, argIdx, arg, expectType, nilOk )
type( arg )
, expectType
ile eşleşmezse bir hata oluşturur. Ayrıca, arg
nil ve nilOk
doğruysa hata oluşmaz.
name
çağıran işlevin adıdır ve argIdx
, 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
libraryUtil.checkTypeMulti( name, argIdx, arg, expectTypes )
$1, type( arg )
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
libraryUtil.checkTypeForIndex( index, value, expectType )
type( value )
, expectType
ile eşleşmezse bir hata oluşturur.
Bu, bir __newindex
metamethod uygulamasında kullanılmak üzere tasarlanmıştır.
libraryUtil.checkTypeForNamedArg
libraryUtil.checkTypeForNamedArg( name, argName, arg, expectType, nilOk )
type( arg )
, expectType
ile eşleşmezse bir hata oluşturur. Ayrıca, arg
nil ve nilOk
doğruysa hata oluşmaz.
Bu, Lua'nın "named argument" sözdizimi, func{ name = value }
olarak adlandırılan yöntemlerde libraryUtil.checkType()
ile eşdeğer olarak kullanılması amaçlanmıştır.
libraryUtil.makeCheckSelfFunction
libraryUtil.makeCheckSelfFunction( libraryName, varName, selfObj, selfObjDesc )
Bu, obj:method()
sözdizimi ile çağrılması amaçlanan nesne tablolarına "methods" uygulanmasında kullanılmak üzere tasarlanmıştır. self
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, self
nesnesi selfObj
değilse bir hata oluşturur.
Bu işlev genellikle bir kütüphanenin yapıcı işlevinde şu şekilde kullanılır:
function myLibrary.new()
local obj = {}
local checkSelf = libraryUtil.makeCheckSelfFunction( 'myLibrary', 'obj', obj, 'myLibrary object' )
function obj:method()
checkSelf( self, 'method' )
end
function obj:method2()
checkSelf( self, 'method2' )
end
return obj
end
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 string.format()
ve tonumber()
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.
strict
The strict library is not a normal library; it causes an error to be raised whenever a new variable is used that is not explicitly scoped as a local variable (e.g., global variable assignment references). This functionality is typically enabled by loading at the top of a module using:
require( 'strict' )
On many Wikimedia wikis this was formerly implemented in Module:No globals
, which was replaced via phab:T209310. It is in part derived from strict.lua.
ustring
Ustring kütüphanesi içine saf Lua arka ucu kullanılarak yüklenebilir
ustring = require( 'ustring' )
Her durumda Ustring kütüphanesi (mw.ustring
) 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 mw
tablosunda, genellikle mw.ext
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:
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.
mw.wikibase
Wikibase Client , yerelleştirilebilir yapılandırılmış verilere erişim sağlar, özellikle de Vikiveri. md_docs_topics_lua.html ve $1 sayfasına bakın.
mw.wikibase.lexeme
[[WikibaseLexeme |WikibaseLexeme]], Wikibase Lexeme varlıklarına erişim sağlar. Bu, Wikidata: Sözlükbilimsel veriler tarafından desteklenmektedir. See md_docs_2topics_2lua.html and Extension:WikibaseLexeme/Lua .
mw.wikibase.mediainfo
[[WikibaseMediaInfo |WikibaseMediaInfo]], Wikibase MediaInfo varlıklarına erişim sağlar. 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#Usage 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
$1, yerelleştirilebilir tablo ve harita verilerine erişim sağlar. $1 sayfasına bakın. Tabular Data ve GeoJSON Map Data, Commons "Data:" ad alanında desteklenmektedir.
mw.ext.data.get( pagename )
mw.ext.cargo
Cargo provides a means to query its data store from Lua. See Extension:Cargo/Other features#Lua support .
mw.ext.cattools
CategoryToolbox , belirli bir sayfanın bir kategoriye ait olup olmadığını Lua'dan kontrol etmek için bir araç sağlar Deneyseldir ve herkese açık Wikimedia vikilerinde etkinleştirilmemiştir.
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
$1, Lua'dan ayrıştırıcı işlevi ifadelerini değerlendirmek için bir araç sağlar.
mw.ext.proofreadPage
Proofread Page provides access to Index and Page namespaces. See Extension:Proofread Page/Lua reference . This is supported by Wikisource:ProofreadPage. See Help:Extension:ProofreadPage .
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. See Extension:ArticlePlaceholder/Module:AboutTopic .
mw.ext.externalData
ExternalData , Lua'dan İnternet'ten yapılandırılmış veri almak için bir yol sağlar. Extension:External Data/Lua sayfasına bakın. See Extension:External Data/Lua .
mw.ext.UnlinkedWikibase
See UnlinkedWikibase
mw.ext.UnlinkedWikibase.getEntity( id )
mw.ext.UnlinkedWikibase.query( sparql )
mw.ext.seo
WikiSEO, mevcut sayfa için SEO Verilerini ayarlamak için bir yol sağlar. Extension:WikiSEO#Lua modüllerinde kullanım sayfasına bakın.
mw.slots
WSSlots provides a number of Lua functions for working with MCR slots:
mw.slots.slotContent(slotName, pageName)
mw.slots.slotTemplates(slotName, pageName)
(deprecated)mw.slots.slotContentModel(slotName, pageName)
mw.slots.slotData(slotName, pageName)
Standart Lua'dan farklılıklar
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:
- debug.*
- İşlevlerin çoğu güvensizdir. Mevcut işlevler:
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
- Referential data structures
- Circular data structures and data structures where the same node may be reached by more than one path cannot be correctly sent to PHP.
Attempting to do so will cause undefined behavior. This includes (but is not limited to) returning such data structures from the module called by {{#invoke:}}
and passing such data structures as parameters to Scribunto library functions that are implemented as callbacks into PHP.
Such data structures may be used freely within Lua, including as the return values of modules loaded with mw.loadData()
.
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ı, Scribunto_LuaLibraryBase
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 engines/LuaCommon/NameLibrary.php
içine yerleştirilmeli ve Scribunto_LuaEngine::$libraryClasses
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 engine/LuaCommon/lualib/mw.Name.lua
içine yerleştirilmelidir. Bu dosya genellikle böyle bir şeyi içermelidir:
local object = {}
local php
function object.setupInterface( options )
-- Kurulum işlevini kaldır
object.setupInterface = nil
-- PHP geri çağrılarını yerel bir değişkene kopyalayın ve küreseli kaldırın
php = mw_interface
mw_interface = nil
-- Burada başka bir kurulum yapın
-- mw küresele yükleyin
mw = mw or {}
mw.ext = mw.ext or {}
mw.ext.NAME = object
-- Yüklendiğimizi belirtin
package.loaded['mw.ext.NAME'] = object
end
return object
engine/LuaCommon/lualib/libraryUtil.lua
içindeki modül (bunu local util = require 'libraryUtil'
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 Scribunto_LuaEngineTestBase
test durumları için bir temel sınıf içerir.
Kitaplığın test durumu bu sınıfı genişletmeli ve static function suite()
geçersiz kılmamalıdır.
Scribunto uzantısında, test durumu tests/engines/LuaCommon/NameLibraryTest.php
olmalı ve diziye ScribuntoHooks::unitTestsList()
(common/Hooks.php
içinde) eklenmelidir; uzantıları test durumunu kendi UnitTestsList
kanca işlevine eklemelidir, muhtemelen $wgAutoloadClasses['Scribunto_LuaEngineTestBase']
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, ClassNameTests.lua
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:
n
, test kodun
ve testn
için beklenen çıkış olan bir dize. - run( n ):
n
testini çalıştıran ve bir dize döndüren işlev.
getTestModules()
gösterildiği gibi bildirilirse, birçok yararlı yardımcı yöntem sağlayan "Modül:TestFramework" kullanılabilir. Bu kullanılırsa, ClassNameTests.lua
ş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, expect
biçimini ve func
öğesinin nasıl çağrıldığını denetler. Dahil edilen türler:
- Normal:
expect
, bir dönüş değerleri tablosu veya testin bir hata oluşturması gerekiyorsa bir dizedir.func
basitçe çağrılır. - Iterator:
expect
, dönüş değerleri tablosunun bir tablosudur.func
, 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
tostring()
öğesinden geçirilir.
Başka bir uzantıdaki test senaryoları
PHPUnit testlerini çalıştırmanın (en az) iki yolu vardır:
- Çekirdeklere karşı phpunit komutunu çalıştırın ve tests/phpunit/suites/ExtensionsTestSuite.php dosyasının UnitTestsList kancasını 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ı),
--filter
seçeneği yalnızca uzantınızın testlerini çalıştırmak için kullanılabilir. - 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. $wgAutoloadClasses[ 'Scribunto_LuaEngineTestBase' ]
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 Gerrit change 56570 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:
if ( !isset( $GLOBALS['wgAutoloadClasses']['Scribunto_LuaEngineTestBase'] ) ) {
return;
}
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
Lisans
Bu kılavuz, MIT lisansı altında bulunan Lua 5.1 kaynak kılavuzundan türetilmiştir.
Copyright © 1994–2012 Lua.org, PUC-Rio.
Bu yazılımın ve ilişkili belgelendirme dosyalarının ("Yazılım") bir kopyasını alan herhangi bir kişiye, kullanma, kopyalama, değiştirme, birleştirme hakları da dahil ancak bunlarla sınırlı olmamak üzere, herhangi bir sınırlama olmaksızın, Yazılım ile ilgili olarak erişim izni verilir. Yazılımın kopyalarını yayınlamak, lisanslamak ve/veya satmak ve Yazılımın sağlandığı kişilere aşağıdaki koşullara tabi olarak izin vermek için: Yukarıdaki telif hakkı bildirimi ve bu izin bildirimi, Yazılımın tüm kopyalarına veya önemli bölümlerine dahil edilecektir. YAZILIM, HERHANGİ BİR TÜR, AÇIK VEYA ZIMNİ GARANTİ OLMADAN "OLDUĞU GİBİ", TİCARİ OLABİLİR GARANTİ VE UYUMSUZLUK GARANTİSİ DAHİL OLMAKSIZIN "OLDUĞU GİBİ" SAĞLANMAKTADIR. HİÇBİR DURUMDA YAZARLARIN VEYA TELİF HAKKI TUTUCULARININ YAZILIM VEYA KULLANIM VEYA DİĞER BAĞLANTILARLA İLİŞKİN, SÖZLEŞME VEYA KULLANIM YA DA BAĞIMSIZ OLDUĞU GİBİ, HERHANGİ BİR TAZMİNAT, ZARAR VEYA DİĞER SORUMLULUK YAZILIM İÇİN SORUMLU OLMAYACAKTIR. |
Bu türev kitapçığı aynı lisansın koşulları altında da kopyalanabilir.