Mercurial > repo
view share/lua/5.2/luarocks/index.lua @ 3026:c8ea00fb641d
<shachaf> addquote <mnoqy> the theory\'s probably not bad, but calculus is one of those things that\'s so dang applicable that everyone only ever talks about how to apply it and compute with it and uuuuurgh(barf) <mnoqy> so i stay away from it
author | HackBot |
---|---|
date | Sun, 02 Jun 2013 04:42:47 +0000 |
parents | d137f631bad5 |
children |
line wrap: on
line source
--- Module which builds the index.html page to be used in rocks servers. module("luarocks.index", package.seeall) local util = require("luarocks.util") local fs = require("luarocks.fs") local deps = require("luarocks.deps") local persist = require("luarocks.persist") local dir = require("luarocks.dir") local manif = require("luarocks.manif") local ext_url_target = ' target="_blank"' local index_header = [[ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Available rocks</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <style> body { background-color: white; font-family: "bitstream vera sans", "verdana", "sans"; font-size: 14px; } a { color: #0000c0; text-decoration: none; } a:hover { text-decoration: underline; } td.main { border-style: none; } blockquote { font-size: 12px; } td.package { background-color: #f0f0f0; vertical-align: top; } td.spacer { height: 5px; } td.version { background-color: #d0d0d0; vertical-align: top; text-align: left; padding: 5px; width: 100px; } p.manifest { font-size: 8px; } </style> </head> <body> <h1>Available rocks</h1> <p> Lua modules available from this location for use with <a href="http://www.luarocks.org">LuaRocks</a>: </p> <table class="main"> ]] local index_package_start = [[ <td class="package"> <p><a name="$anchor"></a><b>$package</b> - $summary<br/> </p><blockquote><p>$detailed<br/> $externaldependencies <font size="-1"><a href="$original">latest sources</a> $homepage | License: $license</font></p> </blockquote></a></td> <td class="version"> ]] local index_package_end = [[ </td></tr> <tr><td colspan="2" class="spacer"></td></tr> ]] local index_footer = [[ </table> <p class="manifest"> <a href="manifest">manifest file</a> </p> </body> </html> ]] function format_external_dependencies(rockspec) if rockspec.external_dependencies then local deplist = {} local listed_set = {} local plats = nil for name, desc in util.sortedpairs(rockspec.external_dependencies) do if name ~= "platforms" then table.insert(deplist, name:lower()) listed_set[name] = true else plats = desc end end if plats then for plat, entries in util.sortedpairs(plats) do for name, desc in util.sortedpairs(entries) do if not listed_set[name] then table.insert(deplist, name:lower() .. " (on "..plat..")") end end end end return '<p><b>External dependencies:</b> ' .. table.concat(deplist, ', ').. '</p>' else return "" end end function make_index(repo) if not fs.is_dir(repo) then return nil, "Cannot access repository at "..repo end local manifest = manif.load_manifest(repo) local out = io.open(dir.path(repo, "index.html"), "w") out:write(index_header) for package, version_list in util.sortedpairs(manifest.repository) do local latest_rockspec = nil local output = index_package_start for version, data in util.sortedpairs(version_list, deps.compare_versions) do local versions = {} output = output..version..': ' table.sort(data, function(a,b) return a.arch < b.arch end) for _, item in ipairs(data) do local link = '<a href="$url">'..item.arch..'</a>' if item.arch == 'rockspec' then local rs = ("%s-%s.rockspec"):format(package, version) if not latest_rockspec then latest_rockspec = rs end link = link:gsub("$url", rs) else link = link:gsub("$url", ("%s-%s.%s.rock"):format(package, version, item.arch)) end table.insert(versions, link) end output = output .. table.concat(versions, ', ') .. '<br/>' end output = output .. index_package_end if latest_rockspec then local rockspec = persist.load_into_table(dir.path(repo, latest_rockspec)) local descript = rockspec.description or {} local vars = { anchor = package, package = rockspec.package, original = rockspec.source.url, summary = descript.summary or "", detailed = descript.detailed or "", license = descript.license or "N/A", homepage = descript.homepage and ('| <a href="'..descript.homepage..'"'..ext_url_target..'>project homepage</a>') or "", externaldependencies = format_external_dependencies(rockspec) } vars.detailed = vars.detailed:gsub("\n\n", "</p><p>"):gsub("%s+", " ") vars.detailed = vars.detailed:gsub("(https?://[a-zA-Z0-9%.%%-_%+%[%]=%?&/$@;:]+)", '<a href="%1"'..ext_url_target..'>%1</a>') output = output:gsub("$(%w+)", vars) else output = output:gsub("$anchor", package) output = output:gsub("$package", package) output = output:gsub("$(%w+)", "") end out:write(output) end out:write(index_footer) out:close() end