# File lib/ttfunk/table/glyf.rb, line 29
      def for(glyph_id)
        return @cache[glyph_id] if @cache.key?(glyph_id)

        index = file.glyph_locations.index_of(glyph_id)
        size  = file.glyph_locations.size_of(glyph_id)

        if size.zero? # blank glyph, e.g. space character
          @cache[glyph_id] = nil
          return nil
        end

        parse_from(offset + index) do
          raw = io.read(size)
          number_of_contours, x_min, y_min, x_max, y_max = raw.unpack("n5").map { |i| to_signed(i) }

          @cache[glyph_id] = if number_of_contours == -1
              Compound.new(raw, x_min, y_min, x_max, y_max)
            else
              Simple.new(raw, number_of_contours, x_min, y_min, x_max, y_max)
            end
        end
      end