Module:ScriptItem2: Difference between revisions

no edit summary
No edit summary
No edit summary
 
(12 intermediate revisions by the same user not shown)
Line 38: Line 38:
-- Category Names. (String(s) to look for in an item name, case-INsensitive.)
-- Category Names. (String(s) to look for in an item name, case-INsensitive.)
'Blip', 'Building', 'Camera', 'Chatbox', 'Cheat', 'Client', 'Command', 'Cursor', 'Debug', 'Dodo',
'Blip', 'Building', 'Camera', 'Chatbox', 'Cheat', 'Client', 'Command', 'Cursor', 'Debug', 'Dodo',
'Element', 'Entity', 'Event', 'File', 'Font', 'Garage', 'HTTP', 'HUD', 'Key', 'Mission', 'Mouse', 'Network', 'Object',
'Element', 'Entity', 'Event', 'File', 'Font', 'Garage', 'HTTP', 'HUD', 'Key', 'Mission', 'Mouse', 'NetFlags', 'Network', 'Object',
'Pause', 'Ped', 'Pickup', 'Player', 'Process', 'Render', 'Resource', 'Screen', 'Socket', 'Sphere', 'Time', 'Vehicle', 'Weather', 'World'
'Pause', 'Ped', 'Pickup', 'Player', 'Process', 'Render', 'Resource', 'Screen', 'Socket', 'Sphere', 'Time', 'Vehicle', 'Weather', 'World'
}
}
Line 407: Line 407:
else
else
for i,arg in ipairs(entries) do
for i,arg in ipairs(entries) do
local tokens = p.split(arg, ' ')
                table.insert(argsText, p.getArgSyntaxText(p.getArgParts(arg)))
local isOptional = tokens[1]:sub(1, 1) == '['
if isOptional then
tokens[1] = tokens[1]:sub(2, tokens[1]:len())
tokens[4] = tokens[4]:sub(1, tokens[4]:len() - 1)
end
local defaultValue = isOptional and tokens[4] or "n/a"
if isOptional then
table.insert(argsText, '[ '..tokens[1]..' '..tokens[2]..' = '..defaultValue..' ]')
else
table.insert(argsText, tokens[1]..' '..tokens[2])
end
end
end
end
end
Line 441: Line 428:
})
})
end
end
end
function p.getArgParts(text)
--[[
        INPUT EXAMPLES (str)
        Vec3 pos The 3D position
        [Vec3 pos] The 3D position.
        [ Vec3 pos ] The 3D position
        [ Vec3 pos = new Vec3(0.0, 0.0, 0.0) ] The 3D position.
        OUTPUT (table)
        bool parts.optional
        bool parts.defaultValueIsSpecified
str parts.type
str parts.name
str parts.defaultValue
str parts.description
]]
local parts = {}
text = p.trim(text)
    parts.optional = false
local isProbablyOptional = text:sub(1, 1) == '['
if isProbablyOptional then
local optionalEndIndex = p.rfind(text, ']')
if optionalEndIndex then
            parts.optional = true
            local syntaxPart = p.trim(text:sub(2, optionalEndIndex - 1))
            parts.description = p.trim(text:sub(optionalEndIndex + 1, #text))
            local tokens = p.split(syntaxPart, ' ')
            parts.type = tokens[1]
            parts.name = tokens[2]
            parts.defaultValueIsSpecified = tokens[3] == '=' and #tokens >= 4
            parts.defaultValue = table.concat(tokens, ' ', 4, #tokens)
            return parts
        end
    end
    local tokens = p.split(text, ' ')
    parts.type = tokens[1]
    parts.name = tokens[2]
    parts.description = p.trim(table.concat(tokens, ' ', 3, #tokens))
    return parts
end
function p.getArgSyntaxText(parts)
    if parts.optional then
        if parts.defaultValueIsSpecified then
            return '[ '..parts.type..' '..parts.name..' = '..parts.defaultValue..' ]'
        else
            return '[ '..parts.type..' '..parts.name..' ]'
        end
    else
        return parts.type..' '..parts.name
    end
end
end


Line 447: Line 491:
local entries = p.getIndexedArgs(frame, 'desc')
local entries = p.getIndexedArgs(frame, 'desc')
local startTextFirstLine = "The <span style=\"font-family: 'Source Code Pro', monospace;\">"..p.getDisplayedNameColoured(frame).."</span> [[HowTo/Functions|"..args.type.."]] is "..(args.type == "event" and "invoked when" or "used to").." "
local startTextFirstLine = "The <span style=\"font-family: 'Source Code Pro', monospace;\">"..p.getDisplayedNameColoured(frame).."</span> "..args.type:lower().." is "..(args.type == "event" and "invoked when" or "used to").." "
for i,entry in ipairs(entries) do
for i,entry in ipairs(entries) do
Line 474: Line 518:
for i,arg in ipairs(entries) do
for i,arg in ipairs(entries) do
local tokens = p.split(arg, ' ')
local tokens = p.split(arg, ' ')
 
local isOptional = tokens[1]:sub(1, 1) == '['
if isOptional then
tokens[1] = tokens[1]:sub(2, tokens[1]:len())
tokens[4] = tokens[4]:sub(1, tokens[4]:len() - 1)
end
local defaultValue = isOptional and "<span style='font-family: \"Source Code Pro\", monospace;'>"..tokens[4].."</span>" or "n/a"
local description = p.formatDescription(table.concat(tokens, ' ', isOptional and 5 or 3))
if isEvent then
if isEvent then
rows[i] = { (i + 1)..") ", p.formatType(tokens[1], frame), p.formatName(tokens[2], frame), description }
rows[i] = { (i + 1)..") ", p.formatType(tokens[1], frame), p.formatName(tokens[2], frame), p.formatDescription(table.concat(tokens, ' ', 3, #tokens)) }
else
else
rows[i] = { i..") ", p.formatType(tokens[1], frame), p.formatName(tokens[2], frame), (isOptional and ("Optional, defaults to "..defaultValue..". ") or "")..description }
local parts = p.getArgParts(arg)
 
if parts.optional then
if parts.defaultValueIsSpecified then
rows[i] = { i..") ", p.formatType(parts.type, frame), p.formatName(parts.name, frame), "Optional, defaults to "..p.formatDefaultValue(parts.defaultValue, frame)..". "..p.formatDescription(parts.description) }
else
rows[i] = { i..") ", p.formatType(parts.type, frame), p.formatName(parts.name, frame), "Optional, the default value has not been documented here yet. "..p.formatDescription(parts.description) }
end
else
rows[i] = { i..") ", p.formatType(parts.type, frame), p.formatName(parts.name, frame), p.formatDescription(parts.description) }
end
end
end
end
end
Line 760: Line 806:
local entries = p.getIndexedArgs(frame, data2[1])
local entries = p.getIndexedArgs(frame, data2[1])
for i2, entry in ipairs(entries) do
for i2, entry in ipairs(entries) do
local entry = "'''Example "..exampleIndex.." - "..data2[2]..":'''<br>"..p.loadTemplate(frame, 'CodeSyntax', {entry,id='example_'..exampleIndex})
local entry2 = "'''Example "..exampleIndex.." - "..data2[2]..":'''<br>"..p.loadTemplate(frame, 'CodeSyntax', {entry:gsub("\r\n", "\n"):gsub("\n", "<br>"):gsub("\t", "&nbsp;&nbsp;&nbsp;&nbsp;"),id='example_'..exampleIndex})
table.insert(examples, entry)
table.insert(examples, entry2)
exampleIndex = exampleIndex + 1
exampleIndex = exampleIndex + 1
end
end
Line 899: Line 945:
local args = p.getArgs(frame)
local args = p.getArgs(frame)
if p.isOOP(frame) then
if p.isOOP(frame) then
return args.class:lower().."."..args.name
return p.lowerFirstCharCase(args.class).."."..args.name
else
else
return args.name
return args.name
Line 918: Line 964:
local args = p.getArgs(frame)
local args = p.getArgs(frame)
if p.isOOP(frame) then
if p.isOOP(frame) then
return "<span style='color:"..typeRgb..";'>"..args.class:lower().."</span>.<span style='color:"..nameRgb.."';>"..args.name.."</span>"
return "<span style='color:"..typeRgb..";'>"..p.lowerFirstCharCase(args.class).."</span>.<span style='color:"..nameRgb.."';>"..args.name.."</span>"
else
else
return "<span style='color:"..nameRgb.."';>"..args.name.."</span>"
return "<span style='color:"..nameRgb.."';>"..args.name.."</span>"
Line 1,098: Line 1,144:
function p.isCancellable(frame)
function p.isCancellable(frame)
local args = p.getArgs(frame)
local args = p.getArgs(frame)
return (args.cancellable and args.cancellable == 'true') or (args.cancelable and args.cancelable == 'true')
return (args.cancel and args.cancel == 'true') or (args.cancel and args.cancel == 'true')
end
end


Line 1,107: Line 1,153:
function p.formatName(name, frame)
function p.formatName(name, frame)
return "<span style='font-family: \"Source Code Pro\", monospace; color: "..p.getNameRgb()..";\"'>"..name.."</span>"
return "<span style='font-family: \"Source Code Pro\", monospace; color: "..p.getNameRgb()..";\"'>"..name.."</span>"
end
function p.formatDefaultValue(value, frame)
return "<span style='font-family: \"Source Code Pro\", monospace; color: "..p.getNameRgb()..";\"'>"..value.."</span>"
end
end


function p.formatSource(type, frame)
function p.formatSource(type, frame)
return frame:preprocess('<source>'..type..'</source>')
return "<code>"..type.."</code>"
end
end


Line 1,124: Line 1,174:


function p.standardizeNullType(type)
function p.standardizeNullType(type)
type = type:lower()
local type2 = type:lower()
if type == 'void' or type == 'null' or type == 'undefined' or type == 'n/a' then
if type2 == 'void' or type2 == 'null' or type2 == 'undefined' or type2 == 'n/a' then
return 'void'
return 'void'
else
else
Line 1,174: Line 1,224:


   return r, n
   return r, n
end
function p.rfind(s, find)
local index = s:reverse():find(find)
if not index then return end
return #s - index + 1
end
function p.trim(s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
end


Line 1,248: Line 1,308:
function p.properCase(text)
function p.properCase(text)
return text:sub(1,1):upper()..text:sub(2):lower()
return text:sub(1,1):upper()..text:sub(2):lower()
end
function p.lowerFirstCharCase(text)
return text:sub(1,1):lower()..text:sub(2)
end
end


6,834

edits