<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.statsape.com/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AModule_toc</id>
	<title>模块:Module toc - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.statsape.com/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AModule_toc"/>
	<link rel="alternate" type="text/html" href="https://wiki.statsape.com/index.php?title=%E6%A8%A1%E5%9D%97:Module_toc&amp;action=history"/>
	<updated>2026-04-04T07:09:33Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.statsape.com/index.php?title=%E6%A8%A1%E5%9D%97:Module_toc&amp;diff=730&amp;oldid=prev</id>
		<title>Zeroclanzhang：​创建页面，内容为“-- Imported from: https://runescape.wiki/w/Module:Module%20toc  -- &lt;nowiki&gt; local p = {}  local function getNewlineLocations( content )     local locs = {}     local pos = 0      repeat         pos = string.find( content, &#039;\n&#039;, pos + 1, true )         table.insert( locs, pos )     until not pos      return locs end  local function findLineNumber( pos, newLineLocs )     local max = #newLineLocs     local min = 1      repeat         local i = math.ceil( (max + mi…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.statsape.com/index.php?title=%E6%A8%A1%E5%9D%97:Module_toc&amp;diff=730&amp;oldid=prev"/>
		<updated>2023-07-14T07:05:04Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“-- Imported from: https://runescape.wiki/w/Module:Module%20toc  -- &amp;lt;nowiki&amp;gt; local p = {}  local function getNewlineLocations( content )     local locs = {}     local pos = 0      repeat         pos = string.find( content, &amp;#039;\n&amp;#039;, pos + 1, true )         table.insert( locs, pos )     until not pos      return locs end  local function findLineNumber( pos, newLineLocs )     local max = #newLineLocs     local min = 1      repeat         local i = math.ceil( (max + mi…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Imported from: https://runescape.wiki/w/Module:Module%20toc&lt;br /&gt;
&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function getNewlineLocations( content )&lt;br /&gt;
    local locs = {}&lt;br /&gt;
    local pos = 0&lt;br /&gt;
&lt;br /&gt;
    repeat&lt;br /&gt;
        pos = string.find( content, &amp;#039;\n&amp;#039;, pos + 1, true )&lt;br /&gt;
        table.insert( locs, pos )&lt;br /&gt;
    until not pos&lt;br /&gt;
&lt;br /&gt;
    return locs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function findLineNumber( pos, newLineLocs )&lt;br /&gt;
    local max = #newLineLocs&lt;br /&gt;
    local min = 1&lt;br /&gt;
&lt;br /&gt;
    repeat&lt;br /&gt;
        local i = math.ceil( (max + min) / 2 )&lt;br /&gt;
        if newLineLocs[i] &amp;lt; pos then&lt;br /&gt;
            min = i&lt;br /&gt;
        elseif newLineLocs[i] &amp;gt;= pos then&lt;br /&gt;
            max = i&lt;br /&gt;
        end&lt;br /&gt;
    until newLineLocs[i] &amp;gt; pos and (newLineLocs[i - 1] or 0) &amp;lt; pos&lt;br /&gt;
&lt;br /&gt;
    return max&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getFunctionLocations( content )&lt;br /&gt;
    local locs = {}&lt;br /&gt;
    local newLineLocs = getNewlineLocations( content )&lt;br /&gt;
&lt;br /&gt;
    local start = 0&lt;br /&gt;
    repeat&lt;br /&gt;
        local name&lt;br /&gt;
        name, start = string.match( content, &amp;#039;%sfunction%s+([^%s%(]+)%s*%(()&amp;#039;, start + 1 )&lt;br /&gt;
        if start then&lt;br /&gt;
            table.insert( locs, { name=name, line = findLineNumber( start, newLineLocs ) } )&lt;br /&gt;
        end&lt;br /&gt;
    until not start&lt;br /&gt;
&lt;br /&gt;
    start = 0&lt;br /&gt;
    repeat&lt;br /&gt;
        local name&lt;br /&gt;
        name, start = string.match( content, &amp;#039;%s([^%s=])%s*=%s*function%s*%(()&amp;#039;, start + 1 )&lt;br /&gt;
        if start then&lt;br /&gt;
            table.insert( locs, { name=name, line = findLineNumber( start, newLineLocs ) } )&lt;br /&gt;
        end&lt;br /&gt;
    until not start&lt;br /&gt;
&lt;br /&gt;
    return locs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main()&lt;br /&gt;
    local title = mw.title.getCurrentTitle()&lt;br /&gt;
    local moduleName = string.gsub( title.text, &amp;#039;/[Dd]oc$&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
    if title.namespace ~= 828 then&lt;br /&gt;
        return &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local fullModuleName = string.gsub( title.fullText, &amp;#039;/[Dd]oc$&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
    local content = mw.title.new( fullModuleName ):getContent()&lt;br /&gt;
&lt;br /&gt;
    if not content then&lt;br /&gt;
        return &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function substMutilineComment( match )&lt;br /&gt;
        local lineCount = #getNewlineLocations( match )&lt;br /&gt;
        return string.rep( &amp;#039;\n&amp;#039;, lineCount ) or &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    content = content:gsub( &amp;#039;(%-%-%[(=-)%[.-%]%2%])&amp;#039;, substMutilineComment ):gsub( &amp;#039;%-%-[^\n]*&amp;#039;, &amp;#039;&amp;#039; ) -- Strip comments&lt;br /&gt;
    local functionLocs = getFunctionLocations( content )&lt;br /&gt;
&lt;br /&gt;
    table.sort( functionLocs, function(lhs, rhs) return lhs.line &amp;lt; rhs.line end )&lt;br /&gt;
&lt;br /&gt;
    if #functionLocs == 0 then&lt;br /&gt;
        return &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local res = {}&lt;br /&gt;
    for _, func in ipairs( functionLocs ) do&lt;br /&gt;
        table.insert( res, string.format( &amp;#039;L %d &amp;amp;mdash; [%s#L-%d %s]&amp;#039;, func.line, title:fullUrl():gsub( &amp;#039;/[Dd]oc$&amp;#039;, &amp;#039;&amp;#039; ), func.line,  func.name ) )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local tbl = mw.html.create( &amp;#039;table&amp;#039; ):addClass( &amp;#039;wikitable mw-collapsible mw-collapsed&amp;#039; )&lt;br /&gt;
    tbl:tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
            :tag( &amp;#039;th&amp;#039; ):wikitext( &amp;#039;Function list&amp;#039; ):done()&lt;br /&gt;
        :tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
            :tag( &amp;#039;td&amp;#039; ):wikitext( table.concat( res, &amp;#039;&amp;lt;br&amp;gt;&amp;#039; ) )&lt;br /&gt;
&lt;br /&gt;
    return tostring( tbl )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeroclanzhang</name></author>
	</entry>
</feed>