Peedy and Module:Check for unknown parameters: Difference between pages

From Frontierpedia, the Microsoft Agent encyclopedia
(Difference between pages)
frontierpediav5>ItzCrazyScout
m (Reverted edits by StopC3nsorshipF (talk) to last revision by WikiSysop)
 
en>Gonnym
(Added entry point for modules per talk page discussion. Report any errors on talk page.)
 
Line 1: Line 1:
{{Featured article}}{{Infobox acs
-- This module may be used to compare the arguments passed to the parent
| title = Peedy
-- with a list of arguments, returning a specified result if an argument is
| logo = PeedySysTrayIcon.png
-- not on the list
| screenshot = Peedy0000.bmp
local p = {}
| acs_name = Peedy
| developer = Microsoft Corporation
| released = 1997
| character description = I am your Personal Digital Parrot (Peedy for short) and very fond of crackers and good music.
| extra data = Don't call me bird brain!^^Hey, you don't want to forget this!
| animation count = 85
| tts voice = Adult Male #2, American English (TruVoice)
| download = https://tmafe.com/ms-agent-hosting-3/Peedy.acs
}}
Peedy is a [[Microsoft Agent]] character released by Microsoft Corporation. He was one of the original four Microsoft Agents to be released by Microsoft, which also include [[Robby]], [[Merlin]] and [[Genie]]. His appearance is a parrot with green feathers.
== Use in BonziBUDDY ==
Peedy was the original character used in the [[BonziBuddy]] program until version 3.0. However, Microsoft Corporation did not approve of their character being used for the program and BonziBuddy changed its character to the purple gorilla named Bonzi. The Bonzi character stayed in the program until the program was discontinued and remains the main character in BonziBuddy versions 3.x and 4.0.


== Music assistant ==
local function trim(s)
In 1995, Microsoft used a 3D version of Peedy inside of their Winter CES 95 keynote to show off an interactive music assistant that would respond to commands by the user through speech recognition and the mouse. Features inside of this demo include selecting a place for Peedy to fly to, playing songs, showing off animations, and utilizing the speech recognition present inside of the demo to respond to voice commands.
return s:match('^%s*(.-)%s*$')
end


==Character data==
local function isnotempty(s)
{{Character data table
return s and s:match('%S')
| character name = Peedy
end
| file name = Peedy.acs
| description = I am your Personal Digital Parrot (Peedy for short) and very fond of crackers and good music.
| extra data = Don't call me bird brain!^^Hey, you don't want to forget this!
| file size = 3.95 MB
| animations = 84
| tts voice = Adult Male #2, American English (TruVoice)
| guid = {6A069521-46BB-11D1-A6F6-00AA002F83C2}
| ttsmode id = {CA141FD0-AC7F-11D1-97A3-006008273001}
| tts speed = 157
| tts pitch = 130
| width = 160px
| length = 128px
}}


==Gallery==
local function clean(text)
<gallery>
-- Return text cleaned for display and truncated if too long.
File:Peedy0000.bmp|The default animation frame of Peedy.
-- Strip markers are replaced with dummy text representing the original wikitext.
File:PeedySysTrayIcon.png|The system tray icon of Peedy.
local pos, truncated
File:PeedyColorTableEnlarged1.png|The color table used by the Peedy Microsoft Agent character.
local function truncate(text)
File:EveryPeedyAnimationFrame.gif|All frames inside of Peedy.acs.
if truncated then
File:BonziBuddyV2withHomepage.png|Peedy inside of BonziBuddy V2 on top of a bonzi.com window.
return ''
File:Btn peedy.gif|The Peedy download button that Microsoft allowed to be added to websites to promote the character.
end
File:PeedyMusicAssistantSS1.PNG|A screenshot of the Peedy music assistant demo.
if mw.ustring.len(text) > 25 then
</gallery>
truncated = true
== Trivia ==
text = mw.ustring.sub(text, 1, 25) .. '...'
* Peedy was created in 1997.
end
* The description confirms the running-joke in Microsoft Agent series that Peedy likes crackers.
return mw.text.nowiki(text)
* It was one of the four original Microsoft Agents to be released by Microsoft Corporation.
end
* As with most classical Microsoft Agents, they have their own color tables to utilize multiple unique colors to make the character seem higher quality.
local parts = {}
* Peedy is the only one out of the four official Microsoft characters that was not bundled with Microsoft Agent 1.5 and only has a Microsoft Agent 2.0 version, which could mean that he was possibly made in 1998 instead of 1997.
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '&lt;' .. tag .. '&gt;...&lt;/' .. tag .. '&gt;')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end


[[Category:Characters]]
function p._check(args, pargs)
{{MSAgent namespace navbox}}
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
 
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local knownargs = {}
local unknown = args['unknown'] or 'Found _VALUE_, '
local preview = args['preview']
 
local values = {}
local res = {}
local regexps = {}
 
-- create the list of known args, regular expressions, and the return string
for k, v in pairs(args) do
if type(k) == 'number' then
v = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
if isnotempty(preview) then
preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. preview .. ' (this message is shown only in preview).</div>'
elseif preview == nil then
preview = unknown
end
 
-- loop over the parent args, and make sure they are on the list
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) )  then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and
knownargs[tostring(k)] == nil and
( showblankpos or isnotempty(v) )
then
table.insert(values, k .. ' = ' .. clean(v))
end
end
 
-- add results to the output tables
if #values > 0 then
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
unknown = preview
end
for _, v in pairs(values) do
if v == '' then
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
v = ' '
end
-- avoid error with v = 'example%2' ("invalid capture index")
local r =  unknown:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
 
return table.concat(res)
end
 
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
 
return p

Revision as of 17:25, 7 January 2020

Documentation for this module may be created at Module:Check for unknown parameters/doc

-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}

local function trim(s)
	return s:match('^%s*(.-)%s*$')
end

local function isnotempty(s)
	return s and s:match('%S')
end

local function clean(text)
	-- Return text cleaned for display and truncated if too long.
	-- Strip markers are replaced with dummy text representing the original wikitext.
	local pos, truncated
	local function truncate(text)
		if truncated then
			return ''
		end
		if mw.ustring.len(text) > 25 then
			truncated = true
			text = mw.ustring.sub(text, 1, 25) .. '...'
		end
		return mw.text.nowiki(text)
	end
	local parts = {}
	for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
		pos = remainder
		table.insert(parts, truncate(before) .. '&lt;' .. tag .. '&gt;...&lt;/' .. tag .. '&gt;')
	end
	table.insert(parts, truncate(text:sub(pos or 1)))
	return table.concat(parts)
end

function p._check(args, pargs)
	if type(args) ~= "table" or type(pargs) ~= "table" then
		-- TODO: error handling
		return
	end

	local ignoreblank = isnotempty(args['ignoreblank'])
	local showblankpos = isnotempty(args['showblankpositional'])
	local knownargs = {}
	local unknown = args['unknown'] or 'Found _VALUE_, '
	local preview = args['preview']

	local values = {}
	local res = {}
	local regexps = {}

	-- create the list of known args, regular expressions, and the return string
	for k, v in pairs(args) do
		if type(k) == 'number' then
			v = trim(v)
			knownargs[v] = 1
		elseif k:find('^regexp[1-9][0-9]*$') then
			table.insert(regexps, '^' .. v .. '$')
		end
	end
	if isnotempty(preview) then
		preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. preview .. ' (this message is shown only in preview).</div>'
	elseif preview == nil then
		preview = unknown
	end

	-- loop over the parent args, and make sure they are on the list
	for k, v in pairs(pargs) do
		if type(k) == 'string' and knownargs[k] == nil then
			local knownflag = false
			for _, regexp in ipairs(regexps) do
				if mw.ustring.match(k, regexp) then
					knownflag = true
					break
				end
			end
			if not knownflag and ( not ignoreblank or isnotempty(v) )  then
				table.insert(values, clean(k))
			end
		elseif type(k) == 'number' and
			knownargs[tostring(k)] == nil and
			( showblankpos or isnotempty(v) )
		then
			table.insert(values, k .. ' = ' .. clean(v))
		end
	end

	-- add results to the output tables
	if #values > 0 then
		if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
			unknown = preview
		end
		for _, v in pairs(values) do
			if v == '' then
				-- Fix odd bug for | = which gets stripped to the empty string and
				-- breaks category links
				v = ' '
			end
			-- avoid error with v = 'example%2' ("invalid capture index")
			local r =  unknown:gsub('_VALUE_', {_VALUE_ = v})
			table.insert(res, r)
		end
	end

	return table.concat(res)
end

function p.check(frame)
	local args = frame.args
	local pargs = frame:getParent().args
	return p._check(args, pargs)
end

return p