Open manifest JSON file and build icon map

        Args:
            fp (string or fileobject): Either manifest filepath to open or
                manifest File object.

        Returns:
            dict: Webfont icon map. Contains:

            * ``class_name``: Builded icon classname with prefix configured
              in manifest (from parameters in Icomoon interface);
            * ``int``: Icon integer code like ``59649``;
            * ``hex``: Icon hexadecimal code like ``0xe901``;
            * ``unicode``: Icon unicode like ``U+E901``;
            * ``utf8``! Icon UTF8 code like ``\e901``;

def parse_manifest(self, fp):
        """
        Open manifest JSON file and build icon map

        Args:
            fp (string or fileobject): Either manifest filepath to open or
                manifest File object.

        Returns:
            dict: Webfont icon map. Contains:

            * ``class_name``: Builded icon classname with prefix configured
              in manifest (from parameters in Icomoon interface);
            * ``int``: Icon integer code like ``59649``;
            * ``hex``: Icon hexadecimal code like ``0xe901``;
            * ``unicode``: Icon unicode like ``U+E901``;
            * ``utf8``! Icon UTF8 code like ``\e901``;
        """
        # Given a string for file path to open
        if isinstance(fp, string_types):
            fp = io.open(fp, 'r', encoding='utf-8')

        with fp as json_file:
            webfont_manifest = json.load(json_file)

        # Get the font set prefix to know the css classname
        icon_prefix = webfont_manifest.get('preferences').get('fontPref').get('prefix')

        # Get sorted icons
        icons_map = OrderedDict()
        sorted_entries = sorted(webfont_manifest.get('icons'), key=self.get_icon_key)
        for icon_entry in sorted_entries:
            name = icon_entry.get('properties').get('name')
            code = icon_entry.get('properties').get('code')
            hexa_code = hex(code)

            icons_map[name] = {
                'class_name': icon_prefix + name,
                'int': code,
                'hex': hexa_code,
                'unicode': 'U+'+''.join(hex(code).split('x')[1:]).upper(),
                'utf8': '\\'+''.join(hex(code).split('x')[1:]).lower(),
            }

        return icons_map