OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // A parser for the Type 2 Charstring Format. | 5 // A parser for the Type 2 Charstring Format. |
6 // http://www.adobe.com/devnet/font/pdfs/5177.Type2.pdf | 6 // http://www.adobe.com/devnet/font/pdfs/5177.Type2.pdf |
7 | 7 |
8 #include "cff_type2_charstring.h" | 8 #include "cff_type2_charstring.h" |
9 | 9 |
10 #include <climits> | 10 #include <climits> |
(...skipping 20 matching lines...) Expand all Loading... |
31 bool ExecuteType2CharString(size_t call_depth, | 31 bool ExecuteType2CharString(size_t call_depth, |
32 const ots::CFFIndex& global_subrs_index, | 32 const ots::CFFIndex& global_subrs_index, |
33 const ots::CFFIndex& local_subrs_index, | 33 const ots::CFFIndex& local_subrs_index, |
34 ots::Buffer *cff_table, | 34 ots::Buffer *cff_table, |
35 ots::Buffer *char_string, | 35 ots::Buffer *char_string, |
36 std::stack<int32_t> *argument_stack, | 36 std::stack<int32_t> *argument_stack, |
37 bool *out_found_endchar, | 37 bool *out_found_endchar, |
38 bool *out_found_width, | 38 bool *out_found_width, |
39 size_t *in_out_num_stems); | 39 size_t *in_out_num_stems); |
40 | 40 |
41 // Converts |op| to a string and returns it. | |
42 const char *Type2CharStringOperatorToString(ots::Type2CharStringOperator op) { | |
43 switch (op) { | |
44 case ots::kHStem: | |
45 return "HStem"; | |
46 case ots::kVStem: | |
47 return "VStem"; | |
48 case ots::kVMoveTo: | |
49 return "VMoveTo"; | |
50 case ots::kRLineTo: | |
51 return "RLineTo"; | |
52 case ots::kHLineTo: | |
53 return "HLineTo"; | |
54 case ots::kVLineTo: | |
55 return "VLineTo"; | |
56 case ots::kRRCurveTo: | |
57 return "RRCurveTo"; | |
58 case ots::kCallSubr: | |
59 return "CallSubr"; | |
60 case ots::kReturn: | |
61 return "Return"; | |
62 case ots::kEndChar: | |
63 return "EndChar"; | |
64 case ots::kHStemHm: | |
65 return "HStemHm"; | |
66 case ots::kHintMask: | |
67 return "HintMask"; | |
68 case ots::kCntrMask: | |
69 return "CntrMask"; | |
70 case ots::kRMoveTo: | |
71 return "RMoveTo"; | |
72 case ots::kHMoveTo: | |
73 return "HMoveTo"; | |
74 case ots::kVStemHm: | |
75 return "VStemHm"; | |
76 case ots::kRCurveLine: | |
77 return "RCurveLine"; | |
78 case ots::kRLineCurve: | |
79 return "RLineCurve"; | |
80 case ots::kVVCurveTo: | |
81 return "VVCurveTo"; | |
82 case ots::kHHCurveTo: | |
83 return "HHCurveTo"; | |
84 case ots::kCallGSubr: | |
85 return "CallGSubr"; | |
86 case ots::kVHCurveTo: | |
87 return "VHCurveTo"; | |
88 case ots::kHVCurveTo: | |
89 return "HVCurveTo"; | |
90 case ots::kAnd: | |
91 return "And"; | |
92 case ots::kOr: | |
93 return "Or"; | |
94 case ots::kNot: | |
95 return "Not"; | |
96 case ots::kAbs: | |
97 return "Abs"; | |
98 case ots::kAdd: | |
99 return "Add"; | |
100 case ots::kSub: | |
101 return "Sub"; | |
102 case ots::kDiv: | |
103 return "Div"; | |
104 case ots::kNeg: | |
105 return "Neg"; | |
106 case ots::kEq: | |
107 return "Eq"; | |
108 case ots::kDrop: | |
109 return "Drop"; | |
110 case ots::kPut: | |
111 return "Put"; | |
112 case ots::kGet: | |
113 return "Get"; | |
114 case ots::kIfElse: | |
115 return "IfElse"; | |
116 case ots::kRandom: | |
117 return "Random"; | |
118 case ots::kMul: | |
119 return "Mul"; | |
120 case ots::kSqrt: | |
121 return "Sqrt"; | |
122 case ots::kDup: | |
123 return "Dup"; | |
124 case ots::kExch: | |
125 return "Exch"; | |
126 case ots::kIndex: | |
127 return "Index"; | |
128 case ots::kRoll: | |
129 return "Roll"; | |
130 case ots::kHFlex: | |
131 return "HFlex"; | |
132 case ots::kFlex: | |
133 return "Flex"; | |
134 case ots::kHFlex1: | |
135 return "HFlex1"; | |
136 case ots::kFlex1: | |
137 return "Flex1"; | |
138 } | |
139 | |
140 return "UNKNOWN"; | |
141 } | |
142 | |
143 // Read one or more bytes from the |char_string| buffer and stores the number | 41 // Read one or more bytes from the |char_string| buffer and stores the number |
144 // read on |out_number|. If the number read is an operator (ex 'vstem'), sets | 42 // read on |out_number|. If the number read is an operator (ex 'vstem'), sets |
145 // true on |out_is_operator|. Returns true if the function read a number. | 43 // true on |out_is_operator|. Returns true if the function read a number. |
146 bool ReadNextNumberFromType2CharString(ots::Buffer *char_string, | 44 bool ReadNextNumberFromType2CharString(ots::Buffer *char_string, |
147 int32_t *out_number, | 45 int32_t *out_number, |
148 bool *out_is_operator) { | 46 bool *out_is_operator) { |
149 uint8_t v = 0; | 47 uint8_t v = 0; |
150 if (!char_string->ReadU8(&v)) { | 48 if (!char_string->ReadU8(&v)) { |
151 return OTS_FAILURE(); | 49 return OTS_FAILURE(); |
152 } | 50 } |
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
880 return OTS_FAILURE(); | 778 return OTS_FAILURE(); |
881 } | 779 } |
882 if (!found_endchar) { | 780 if (!found_endchar) { |
883 return OTS_FAILURE(); | 781 return OTS_FAILURE(); |
884 } | 782 } |
885 } | 783 } |
886 return true; | 784 return true; |
887 } | 785 } |
888 | 786 |
889 } // namespace ots | 787 } // namespace ots |
OLD | NEW |