<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.adventurestation.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AMeals_Lookup</id>
	<title>Модуль:Meals Lookup - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.adventurestation.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AMeals_Lookup"/>
	<link rel="alternate" type="text/html" href="https://wiki.adventurestation.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Meals_Lookup&amp;action=history"/>
	<updated>2026-05-05T08:30:45Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.adventurestation.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Meals_Lookup&amp;diff=3371&amp;oldid=prev</id>
		<title>Eddiemercury: Источник</title>
		<link rel="alternate" type="text/html" href="https://wiki.adventurestation.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Meals_Lookup&amp;diff=3371&amp;oldid=prev"/>
		<updated>2025-03-29T18:30:04Z</updated>

		<summary type="html">&lt;p&gt;Источник&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 18:30, 29 марта 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--[[ &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Содержимое статьи является полностью или частично заимствованным текстом&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Источник: проект Corvax Station — Модуль:Entity Lookup/data&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Содержимое доступно по лицензии: CC BY-NC-SA 4.0&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local prototypes = mw.loadData(&amp;quot;Module:Meals Lookup/data&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local prototypes = mw.loadData(&amp;quot;Module:Meals Lookup/data&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local chem = mw.loadData(&amp;quot;Module:Chemistry Lookup/data&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local chem = mw.loadData(&amp;quot;Module:Chemistry Lookup/data&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-3240:rev-3371:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Eddiemercury</name></author>
	</entry>
	<entry>
		<id>https://wiki.adventurestation.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Meals_Lookup&amp;diff=3240&amp;oldid=prev</id>
		<title>Eddiemercury: Новая страница: «local prototypes = mw.loadData(&quot;Module:Meals Lookup/data&quot;) local chem = mw.loadData(&quot;Module:Chemistry Lookup/data&quot;)  local p = {} p.meals = prototypes.meals p.chemicals = chem.react  --#region universal  function table.containsv(table, value) -- FUCKING LUA     -- containsv = contains value     for _, v in pairs(table) do         if v == value then             return true         end     end     return false end  function table.containsk(table, key) -- FUCKI...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.adventurestation.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Meals_Lookup&amp;diff=3240&amp;oldid=prev"/>
		<updated>2025-03-17T21:31:01Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «local prototypes = mw.loadData(&amp;quot;Module:Meals Lookup/data&amp;quot;) local chem = mw.loadData(&amp;quot;Module:Chemistry Lookup/data&amp;quot;)  local p = {} p.meals = prototypes.meals p.chemicals = chem.react  --#region universal  function table.containsv(table, value) -- FUCKING LUA     -- containsv = contains value     for _, v in pairs(table) do         if v == value then             return true         end     end     return false end  function table.containsk(table, key) -- FUCKI...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local prototypes = mw.loadData(&amp;quot;Module:Meals Lookup/data&amp;quot;)&lt;br /&gt;
local chem = mw.loadData(&amp;quot;Module:Chemistry Lookup/data&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
p.meals = prototypes.meals&lt;br /&gt;
p.chemicals = chem.react&lt;br /&gt;
&lt;br /&gt;
--#region universal&lt;br /&gt;
&lt;br /&gt;
function table.containsv(table, value) -- FUCKING LUA&lt;br /&gt;
    -- containsv = contains value&lt;br /&gt;
    for _, v in pairs(table) do&lt;br /&gt;
        if v == value then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function table.containsk(table, key) -- FUCKING LUA&lt;br /&gt;
    -- containsk = contains key&lt;br /&gt;
    for k, _ in pairs(table) do&lt;br /&gt;
        if k == key then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function table.length(table)&lt;br /&gt;
    local out = 0&lt;br /&gt;
    for _ in pairs(table) do&lt;br /&gt;
        out = out + 1&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function table.isempty(t)&lt;br /&gt;
    local count = table.length(t)&lt;br /&gt;
    if count == 0 then&lt;br /&gt;
        do&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getrecipesfromtype(frame, type) -- should not be invoked&lt;br /&gt;
    return p.meals[type]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getrecipe(frame, type, id) -- should not be invoked&lt;br /&gt;
    return getrecipesfromtype(frame, type)[id:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;)]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getrecipetypes(frame, id) -- should not be invoked&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for type, recipes in pairs(p.meals) do&lt;br /&gt;
        for recipeId, recipe in pairs(recipes) do&lt;br /&gt;
            if (recipeId:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;) == id:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;)) or (recipe[&amp;quot;id&amp;quot;]:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;) == id:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;)) then&lt;br /&gt;
                table.insert(out, type)&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getimage(frame, fileid) -- should not be invoked&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    --[[&lt;br /&gt;
        WARNING!! THE NEXT THING IS &amp;quot;EXPENSIVE&amp;quot; AND DOES NOT WORKS AFTER 30 OR SMTHNG RUNS&lt;br /&gt;
        read https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Expensive_properties for more info&lt;br /&gt;
        local gifFileTitle = mw.title.new(fileid .. &amp;quot;.gif&amp;quot;, &amp;quot;File&amp;quot;)&lt;br /&gt;
        local pngFileTitle = mw.title.new(fileid .. &amp;quot;.png&amp;quot;, &amp;quot;File&amp;quot;)&lt;br /&gt;
        if gifFileTitle.file.exists then&lt;br /&gt;
            out = &amp;quot;File:&amp;quot; .. fileid .. &amp;quot;.gif&amp;quot;&lt;br /&gt;
        elseif pngFileTitle.file.exists then&lt;br /&gt;
            out = &amp;quot;File:&amp;quot; .. fileid .. &amp;quot;.png&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            out = &amp;quot;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    --]]&lt;br /&gt;
&lt;br /&gt;
    -- less expensive variant, but returns only png (AND BIG RED TEXT IF PNG DOES NOT EXISTS)&lt;br /&gt;
    out = &amp;quot;File:&amp;quot; .. fileid .. &amp;quot;.png&amp;quot;&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function buildsolids(frame, array) -- should not be invoked&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    for solid, amount in pairs(array) do&lt;br /&gt;
        out = out ..&lt;br /&gt;
            frame:preprocess(&amp;quot;{{Recipe Component|item={{#invoke:Entity Lookup|getname|&amp;quot; ..&lt;br /&gt;
                solid .. &amp;quot;}}|image=&amp;quot; .. getimage(frame, solid) .. &amp;quot;|amount=&amp;quot; .. amount .. &amp;quot;}}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function buildreagents(frame, array) -- should not be invoked&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    for item, amount in pairs(array) do&lt;br /&gt;
        out = out .. frame:preprocess(&amp;quot;{{Chem Recipe Component|reagent=&amp;quot; .. item .. &amp;quot;|amount=&amp;quot; .. amount .. &amp;quot;}}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- returns recipes which id is matched by pattern&lt;br /&gt;
function getrecipesbyname(frame, tabl, str) -- should not be inviked&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for type, recipes in pairs(tabl) do&lt;br /&gt;
        out[type] = {}&lt;br /&gt;
        for recipeId, recipe in pairs(recipes) do&lt;br /&gt;
            if string.match(recipeId, str) then&lt;br /&gt;
                table.insert(out[type], recipe)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- same as above, but returns recipes that *does not* match given pattern&lt;br /&gt;
function getotherrecipes(frame, tabl, str) -- should not be invoked&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for type, recipes in pairs(tabl) do&lt;br /&gt;
        if not table.containsk(out, type) then&lt;br /&gt;
            out[type] = {}&lt;br /&gt;
        end&lt;br /&gt;
        for recipeId, recipe in pairs(recipes) do&lt;br /&gt;
            if not string.match(recipeId, str) then&lt;br /&gt;
                if not table.containsv(out[type], recipe) then&lt;br /&gt;
                    table.insert(out[type], recipe)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.imageslist(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;#039;&amp;#039;&amp;#039;REQUIRED IMAGES:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
    for cat, recipes in pairs(p.meals) do&lt;br /&gt;
        for id, recipe in pairs(recipes) do&lt;br /&gt;
            if cat == &amp;quot;microwaveRecipes&amp;quot; then&lt;br /&gt;
                do&lt;br /&gt;
                    out = out .. recipe[&amp;quot;result&amp;quot;] .. &amp;quot;: [[:File:&amp;quot; .. recipe[&amp;quot;result&amp;quot;] .. &amp;quot;.png]]&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
                    if #recipe[&amp;quot;solids&amp;quot;] &amp;gt; 0 then&lt;br /&gt;
                        do&lt;br /&gt;
                            for solid in pairs(getmicrowaverecipesolids(recipe)) do&lt;br /&gt;
                                out = out .. solid .. &amp;quot;: [[:File:&amp;quot; .. solid .. &amp;quot;.png]]&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if cat == &amp;quot;sliceableRecipes&amp;quot; or cat == &amp;quot;heatableRecipes&amp;quot; or cat == &amp;quot;toolmadeRecipes&amp;quot; then&lt;br /&gt;
                do&lt;br /&gt;
                    out = out .. recipe[&amp;quot;result&amp;quot;] .. &amp;quot;: [[:File:&amp;quot; .. recipe[&amp;quot;result&amp;quot;] .. &amp;quot;.png]]&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
                    out = out .. recipe[&amp;quot;input&amp;quot;] .. &amp;quot;: [[:File:&amp;quot; .. recipe[&amp;quot;input&amp;quot;] .. &amp;quot;.png]]&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if cat == &amp;quot;grindableRecipes&amp;quot; then&lt;br /&gt;
                do&lt;br /&gt;
                    out = out .. recipe[&amp;quot;input&amp;quot;] .. &amp;quot;: [[:File:&amp;quot; .. recipe[&amp;quot;input&amp;quot;] .. &amp;quot;.png]]&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    out = out .. &amp;quot;&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&amp;quot;&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildeverything(frame) -- old code compatibility&lt;br /&gt;
    return p.buildeverythingnew(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildeverythingold(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    out = out .. p.buildmicrowaverecipes(frame)&lt;br /&gt;
    out = out .. p.buildslicerecipes(frame)&lt;br /&gt;
    out = out .. p.buildgrindrecipes(frame)&lt;br /&gt;
    out = out .. p.buildheatrecipes(frame)&lt;br /&gt;
    out = out .. p.buildtoolmaderecipes(frame)&lt;br /&gt;
    out = out .. p.buildixablerecipes(frame)&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--#endregion&lt;br /&gt;
&lt;br /&gt;
--#region microwaveRecipes&lt;br /&gt;
&lt;br /&gt;
function getmicrowaverecipesolids(frame, recipe) -- should not be invoked&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for ingredient, amount in pairs(recipe[&amp;quot;solids&amp;quot;]) do&lt;br /&gt;
        out[ingredient] = amount&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getmicrowaverecipereagents(frame, recipe) -- should not be invoked&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for ingredient, amount in pairs(recipe[&amp;quot;reagents&amp;quot;]) do&lt;br /&gt;
        out[ingredient] = amount&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildmicrowaverecipebox(frame) -- {{#invoke:Meals Lookup|buildmicrowaverecipebox|MicrowaveRecipeID}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local id = frame.args[1]:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
    local recipe = getrecipe(frame, &amp;quot;microwaveRecipes&amp;quot;, id)&lt;br /&gt;
    local solids = buildsolids(frame, getmicrowaverecipesolids(frame, recipe))&lt;br /&gt;
    local reagents = buildreagents(frame, getmicrowaverecipereagents(frame, recipe))&lt;br /&gt;
    out = frame:preprocess(&amp;quot;{{Recipe Box&amp;quot; ..&lt;br /&gt;
        &amp;quot;|name={{#invoke:Entity Lookup|getname|&amp;quot; .. recipe[&amp;quot;result&amp;quot;] .. &amp;quot;}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|component-1=&amp;quot; .. solids .. &amp;quot;\n&amp;quot; .. reagents ..&lt;br /&gt;
        &amp;quot;|transformer={{Recipe Transformers|microwaveRecipes|&amp;quot; .. recipe[&amp;quot;time&amp;quot;] .. &amp;quot;}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|result=&amp;quot; ..&lt;br /&gt;
        frame:preprocess(&amp;quot;{{Result Component|item={{#invoke:Entity Lookup|getname|&amp;quot; ..&lt;br /&gt;
            recipe[&amp;quot;result&amp;quot;] .. &amp;quot;}}|image=&amp;quot; .. getimage(frame, recipe[&amp;quot;result&amp;quot;]) .. &amp;quot;}}&amp;quot;) ..&lt;br /&gt;
        &amp;quot;}}&amp;quot;)&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildmicrowaverecipes(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    for id in pairs(getrecipesfromtype(frame, &amp;quot;microwaveRecipes&amp;quot;)) do&lt;br /&gt;
        out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildmicrowaverecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--#endregion microwaveRecipes&lt;br /&gt;
&lt;br /&gt;
--#region sliceableRecipes&lt;br /&gt;
&lt;br /&gt;
function p.buildslicerecipebox(frame) -- {{#invoke:Meals Lookup|buildslicerecipebox|SliceableRecipeID}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local id = frame.args[1]:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
    local recipe = getrecipe(frame, &amp;quot;sliceableRecipes&amp;quot;, id)&lt;br /&gt;
    out = frame:preprocess(&amp;quot;{{Recipe Box&amp;quot; ..&lt;br /&gt;
        &amp;quot;|name={{#invoke:Entity Lookup|getname|&amp;quot; .. recipe[&amp;quot;result&amp;quot;] .. &amp;quot;}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|component-1=&amp;quot; ..&lt;br /&gt;
        frame:preprocess(&amp;quot;{{Recipe Component|item={{#invoke:Entity Lookup|getname|&amp;quot; ..&lt;br /&gt;
            recipe[&amp;quot;input&amp;quot;] .. &amp;quot;}}|image=&amp;quot; .. getimage(frame, recipe[&amp;quot;input&amp;quot;]) .. &amp;quot;}}&amp;quot;) ..&lt;br /&gt;
        &amp;quot;|transformer={{Recipe Transformers|sliceableRecipes}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|result=&amp;quot; ..&lt;br /&gt;
        frame:preprocess(&amp;quot;{{Result Component|item={{#invoke:Entity Lookup|getname|&amp;quot; ..&lt;br /&gt;
            recipe[&amp;quot;result&amp;quot;] .. &amp;quot;}}|image=&amp;quot; .. getimage(frame, recipe[&amp;quot;result&amp;quot;]) .. &amp;quot;|amount=&amp;quot; .. recipe[&amp;quot;count&amp;quot;] .. &amp;quot;}}&amp;quot;) ..&lt;br /&gt;
        &amp;quot;}}&amp;quot;)&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildslicerecipes(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    for id in pairs(getrecipesfromtype(frame, &amp;quot;sliceableRecipes&amp;quot;)) do&lt;br /&gt;
        out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildslicerecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--#endregion sliceableRecipes&lt;br /&gt;
&lt;br /&gt;
--#region grindableRecipes&lt;br /&gt;
&lt;br /&gt;
function p.buildgrindrecipebox(frame) -- {{#invoke:Meals Lookup|buildgrindrecipebox|GrindableRecipeID}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local id = frame.args[1]:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
    local recipe = getrecipe(frame, &amp;quot;grindableRecipes&amp;quot;, id)&lt;br /&gt;
    local reagents = buildreagents(frame, recipe[&amp;quot;result&amp;quot;])&lt;br /&gt;
    out = frame:preprocess(&amp;quot;{{Recipe Box&amp;quot; ..&lt;br /&gt;
        &amp;quot;|name={{#invoke:Entity Lookup|getname|&amp;quot; .. recipe[&amp;quot;id&amp;quot;] .. &amp;quot;}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|component-1=&amp;quot; ..&lt;br /&gt;
        frame:preprocess(&amp;quot;{{Result Component|item={{#invoke:Entity Lookup|getname|&amp;quot; ..&lt;br /&gt;
            recipe[&amp;quot;input&amp;quot;] .. &amp;quot;}}|image=&amp;quot; .. getimage(frame, recipe[&amp;quot;input&amp;quot;]) .. &amp;quot;}}&amp;quot;) ..&lt;br /&gt;
        &amp;quot;|transformer={{Recipe Transformers|grindableRecipes}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|result=&amp;quot; .. reagents ..&lt;br /&gt;
        &amp;quot;}}&amp;quot;)&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildgrindrecipes(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    for id in pairs(getrecipesfromtype(frame, &amp;quot;grindableRecipes&amp;quot;)) do&lt;br /&gt;
        out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildgrindrecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--#endregion grindableRecipes&lt;br /&gt;
&lt;br /&gt;
--#region heatableRecipes&lt;br /&gt;
&lt;br /&gt;
function p.buildheatrecipebox(frame) -- {{#invoke:Meals Lookup|buildheatrecipebox|HeatableRecipeID}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local id = frame.args[1]:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
    local recipe = getrecipe(frame, &amp;quot;heatableRecipes&amp;quot;, id)&lt;br /&gt;
    out = frame:preprocess(&amp;quot;{{Recipe Box&amp;quot; ..&lt;br /&gt;
        &amp;quot;|name={{#invoke:Entity Lookup|getname|&amp;quot; .. recipe[&amp;quot;result&amp;quot;] .. &amp;quot;}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|component-1=&amp;quot; ..&lt;br /&gt;
        frame:preprocess(&amp;quot;{{Recipe Component|item={{#invoke:Entity Lookup|getname|&amp;quot; ..&lt;br /&gt;
            recipe[&amp;quot;input&amp;quot;] .. &amp;quot;}}|image=&amp;quot; .. getimage(frame, recipe[&amp;quot;input&amp;quot;]) .. &amp;quot;}}&amp;quot;) ..&lt;br /&gt;
        &amp;quot;|transformer={{Recipe Transformers|heatableRecipes|&amp;quot; .. recipe[&amp;quot;minTemp&amp;quot;] .. &amp;quot;}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|result=&amp;quot; ..&lt;br /&gt;
        frame:preprocess(&amp;quot;{{Result Component|item={{#invoke:Entity Lookup|getname|&amp;quot; ..&lt;br /&gt;
            recipe[&amp;quot;result&amp;quot;] .. &amp;quot;}}|image=&amp;quot; .. getimage(frame, recipe[&amp;quot;result&amp;quot;]) .. &amp;quot;}}&amp;quot;) ..&lt;br /&gt;
        &amp;quot;}}&amp;quot;)&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildheatrecipes(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    for id in pairs(getrecipesfromtype(frame, &amp;quot;heatableRecipes&amp;quot;)) do&lt;br /&gt;
        out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildheatrecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--#endregion heatableRecipes&lt;br /&gt;
&lt;br /&gt;
--#region toolmadeRecipes&lt;br /&gt;
&lt;br /&gt;
function p.buildtoolmaderecipebox(frame) -- {{#invoke:Meals Lookup|buildtoolmaderecipebox|ToolmadeRecipeID}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local id = frame.args[1]:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
    local recipe = getrecipe(frame, &amp;quot;toolmadeRecipes&amp;quot;, id)&lt;br /&gt;
    local transformer = &amp;quot;toolmadeRecipes&amp;quot; .. recipe[&amp;quot;tool&amp;quot;]&lt;br /&gt;
    out = frame:preprocess(&amp;quot;{{Recipe Box&amp;quot; ..&lt;br /&gt;
        &amp;quot;|name={{#invoke:Entity Lookup|getname|&amp;quot; .. recipe[&amp;quot;result&amp;quot;] .. &amp;quot;}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|component-1=&amp;quot; ..&lt;br /&gt;
        frame:preprocess(&amp;quot;{{Recipe Component|item={{#invoke:Entity Lookup|getname|&amp;quot; ..&lt;br /&gt;
            recipe[&amp;quot;input&amp;quot;] .. &amp;quot;}}|image=&amp;quot; .. getimage(frame, recipe[&amp;quot;input&amp;quot;]) .. &amp;quot;}}&amp;quot;) ..&lt;br /&gt;
        &amp;quot;|transformer={{Recipe Transformers|&amp;quot; .. transformer .. &amp;quot;}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|result=&amp;quot; ..&lt;br /&gt;
        frame:preprocess(&amp;quot;{{Result Component|item={{#invoke:Entity Lookup|getname|&amp;quot; ..&lt;br /&gt;
            recipe[&amp;quot;result&amp;quot;] .. &amp;quot;}}|image=&amp;quot; .. getimage(frame, recipe[&amp;quot;result&amp;quot;]) .. &amp;quot;}}&amp;quot;) ..&lt;br /&gt;
        &amp;quot;}}&amp;quot;)&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildtoolmaderecipes(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    for id in pairs(getrecipesfromtype(frame, &amp;quot;toolmadeRecipes&amp;quot;)) do&lt;br /&gt;
        out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildtoolmaderecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--#endregion toolmadeRecipes&lt;br /&gt;
&lt;br /&gt;
--#region mixableRecipes&lt;br /&gt;
&lt;br /&gt;
function getchemicalreagents(recipe) -- should not be invoked&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for ingredient, data in pairs(recipe[&amp;quot;reactants&amp;quot;]) do&lt;br /&gt;
        out[ingredient] = data[&amp;quot;amount&amp;quot;]&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildmixablerecipebox(frame) -- {{#invoke:Meals Lookup|buildmixablerecipebox|MixableRecipeID}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local id = frame.args[1]:gsub(&amp;#039; &amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
    local recipe = p.chemicals[id]&lt;br /&gt;
    local input = buildreagents(frame, getchemicalreagents(recipe))&lt;br /&gt;
&lt;br /&gt;
    local results = {}&lt;br /&gt;
    for _, v in pairs(recipe[&amp;quot;effects&amp;quot;]) do&lt;br /&gt;
        table.insert(results, v.description)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local result = table.concat(results, &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    out = frame:preprocess(&amp;quot;{{Recipe Box&amp;quot; ..&lt;br /&gt;
        &amp;quot;|component-1=&amp;quot; .. input ..&lt;br /&gt;
        &amp;quot;|name= &amp;quot; ..&lt;br /&gt;
        &amp;quot;|transformer={{Recipe Transformers|mixableRecipes}}&amp;quot; ..&lt;br /&gt;
        &amp;quot;|result=&amp;quot; .. result .. &amp;quot;}}&amp;quot;)&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildixablerecipes(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    for id in pairs(getrecipesfromtype(frame, &amp;quot;mixableRecipes&amp;quot;)) do&lt;br /&gt;
        out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildmixablerecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--#endregion mixableRecipes&lt;br /&gt;
&lt;br /&gt;
--#region dishes&lt;br /&gt;
&lt;br /&gt;
function p.buildrecipeboxuniversal(frame, idtable)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    for type, recipes in pairs(idtable) do&lt;br /&gt;
        -- INTRUDER ALERT: SHITCODE IS IN THE BASE&lt;br /&gt;
        local id = &amp;quot;&amp;quot;&lt;br /&gt;
        if type == &amp;quot;microwaveRecipes&amp;quot; and not table.isempty(recipes) then&lt;br /&gt;
            do&lt;br /&gt;
                for n, recipe in pairs(recipes) do&lt;br /&gt;
                    id = recipe[&amp;quot;id&amp;quot;]&lt;br /&gt;
                    out = out ..&lt;br /&gt;
                    frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildmicrowaverecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif type == &amp;quot;mixableRecipes&amp;quot; and not table.isempty(recipes) then&lt;br /&gt;
            do&lt;br /&gt;
                for n, recipe in pairs(recipes) do&lt;br /&gt;
                    id = recipe[&amp;quot;id&amp;quot;]&lt;br /&gt;
                    out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildmixablerecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif type == &amp;quot;sliceableRecipes&amp;quot; and not table.isempty(recipes) then&lt;br /&gt;
            do&lt;br /&gt;
                for n, recipe in pairs(recipes) do&lt;br /&gt;
                    id = recipe[&amp;quot;id&amp;quot;]&lt;br /&gt;
                    out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildslicerecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif type == &amp;quot;grindableRecipes&amp;quot; and not table.isempty(recipes) then&lt;br /&gt;
            do&lt;br /&gt;
                for n, recipe in pairs(recipes) do&lt;br /&gt;
                    id = recipe[&amp;quot;id&amp;quot;]&lt;br /&gt;
                    out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildgrindrecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif type == &amp;quot;heatableRecipes&amp;quot; and not table.isempty(recipes) then&lt;br /&gt;
            do&lt;br /&gt;
                for n, recipe in pairs(recipes) do&lt;br /&gt;
                    id = recipe[&amp;quot;id&amp;quot;]&lt;br /&gt;
                    out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildheatrecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif type == &amp;quot;toolmadeRecipes&amp;quot; and not table.isempty(recipes) then&lt;br /&gt;
            do&lt;br /&gt;
                for n, recipe in pairs(recipes) do&lt;br /&gt;
                    id = recipe[&amp;quot;id&amp;quot;]&lt;br /&gt;
                    out = out .. frame:preprocess(&amp;quot;{{#invoke:Meals Lookup|buildtoolmaderecipebox|&amp;quot; .. id .. &amp;quot;}}&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- you should not use this for building recipes inside lua&lt;br /&gt;
function p.buildnamedrecipes(frame) -- {{#invoke:Meals Lookup|buildnamedrecipes|[Pattern1 | Pattern2 | Pattern3 | ...]}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local tablo = p.meals&lt;br /&gt;
    for _, patt in pairs(frame.args) do&lt;br /&gt;
        local ids = getrecipesbyname(frame, tablo, patt)&lt;br /&gt;
        out = out .. p.buildrecipeboxuniversal(frame, ids)&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- same as buildnamedrecipes, but instead builds recipes that does not match the pattern&lt;br /&gt;
function p.buildotherrecipes(frame) -- {{#invoke:Meals Lookup|buildotherrecipes|[Pattern1 | Pattern2 | Pattern3 | ...]}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local tablo = p.meals&lt;br /&gt;
    for _, patt in pairs(frame.args) do&lt;br /&gt;
        local ids = getotherrecipes(frame, tablo, patt)&lt;br /&gt;
        out = out .. p.buildrecipeboxuniversal(frame, ids)&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- builds recipes list but does not constructs it, for debug purposes &lt;br /&gt;
function p.getrecipeslist(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local tablo = p.meals&lt;br /&gt;
    for _, patt in pairs(frame.args) do&lt;br /&gt;
        for type, recipes in pairs(getrecipesbyname(frame, tablo, patt)) do&lt;br /&gt;
            out = out .. type .. &amp;quot;(&amp;quot;&lt;br /&gt;
            for k, r in pairs(recipes) do&lt;br /&gt;
                out = out .. &amp;quot; &amp;quot; .. k .. &amp;quot;:&amp;quot; .. r[&amp;quot;id&amp;quot;]&lt;br /&gt;
            end&lt;br /&gt;
            out = out .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- same as getrecipeslist, but instead returns recipes that does not match the pattern&lt;br /&gt;
function p.getotherrecipeslist(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local tablo = p.meals&lt;br /&gt;
    for _, patt in pairs(frame.args) do&lt;br /&gt;
        for type, recipes in pairs(getotherrecipes(frame, tablo, patt)) do&lt;br /&gt;
            out = out .. type .. &amp;quot;(&amp;quot;&lt;br /&gt;
            for k, r in pairs(recipes) do&lt;br /&gt;
                out = out .. &amp;quot; &amp;quot; .. k .. &amp;quot;:&amp;quot; .. r[&amp;quot;id&amp;quot;]&lt;br /&gt;
            end&lt;br /&gt;
            out = out .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--#endregion&lt;br /&gt;
&lt;br /&gt;
--#region newdishestest&lt;br /&gt;
&lt;br /&gt;
-- returns recipes which id is matched by pattern&lt;br /&gt;
function getrecipesbynamenew(frame, tabl, str) -- should not be inviked&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for rtype, recipes in pairs(tabl) do&lt;br /&gt;
        for recipeId, recipe in pairs(recipes) do&lt;br /&gt;
            out[rtype] = {}&lt;br /&gt;
            if type(str) == &amp;quot;table&amp;quot; then do&lt;br /&gt;
                for _, patt in pairs(str) do&lt;br /&gt;
                    if string.match(recipeId, patt) and not table.containsv(recipe) then&lt;br /&gt;
                        table.insert(out[rtype], recipe)&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end else do&lt;br /&gt;
                if string.match(recipeId, str) then&lt;br /&gt;
                    table.insert(out[rtype], recipe)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- same as above, but returns recipes that *does not* match given pattern&lt;br /&gt;
function getotherrecipesnew(frame, tabl, str) -- should not be invoked&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for type, recipes in pairs(tabl) do&lt;br /&gt;
        if not table.containsk(out, type) then&lt;br /&gt;
            out[type] = {}&lt;br /&gt;
        end&lt;br /&gt;
        for recipeId, recipe in pairs(recipes) do&lt;br /&gt;
            if not string.match(recipeId, str) then&lt;br /&gt;
                if not table.containsv(out[type], recipe) then&lt;br /&gt;
                    table.insert(out[type], recipe)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- you should not use this for building recipes inside lua&lt;br /&gt;
function p.buildnamedrecipesnew(frame) -- {{#invoke:Meals Lookup|buildnamedrecipes|[Pattern1 | Pattern2 | Pattern3 | ...]}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local tablo = p.meals&lt;br /&gt;
    for _, patt in pairs(frame.args) do&lt;br /&gt;
        local ids = getrecipesbynamenew(frame, tablo, patt)&lt;br /&gt;
        out = out .. p.buildrecipeboxuniversal(frame, ids)&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- same as buildnamedrecipes, but instead builds recipes that does not match the pattern&lt;br /&gt;
function p.buildotherrecipesnew(frame) -- {{#invoke:Meals Lookup|buildotherrecipes|[Pattern1 | Pattern2 | Pattern3 | ...]}}&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local tablo = p.meals&lt;br /&gt;
    for _, patt in pairs(frame.args) do&lt;br /&gt;
        local ids = getotherrecipesnew(frame, tablo, patt)&lt;br /&gt;
        out = out .. p.buildrecipeboxuniversal(frame, ids)&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--#endregion&lt;br /&gt;
&lt;br /&gt;
-- tests.&lt;br /&gt;
function p.tests1(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local tablo = p.meals&lt;br /&gt;
    for _, patt in pairs(frame.args) do&lt;br /&gt;
        for type, recipes in pairs(getotherrecipes(frame, tablo, patt)) do&lt;br /&gt;
            out = out .. type .. &amp;quot;(&amp;quot;&lt;br /&gt;
            for k, r in pairs(recipes) do&lt;br /&gt;
                out = out .. &amp;quot; &amp;quot; .. k .. &amp;quot;:&amp;quot; .. r[&amp;quot;id&amp;quot;]&lt;br /&gt;
            end&lt;br /&gt;
            out = out .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.tests2(frame)&lt;br /&gt;
    local out = &amp;quot;&amp;quot;&lt;br /&gt;
    local tablo = p.meals&lt;br /&gt;
    for _, patt in pairs(frame.args) do&lt;br /&gt;
        for type, recipes in pairs(getrecipesbyname(frame, tablo, patt)) do&lt;br /&gt;
            out = out .. type .. &amp;quot;(&amp;quot;&lt;br /&gt;
            for k, r in pairs(recipes) do&lt;br /&gt;
                out = out .. &amp;quot; &amp;quot; .. k .. &amp;quot;:&amp;quot; .. r[&amp;quot;id&amp;quot;]&lt;br /&gt;
            end&lt;br /&gt;
            out = out .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Eddiemercury</name></author>
	</entry>
</feed>