Module:Cite source

local concat local dump local print local p = {} --p stands for package

function p.getinfo( frame ) -- local text = "" local queryResult = mw.smw.ask( [=[ Rose (TV story) || Rosa (TV story)	if queryResult == nil then       return "(no values)"    end
 * ?Publisher
 * ?Writer
 * ?Release date ]=])

if type( queryResult ) == "table" then return ' ' .. dump(queryResult) .. ' '   end return text end

--from https://sandbox.semantic-mediawiki.org/wiki/Module:Sm --- Concatenates a variable number of strings and numbers to one single string -- ignores tables, bools, functions, and such and replaces them with the empty string -- -- What is the benefit of using variable.concat instead of the .. operator? -- Answer: .. throws an error, when trying to concat bools, tables, functions, etc. -- This here handels them by converting them to an empty string -- -- @param ... varaibles to concatenate -- -- @return string concat = function(...) local args = {...} if #args == 0 then error('you must supply at least one argument to \'concat\' (got none)') end local firstArg = table.remove(args, 1) if type(firstArg) == 'string' or type(firstArg) == 'number' then firstArg = print(firstArg) else firstArg = '' end if #args == 0 then return firstArg else return firstArg .. concat(unpack(args)) end end

--- This dumps the variable (converts it into a string representation of itself) -- -- @param entity mixed, value to dump -- @param indent string, can bu used to set an indentation -- @param omitType bool, set to true to omit the () in front of the value -- -- @return string dump = function(entity, indent, omitType) local entity = entity local indent = indent and indent or '' local omitType = omitType if type( entity ) == 'table' then local subtable if not omitType then subtable = '(table)[' .. #entity .. ']:'       end indent = indent .. '\t' for k, v in pairs( entity ) do           subtable = concat(subtable, '\n', indent, k, ': ', dump(v, indent, omitType)) end return subtable elseif type( entity ) == 'nil' or type( entity ) == 'function' or type( entity ) == 'boolean' then return ( not omitType and '(' .. type(entity) .. ') ' or '' ) .. print(entity) elseif type( entity ) == 'string' then entity = mw.ustring.gsub(mw.ustring.gsub(entity, "\\'", "'"), "'", "\\'") return concat(omitType or '(string) ', '\, entity, '\) else -- number value expected return concat(omitType or '(' .. type( entity ) .. ') ', entity) end end

--- This function prints a variable depending on its type: -- * tables get concatenated by a comma -- * bools get printed as true or false -- * strings and numbers get simple returned as string -- * functions and nils return as emtpy string -- @return string print = function(v) if type( v ) == 'table' then return table.concat(v, ',') elseif type( v ) == 'boolean' then return ( v and 'true' or 'false' ) elseif type(v) == 'string' or type(v) == 'number' then return tostring(v) else return '' end end

return p