<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FThoken%2FAlgor</id>
	<title>Module:Sandbox/Thoken/Algor - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FThoken%2FAlgor"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Thoken/Algor&amp;action=history"/>
	<updated>2026-05-26T03:38:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Thoken/Algor&amp;diff=146310&amp;oldid=prev</id>
		<title>imported&gt;Thoken at 17:49, 7 June 2013</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Thoken/Algor&amp;diff=146310&amp;oldid=prev"/>
		<updated>2013-06-07T17:49:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[=[ {{#invoke &amp;lt;module name&amp;gt;|Gang|Toronto|3}} [(console:) =p.Gang{&amp;quot;Toronto&amp;quot;,3}] writes a random link chain by&lt;br /&gt;
   selecting randomly a single wikilink at page &amp;quot;Toronto&amp;quot;,&lt;br /&gt;
   continuing to do the same at the page linked, then at that next page linked, and so on.&lt;br /&gt;
    the number determines the length of the chain. ]=]&lt;br /&gt;
&lt;br /&gt;
local Attributes=function(text,title)&lt;br /&gt;
    local coord_pattern=&amp;quot;{{[Cc]oord|([0-9]-)|-([0-9]-)|-([0-9%.]-)|([NS])|([0-9]-)|-([0-9]-)|-([0-9%.]-)|([EWO])[|}]&amp;quot;&lt;br /&gt;
    local infobox_pattern=&amp;quot;{{Infobox.-|%s-lat_-d%s-=%s-([0-9]-)%s-|-%s-lat-_-m%s-=-%s-([0-9]-)%s-|-%s-lat-_-s%s-=-%s-([0-9%.]-)%s-|%s-lat_-NS%s-=%s-([NS]).-|%s-long_-d%s-=%s-([0-9]-)%s-|-%s-long-_-m%s-=-%s-([0-9]-)%s-|-%s-long-_-s%s-=-%s-([0-9%.]-)%s-|%s-long_-EW%s-=%s-([EW])%s-|.*&amp;quot;&lt;br /&gt;
    local pattern={}; pattern[1]=coord_pattern; pattern[2]=infobox_pattern&lt;br /&gt;
    local cat_pattern=&amp;quot;%[%[[CcKk]at[eé]gor[yi][ae]-:(.-)[|#%]]&amp;quot;&lt;br /&gt;
    Cats=function(text)&lt;br /&gt;
        local i,sr=0&lt;br /&gt;
        local p,q,cat=text:find(cat_pattern,-999)&lt;br /&gt;
        while p and i&amp;lt;4 do&lt;br /&gt;
            if i==0 then sr=&amp;quot;&amp;quot; end&lt;br /&gt;
            if cat:lower()~=title:lower() then&lt;br /&gt;
                sr=sr..cat..&amp;quot;, &amp;quot;; i=i+1&lt;br /&gt;
            end&lt;br /&gt;
            p,q,cat=text:find(cat_pattern,q)&lt;br /&gt;
        end&lt;br /&gt;
        if 0&amp;lt;i then sr=sr:sub(1,-3) end&lt;br /&gt;
        return sr&lt;br /&gt;
    end&lt;br /&gt;
    local sr=&amp;quot;&amp;quot;&lt;br /&gt;
    local i,sc=1&lt;br /&gt;
    repeat text:gsub(pattern[i],function(...) sc={...} end) i=i+1 until sc or not pattern[i]&lt;br /&gt;
    local cch,j={&amp;quot;°&amp;quot;,&amp;quot;′&amp;quot;,&amp;quot;″&amp;quot;},1&lt;br /&gt;
    if sc then for _,v in ipairs(sc) do if tonumber(v) then sr=sr..v..cch[j]; j=j+1 elseif v~=&amp;quot;&amp;quot; then sr=sr..v..&amp;quot; &amp;quot;; j=1 end end end&lt;br /&gt;
    sd=Cats(text)&lt;br /&gt;
    if sd then&lt;br /&gt;
        if sc then sr=sr:sub(1,-2)..&amp;quot;; &amp;quot; end&lt;br /&gt;
        sr=sr..sd&lt;br /&gt;
    else sd=Cats(mw.getCurrentFrame():preprocess(text))&lt;br /&gt;
        if sd then sr=sr..&amp;quot;&amp;#039;&amp;#039;&amp;quot;..sd..&amp;quot;&amp;#039;&amp;#039;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    return sr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Stack=function(starttable)  -- table stack, one item push/pop&lt;br /&gt;
  local Stack={&lt;br /&gt;
    push=function(self,v)&lt;br /&gt;
       self[#self+1]=v&lt;br /&gt;
    end,&lt;br /&gt;
    pop=function(self)&lt;br /&gt;
      assert(0&amp;lt;#self,&amp;quot;Stack empty on pop(), out of service&amp;quot;)&lt;br /&gt;
      return table.remove(self)&lt;br /&gt;
    end&lt;br /&gt;
    }&lt;br /&gt;
  return setmetatable(starttable or {},{__index=Stack})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local TitleStack=function()&lt;br /&gt;
  return Stack{&amp;quot;Wikipedia&amp;quot;,&amp;quot;K&amp;quot;,&amp;quot;Little Red Rooster&amp;quot;}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local RandPageChain={}&lt;br /&gt;
RandPageChain.Gang=function(frame)&lt;br /&gt;
  local function wikitext(title) return mw.title.new(title,0):getContent(),title end&lt;br /&gt;
  local osc=os.clock()&lt;br /&gt;
  math.randomseed(math.floor(math.abs(math.floor(osc*10e3+0.5)-osc*10e3)*10e3+0.5))&lt;br /&gt;
 &lt;br /&gt;
  if frame==mw.getCurrentFrame() then args=frame:getParent().args else args=frame or {} end&lt;br /&gt;
 &lt;br /&gt;
  local title_pattern=&amp;quot;%[%[([^:]-)[|#%]]&amp;quot; -- not matching titles containing a colon&lt;br /&gt;
  TS=TitleStack()&lt;br /&gt;
  local title=tostring(args[1])  -- &amp;#039;nil&amp;#039; is legal title&lt;br /&gt;
  if title==&amp;quot;&amp;quot; then title=TS:pop() end&lt;br /&gt;
  local n=tonumber(args[2]) or 5&lt;br /&gt;
  local out=&amp;quot;&amp;quot;; local debuglog=&amp;quot;:gang &amp;#039;&amp;quot;..title..&amp;quot;&amp;#039;, &amp;quot;..n..&amp;quot;\n:&amp;quot;&lt;br /&gt;
  while 0&amp;lt;n do n=n-1&lt;br /&gt;
    local text=wikitext(title)&lt;br /&gt;
    if not text then out=out..&amp;quot;[[&amp;quot;..title..&amp;quot;]], &amp;#039;&amp;#039;dead end&amp;#039;&amp;#039;\n:&amp;quot;;  -- if &amp;lt;red link, ...&amp;gt;&lt;br /&gt;
        repeat text,title=wikitext(TS:pop()) until text&lt;br /&gt;
    end&lt;br /&gt;
    out=out..n..&amp;quot; [[&amp;quot;..title..&amp;quot;]]&amp;quot;..&amp;quot; \t &amp;quot;..Attributes(text,title)..&amp;quot;\n:&amp;quot; --&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&lt;br /&gt;
    local k,pos=0,{}&lt;br /&gt;
    local p,q=text:find(title_pattern)&lt;br /&gt;
    while p do&lt;br /&gt;
      k=k+1; pos[k]=p   --debuglog=debuglog..k..&amp;quot;:&amp;quot;..p..&amp;quot; &amp;quot;..capture..&amp;quot;\n:&amp;quot;&lt;br /&gt;
      p,q=text:find(title_pattern,q)&lt;br /&gt;
    end&lt;br /&gt;
    if 0&amp;lt;k then&lt;br /&gt;
        title=text:match(title_pattern,pos[math.random(k)])&lt;br /&gt;
        if 5&amp;lt;k then TS:push(text:match(title_pattern,pos[math.random(k)])) end&lt;br /&gt;
        if 20&amp;lt;k then TS:push(text:match(title_pattern,pos[math.random(k)])) end&lt;br /&gt;
    else title=TS:pop()&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return debuglog..out..&amp;quot;&amp;#039;&amp;#039;break&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
return RandPageChain&lt;/div&gt;</summary>
		<author><name>imported&gt;Thoken</name></author>
	</entry>
</feed>