| Index: third_party/ots/src/cff_type2_charstring.h
 | 
| diff --git a/third_party/ots/src/cff_type2_charstring.h b/third_party/ots/src/cff_type2_charstring.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..673234257bd57f454f1189333a9154351309e949
 | 
| --- /dev/null
 | 
| +++ b/third_party/ots/src/cff_type2_charstring.h
 | 
| @@ -0,0 +1,101 @@
 | 
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#ifndef OTS_CFF_TYPE2_CHARSTRING_H_
 | 
| +#define OTS_CFF_TYPE2_CHARSTRING_H_
 | 
| +
 | 
| +#include "cff.h"
 | 
| +#include "ots.h"
 | 
| +
 | 
| +#include <map>
 | 
| +#include <vector>
 | 
| +
 | 
| +namespace ots {
 | 
| +
 | 
| +// Validates all charstrings in |char_strings_index|. Charstring is a small
 | 
| +// language for font hinting defined in Adobe Technical Note #5177.
 | 
| +// http://www.adobe.com/devnet/font/pdfs/5177.Type2.pdf
 | 
| +//
 | 
| +// The validation will fail if one of the following conditions is met:
 | 
| +//  1. The code uses more than 48 values of argument stack.
 | 
| +//  2. The code uses deeply nested subroutine calls (more than 10 levels.)
 | 
| +//  3. The code passes invalid number of operands to an operator.
 | 
| +//  4. The code calls an undefined global or local subroutine.
 | 
| +//  5. The code uses one of the following operators that are unlikely used in
 | 
| +//     an ordinary fonts, and could be dangerous: random, put, get, index, roll.
 | 
| +//
 | 
| +// Arguments:
 | 
| +//  global_subrs_index: Global subroutines which could be called by a charstring
 | 
| +//                      in |char_strings_index|.
 | 
| +//  fd_select: A map from glyph # to font #.
 | 
| +//  local_subrs_per_font: A list of Local Subrs associated with FDArrays. Can be
 | 
| +//                        empty.
 | 
| +//  local_subrs: A Local Subrs associated with Top DICT. Can be NULL.
 | 
| +//  cff_table: A buffer which contains actual byte code of charstring, global
 | 
| +//             subroutines and local subroutines.
 | 
| +bool ValidateType2CharStringIndex(
 | 
| +    OpenTypeFile *file,
 | 
| +    const CFFIndex &char_strings_index,
 | 
| +    const CFFIndex &global_subrs_index,
 | 
| +    const std::map<uint16_t, uint8_t> &fd_select,
 | 
| +    const std::vector<CFFIndex *> &local_subrs_per_font,
 | 
| +    const CFFIndex *local_subrs,
 | 
| +    Buffer *cff_table);
 | 
| +
 | 
| +// The list of Operators. See Appendix. A in Adobe Technical Note #5177.
 | 
| +enum Type2CharStringOperator {
 | 
| +  kHStem = 1,
 | 
| +  kVStem = 3,
 | 
| +  kVMoveTo = 4,
 | 
| +  kRLineTo = 5,
 | 
| +  kHLineTo = 6,
 | 
| +  kVLineTo = 7,
 | 
| +  kRRCurveTo = 8,
 | 
| +  kCallSubr = 10,
 | 
| +  kReturn = 11,
 | 
| +  kEndChar = 14,
 | 
| +  kHStemHm = 18,
 | 
| +  kHintMask = 19,
 | 
| +  kCntrMask = 20,
 | 
| +  kRMoveTo = 21,
 | 
| +  kHMoveTo = 22,
 | 
| +  kVStemHm = 23,
 | 
| +  kRCurveLine = 24,
 | 
| +  kRLineCurve = 25,
 | 
| +  kVVCurveTo = 26,
 | 
| +  kHHCurveTo = 27,
 | 
| +  kCallGSubr = 29,
 | 
| +  kVHCurveTo = 30,
 | 
| +  kHVCurveTo = 31,
 | 
| +  kDotSection = 12 << 8,
 | 
| +  kAnd = (12 << 8) + 3,
 | 
| +  kOr = (12 << 8) + 4,
 | 
| +  kNot = (12 << 8) + 5,
 | 
| +  kAbs = (12 << 8) + 9,
 | 
| +  kAdd = (12 << 8) + 10,
 | 
| +  kSub = (12 << 8) + 11,
 | 
| +  kDiv = (12 << 8) + 12,
 | 
| +  kNeg = (12 << 8) + 14,
 | 
| +  kEq = (12 << 8) + 15,
 | 
| +  kDrop = (12 << 8) + 18,
 | 
| +  kPut = (12 << 8) + 20,
 | 
| +  kGet = (12 << 8) + 21,
 | 
| +  kIfElse = (12 << 8) + 22,
 | 
| +  kRandom = (12 << 8) + 23,
 | 
| +  kMul = (12 << 8) + 24,
 | 
| +  kSqrt = (12 << 8) + 26,
 | 
| +  kDup = (12 << 8) + 27,
 | 
| +  kExch = (12 << 8) + 28,
 | 
| +  kIndex = (12 << 8) + 29,
 | 
| +  kRoll = (12 << 8) + 30,
 | 
| +  kHFlex = (12 << 8) + 34,
 | 
| +  kFlex = (12 << 8) + 35,
 | 
| +  kHFlex1 = (12 << 8) + 36,
 | 
| +  kFlex1 = (12 << 8) + 37,
 | 
| +  // Operators that are undocumented, such as 'blend', will be rejected.
 | 
| +};
 | 
| +
 | 
| +}  // namespace ots
 | 
| +
 | 
| +#endif  // OTS_CFF_TYPE2_CHARSTRING_H_
 | 
| 
 |