Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: skia/animator/SkScript.h

Issue 113827: Remove the remainder of the skia source code from the Chromium repo.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « skia/animator/SkSVGPath.cpp ('k') | skia/animator/SkScript.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* libs/graphics/animator/SkScript.h
2 **
3 ** Copyright 2006, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17
18 #ifndef SkScript_DEFINED
19 #define SkScript_DEFINED
20
21 #include "SkOperand.h"
22 #include "SkIntArray.h"
23 #include "SkTDict.h"
24 #include "SkTDStack.h"
25
26 class SkAnimateMaker;
27
28 class SkScriptEngine {
29 public:
30 enum Error {
31 kNoError,
32 kArrayIndexOutOfBounds,
33 kCouldNotFindReferencedID,
34 kDotOperatorExpectsObject,
35 kErrorInArrrayIndex,
36 kErrorInFunctionParameters,
37 kExpectedArray,
38 kExpectedBooleanExpression,
39 kExpectedFieldName,
40 kExpectedHex,
41 kExpectedIntForConditionOperator,
42 kExpectedNumber,
43 kExpectedNumberForArrayIndex,
44 kExpectedOperator,
45 kExpectedToken,
46 kExpectedTokenBeforeDotOperator,
47 kExpectedValue,
48 kHandleMemberFailed,
49 kHandleMemberFunctionFailed,
50 kHandleUnboxFailed,
51 kIndexOutOfRange,
52 kMismatchedArrayBrace,
53 kMismatchedBrackets,
54 kNoFunctionHandlerFound,
55 kPrematureEnd,
56 kTooManyParameters,
57 kTypeConversionFailed,
58 kUnterminatedString
59 };
60
61 enum SkOpType {
62 kNoType,
63 kInt = 1,
64 kScalar = 2,
65 kString = 4,
66 kArray = 8,
67 kObject = 16
68 // kStruct = 32
69 };
70
71 typedef bool (*_boxCallBack)(void* userStorage, SkScriptValue* result);
72 typedef bool (*_functionCallBack)(const char* func, size_t len, SkTDArray<Sk ScriptValue>& params,
73 void* userStorage, SkScriptValue* result);
74 typedef bool (*_memberCallBack)(const char* member, size_t len, void* object ,
75 void* userStorage, SkScriptValue* result);
76 typedef bool (*_memberFunctionCallBack)(const char* member, size_t len, void * object,
77 SkTDArray<SkScriptValue>& params, void* userStorage, SkScriptValue* resu lt);
78 // typedef bool (*_objectToStringCallBack)(void* object, void* userStorage, SkS criptValue* result);
79 typedef bool (*_propertyCallBack)(const char* prop, size_t len, void* userSt orage, SkScriptValue* result);
80 typedef bool (*_unboxCallBack)(void* userStorage, SkScriptValue* result);
81 SkScriptEngine(SkOpType returnType);
82 ~SkScriptEngine();
83 void boxCallBack(_boxCallBack func, void* userStorage);
84 bool convertTo(SkDisplayTypes , SkScriptValue* );
85 bool evaluateScript(const char** script, SkScriptValue* value);
86 void forget(SkTypedArray* array);
87 void functionCallBack(_functionCallBack func, void* userStorage);
88 Error getError() const { return fError; }
89 #ifdef SK_DEBUG
90 bool getErrorString(SkString* err) const;
91 #endif
92 void memberCallBack(_memberCallBack , void* userStorage);
93 void memberFunctionCallBack(_memberFunctionCallBack , void* userStorage);
94 // void objectToStringCallBack(_objectToStringCallBack , void* userStorage);
95 void propertyCallBack(_propertyCallBack prop, void* userStorage);
96 void track(SkTypedArray* array);
97 void track(SkString* string);
98 void unboxCallBack(_unboxCallBack func, void* userStorage);
99 static bool ConvertTo(SkScriptEngine* , SkDisplayTypes toType, SkScriptValue * value);
100 static SkScalar IntToScalar(int32_t );
101 static SkDisplayTypes ToDisplayType(SkOpType type);
102 static SkOpType ToOpType(SkDisplayTypes type);
103 static bool ValueToString(SkScriptValue value, SkString* string);
104
105 enum CallBackType {
106 kBox,
107 kFunction,
108 kMember,
109 kMemberFunction,
110 // kObjectToString,
111 kProperty,
112 kUnbox
113 };
114
115 struct UserCallBack {
116 CallBackType fCallBackType;
117 void* fUserStorage;
118 union {
119 _boxCallBack fBoxCallBack;
120 _functionCallBack fFunctionCallBack;
121 _memberCallBack fMemberCallBack;
122 _memberFunctionCallBack fMemberFunctionCallBack;
123 // _objectToStringCallBack fObjectToStringCallBack;
124 _propertyCallBack fPropertyCallBack;
125 _unboxCallBack fUnboxCallBack;
126 };
127 };
128
129 enum SkOp {
130 kUnassigned,
131 kAdd,
132 kAddInt = kAdd,
133 kAddScalar,
134 kAddString, // string concat
135 kArrayOp,
136 kBitAnd,
137 kBitNot,
138 kBitOr,
139 kDivide,
140 kDivideInt = kDivide,
141 kDivideScalar,
142 kElse,
143 kEqual,
144 kEqualInt = kEqual,
145 kEqualScalar,
146 kEqualString,
147 kFlipOps,
148 kGreaterEqual,
149 kGreaterEqualInt = kGreaterEqual,
150 kGreaterEqualScalar,
151 kGreaterEqualString,
152 kIf,
153 kLogicalAnd,
154 kLogicalNot,
155 kLogicalOr,
156 kMinus,
157 kMinusInt = kMinus,
158 kMinusScalar,
159 kModulo,
160 kModuloInt = kModulo,
161 kModuloScalar,
162 kMultiply,
163 kMultiplyInt = kMultiply,
164 kMultiplyScalar,
165 kParen,
166 kShiftLeft,
167 kShiftRight, // signed
168 kSubtract,
169 kSubtractInt = kSubtract,
170 kSubtractScalar,
171 kXor,
172 kArtificialOp = 0x40
173 };
174
175 enum SkOpBias {
176 kNoBias,
177 kTowardsNumber = 0,
178 kTowardsString
179 };
180
181 protected:
182
183 struct SkOperatorAttributes {
184 unsigned int fLeftType : 3; // SkOpType, but only lower values
185 unsigned int fRightType : 3; // SkOpType, but only lower values
186 SkOpBias fBias : 1;
187 };
188
189 struct SkSuppress { // !!! could be compressed to a long
190 SkOp fOperator; // operand which enabled suppression
191 int fOpStackDepth; // depth when suppression operator was found
192 SkBool8 fSuppress; // set if suppression happens now, as opposed to late r
193 SkBool8 fElse; // set on the : half of ? :
194 };
195
196 static const SkOperatorAttributes gOpAttributes[];
197 static const signed char gPrecedence[];
198 int arithmeticOp(char ch, char nextChar, bool lastPush);
199 void commonCallBack(CallBackType type, UserCallBack& callBack, void* userSto rage);
200 bool convertParams(SkTDArray<SkScriptValue>&, const SkFunctionParamType* ,
201 int paramTypeCount);
202 void convertToString(SkOperand& operand, SkDisplayTypes type) {
203 SkScriptValue scriptValue;
204 scriptValue.fOperand = operand;
205 scriptValue.fType = type;
206 convertTo(SkType_String, &scriptValue);
207 operand = scriptValue.fOperand;
208 }
209 bool evaluateDot(const char*& script, bool suppressed);
210 bool evaluateDotParam(const char*& script, bool suppressed, const char* fiel d, size_t fieldLength);
211 bool functionParams(const char** scriptPtr, SkTDArray<SkScriptValue>& params );
212 bool handleArrayIndexer(const char** scriptPtr, bool suppressed);
213 bool handleBox(SkScriptValue* value);
214 bool handleFunction(const char** scriptPtr, bool suppressed);
215 bool handleMember(const char* field, size_t len, void* object);
216 bool handleMemberFunction(const char* field, size_t len, void* object, SkTDA rray<SkScriptValue>& params);
217 // bool handleObjectToString(void* object);
218 bool handleProperty(bool suppressed);
219 bool handleUnbox(SkScriptValue* scriptValue);
220 bool innerScript(const char** scriptPtr, SkScriptValue* value);
221 int logicalOp(char ch, char nextChar);
222 Error opError();
223 bool processOp();
224 void setAnimateMaker(SkAnimateMaker* maker) { fMaker = maker; }
225 bool setError(Error , const char* pos);
226 enum SkBraceStyle {
227 // kStructBrace,
228 kArrayBrace,
229 kFunctionBrace
230 };
231
232 #if 0
233 SkIntArray(SkBraceStyle) fBraceStack; // curly, square, function paren
234 SkIntArray(SkOp) fOpStack;
235 SkIntArray(SkOpType) fTypeStack;
236 SkTDOperandArray fOperandStack;
237 SkTDArray<SkSuppress> fSuppressStack;
238 #else
239 SkTDStack<SkBraceStyle> fBraceStack; // curly, square, function paren
240 SkTDStack<SkOp> fOpStack;
241 SkTDStack<SkOpType> fTypeStack;
242 SkTDStack<SkOperand> fOperandStack;
243 SkTDStack<SkSuppress> fSuppressStack;
244 #endif
245 SkAnimateMaker* fMaker;
246 SkTDTypedArrayArray fTrackArray;
247 SkTDStringArray fTrackString;
248 const char* fToken; // one-deep stack
249 size_t fTokenLength;
250 SkTDArray<UserCallBack> fUserCallBacks;
251 SkOpType fReturnType;
252 Error fError;
253 int fErrorPosition;
254 private:
255 friend class SkTypedArray;
256 #ifdef SK_SUPPORT_UNITTEST
257 public:
258 static void UnitTest();
259 #endif
260 };
261
262 #ifdef SK_SUPPORT_UNITTEST
263
264 struct SkScriptNAnswer {
265 const char* fScript;
266 SkDisplayTypes fType;
267 int32_t fIntAnswer;
268 SkScalar fScalarAnswer;
269 const char* fStringAnswer;
270 };
271
272 #endif
273
274 #endif // SkScript_DEFINED
OLDNEW
« no previous file with comments | « skia/animator/SkSVGPath.cpp ('k') | skia/animator/SkScript.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698