<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AVorlage%3ATemplateDataGenerator</id>
	<title>Modul:Vorlage:TemplateDataGenerator - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AVorlage%3ATemplateDataGenerator"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Vorlage:TemplateDataGenerator&amp;action=history"/>
	<updated>2026-05-27T20:28:30Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Vorlage:TemplateDataGenerator&amp;diff=2911877&amp;oldid=prev</id>
		<title>imported&gt;PerfektesChaos: 2016-11-23</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Vorlage:TemplateDataGenerator&amp;diff=2911877&amp;oldid=prev"/>
		<updated>2016-11-24T12:29:58Z</updated>

		<summary type="html">&lt;p&gt;2016-11-23&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Serial = &amp;quot;2016-11-23&amp;quot;&lt;br /&gt;
--[=[&lt;br /&gt;
{{TemplateDataGenerator}}&lt;br /&gt;
Basic idea by [[w:en:User:Salix alba]]&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local config = {&lt;br /&gt;
    luxury = false,    -- default alphabetical order for parameter list&lt;br /&gt;
    start  = &amp;quot;{{templateData|top}}&amp;quot;,    -- preceeding lines&lt;br /&gt;
    shift  = &amp;quot;   &amp;quot;,    -- (not used now) indentation, like &amp;quot;   &amp;quot; or &amp;quot;\t&amp;quot;&lt;br /&gt;
    suffix = false,    -- following lines&lt;br /&gt;
    scheme = [=[&amp;quot;%s&amp;quot;:&lt;br /&gt;
              { &amp;quot;label&amp;quot;:       &amp;quot;%s&amp;quot;,&lt;br /&gt;
                &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
                &amp;quot;type&amp;quot;:        &amp;quot;string&amp;quot;,&lt;br /&gt;
                &amp;quot;required&amp;quot;:    false&lt;br /&gt;
              }]=]&lt;br /&gt;
    -- config.scheme has placeholders %s&lt;br /&gt;
    -- for the parameter name and for &amp;quot;label&amp;quot;.&lt;br /&gt;
    -- One of various indentation styles.&lt;br /&gt;
    -- Feel free to compose a different one, also using config.shift etc.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function factory( analyze, alphabetical )&lt;br /&gt;
    -- Make parameter sequence from template source text&lt;br /&gt;
    --     analyze       -- string; template source text&lt;br /&gt;
    --     alphabetical  -- boolean or nil; sort parameter list&lt;br /&gt;
    -- Return:&lt;br /&gt;
    --     table (sequence) with parameter names&lt;br /&gt;
    local i, s;&lt;br /&gt;
    local r = { };&lt;br /&gt;
    for s in analyze:gmatch( &amp;quot;{{{([^|}\n]+)&amp;quot; ) do&lt;br /&gt;
        for i = 1, #r do&lt;br /&gt;
            if r[ i ] == s then&lt;br /&gt;
                s = false;&lt;br /&gt;
                break; -- for i&lt;br /&gt;
            end&lt;br /&gt;
        end -- for i&lt;br /&gt;
        if s then&lt;br /&gt;
            table.insert( r, s );&lt;br /&gt;
        end&lt;br /&gt;
    end -- for s in :gmatch()&lt;br /&gt;
    if alphabetical then&lt;br /&gt;
        table.sort( r, nil );&lt;br /&gt;
    end&lt;br /&gt;
    return r;&lt;br /&gt;
end -- factory()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function format( analyze, alphabetical )&lt;br /&gt;
    -- Make JSON code from template source text&lt;br /&gt;
    --     analyze       -- string; template source text&lt;br /&gt;
    --     alphabetical  -- boolean or nil; sort parameter list&lt;br /&gt;
    -- Return:&lt;br /&gt;
    --     string with JSON code&lt;br /&gt;
    -- Uses:&lt;br /&gt;
    --     &amp;gt;  config.shift&lt;br /&gt;
    --     &amp;gt;  config.scheme&lt;br /&gt;
    --     factory()&lt;br /&gt;
    local i;&lt;br /&gt;
    local params = factory( analyze, alphabetical );&lt;br /&gt;
    local r      = &amp;#039;{ &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,\n&amp;#039;;&lt;br /&gt;
--  local shift  = config.shift or &amp;quot;&amp;quot;;    -- currently unused&lt;br /&gt;
    local start  = &amp;quot;            &amp;quot;;&lt;br /&gt;
    local show, symbol;&lt;br /&gt;
    r = r ..       &amp;#039;  &amp;quot;params&amp;quot;: { &amp;#039;;&lt;br /&gt;
    for i = 1, #params do&lt;br /&gt;
        if i &amp;gt; 1 then&lt;br /&gt;
            r = string.format( &amp;quot;%s,\n%s  &amp;quot;, r, start );&lt;br /&gt;
        end&lt;br /&gt;
        symbol = params[ i ];&lt;br /&gt;
        if mw.ustring.match( symbol, &amp;quot;^%u%u&amp;quot; ) then&lt;br /&gt;
            show = mw.ustring.sub( symbol, 1, 1 ) ..&lt;br /&gt;
                   mw.ustring.lower( mw.ustring.sub( symbol, 2 ) );&lt;br /&gt;
        else&lt;br /&gt;
            show = &amp;quot;&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        r = r .. string.format( config.scheme, symbol, show );&lt;br /&gt;
        -- common JSON pattern is ASCII; string.format() will do&lt;br /&gt;
    end -- for i&lt;br /&gt;
    r = string.format( &amp;quot;%s\n%s}\n}&amp;quot;, r, start );&lt;br /&gt;
    return r;&lt;br /&gt;
end -- format()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fun( attempt, alphabetical )&lt;br /&gt;
    -- Retrieve used template params and build TemplateData skeleton&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     attempt       -- mw.title object; related to template code&lt;br /&gt;
    --     alphabetical  -- boolean or nil; sort parameter list&lt;br /&gt;
    -- Return:&lt;br /&gt;
    --     string to be applied&lt;br /&gt;
    -- Uses:&lt;br /&gt;
    --     &amp;gt;  config.luxury&lt;br /&gt;
    --     &amp;gt;  config.start&lt;br /&gt;
    --     &amp;gt;  config.suffix&lt;br /&gt;
    --     format()&lt;br /&gt;
    local r;&lt;br /&gt;
    local source = string.match( attempt.baseText .. &amp;quot;/&amp;quot;,&lt;br /&gt;
                                 &amp;quot;^([^/]+)/&amp;quot; );&lt;br /&gt;
                   -- ensure top page in NS with no subpage property&lt;br /&gt;
                   -- note that pattern is ASCII; string.match() will do&lt;br /&gt;
    local title  = mw.title.makeTitle( attempt.namespace, source );&lt;br /&gt;
    if title.exists then&lt;br /&gt;
        local luxury = config.luxury;&lt;br /&gt;
        local spec   = &amp;quot;%s&amp;lt;templatedata&amp;gt;\n%s\n&amp;lt;/templatedata&amp;gt;\n%s&amp;quot;;&lt;br /&gt;
        if type( alphabetical ) == &amp;quot;boolean&amp;quot; then&lt;br /&gt;
            luxury = alphabetical;&lt;br /&gt;
        end&lt;br /&gt;
        if config.start then&lt;br /&gt;
            r = config.start .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            r = &amp;quot;&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        r = string.format( spec,&lt;br /&gt;
                           r,&lt;br /&gt;
                           format( title:getContent(), luxury ),&lt;br /&gt;
                           config.suffix or &amp;quot;&amp;quot; );&lt;br /&gt;
        -- note that format spec is ASCII only; string.format() will do&lt;br /&gt;
    else    -- test only&lt;br /&gt;
        r = &amp;quot;ERROR * no page &amp;quot; .. title.fullText;&lt;br /&gt;
    end&lt;br /&gt;
    return r;&lt;br /&gt;
end -- fun()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = {};&lt;br /&gt;
&lt;br /&gt;
function p.getBlock( about, ahead, alphabetical )&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     about         -- string; page title related to template code&lt;br /&gt;
    --     ahead         -- string, number or nil; namespace (Template:)&lt;br /&gt;
    --     alphabetical  -- boolean or nil; sort parameter list&lt;br /&gt;
    -- Uses:&lt;br /&gt;
    --     fun()&lt;br /&gt;
    local title = mw.title.makeTitle( ahead or 10,  about );&lt;br /&gt;
    local lucky, r = pcall( fun, title, alphabetical );&lt;br /&gt;
    return r;&lt;br /&gt;
end -- .getBlock()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.f( frame )&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     frame  -- object&lt;br /&gt;
    --     Invoked on a template page or template subpage.&lt;br /&gt;
    -- Uses:&lt;br /&gt;
    --     fun()&lt;br /&gt;
    local luxury;&lt;br /&gt;
    local parental = frame:getParent().args;&lt;br /&gt;
    local sort     = parental[ 1 ] or parental[ &amp;quot;1&amp;quot; ] or parental.sort;&lt;br /&gt;
    if sort then&lt;br /&gt;
        luxury = ( tonumber( sort) == 1 );&lt;br /&gt;
    end&lt;br /&gt;
    local lucky, r = pcall( fun, mw.title.getCurrentTitle(), luxury );&lt;br /&gt;
    return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. r .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&lt;br /&gt;
end -- .f()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.failsafe()&lt;br /&gt;
    return Serial&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>imported&gt;PerfektesChaos</name></author>
	</entry>
</feed>