• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkSVGAttributeParser_DEFINED
9 #define SkSVGAttributeParser_DEFINED
10 
11 #include "SkSVGTypes.h"
12 
13 class SkSVGAttributeParser : public SkNoncopyable {
14 public:
15     SkSVGAttributeParser(const char[]);
16 
17     bool parseColor(SkSVGColorType*);
18     bool parseClipPath(SkSVGClip*);
19     bool parseFillRule(SkSVGFillRule*);
20     bool parseNumber(SkSVGNumberType*);
21     bool parseLength(SkSVGLength*);
22     bool parseViewBox(SkSVGViewBoxType*);
23     bool parseTransform(SkSVGTransformType*);
24     bool parsePaint(SkSVGPaint*);
25     bool parseLineCap(SkSVGLineCap*);
26     bool parseLineJoin(SkSVGLineJoin*);
27     bool parsePoints(SkSVGPointsType*);
28     bool parseIRI(SkSVGStringType*);
29     bool parseSpreadMethod(SkSVGSpreadMethod*);
30 
31 private:
32     // Stack-only
33     void* operator new(size_t) = delete;
34     void* operator new(size_t, void*) = delete;
35 
36     template <typename F>
37     bool advanceWhile(F func);
38 
39     bool parseWSToken();
40     bool parseEOSToken();
41     bool parseSepToken();
42     bool parseExpectedStringToken(const char*);
43     bool parseScalarToken(SkScalar*);
44     bool parseHexToken(uint32_t*);
45     bool parseLengthUnitToken(SkSVGLength::Unit*);
46     bool parseNamedColorToken(SkColor*);
47     bool parseHexColorToken(SkColor*);
48     bool parseColorComponentToken(int32_t*);
49     bool parseRGBColorToken(SkColor*);
50     bool parseFuncIRI(SkSVGStringType*);
51 
52     // Transform helpers
53     bool parseMatrixToken(SkMatrix*);
54     bool parseTranslateToken(SkMatrix*);
55     bool parseScaleToken(SkMatrix*);
56     bool parseRotateToken(SkMatrix*);
57     bool parseSkewXToken(SkMatrix*);
58     bool parseSkewYToken(SkMatrix*);
59 
60     // Parses a sequence of 'WS* <prefix> WS* (<nested>)', where the nested sequence
61     // is handled by the passed functor.
62     template <typename Func, typename T>
63     bool parseParenthesized(const char* prefix, Func, T* result);
64 
65     // The current position in the input string.
66     const char* fCurPos;
67 
68     typedef SkNoncopyable INHERITED;
69 };
70 
71 #endif // SkSVGAttributeParser_DEFINED
72