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);