6,834
edits
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 | ||
table.insert(argsText, p.getArgSyntaxText(p.getArgParts(arg))) | |||
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> | 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, ' ') | ||
if isEvent then | if isEvent then | ||
rows[i] = { (i + 1)..") ", p.formatType(tokens[1], frame), p.formatName(tokens[2], frame), | 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( | 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 | local entry2 = "'''Example "..exampleIndex.." - "..data2[2]..":'''<br>"..p.loadTemplate(frame, 'CodeSyntax', {entry:gsub("\r\n", "\n"):gsub("\n", "<br>"):gsub("\t", " "),id='example_'..exampleIndex}) | ||
table.insert(examples, | 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 | 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 | 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. | 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 | return "<code>"..type.."</code>" | ||
end | end | ||
Line 1,124: | Line 1,174: | ||
function p.standardizeNullType(type) | function p.standardizeNullType(type) | ||
local type2 = type:lower() | |||
if | 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 | ||
edits