<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ACodedoc</id>
	<title>Module:Codedoc - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ACodedoc"/>
	<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:Codedoc&amp;action=history"/>
	<updated>2026-04-07T17:53:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://mbwiki.stairwaygames.work/w/index.php?title=Module:Codedoc&amp;diff=5684&amp;oldid=prev</id>
		<title>Admin coral island: Created page with &quot;-- &lt;nowiki&gt; --| Reads a file and outputs its comments. --b Pedro M. Rabinovitch &lt;miller@inf.puc-rio.br&gt; --$Id: dofile.lua,v 1.2 2003/10/20 03:35:08 miller Exp $ --TODO Check if multiline syntax is working properly -- Wikifying by Dessamator local p = {} local ProcLua = require (&#039;Dev:Codedoc/Procsrc&#039;) local args = require (&quot;Dev:Arguments&quot;).getArgs local opt = {          complete = true,         proc_private = true,         hideHeader = true } --% Creates docs for a module...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:Codedoc&amp;diff=5684&amp;oldid=prev"/>
		<updated>2023-08-04T02:25:01Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- &amp;lt;nowiki&amp;gt; --| Reads a file and outputs its comments. --b Pedro M. Rabinovitch &amp;lt;miller@inf.puc-rio.br&amp;gt; --$Id: dofile.lua,v 1.2 2003/10/20 03:35:08 miller Exp $ --TODO Check if multiline syntax is working properly -- Wikifying by Dessamator local p = {} local ProcLua = require (&amp;#039;Dev:Codedoc/Procsrc&amp;#039;) local args = require (&amp;quot;Dev:Arguments&amp;quot;).getArgs local opt = {          complete = true,         proc_private = true,         hideHeader = true } --% Creates docs for a module...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
--| Reads a file and outputs its comments.&lt;br /&gt;
--b Pedro M. Rabinovitch &amp;lt;miller@inf.puc-rio.br&amp;gt;&lt;br /&gt;
--$Id: dofile.lua,v 1.2 2003/10/20 03:35:08 miller Exp $&lt;br /&gt;
--TODO Check if multiline syntax is working properly&lt;br /&gt;
-- Wikifying by Dessamator&lt;br /&gt;
local p = {}&lt;br /&gt;
local ProcLua = require (&amp;#039;Dev:Codedoc/Procsrc&amp;#039;)&lt;br /&gt;
local args = require (&amp;quot;Dev:Arguments&amp;quot;).getArgs&lt;br /&gt;
local opt = { &lt;br /&gt;
        complete = true,&lt;br /&gt;
        proc_private = true,&lt;br /&gt;
        hideHeader = true&lt;br /&gt;
}&lt;br /&gt;
--% Creates docs for a module&lt;br /&gt;
--@ page (string) A page to read the docs from e.g.  Bananas&lt;br /&gt;
--: (string) A string containing the documentation of a module&lt;br /&gt;
function p.createDocs(page, defaultPage)&lt;br /&gt;
    if defaultPage or (not page) then&lt;br /&gt;
        page = (&amp;quot;module:&amp;quot; .. getDefaultPage()) &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local text = mw.title.new( page ):getContent()&lt;br /&gt;
    local docOutput = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if not text then&lt;br /&gt;
        return &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local function processFile()&lt;br /&gt;
        return ProcLua:process (text, opt)&lt;br /&gt;
    end&lt;br /&gt;
    local isValidDoc, cmt = xpcall(processFile, debug.traceback )&lt;br /&gt;
    &lt;br /&gt;
    if isValidDoc then&lt;br /&gt;
        local br = &amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
        local scriptInfo =  mw.html.create( &amp;#039;div&amp;#039; )&lt;br /&gt;
        local metaInfo = &amp;quot;&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        scriptInfo&lt;br /&gt;
            :tag(&amp;quot;h2&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;Module information&amp;quot;)&lt;br /&gt;
                :done()&lt;br /&gt;
                &lt;br /&gt;
        if not opt.hideHeader then&lt;br /&gt;
            metaInfo = cmt.header.authors[1] and &amp;quot;\n;Authors: \n:&amp;quot;.. cmt.header.authors[1] or &amp;quot;&amp;quot;..&lt;br /&gt;
            cmt.header.purpose and &amp;quot;\n;Purpose: \n:&amp;quot;.. cmt.header.purpose or &amp;quot;&amp;quot;..&lt;br /&gt;
            cmt.header.revision and &amp;quot;\n;Revision: \n:&amp;quot;.. cmt.header.revision or &amp;quot;&amp;quot; ..&lt;br /&gt;
            cmt.header.todo[1] and &amp;quot;\n;Todo: \n:&amp;quot;.. cmt.header.todo[1] or &amp;quot;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if #cmt.functions == 0 then&lt;br /&gt;
            return &amp;quot;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    &lt;br /&gt;
        local functionInfo = &amp;quot;\n&amp;quot; ..tostring(createFunctionTables(cmt.functions))&lt;br /&gt;
        return tostring(scriptInfo) .. metaInfo .. functionInfo&lt;br /&gt;
    else&lt;br /&gt;
        return cmt&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
--% Creates tables contains function parameters and return types&lt;br /&gt;
--@ functionTable (table) A table containing all functions in the code, related docs&lt;br /&gt;
--: (table) A table based on mw.html containing the function docs&lt;br /&gt;
function createFunctionTables(functionTable)&lt;br /&gt;
    local sFunctions &lt;br /&gt;
    local docOutput = mw.html.create( &amp;#039;div&amp;#039; )&lt;br /&gt;
    local returnData        &lt;br /&gt;
    &lt;br /&gt;
    docOutput:tag(&amp;quot;h3&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;Functions&amp;quot;):done()&lt;br /&gt;
    if functionTable then  &lt;br /&gt;
        for _, objDetails in pairs(functionTable) do&lt;br /&gt;
            docOutput:tag(&amp;quot;h4&amp;quot;)&lt;br /&gt;
                :wikitext(objDetails.name)&lt;br /&gt;
                    :done()&lt;br /&gt;
                :tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
                    :wikitext(objDetails.purpose)&lt;br /&gt;
                        :done()&lt;br /&gt;
            sFunctions = mw.html.create( &amp;#039;table&amp;#039; )&lt;br /&gt;
            if objDetails and objDetails.parameters then&lt;br /&gt;
                 sFunctions&lt;br /&gt;
                    :addClass( &amp;#039;wikitable&amp;#039; )&lt;br /&gt;
                    :addClass( &amp;#039;sortable&amp;#039; )&lt;br /&gt;
                    :css( &amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039; )&lt;br /&gt;
                    :tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
                        :tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
                            :wikitext( &amp;#039;Name&amp;#039; )&lt;br /&gt;
                            :done()&lt;br /&gt;
                        :tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
                            :wikitext( &amp;#039;Type&amp;#039; )&lt;br /&gt;
                            :done()&lt;br /&gt;
                        :tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
                            :wikitext( &amp;#039;purpose&amp;#039; )&lt;br /&gt;
                            :done()&lt;br /&gt;
                        :done()&lt;br /&gt;
                docOutput:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
                    :wikitext(&amp;quot;Parameters&amp;quot;):done()&lt;br /&gt;
            &lt;br /&gt;
                for paramName, paramDetails in pairs(objDetails.parameters) do&lt;br /&gt;
                    sFunctions&lt;br /&gt;
                    :tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
                        :tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
                            :wikitext( paramDetails.name )&lt;br /&gt;
                            :done()&lt;br /&gt;
                        :tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
                            :wikitext (paramDetails.type )&lt;br /&gt;
                            :done()&lt;br /&gt;
                        :tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
                            :wikitext( paramDetails.purpose )&lt;br /&gt;
                            :done()&lt;br /&gt;
                        :done()&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
           &lt;br /&gt;
            if objDetails.returns then&lt;br /&gt;
                returnData = mw.html.create( &amp;#039;table&amp;#039; ) &lt;br /&gt;
                    :addClass( &amp;#039;wikitable&amp;#039; )&lt;br /&gt;
                    :addClass( &amp;#039;sortable&amp;#039; )&lt;br /&gt;
                    :css( &amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039; )&lt;br /&gt;
                returnData&lt;br /&gt;
                    :tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
                        :tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
                           :wikitext( &amp;#039;Return type&amp;#039; )&lt;br /&gt;
                           :done()&lt;br /&gt;
                        :tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
                            :wikitext( &amp;#039;Return purpose&amp;#039; )&lt;br /&gt;
                            :done()&lt;br /&gt;
                for _, returnDetails in pairs(objDetails.returns) do&lt;br /&gt;
                    returnData&lt;br /&gt;
                        :tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
                            :tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
                                :wikitext( returnDetails.type )&lt;br /&gt;
                                :done()&lt;br /&gt;
                            :tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
                                :wikitext (returnDetails.purpose )&lt;br /&gt;
                                :done()&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            docOutput:node(sFunctions)&lt;br /&gt;
            if returnData then&lt;br /&gt;
                docOutput:node(returnData)&lt;br /&gt;
                returnData = nil&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return docOutput&lt;br /&gt;
end&lt;br /&gt;
--% Entry point for documenting&lt;br /&gt;
--@ frame (table) A frame object containing a module name as first parameter&lt;br /&gt;
--: (string) The documentation of a particular module&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    local page = args(frame)[1]&lt;br /&gt;
    local defaultModule = args(frame)[&amp;quot;default&amp;quot;] &lt;br /&gt;
    &lt;br /&gt;
    if defaultModule  then&lt;br /&gt;
        return p.createDocs(nil, true)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local prefix = mw.text.split(page or &amp;quot;&amp;quot;, &amp;quot;:&amp;quot;)[1] or &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if  prefix:lower() ~= &amp;quot;module&amp;quot; and page then&lt;br /&gt;
        return p.createDocs(&amp;quot;module:&amp;quot; .. page)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return p.createDocs(page)&lt;br /&gt;
end&lt;br /&gt;
--% Gets a default mpage, generally a subpage(e.g&amp;quot;/links&amp;quot;) of &amp;quot;Global lua modules&amp;quot;&lt;br /&gt;
--: (string) The default page containing documentation&lt;br /&gt;
function getDefaultPage()&lt;br /&gt;
    local page = mw.text.split(tostring(mw.title.getCurrentTitle()), &amp;quot;/&amp;quot;)&lt;br /&gt;
    page = page and page[2] or &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    return page&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin coral island</name></author>
	</entry>
</feed>