Module:List

local p = {}

-- Based on parseCollectionLine from https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/Collection.git;a=blob;f=Collection.body.php;hb=f2bd4ee2be12ab3df5f2dcb3bd56ff17247fff66#l793) -- Get "Book/Title" from a line in any of these formats: -- :Book/Title -- :Text -- :[ Text] function getChapterFromLine( line )   title = string.match( line, "^%s*:%s*%[%[:?(.-)|(.-)%]%]%s*$" ) or		string.match( line, "^%s*:%s*%[%[:?(.-)%]%]%s*$" ) or		string.match( line, "^%s*:%s*%[%s+.-]%s*$" ) or		""	return title:gsub('_',' ') end

-- Adapted from http://lua-users.org/wiki/SplitJoin function getListOfChaptersFromText(str) local delim = "\r?\n+" if string.find(str, delim) == nil then -- This book doesn't have a collection page return "" end local result = {} local pat = "(.-)" .. delim .. ""	local nb = 0 local lastPos for line, pos in string.gfind(str, pat) do		nb = nb + 1 result[nb] = getChapterFromLine( line ) lastPos = pos end result[nb + 1] = getChapterFromLine( string.sub(str, lastPos) ) return result end

function p.getListOfChapters( frame ) local colPageText = frame:preprocess( '' ) return getListOfChaptersFromText( colPageText ) end

return p