local p = {};	--Setiap modul Lua di Wikipedia harus dimulai dengan mendefinisikan
				  --sebuah variabel yang akan memegang fungsinya yang dapat diakses
				  --secara eksternal.
				  --Variabel-variabel tersebut dapat dinamai sesuai keinginan Anda
				  --dan mungkin mengandung bermacam-macam data maupun fungsi juga.
p.hello = function( frame )		--Menambahkan sebuah fungsi ke "p".
								  --Fungsi tersebut dapat dipanggil di Wikipedia
								  --melalui perintah #invoke.
								  --"frame" akan berisi data yang dikirim Wikipedia
								  --ketika fungsi ini dijalankan.
								-- 'Hello' adalah nama yang Anda pilih. Nama yang sama dirujuk ketika modul digunakan.

	local str = "Hello World!"	--Mendeklarasikan variabel lokal dan mengaturnya
								--sama dengan "Hello World!"

	return str	--Pemberitahuan untuk keluar dari fungsi ini dan mengirimkan
				--informasi di "str" kembali ke Wikipedia.

end	--akhir dari fungsi "hello"
function p.hello_to(frame)		--Menambahkan fungsi lain
	local name = frame.args[1]	--Untuk mengakses argumen yang diteruskan ke modul,
								--gunakan `frame.args`, `frame.args[1]` merujuk
								--kepada parameter tanpa nama pertama yang diberikan
								--kepada modul.
	return "Halo, " .. name .. "!"	-- `..` menggabungkan string. Ini akan memunculkan
									-- salam yang disesuaikan dengan nama yang diberikan,
									-- seperti "Halo, Fred!"
end
function p.count_fruit(frame)
	local num_bananas = frame.args.bananas -- Argumen bernama ({{#invoke:Example|count_fruit|foo=bar}}) yang juga 
	local num_apples = frame.args.apples   -- diakses dengan mengindeks `frame.args` dari nama (`frame.args["bananas"]`, or)
										   -- ekuivalen dengan `frame.args.bananas`.
	return 'Aku punya ' .. num_bananas .. ' pisang dan ' .. num_apples .. ' apel'
										   -- Sama seperti yang di atas, menggabungkan
										   -- sekelompok string bersama-sama untuk
										   -- menghasilkan sebuah kalimat berdasarkan
										   -- argumen yang diberikan.
end

local function lucky(a, b) -- Seseorang dapat mendefinisikan fungsi khusus untuk digunakan. Di sini kita definisikan fungsi 'lucky' yang mempunyai dua input a dan b. Nama tersebut dapat sesuai keinginan Anda.
	if b == 'yeah' then -- Kondisi: jika b adalah string 'yeah'. String membutuhkan tanda kutip. Jangan lupa berikan 'then'.
		return a .. ' adalah angka keberuntunganku.' -- Outputnya 'a adalah angka keberuntunganku.' jika kondisinya sesuai dengan yang di atas. Penggabungan string ditandai dengan 2 titik.
	else -- Jika tidak ada kondisi yang sesuai, yaitu apabila b berisi selain 'yeah', output ditentukan di baris selanjutnya. 'else' seharusnya tidak diikuti 'then'.
		return a -- Hanya ber-output a.
	end -- Bagian 'if' harus diakhiri dengan 'end'.
end -- Sebagaimana 'function' pada umumnya.

function p.Name2(frame)
	-- Lima baris berikutnya sebagian besar untuk mempermudah saja dan dapat digunakan untuk modul Anda.
	local pf = frame:getParent().args -- Baris ini memperbolehkan parameter templat digunakan di kode ini dengan mudah. Tanda sama dengan dipakai untuk mendefinisikan variabel. 'pf' dapat diganti dengan kata yang Anda pilih.
	local f = frame.args -- Baris ini memperbolehkan parameter dari {{#invoke:}} dipakai dengan mudah. 'f' dapat diganti dengan kata yang Anda pilih.
	local M = f[1] or pf[1] -- f[1] dan pf[1], yang baru saja didefinisikan, merujuk kepada parameter pertama. Baris ini disingkat 'M' untuk menggabungkannya. Anda dapat memakai nama asli variabel.
	local m = f[2] or pf[2] -- Parameter kedua yang disingkat 'm'.
	local l = f.lucky or pf.lucky -- Parameter bernama 'lucky' disingkat sebagai l. Perhatikan bahwa sintaksnya berbeda dengan parameter tanpa nama.
	if m == nil then -- Jika parameter kedua tidak dipakai.
		return 'Kesepian' -- Outputkan string 'Kesepian' jika kondisi pertama sesuai.
	elseif M > m then -- Jika kondisi pertama tak sesuai, baris ini menguji salah satu kondisi kedua: apabila M lebih besar dari m.
		return lucky(M - m, l) -- Apabila kondisi sesuai, dihitung selisihnya dan diteruskan ke fungsi yang didefinisikan sendiri bersama dengan l. Outputnya tergantung apakah l diatur ke 'yeah'.
	else
		return 'Be positive!'
	end
end

return p    --Semua modul diakhiri dengan me-return variabelnya yang berisi fungsinya ke Wikipedia.
-- Sekarang kita bisa gunakan modulnya dengan memanggil {{#invoke: Example | hello }},
-- {{#invoke: Example | hello_to | foo }}, atau {{#invoke:Example|count_fruit|bananas=5|apples=6}}
-- Perhatikan bahwa bagian pertama invoke adalah nama halaman wiki dari Modul,
-- dan bagian kedua adalah nama salah satu fungsi yang melekat kepada 
-- variabel yang Anda return-kan.

-- Fungsi "print" tidak diperbolehkan di Wikipedia. Semua output diselesaikan
-- melalui string "returned" (dikembalikan) ke Wikipedia.