Sabtu, 26 September 2026
11:08 WIB
TERKINI
Regional Bupati Gowa Sitti Husniah Talenrang Tersangka Pemerasan Perizinan Bangunan dan TPPU Bandar Lampung Puluhan Siswa di Lampung Tengah Diduga Keracunan Makanan Program MBG Account KG Media ID: Satu Akun untuk Kemudahan Akses Seluruh Layanan Digital Ekonomi Dan Bisnis Harga Buyback Emas Antam Anjlok Rp20 Ribu per Gram pada 25 September 2026 Lampung DPRD Lampung Tengah Soroti Perubahan Substansi Perda SOTK Tanpa Pemberitahuan Teknologi Meta Rilis Muse Charm: Gadget Saku Cerdas dengan Asisten AI Revolusioner Berita KAI Siap Gerakkan Rail Clinic ke Pelosok, Perluas Akses Kesehatan Masyarakat Bandar Lampung Inovasi Pendidikan Lampung: Guru Ahli Mengajar Lintas Sekolah Tingkatkan Mutu Nasional Bandar Lampung Tragedi Kelengkeng di Lampung Tengah: Siswa 9 Tahun Meninggal, Program MBG Dievaluasi Account KG Media ID: Satu Akun untuk Seluruh Ekosistem Digital Kompas Gramedia Regional Bupati Gowa Sitti Husniah Talenrang Tersangka Pemerasan Perizinan Bangunan dan TPPU Bandar Lampung Puluhan Siswa di Lampung Tengah Diduga Keracunan Makanan Program MBG Account KG Media ID: Satu Akun untuk Kemudahan Akses Seluruh Layanan Digital Ekonomi Dan Bisnis Harga Buyback Emas Antam Anjlok Rp20 Ribu per Gram pada 25 September 2026 Lampung DPRD Lampung Tengah Soroti Perubahan Substansi Perda SOTK Tanpa Pemberitahuan Teknologi Meta Rilis Muse Charm: Gadget Saku Cerdas dengan Asisten AI Revolusioner Berita KAI Siap Gerakkan Rail Clinic ke Pelosok, Perluas Akses Kesehatan Masyarakat Bandar Lampung Inovasi Pendidikan Lampung: Guru Ahli Mengajar Lintas Sekolah Tingkatkan Mutu Nasional Bandar Lampung Tragedi Kelengkeng di Lampung Tengah: Siswa 9 Tahun Meninggal, Program MBG Dievaluasi Account KG Media ID: Satu Akun untuk Seluruh Ekosistem Digital Kompas Gramedia

Modul:Interlinear

Wikimedia module

Dokumentasi modulbuatsegarkan
Anda dapat membuat halaman dokumentasi untuk buat pada modul Scribunto ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
localp={}
localdata=mw.loadData('Module:Interlinear/data')
localgloss_override={}-- untuk singkatan glosarium kustom
localgetArgs=require('Module:Arguments').getArgs
localyesno=require('Module:Yesno')
locallang_data=mw.loadData('Module:Lang/data')
--------------------------
-- Variabel yang hampir global
--------------------------
localglossing_type,displaying_messages,free_translation,msg,buffer
-------------------
-- Pengaturan umum
-------------------
localconf={--pengaturan
WordSeparator=" \n\r\t",-- Jangan ganti dengan %s karena akan memasukkan spasi non-putus (non-breaking spaces)
GlossAbbrPattern="^([Ø0-9A-Z]+)$",-- ini bukan regex penuh, melainkan pola Lua
-- CATATAN: Karakter-karakter berikut harus diformat untuk digunakan dalam set pola.
GlossAbbrBoundary="-.,;:<>‹›/\\~+=%?%s%[%]()%_\127'",
GlossExcludeTable={I=true,},--string yang tidak akan dianggap sebagai singkatan glosarium
GlossExcludePattern='^[0-9][0-9]+$',-- mengecualikan string yang seluruhnya terdiri dari angka
GlossSmallCapsExclude="^[AOPS]$",-- singkatan glosarium yang cocok dengan pola ini tidak akan dirender dengan huruf kapital kecil
GlossingType="label",-- jika diatur ke "label", singkatan glosarium diformat sebagai <abbr> dengan "label" muncul di tooltip
-- jika diatur ke "wikilink", singkatan diformat sebagai pranala wiki ke artikel wikipedia yang relevan
-- jika diatur ke "none", singkatan tidak diformat sama sekali
ErrorCategory="[[Kategori:Halaman dengan kesalahan pada teks interlinear]]",
AmbiguousGlossCategory="[[Kategori:Artikel dengan singkatan glosarium yang ambigu]]",
MessageGlossingError="Terjadi kesalahan pada glosarium interlinear",
combining_gender_numbers="[0-9][0-9]?$",--misal G4 'gender ke-4' atau CL7 'kelas 7'
combining_gender_prefixes={G="gender",CL="class"},
combining_person={["1"]="first person",["2"]="second person",["3"]="third person",},
combining_number={
S="singular",SG="singular",
P="plural",PL="plural",
D="dual",DU="dual",
TRI="trial",PAU="paucal",COL="collective",
IN="inclusive",INC="inclusive",INCL="inclusive",
EX="exclusive",EXC="exclusive",EXCL="exclusive"
},
combining_gender={F="feminine",M="masculine",N="neuter"},
LowerCaseGlosses={
["1sg"]=true,["2sg"]=true,["3sg"]=true,
["1du"]=true,["2du"]=true,["3du"]=true,
["1pl"]=true,["2pl"]=true,["3pl"]=true,
["Fsg"]=true,["Fpl"]=true,["Msg"]=true,["Mpl"]=true,
},-- ini adalah string yang tidak semuanya huruf kapital yang akan dikenali sebagai singkatan glosarium
ErrorHelpLocation="Templat:Interlinear",
}
---------------------
-- Gaya dan kelas CSS
---------------------
conf.style={--gaya CSS
WordDiv="float: left; margin-bottom: 0.3em;",
WordMargin="margin-right: 1em;",
WordP="margin: 0px;",-- gaya untuk elemen kata <p>
GlossAbbr="font-variant: small-caps; font-variant-numeric: lining-nums; text-transform: lowercase; ",-- tidak akan diterapkan ke singkatan glosarium yang mengandung karakter huruf kecil
HiddenText="display: none;",
EndDiv="clear: left; display: block;",-- gaya untuk elemen <div> di akhir tampilan interlinear
ErrorMessage="font-size: inherit",
}
conf.class={--kelas CSS
Interlinear="interlinear",
GlossAbbr="gloss-abbr",
GlossAbbrAmb="gloss-abbr-ambiguous",
GlossAbbrError="gloss-abbr-error",
ErrorMessage="error",
}
---------------------
-- Transklusi bagian
---------------------
localpage_content=nil-- inisialisasi lambat (lazy initialization)
localfunctionget_section(frame,section_name)
ifpage_content==nilthen
localcurrent_title=mw.title.getCurrentTitle()
page_content=current_title:getContent()
end
ifpage_contentthen
ifmw.ustring.find(page_content,section_name,1,true)then
returnframe:preprocess('{{#section:{{FULLPAGENAME}}|'..section_name..'}}')
end
end
return''
end
---------------------
-- Berbagai fungsi kecil
---------------------
localfunctionnormalise(str)
returnmw.ustring.gsub(str,"["..conf.WordSeparator.."]+"," ")
end
localfunctiontidyCss(str)
str=mw.ustring.gsub(str,'^[\"\']*(.-)[\"\']*$',"%1")-- memangkas tanda kutip
ifmw.ustring.sub(str,-1)~=";"thenstr=str..";"end-- menambahkan ";" jika tidak ada
returnstr
end
localfunctionhighlight(text)
iftextthen
return'<span style="color:#C00;font-weight:bold;">'..text..'</span>'
elsereturn""end
end
localfunctiontone_sup(str)
returnmw.ustring.gsub(str,"([^%p%s0-9])([0-9]+)","%1<sup>%2</sup>")
end
localfunctionis_empty(str)-- mengembalikan "false" jika argumennya adalah string yang mengandung karakter selain spasi dll.
ifnotstrthenreturntrueend
ifmw.ustring.find(str,"[^"..conf.WordSeparator.."]")
thenreturnfalse
elsereturntrueend
end
localfunctionhelp_link(anchor)
ifanchorthen
return" ([["..conf.ErrorHelpLocation.."#"..anchor.."|bantuan]])"
elsereturn""end
end
-- berikut ini adalah bagian dari uji coba penerapan transliterasi otomatis:
localfunctiontransliterate(str,lang_from,lang_to,scheme)
locallookup={grc={module='Module:Ancient Greek',funct="transliterate",}}
ifnotlang_fromthen
msg:add("error","Bahasa sumber untuk transliterasi belum diatur")
else
localt=lookup[lang_from]
iftthen
localmodule=require(t.module)
returnmodule[t.funct](str)
elsemsg:add("error","Tidak dapat menemukan pentransliterasi untuk bahasa '"..lang_from.."'")
end
end
return""
end-- akhir blok uji coba
--------------------
-- Dua fungsi berikut memperbarui pengaturan glosarium berdasarkan argumen templat 
-- yang diterima. set_global_glossing_settings() memperbarui pengaturan global
-- yang berlaku untuk semua singkatan glosarium. set_glossing_type()
-- mengembalikan tipe glosarium, yang mana dapat bervariasi antar baris.
--------------------
localfunctionset_global_glossing_settings(a)
localstyle=""
ifa.stylethenstyle=tidyCss(a.style)end
ifa.underline=="no"then
style=style.."text-decoration: none;"end
ifa.small_caps=="no"then
style=style.."font-variant:normal; text-transform: none;"end
ifstyle~=""thenconf.style.GlossAbbr=conf.style.GlossAbbr..styleend
end
localfunctionset_glossing_type(glossing)
ifglossingthen
localGlossingType
glossing=mw.ustring.lower(mw.text.trim(glossing))
ifmw.ustring.find(glossing,'link')then
GlossingType="wikilink"
elseifmw.ustring.find(glossing,'label')
ormw.ustring.find(glossing,'no link')then
GlossingType='label'
elseifmw.ustring.find(glossing,'no abbr')then
GlossingType="no abbr"
elseifyesno(glossing)==falsethen
GlossingType=nil
elseifyesno(glossing)then
GlossingType=conf.GlossingType
else
msg:add('error','Tipe glosarium "'..glossing..'" tidak dikenali')end
returnGlossingType
elseerror("set_glossing_type: 'glossing' bernilai nil atau false",2)
end
end
localfunctionset_custom_glosses(list)
localabbs=mw.text.split(list,'[;\n\t]')
for_,vinpairs(abbs)do
localgloss=mw.text.split(v,':')
locala=mw.text.trim(gloss[1])
ifaanda~=""then
gloss_override[a]={}
gloss_override[a].expansion=gloss[2]
gloss_override[a].wikipage=gloss[3]
end
end
end
---------------------
-- Objek UserMessages berisi dan memproses pesan kesalahan serta peringatan
---------------------
localUserMessages={errors={},warnings={},gloss_messages={}}
functionUserMessages:add(msgtype,text,gloss)
ifmsgtype=="gloss_message"then
self.gloss_messages[gloss]=text
elseifmsgtype=="warning"then
table.insert(self.warnings,text)
elseifmsgtype=="non-repeating error"then
self.errors.nre=text
elseifmsgtype=="ambiguous gloss"then
self.if_ambiguous_glosses=true
elseifmsgtype=="error"then
table.insert(self.errors,text)
elsereturnerror("UserMessages:add(): tipe pesan tidak diketahui",2)
end
end
functionUserMessages:print_errors()
localout=""
localnamespace=mw.title.getCurrentTitle().namespace
ifnext(self.errors)orself.warnings[1]then
localerr_span=mw.html.create("span")
err_span:attr("style",conf.style.ErrorMessage)
err_span:addClass(conf.class.ErrorMessage)
for_,vinpairs(self.errors)do
err_span:wikitext(" "..v..";")end
ifnamespace%2==0andnamespace~=2-- ruang nama non-pembicaraan, tidak termasuk halaman pengguna; jika memodifikasi tolong perbarui deskripsi di halaman kategori
thenerr_span:wikitext(conf.ErrorCategory)
end
out=tostring(err_span)
mw.addWarning(conf.MessageGlossingError)
end
ifself.if_ambiguous_glossesthen
ifnamespace==0-- ruang nama artikel
thenout=out..conf.AmbiguousGlossCategory-- kategori ini hanya akan melacak artikel
end
end
returnout
end
functionUserMessages:print_warnings()
localout=""
-- Pesan dan peringatan hanya ditampilkan jika halaman dilihat dalam mode "pratayang" (preview):
ifdisplaying_messagesand(next(self.gloss_messages)ornext(self.warnings))then
localdiv=mw.html.create("div")
div:addClass("interlinear-preview-warning")
:cssText('border: 1px solid #a2a9b1; background-color: #f8f9fa; width: 80%; padding: 0.2em;')
:wikitext("<i>Kotak pesan ini hanya ditampilkan pada mode pratayang:</i>")
:newline()
for_,vinipairs(self.warnings)do
localp=div:tag("p")
p:addClass(conf.class.ErrorMessage)
p:attr("style",conf.style.ErrorMessage)
p:wikitext(v)
end
ifself.gloss_messagesthen
div:wikitext("<p>  Untuk mengubah ekspansi bawaan berikut, lihat [[Templat:Interlinear/doc#Custom abbreviations|dokumentasi templat]]:</p>")
end
for_,vinpairs(self.gloss_messages)do
div:wikitext("<p>"..v.."</p>")
end
out=out.."\n\n"..tostring(div)
end
returnout
end
---------------------
-- gloss_lookup() menerima singkatan glosarium dan mencoba mengungkap maknanya.
---------------------
localfunctiongloss_lookup(a,label,wikilink)
local_label,_wikilink,_lookup,source=nil,nil,nil,nil
ifgloss_override[a]then
_lookup=gloss_override[a]
source="local"
elseifdata.abbreviations[a]then_lookup=data.abbreviations[a]end
if_lookupand_lookup.expansion~=""then
_label,_wikilink=_lookup.expansion,_lookup.wikipage
else
localprefix=mw.ustring.sub(a,1,1)
localsuffix=mw.ustring.sub(a,2)
ifconf.combining_person[prefix]then-- apakah bentuknya 1PL atau 3FS?
_label=conf.combining_person[prefix]
local_suffix=conf.combining_number[suffix]orconf.combining_gender[suffix]
if_suffixthen
_label=_label..", ".._suffix
else
localsuffix1=mw.ustring.sub(suffix,1,1)
localsuffix2=mw.ustring.sub(suffix,2)
ifconf.combining_gender[suffix1]
andconf.combining_number[suffix2]then
_label=_label..", "..conf.combining_gender[suffix1]..", "..conf.combining_number[suffix2]
else_label=nilend
end
elseifmw.ustring.match(suffix,conf.combining_gender_numbers)then-- kasus seperti G4 = gender 4
local_i,_j=mw.ustring.find(a,conf.combining_gender_numbers)
local_pre=mw.ustring.sub(a,1,_i-1)
local_suff=mw.ustring.sub(a,_i)
ifconf.combining_gender_prefixes[_pre]then
_label=conf.combining_gender_prefixes[_pre].." ".._suff
end
elseifprefix=="N"then-- menangani kasus seperti NPST = non-past (masa nonlampau)
locals=gloss_override[suffix]ordata.abbreviations[suffix]
ifs~=nilandnots.ExcludeNegationthen
_label="non-"..s.expansion
_wikilink=s.wikipage
end
s=nil
end
end
if_label==""then_label=nilend
if_wikilink==""then_wikilink=nilend
ifnotlabelthenlabel=_labelend
ifnotwikilinkthenwikilink=_wikilinkend
returnlabel,wikilink,source
end
---------------------
-- format_gloss() memanggil gloss_lookup() untuk mencari makna singkatan
-- glosarium, lalu kemudian diformat
---------------------
localfunctionformat_gloss(gloss,label,wikilink)
ifstring.sub(gloss,1,3)=="000"then-- memeriksa komponen umum dari penanda strip yang terekspos (lihat [[:mw:Strip marker]])
returngloss
end
localgloss2=mw.ustring.gsub(gloss,"<.->","")-- menghapus sisa elemen html (fluff)
gloss2=mw.ustring.gsub(gloss2,"%'%'+","")-- menghapus pemformatan tebal/miring wiki
gloss2=mw.text.trim(mw.ustring.upper(gloss2))
ifnot(labelorwikilink)
or(notlabelandglossing_type=="label")
or(notwikilinkandglossing_type=="wikilink")
then
ifglossing_type~="no abbr"
thenlabel,wikilink,source=gloss_lookup(gloss2,label,wikilink)
end
end
localgloss_node
ifglossing_type=="no abbr"
thengloss_node=mw.html.create("span")
elsegloss_node=mw.html.create("abbr")end
gloss_node:addClass(conf.class.GlossAbbr)
iflabelorwikilinkthen
ifnotmw.ustring.match(gloss,"%l")-- mengecualikan glosarium yang mengandung huruf kecil
andnotmw.ustring.match(gloss,conf.GlossSmallCapsExclude)-- dan juga mengecualikan A, O dll. agar tidak dirender dengan huruf kapital kecil
thengloss_node:attr("style",conf.style.GlossAbbr)
end
localabbr_label
iflabelthenabbr_label=label
elseabbr_label=wikilinkend
gloss_node:attr("title",abbr_label)
ifsource~="local"anddata.abbreviations[gloss2]then
ifdata.abbreviations[gloss2].ambiguousthen
gloss_node:addClass(conf.class.GlossAbbrAmb)
msg:add("ambiguous gloss")
end
end
ifglossing_type=="wikilink"andwikilink
thengloss_node:wikitext("[[",wikilink,"|",gloss,"]]")
elsegloss_node:wikitext(gloss)end
ifsource~="local"anddisplaying_messagesthen-- mencatat pencarian glosarium:
localmessage=""
iflabelthen
message="mengasumsikan "..gloss2.." bermakna \""..abbr_label.."\";"end
ifglossing_type=="wikilink"andwikilinkthen
message=message.." menautkan ke [["..wikilink.."]];"
end
msg:add("gloss_message",message,gloss)
end
elseifglossing_type=="no abbr"
thengloss_node
:attr("style",conf.style.GlossAbbr)
:wikitext(gloss)
else
ifdisplaying_messagesthen
msg:add("warning","Singkatan glosarium "..highlight(gloss2).."  tidak dikenali"..help_link("gloss abbr"))
end
msg:add("non-repeating error","Singkatan glosarium tidak diketahui"..help_link("gloss abbr"))
gloss_node
:addClass(conf.class.GlossAbbrError)
:addClass("error")
:css("font-size","100%")
:attr("title",gloss2..": singkatan glosarium tidak ditemukan")
:attr("style",conf.style.ErrorMessage)
:wikitext(gloss)
end
returntostring(gloss_node)
end
---------------------
-- find_gloss() mengurai sebuah kata menjadi morfem-morfem, dan memanggil format_gloss()
-- untuk apa pun yang terlihat seperti singkatan glosarium.
---------------------
localfunctionfind_gloss(word)
localfunctionscan_gloss(boundary,gloss_abbr)-- memeriksa suatu morfem apakah itu merupakan singkatan glosarium
if(mw.ustring.match(gloss_abbr,conf.GlossAbbrPattern)
orconf.LowerCaseGlosses[gloss_abbr])
andnot(conf.GlossExcludeTable[gloss_abbr]
ormw.ustring.match(gloss_abbr,conf.GlossExcludePattern))
thengloss_abbr=format_gloss(gloss_abbr)
end
returnboundary..gloss_abbr
end
localword=mw.text.decode(word,true)
ifword=="I"-- untuk kasus kata bahasa Inggris "I", kata ganti orang pertama tunggal (1SG)
thenreturnwordend
localpattern="(["..conf.GlossAbbrBoundary.."]?)([^"..conf.GlossAbbrBoundary.."]+)"
word=mw.ustring.gsub(word,pattern,scan_gloss)-- memisahkan menjadi morfem-morfem
returnword
end
---------------------
-- Tujuan utama dari fungsi parse() yang rumit ini adalah memisahkan baris menjadi kata-kata dan untuk setiap kata
-- yang memenuhi syarat memanggil find_gloss(). Parser menghasilkan kata-kata individual (dengan menerapkan format singkatan glosarium apa pun).
-- Pekerjaan sederhana pemisahan spasi menjadi rumit karena a) fakta bahwa masukan dapat berisi
-- spasi di dalam berbagai elemen html yang merupakan hasil penerapan berbagai templat pemformatan;
-- dan b) kebutuhan untuk mengenali keluaran templat yang memformat singkatan glosarium kustom
-- (dan karenanya melewatkan melemparkannya ke find_gloss).
---------------------
localfunctionparse(cline,i,tags_found,ifglossing)
localfunctionissue_error(message,culprit)
UserMessages:add("error",message..": ''"..mw.ustring.sub(cline.whole,1,i-1).."'''"..culprit.."'''''")
end
ifi>cline.lengththenreturniend--ini hanya akan dipicu jika baris saat ini memiliki lebih sedikit kata daripada baris 1
localnext_step,j,_,chunk
localprobe=mw.ustring.sub(cline.whole,i,i)
ifmw.ustring.match(probe,"["..conf.WordSeparator.."]")andtags_found==0
thennext_step=i-1
elseifprobe=="["then--Pranala wiki?
ifmw.ustring.sub(cline.whole,i+1,i+1)=="["then
_,j,chunk=mw.ustring.find(cline.whole,"(%[%[.-%]%])",i)
elsechunk="[";j=iend--kalau begitu bukan pranala wiki
buffer=buffer..chunk
next_step=parse(cline,j+1,tags_found,ifglossing)
elseifprobe=="{"andtags_found==0then--tanda kurung kurawal mengapit serangkaian kata untuk diperlakukan sebagai satu kesatuan
_,j,chunk=mw.ustring.find(cline.whole,"(.-)(})",i+1)
ifnotchunkthen
issue_error("Kurung kurawal tidak ditutup","{")
chunk=highlight("{");j=i
elseififglossing==truethen
chunk=find_gloss(chunk)
else
ifcline.tone_supthenchunk=tone_sup(chunk)end
end
buffer=buffer..chunk
next_step=parse(cline,j+1,tags_found,ifglossing)
elseifprobe=="<"then-- Kita menemui tag HTML. Apa yang harus dilakukan sekarang?
local_,j,chunk=mw.ustring.find(cline.whole,"(<.->)",i)
ifnotchunkthen
issue_error("Kurung sudut tidak ditutup","<")
chunk=highlight("<");j=i
elseifmw.ustring.sub(cline.whole,i,i+1)=="</"then-- Ini adalah tag PENUTUP
ifcline.glossing
andifglossing==false
andmw.ustring.match(chunk,"</abbr>")
thenifglossing=trueend
tags_found=tags_found-1
elseifnotmw.ustring.match(chunk,"/>$")-- Ini adalah tag PEMBUKA, kecuali ia membuka elemen yang self-closing (dalam hal ini elemen diabaikan)
thenififglossing==true-- berikut ini memeriksa keluaran dari {{ggl}}:
andmw.ustring.find(chunk,conf.class.GlossAbbr,1,true)-- penting bahwa fungsi "find" menggunakan string literal dan bukan pola
thenifglossing=falseend
tags_found=tags_found+1
end
buffer=buffer..chunk
next_step=parse(cline,j+1,tags_found,ifglossing)
else-- Tidak ada tag HTML, jadi kita hanya perlu mencari di mana kata tersebut berakhir
local_,k,chunk=mw.ustring.find(cline.whole,"(..-)([ <[])",i)
ifkthen--teks biasa
ififglossing==truethen
buffer=buffer..find_gloss(chunk)
else
ifcline.tone_supthenchunk=tone_sup(chunk)end
buffer=buffer..chunk
end
next_step=parse(cline,k,tags_found,ifglossing)
else-- mencapai akhir string
ififglossing==truethen
chunk=find_gloss(mw.ustring.sub(cline.whole,i))
else
chunk=mw.ustring.sub(cline.whole,i)
ifcline.tone_supthenchunk=tone_sup(chunk)end
end
buffer=buffer..chunk
next_step=cline.length
end
end
returnnext_step
end
--------------------
-- Fungsi berikut dipanggil oleh Templat:gcl dan digunakan untuk memformat singkatan glosarium individual
--------------------
functionp.gcl(frame)
localargs=getArgs(frame,{
trim=true,
removeBlanks=false,
parentOnly=true,
wrappers={'Template:Grammatical category label'},
})
msg=UserMessages
set_global_glossing_settings{style=args.style,underline=args.underline,small_caps=args['small-caps']}
ifnotargs.glossingthen
glossing_type=conf.GlossingType-- variabel global
elseglossing_type=set_glossing_type(args.glossing)
end
localgloss,label,wikilink=args[1],args[2],args[3]
ifnotglossthenUserMessages:add("error","Tidak ada glosarium yang diberikan")
returnUserMessages:print()end
ifwikilinkandnotargs.glossingthen-- jika pranala wiki diberikan dan glosarium tidak diatur ke 'label'...
glossing_type='wikilink'end--      .. maka pranala wiki akan diformat sebagaimana mestinya
iflabel==""thenlabel=nilend
ifwikilink==""thenwikilink=nilend
localresult=format_gloss(gloss,label,wikilink)
returnresult
end
--------------------
-- Berikut ini adalah fungsi yang dipanggil oleh Templat:Interlinear.
-- Fungsi ini memproses argumen templat, lalu memanggil parse() untuk memisahkan baris masukan menjadi kata-kata
-- dan kemudian membangun html keluaran.
--------------------
functionp.interlinearise(frame)
---------------------
-- Menyiapkan argumen
---------------------
localif_auto_translit=false
localargs=getArgs(frame,{-- konfigurasi untuk Module:Arguments
trim=true,
removeBlanks=false,
parentFirst=true,
wrappers={'Template:Interlinear','Template:Fs interlinear'},
})
localtemplate_name=frame:getParent():getTitle()
iftemplate_name=='Template:Fs interlinear'then
args.italics1=args.italics1or"no"
args.italics2=args.italics2or"yes"
args.glossing3=args.glossing3or"yes"
ifargs.langandnotargs.lang2thenargs.lang2=args.lang.."-Latn"end
ifargs.translandnotargs.transl2thenargs.transl2=args.translend
if_auto_translit=true
end
localrevid=frame:preprocess("{{REVISIONID}}")
ifrevid==""then
ifnotargs['display-messages']oryesno(args['display-messages'])then
displaying_messages=trueend-- pesan hanya akan ditampilkan pada mode pratayang
end
msg=UserMessages
localline={}
localfunctionset_italics(n)
line[n].attr.style=line[n].attr.style.."font-style: italic;"
line[n].tone_sup=true-- angka tunggal diasumsikan sebagai penanda nada sehingga akan dijadikan superskrip
ifargs['tone-superscripting']andnotyesno(args['tone-superscripting'])
thenline[n].tone_sup=falseend
end
ifargs.glossingthen-- parameter glossing= menetapkan tipe glosarium bawaan
local_gl=set_glossing_type(args.glossing)
if_glthenconf.GlossingType=_glend
end
--ini mencari daftar singkatan glosarium pada halaman yang mentransklusikan templat:
local_ablist_section=get_section(frame,'list-of-glossing-abbreviations')
if_ablist_sectionand_ablist_section~=""then
local_a=mw.ustring.gsub(_ablist_section,'</?div [^\n]*>','')-- menghilangkan tag div
set_custom_glosses(_a)
end
--dan ini mencari daftar singkatan yang ditetapkan di dalam templat:
local_ablist=args.abbreviations
if_ablistand_ablist~=""
thenset_custom_glosses(_ablist)end
local_ablist=args.ablist
if_ablistand_ablist~=""
thenset_custom_glosses(_ablist)end
local_spacing=tonumber(args.spacing)
if_spacingand_spacing<=20
thenconf.style.WordDiv=conf.style.WordDiv..'margin-right: '.._spacing..'em;'
elseconf.style.WordDiv=conf.style.WordDiv..conf.style.WordMargin
end
localoffset,last_line=0,0
forj,vinipairs(args)do-- mengiterasi parameter tanpa nama dari templat
last_line=last_line+1
ifis_empty(v)
thenoffset=offset+1
else
locali=j-offset
line[i]={}
v=normalise(v)
-- berikut ini adalah bagian dari uji coba penerapan transliterasi otomatis:
ifif_auto_translitandv=="auto"andi>1then
localsource_line=line[i-1]
localsrc_lang=source_line.lang
ifnotsrc_langthensrc_lang=args.langend
ifsrc_langthen
v=transliterate(source_line.whole,src_lang)
elsev="";msg:add("error","Tidak ada bahasa yang ditentukan untuk transliterasi otomatis")
end
end-- akhir blok uji coba
line[i].whole=v
line[i].length=mw.ustring.len(v)
local_c=args["c"..i]
if_cand_c~=""then
line.hasComments=true
line[i].c=_c
end
---menyiapkan argumen gaya----
line[i].class=""
local_style=args["style"..i]
ifnot_stylethen_style=""
else_style=tidyCss(_style)end
--line[i].attr menyimpan atribut untuk elemen <p> yang mengapit kata-kata pada baris i
line[i].attr={style=conf.style.WordP.._style}
local_lang=args["lang"..i]
if_langand#_lang>1then
line[i].lang=_lang
else_lang=args.lang
if_langand#_lang>1andi==1then-- jika parameter lang= diberikan, diasumsikan berlaku untuk baris 1
line[i].lang=_lang
end
end
line[i].attr.lang=line[i].lang
--berikut ini meniru perilaku {{Bo-textonly}} (lihat Template talk:Fs interlinear#Tibetan):
iftemplate_name=='Template:Fs interlinear'then
if_lang=="bo"andi==1then
line[1].class=line[1].class.." uchen"
line[1].attr.style=line[1].attr.style.."font-size:1.25em; word-wrap:break-word;"
end
end
--berikut ini meniru perilaku {{Spell-nv}}:
iftemplate_name=='Template:Interlinear'then
if_lang=="nv"andi==1then
line[1].attr.style=line[1].attr.style.."font-family: Aboriginal Sans, DejaVu Sans, Calibri, Arial Unicode MS, sans-serif;"
end
end
ifyesno(args["italics"..i])then
set_italics(i)
end
local_transl=args["transl"..i]
if_transland#_transl>1then
_transl=mw.ustring.lower(_transl)
local_lookup=lang_data.translit_title_table[_transl]
if_lookupthen
if_langand_lookup[_lang]then
_transl=_lookup[_lang]
else_transl=_lookup.default
end
if_translthen
line[i].attr.title=_transl
end
elsemsg:add("error","Skema transliterasi '".._transl.."' tidak dikenali")
end
end
local_glossing=args["glossing"..i]
if_glossingthen
line[i].glossing=set_glossing_type(_glossing)
-- Jangan menganggap pengaturan glosarium bawaan sebagai kustom.
ifnot((i==1andnotyesno(_glossing))or(i==2andyesno(_glossing)))then
line.HasCustomGlossing=true
end
end
local_ipa=args['ipa'..i]
ifyesno(_ipa)then
line[i].class="IPA"
end
local_class=args['class'..i]
if_classthen
line[i].class=line[i].class.." ".._class
end
ifline[i].class==""
thenline[i].class=nilend
end-- mengakhiri pernyataan if pertama di dalam loop
end-- mengakhiri siklus FOR
localline_count=#line
ifline_count==0then
msg:add("error",template_name..": tidak ada baris yang diberikan.")
returnmsg:print_errors()
end
ifline_count>1then
local_italics=args.italics
localn=tonumber(_italics)
ifnandn>0then
set_italics(n)
elseifnot(_italicsandnotyesno(_italics))andnot(args["italics1"]andnotyesno(args["italics1"]))then
set_italics(1)-- secara bawaan, baris pertama akan dicetak miring, kecuali italics=no atau italics1=no
end
-- parameter tanpa nama yang terakhir diasumsikan sebagai terjemahan bebas:
free_translation=args[last_line]
ifnotis_empty(free_translation)then
line[line_count]=nilend--... dan dengan demikian dikecualikan dari proses interlinearisasi
end
-- Jika glosarium tidak ditentukan untuk baris mana pun, maka secara bawaan dipilih untuk terjadi
-- pada baris kedua, kecuali hanya satu baris yang diberikan, dalam hal ini
-- diasumsikan bahwa baris tersebut yang berisi glosarium gramatikal
ifyesno(args.glossing)==falsethen
line.HasCustomGlossing=true
end
ifnotline.HasCustomGlossingthen
ifline_count==1then
line[1].glossing=conf.GlossingType
elseifline[2]then
line[2].glossing=conf.GlossingType
end
end
set_global_glossing_settings{style=args['glossing-style'],underline=args.underline,small_caps=args['small-caps']}
---------------------
-- Mensegmentasi baris menjadi kata-kata
---------------------
fori,vinipairs(line)do
localifglossing=false
ifline[i].glossingthen
ifglossing=true-- jika bernilai true, parser akan mencoba memformat singkatan glosarium pada baris saat ini
glossing_type=line[i].glossing-- tentu saja merupakan variabel global
end
localwc,n=1,1
line[i].words={}
whilen<=line[i].lengthdo
buffer=""
n=parse(line[i],n,0,ifglossing)+2
line[i].words[wc]=buffer
wc=wc+1
end
end
----Memeriksa ketidaksesuaian jumlah kata antarbaris----
localnumber_of_words,mismatch_found=0,false
fori,vinipairs(line)do-- mencari jumlah kata maksimum pada setiap baris
localwc=#line[i].words
ifwc~=number_of_wordsthen
ifi~=1andwc~=0then
mismatch_found=true
end
ifwc>number_of_wordsthen
number_of_words=wc
end
end
end
----Menangani ketidaksesuaian---
ifmismatch_foundthen
localerror_text="Ketidaksesuaian jumlah kata antarbaris: "
fori,vinipairs(line)do
localwc=#line[i].words
error_text=error_text..wc.." kata dalam baris "..i..", "
ifwc~=number_of_wordsthen
forcurrent_word=wc+1,number_of_wordsdo
line[i].words[current_word]="&nbsp;"
end
end
end
ifstring.sub(error_text,-2)==", "
thenerror_text=string.sub(error_text,1,#error_text-2).." "
end
error_text=error_text..help_link("mismatch")
UserMessages:add("error",error_text)
end
---------------------
-- Membangun HTML
---------------------
---- Jika hanya satu baris yang diberikan, format sebagai teks sebaris (inline)
ifline_count==1then
localspan=mw.html.create('span')
span:attr(line[1].attr)
forwi=1,number_of_wordsdo
localspace
ifwi<number_of_wordsthenspace=" "elsespace=""end
span:wikitext(line[1].words[wi]..space)
end
returntostring(span)
end
---- Lebih dari satu baris yang diberikan, jadi kita akan menghasilkan tampilan interlinear
localdiv=mw.html.create("div")
div:addClass(conf.class.Interlinear)
-- Untuk sesuatu yang akan ditampilkan di margin kiri, seperti penomoran contoh
localnumber,indent=nil,nil
ifargs.numberandargs.number~=""
thennumber=args.numberend
ifargs.indentandargs.indent~=""
thenindent=args.indentend
ifindentornumberthen
ifnotindentthenindent="4"end--nilai bawaan
div:css("margin-left",indent..'em')
ifnumberthen
div:tag("div")
:css("position","absolute")
:css("left","1em")
:wikitext(args.number)
end
end
ifargs.boxandargs.box~=""then
div:css("background-color","#f8f9fa")
:css("border","1px solid #eaecf0")
:css("padding","1em")end
ifargs.topandargs.top~=""then--baris yang ditampilkan di atas blok interlinear
div:tag("div")
:wikitext(args.top)
end
-- Memproduksi blok interlinear
forwi=1,number_of_wordsdo
localdiv2=div:tag("div")
:attr("style",conf.style.WordDiv)
fori,_inipairs(line)do
ifline[i].whole~=""then-- melewati baris kosong
localp=div2:tag("p")
p:attr(line[i].attr)
ifline[i].classthen
p:addClass(line[i].class)
end
local_text=line[i].words[wi]
if_text==""or_text==" "
then_text="&nbsp;"end-- elemen <p> tanpa konten mengacaukan tampilan interlinear
p:wikitext(_text)
end
end
end
--- Jika ada "komentar" yang telah ditentukan, tambahkan di akhir setiap baris
ifline.hasCommentsthen
localdivc=div:tag("div")
:attr("style",conf.style.WordDiv)
fori,_inipairs(line)do
localp=divc:tag("p")
p:attr("style",conf.style.WordP)
ifline[i].cthen
p:wikitext(line[i].c)
elsep:wikitext("&nbsp;")
end
end
end
--Tambahkan baris tersembunyi yang berisi konten dari setiap baris teks interlinear: ini untuk aksesibilitas
fori,vinipairs(line)do
localhidden_line=div:tag("p")
hidden_line:attr("style",conf.style.HiddenText)
:wikitext(v.whole)
end
-- Memformat terjemahan bebas
localft_line=div:tag("p")
iffree_translationandfree_translation~=""then
ft_line:attr("style","clear: left;")
ft_line:wikitext(free_translation)
end
ifargs.bottomandargs.bottom~=""
thenlocalbottom=div:tag('p')
bottom:css('margin-top','0')
bottom:wikitext(args.bottom)
end
ft_line:node(msg:print_errors())-- untuk pesan kesalahan
localend_div=div:tag("div")
end_div:attr("style",conf.style.EndDiv)
div:newline()
localtemp_track=""
iflast_line==2
thentemp_track="[[Kategori:Halaman dengan glosarium interlinear menggunakan dua parameter tanpa nama]]"
end
iflast_line>3andtemplate_name~='Templat:Fs interlinear'
thentemp_track="[[Kategori:Halaman dengan glosarium interlinear yang menggunakan lebih dari tiga parameter tanpa nama]]"
end
returntostring(div)..temp_track..msg:print_warnings()
end
returnp
Konten disalin dari Wikipedia Bahasa Indonesia (lisensi CC BY-SA) Lihat versi asli di Wikipedia

Rekomendasi Pilihan