266 lines
6.4 KiB
C++
266 lines
6.4 KiB
C++
/**********************************************************************
|
|
|
|
Filename : GFxStringBuiltins.cpp
|
|
Content : ActionScript string bultin manager implementation
|
|
Created : November 15, 2006
|
|
Authors : Michael Antonov
|
|
|
|
Copyright : (c) 2001-2006 Scaleform Corp. All Rights Reserved.
|
|
|
|
Licensees may use this file in accordance with the valid Scaleform
|
|
Commercial License Agreement provided with the software.
|
|
|
|
This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
|
|
THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR ANY PURPOSE.
|
|
|
|
**********************************************************************/
|
|
|
|
#include "GFxStringBuiltins.h"
|
|
|
|
|
|
|
|
// ***** GASStringBuiltinManager
|
|
|
|
GASStringBuiltinManager::GASStringBuiltinManager(GASStringManager* strMgr)
|
|
: StringManager(strMgr)
|
|
{
|
|
InitBuiltins();
|
|
}
|
|
GASStringBuiltinManager::~GASStringBuiltinManager()
|
|
{
|
|
ReleaseBuiltins();
|
|
}
|
|
|
|
|
|
// Build in string table
|
|
static const char* GFx_pASBuiltinTable[] =
|
|
{
|
|
"",
|
|
"Object",
|
|
"Array",
|
|
"String",
|
|
"Number",
|
|
"Boolean",
|
|
"MovieClip",
|
|
"Function",
|
|
"Sound",
|
|
"Button",
|
|
"TextField",
|
|
"Color",
|
|
"Transform",
|
|
"Matrix",
|
|
"Point",
|
|
"Rectangle",
|
|
"ColorTransform",
|
|
"capabilities",
|
|
"Stage",
|
|
"AsBroadcaster",
|
|
"Date",
|
|
"Selection",
|
|
"IME",
|
|
"XML",
|
|
"XMLNode",
|
|
"Math",
|
|
"Key",
|
|
"Mouse",
|
|
"ExternalInterface",
|
|
"MovieClipLoader",
|
|
"BitmapData",
|
|
"LoadVars",
|
|
"TextFormat",
|
|
"StyleSheet",
|
|
"NetConnection",
|
|
"NetStream",
|
|
"Video",
|
|
"BitmapFilter",
|
|
"DropShadowFilter",
|
|
"GlowFilter",
|
|
"BlurFilter",
|
|
"BevelFilter",
|
|
"ColorMatrixFilter",
|
|
"TextSnapshot",
|
|
"SharedObject",
|
|
"LocManager",
|
|
|
|
// Necessary runtime keys
|
|
"<unknown>",
|
|
"<bad type>",
|
|
"<undefined>",
|
|
".",
|
|
"..",
|
|
"undefined",
|
|
"null",
|
|
"true",
|
|
"false",
|
|
// Lowercase types for typeof reporting
|
|
"string",
|
|
"number",
|
|
"boolean",
|
|
"movieclip",
|
|
"object",
|
|
"function",
|
|
// Path components
|
|
"this",
|
|
"super",
|
|
"_global",
|
|
"_root",
|
|
"_parent",
|
|
"_level0",
|
|
"_level0.",
|
|
"arguments",
|
|
"callee",
|
|
"caller",
|
|
|
|
"gfxExtensions",
|
|
"noInvisibleAdvance",
|
|
"continueAnimation",
|
|
// Numbers
|
|
"NaN",
|
|
"Infinity",
|
|
"-Infinity", // "-Infinity"
|
|
|
|
"prototype",
|
|
"__proto__", // "__proto__"
|
|
"constructor",
|
|
"__constructor__", // "__constructor__"
|
|
"_listeners", // "_listeners"
|
|
"__resolve", // "__resolve"
|
|
"[type Function]",
|
|
"[type Object]",
|
|
"[object Object]",
|
|
// Common methods
|
|
"toString",
|
|
"valueOf",
|
|
"onSetFocus",
|
|
"onKillFocus",
|
|
|
|
// Event name strings
|
|
"INVALID", // Event_Invalid "INVALID"
|
|
"onPress", // Event_Press
|
|
"onRelease", // Event_Release
|
|
"onReleaseOutside", // Event_ReleaseOutside
|
|
"onRollOver", // Event_RollOver
|
|
"onRollOut", // Event_RollOut
|
|
"onDragOver", // Event_DragOver
|
|
"onDragOut", // Event_DragOut
|
|
"@keyPress@", // Event_KeyPress "@keyPress@"
|
|
"@initialize@", // Event_Initialize "@initialize@"
|
|
"onLoad", // Event_Load
|
|
"onUnload", // Event_Unload
|
|
"onEnterFrame", // Event_EnterFrame
|
|
"onMouseDown", // Event_MouseDown
|
|
"onMouseUp", // Event_MouseUp
|
|
"onMouseMove", // Event_MouseMove
|
|
"onMouseWheel",
|
|
"onKeyDown", // Event_KeyDown
|
|
"onKeyUp", // Event_KeyUp
|
|
"onData", // Event_Data
|
|
"onConstruct", // Event_Construct
|
|
// These are for the MoveClipLoader ActionScript only
|
|
"onLoadStart", // Event_LoadStart
|
|
"onLoadError", // Event_LoadError
|
|
"onLoadProgress", // Event_LoadProgress
|
|
"onLoadInit", // Event_LoadInit
|
|
// These are for the XMLSocket ActionScript only
|
|
"onSockClose", // Event_SockClose
|
|
"onSockConnect", // Event_SockConnect
|
|
"onSockData", // Event_SockData
|
|
"onSockXML", // Event_SockXML
|
|
// These are for the XML ActionScript only
|
|
"onXMLLoad", // Event_XMLLoad
|
|
"onXMLData", // Event_XMLData
|
|
|
|
"onPressAux", // Event_PressAux
|
|
"onReleaseAux", // Event_ReleaseAux
|
|
"onReleaseOutsideAux", // Event_ReleaseOutsideAux
|
|
"onDragOverAux", // Event_DragOverAux
|
|
"onDragOutAux", // Event_DragOutAux
|
|
|
|
// Common members
|
|
"width",
|
|
"height",
|
|
"useHandCursor",
|
|
|
|
// Sprite members - for efficiency
|
|
"x",
|
|
"y",
|
|
"xMin",
|
|
"xMax",
|
|
"yMin",
|
|
"yMax",
|
|
"hitArea",
|
|
|
|
// Mouse class extensions
|
|
"setCursorType",
|
|
"LEFT",
|
|
"RIGHT",
|
|
"MIDDLE",
|
|
"ARROW",
|
|
"HAND",
|
|
"IBEAM",
|
|
|
|
// Numbers
|
|
"0",
|
|
"1",
|
|
"2",
|
|
"3",
|
|
"4",
|
|
"5",
|
|
"6",
|
|
"7",
|
|
|
|
// Movieclip user data properties
|
|
"rendererString",
|
|
"rendererFloat",
|
|
"rendererMatrix",
|
|
|
|
"focusGroupMask",
|
|
|
|
// AMP
|
|
"Amp",
|
|
|
|
// Put length as last so that we can have checks for it.
|
|
"length"
|
|
};
|
|
|
|
|
|
const char* GASStringBuiltinManager::GetBuiltinCStr(GASBuiltinType btype)
|
|
{
|
|
GCOMPILER_ASSERT((sizeof(GFx_pASBuiltinTable)/sizeof(const char*)) == GASBuiltinConst_Count_);
|
|
GCOMPILER_ASSERT(GASBuiltin_7 == (GASBuiltinType)(GASBuiltin_0 + 7));
|
|
|
|
GASSERT(btype < GASBuiltinConst_Count_);
|
|
return GFx_pASBuiltinTable[btype];
|
|
}
|
|
|
|
void GASStringBuiltinManager::InitBuiltins()
|
|
{
|
|
for (UInt i = 0; i<GASBuiltinConst_Count_; i++)
|
|
{
|
|
GASString str(StringManager->CreateConstString(GFx_pASBuiltinTable[i],
|
|
strlen(GFx_pASBuiltinTable[i]),
|
|
(UInt32)GASString::Flag_Builtin) );
|
|
Builtins[i].pNode = str.pNode;
|
|
str.pNode->AddRef();
|
|
str.pNode->ResolveLowercase_Impl();
|
|
}
|
|
|
|
// If this hits, there is some kind of ordering issue.
|
|
GASSERT(GetBuiltin(GASBuiltin_unknown_) == "<unknown>");
|
|
GASSERT(GetBuiltin(GASBuiltin_prototype) == "prototype");
|
|
GASSERT(GetBuiltin(GASBuiltin_onXMLData) == "onXMLData");
|
|
GASSERT(GetBuiltin(GASBuiltin_length) == "length");
|
|
}
|
|
|
|
void GASStringBuiltinManager::ReleaseBuiltins()
|
|
{
|
|
for (UInt i = 0; i<GASBuiltinConst_Count_; i++)
|
|
{
|
|
Builtins[i].pNode->Release();
|
|
// For safety - these should never be accessed after release.
|
|
Builtins[i].pNode = 0;
|
|
}
|
|
}
|
|
|
|
|