Implemented seac for extents & subset along with API tests
diff --git a/src/hb-cff1-interp-cs.hh b/src/hb-cff1-interp-cs.hh
index 4e4c26d..a745479 100644
--- a/src/hb-cff1-interp-cs.hh
+++ b/src/hb-cff1-interp-cs.hh
@@ -84,6 +84,29 @@
struct CFF1CSOpSet : CSOpSet<Number, OPSET, CFF1CSInterpEnv, PARAM, PATH>
{
/* PostScript-originated legacy opcodes (OpCode_add etc) are unsupported */
+ /* Type 1-originated deprecated opcodes, seac behavior of endchar and dotsection are supported */
+
+ static inline void process_op (OpCode op, CFF1CSInterpEnv &env, PARAM& param)
+ {
+ switch (op) {
+ case OpCode_dotsection:
+ SUPER::flush_args_and_op (op, env, param);
+ break;
+
+ case OpCode_endchar:
+ OPSET::check_width (op, env, param);
+ if (env.argStack.get_count () >= 4)
+ {
+ OPSET::process_seac (env, param);
+ }
+ OPSET::flush_args_and_op (op, env, param);
+ env.set_endchar (true);
+ break;
+
+ default:
+ SUPER::process_op (op, env, param);
+ }
+ }
static inline void check_width (OpCode op, CFF1CSInterpEnv &env, PARAM& param)
{
@@ -93,8 +116,6 @@
switch (op)
{
case OpCode_endchar:
- has_width = (env.argStack.get_count () > 0);
- break;
case OpCode_hstem:
case OpCode_hstemhm:
case OpCode_vstem:
@@ -117,6 +138,10 @@
}
}
+ static inline void process_seac (CFF1CSInterpEnv &env, PARAM& param)
+ {
+ }
+
static inline void flush_args (CFF1CSInterpEnv &env, PARAM& param)
{
SUPER::flush_args (env, param);