Deskripsi Data

10.1 Deskripsi Data

Halaman Lua terdiri dari database yang berisi contoh proyek yang ada didunia menggunakan Lua. Kita menggambarkan setiap masukan dalam database menggunakan konstruktor dalam jalur auto-dokumentasi,sebagai contoh lihat dibawah ini:

entry{ title = "Tecgraf", org = "Computer Graphics Technology Group, PUC-Rio", url = "http://www.tecgraf.puc-rio.br/", contact = "Waldemar Celes", description = [[

TeCGraf is the result of a partnership between PUC-

Rio,

the Pontifical Catholic University of Rio de Janeiro, and <A HREF="http://www.petrobras.com.br/">PETROBRAS</A>,

the Brazilian Oil Company. TeCGraf is Lua's birthplace, and the language has been used there since 1993. Currently, more than thirty programmers in TeCGraf

use

Lua regularly; they have written more than two hundred Lua regularly; they have written more than two hundred

Yang menarik dari penggambaran ini adalah sebuah file dengan sebuah urutan beberapa Program Lua,pemanggilan akan dilakukan berurutan ke sebuah fungsi entri.menggunakan tabel sebagai argumen pemanggil.

Tujuan kita adalah menulis sebuah program yang menampilkan data dalam HTML,jadi ini akan ditampilkan dihalaman web http://www.lua.org/uses.html . Karena banyak proyek,halaman pertama menampilkan daftar seluruh judul proyek dan kemudian menampilkan detail setiap proyek,hasil dari program seperti ini:

<HTML> <HEAD><TITLE>Projects using Lua</TITLE></HEAD> <BODY BGCOLOR="#FFFFFF"> Here are brief descriptions of some projects around the world that use <A HREF="home.html">Lua</A>. <BR> <UL> <LI><A HREF="#1">TeCGraf</A> <LI> ... </UL>

<H3> <A NAME="1" HREF="http://www.tecgraf.puc-rio.br/">TeCGraf</A> <BR> <SMALL><EM>Computer Graphics Technology Group, PUC-Rio</EM></SMALL> </H3>

TeCGraf is the result of a partnership between ... distributed among dozens of final products.<P> Contact:

Waldemar Celes <A NAME="2"></A><HR> ... </BODY></HTML>

Untuk membaca data. Seluruh program memberkan definisi sebenarnya untuk entry,dan menjalankan file data sebagai sebuah program(dengan dofile). Catatan bahwa kita mencari entri

2 kali,pertama untuk daftar judul,dan kedua untuk deskripsi proyek. Pendekatan pertama seharusnya mengumpulkan seluruh entry dalam sebuah array. Tetapi,karena Lua mengkompilasi begitu cepat,disini ada solusi kedua yang atraktif: Jalankan file data 2 kali,setiap kali jalan dengan perbedaan definisi untuk entry. Kita mengikuti pendekatan ini dalam program selanjutnya. Pertama,kita deklarasikan fungsi pembantu untuk menulis format text:

function fwrite (fmt, ...)

return io.write(string.format(fmt, unpack(arg)))

end

fungsi BEGIN digunakan untuk menulis kepala halaman,yang selalu sama:

function BEGIN() io.write([[

<HTML> <HEAD><TITLE>Projects using Lua</TITLE></HEAD> <BODY BGCOLOR="#FFFFFF"> Here are brief descriptions of some projects around the world that use <A HREF="home.html">Lua</A>. <BR>

]]) end

Definisi pertama untuk entry menulis setiap judul proyek sebagai daftar item. Argument o akan menjadi tabel yang mendeskripsikan proyek:

function entry0 (o) N=N + 1 local title = o.title or '(no title)' fwrite('<LI><A HREF="#%d">%s</A>\n', N, title)

end

Jika o.title adalah nil,fungsi menggunakan sebuah string tetap “(no title)”. Definisi kedua menulis semua kebutuhan data tentang sebuah proyek. Ini sedikit lebih kompleks karena seluruh barang adalah optional.

function entry1 (o) N=N + 1 local title = o.title or o.org or 'org' fwrite('<HR>\n<H3>\n') local href = ''

if o.url then href = string.format(' HREF="%s"', o.url) end fwrite('<A NAME="%d"%s>%s</A>\n', N, href, title)

if o.title and o.org then fwrite('<BR>\n<SMALL><EM>%s</EM></SMALL>', o.org) end fwrite('\n</H3>\n')

if o.description then fwrite('%s', string.gsub(o.description, '\n\n\n*', '<P>\n'))

fwrite('<P>\n')

end

if o.email then fwrite('Contact: <A HREF="mailto:%s">%s</A>\n', o.email, o.contact or o.email) elseif o.contact then

fwrite('Contact: %s\n', o.contact)

end end

Fungsi terakhir menutup halaman: Fungsi terakhir menutup halaman:

Terakhir,program utama memulai halaman,menjalankan file data dengan definisi pertama untuk entry untuk membuat daftar judul,kemudian menjalankan file data lagi dengan definisi kedua untuk entry,dan tutup halaman:

BEGIN()

N=0 entry = entry0 fwrite('<UL>\n') dofile('db.lua') fwrite('</UL>\n')

N=0 entry = entry1 dofile('db.lua')

END()