sig   type tag   module Tag :     sig       type t = Otfm.tag       val cmap : Otfm.tag       val head : Otfm.tag       val hhea : Otfm.tag       val hmtx : Otfm.tag       val maxp : Otfm.tag       val name : Otfm.tag       val os2 : Otfm.tag       val post : Otfm.tag       val cvt : Otfm.tag       val fpgm : Otfm.tag       val glyf : Otfm.tag       val loca : Otfm.tag       val prep : Otfm.tag       val cff : Otfm.tag       val vorg : Otfm.tag       val ebdt : Otfm.tag       val eblc : Otfm.tag       val ebsc : Otfm.tag       val dsig : Otfm.tag       val gasp : Otfm.tag       val hdmx : Otfm.tag       val kern : Otfm.tag       val ltsh : Otfm.tag       val pclt : Otfm.tag       val vdmx : Otfm.tag       val vhea : Otfm.tag       val vmtx : Otfm.tag       val base : Otfm.tag       val gdef : Otfm.tag       val gpos : Otfm.tag       val gsub : Otfm.tag       val jstf : Otfm.tag       val of_bytes : string -> Otfm.tag       val to_bytes : Otfm.tag -> string       val to_int32 : Otfm.tag -> int32       val of_int32 : int32 -> Otfm.tag       val compare : Otfm.tag -> Otfm.tag -> int       val pp : Format.formatter -> Otfm.tag -> unit     end   type cp = int   type cp_range = Otfm.cp * Otfm.cp   val is_cp : int -> bool   type error_ctx = [ `Offset_table | `Table of Otfm.tag | `Table_directory ]   type error =       [ `Invalid_cp of int       | `Invalid_cp_range of int * int       | `Invalid_offset of Otfm.error_ctx * int       | `Invalid_postscript_name of string       | `Missing_required_table of Otfm.tag       | `Unexpected_eoi of Otfm.error_ctx       | `Unknown_composite_format of Otfm.error_ctx * int       | `Unknown_flavour of Otfm.tag       | `Unknown_loca_format of Otfm.error_ctx * int       | `Unknown_version of Otfm.error_ctx * int32       | `Unsupported_TTC       | `Unsupported_cmaps of (int * int * int) list       | `Unsupported_glyf_matching_points ]   val pp_error : Format.formatter -> [< Otfm.error ] -> unit   type src = [ `String of string ]   type decoder   val decoder : [< Otfm.src ] -> Otfm.decoder   val decoder_src : Otfm.decoder -> Otfm.src   type flavour = [ `CFF | `TTF ]   val flavour :     Otfm.decoder -> [> `Error of Otfm.error | `Ok of Otfm.flavour ]   val table_list :     Otfm.decoder -> [> `Error of Otfm.error | `Ok of Otfm.tag list ]   val table_mem :     Otfm.decoder -> Otfm.tag -> [> `Error of Otfm.error | `Ok of bool ]   val table_raw :     Otfm.decoder ->     Otfm.tag -> [> `Error of Otfm.error | `Ok of string option ]   val glyph_count : Otfm.decoder -> [> `Error of Otfm.error | `Ok of int ]   val postscript_name :     Otfm.decoder -> [> `Error of Otfm.error | `Ok of string option ]   type glyph_id = int   type map_kind = [ `Glyph | `Glyph_range ]   val cmap :     Otfm.decoder ->     ('-> Otfm.map_kind -> Otfm.cp_range -> Otfm.glyph_id -> 'a) ->     '-> [> `Error of Otfm.error | `Ok of (int * int * int) * 'a ]   type glyf_loc   type glyph_simple_descr = (bool * int * int) list list   type glyph_composite_descr =       (Otfm.glyph_id * (int * int) * (float * float * float * float) option)       list   type glyph_descr =       [ `Composite of Otfm.glyph_composite_descr       | `Simple of Otfm.glyph_simple_descr ] * (int * int * int * int)   val glyf :     Otfm.decoder ->     Otfm.glyf_loc -> [> `Error of Otfm.error | `Ok of Otfm.glyph_descr ]   type head = {     head_font_revision : int32;     head_flags : int;     head_units_per_em : int;     head_created : float;     head_modified : float;     head_xmin : int;     head_ymin : int;     head_xmax : int;     head_ymax : int;     head_mac_style : int;     head_lowest_rec_ppem : int;     head_index_to_loc_format : int;   }   val head : Otfm.decoder -> [> `Error of Otfm.error | `Ok of Otfm.head ]   type hhea = {     hhea_ascender : int;     hhea_descender : int;     hhea_line_gap : int;     hhea_advance_width_max : int;     hhea_min_left_side_bearing : int;     hhea_min_right_side_bearing : int;     hhea_xmax_extent : int;     hhea_caret_slope_rise : int;     hhea_caret_slope_run : int;     hhea_caret_offset : int;   }   val hhea : Otfm.decoder -> [> `Error of Otfm.error | `Ok of Otfm.hhea ]   val hmtx :     Otfm.decoder ->     ('-> Otfm.glyph_id -> int -> int -> 'a) ->     '-> [> `Error of Otfm.error | `Ok of 'a ]   type lang = string   val name :     Otfm.decoder ->     ('-> int -> Otfm.lang -> string -> 'a) ->     '-> [> `Error of Otfm.error | `Ok of 'a ]   type os2 = {     os2_x_avg_char_width : int;     os2_us_weight_class : int;     os2_us_width_class : int;     os2_fs_type : int;     os2_y_subscript_x_size : int;     os2_y_subscript_y_size : int;     os2_y_subscript_x_offset : int;     os2_y_subscript_y_offset : int;     os2_y_superscript_x_size : int;     os2_y_superscript_y_size : int;     os2_y_superscript_x_offset : int;     os2_y_superscript_y_offset : int;     os2_y_strikeout_size : int;     os2_y_strikeout_position : int;     os2_family_class : int;     os2_panose : string;     os2_ul_unicode_range1 : int32;     os2_ul_unicode_range2 : int32;     os2_ul_unicode_range3 : int32;     os2_ul_unicode_range4 : int32;     os2_ach_vend_id : int32;     os2_fs_selection : int;     os2_us_first_char_index : int;     os2_us_last_char_index : int;     os2_s_typo_ascender : int;     os2_s_type_descender : int;     os2_s_typo_linegap : int;     os2_us_win_ascent : int;     os2_us_win_descent : int;     os2_ul_code_page_range_1 : int32 option;     os2_ul_code_page_range_2 : int32 option;     os2_s_x_height : int option;     os2_s_cap_height : int option;     os2_us_default_char : int option;     os2_us_break_char : int option;     os2_us_max_context : int option;   }   val os2 : Otfm.decoder -> [> `Error of Otfm.error | `Ok of Otfm.os2 ]   type kern_info = {     kern_dir : [ `H | `V ];     kern_kind : [ `Kern | `Min ];     kern_cross_stream : bool;   }   val kern :     Otfm.decoder ->     ('-> Otfm.kern_info -> [ `Fold | `Skip ] * 'a) ->     ('-> Otfm.glyph_id -> Otfm.glyph_id -> int -> 'a) ->     '-> [> `Error of Otfm.error | `Ok of 'a ]   val loca :     Otfm.decoder ->     Otfm.glyph_id -> [> `Error of Otfm.error | `Ok of Otfm.glyf_loc option ] end