[
  {
    "path": ".gitignore",
    "content": "# Created by https://www.gitignore.io/api/python,pycharm,osx\n\n### Python ###\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nenv/\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\n*.egg-info/\n.installed.cfg\n*.egg\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*,cover\n.hypothesis/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule\n\n# dotenv\n.env\n\n# virtualenv\n.venv/\nvenv/\nENV/\n\n# Spyder project settings\n.spyderproject\n\n# Rope project settings\n.ropeproject\n\n\n### PyCharm ###\n# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm\n# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839\n\n# User-specific stuff:\n.idea/workspace.xml\n.idea/tasks.xml\n\n# Sensitive or high-churn files:\n.idea/dataSources/\n.idea/dataSources.ids\n.idea/dataSources.xml\n.idea/dataSources.local.xml\n.idea/sqlDataSources.xml\n.idea/dynamic.xml\n.idea/uiDesigner.xml\n\n# Gradle:\n.idea/gradle.xml\n.idea/libraries\n\n# Mongo Explorer plugin:\n.idea/mongoSettings.xml\n\n## File-based project format:\n*.iws\n\n## Plugin-specific files:\n\n# IntelliJ\n/out/\n\n# mpeltonen/sbt-idea plugin\n.idea_modules/\n\n# JIRA plugin\natlassian-ide-plugin.xml\n\n# Crashlytics plugin (for Android Studio and IntelliJ)\ncom_crashlytics_export_strings.xml\ncrashlytics.properties\ncrashlytics-build.properties\nfabric.properties\n\n### PyCharm Patch ###\n# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721\n\n# *.iml\n# modules.xml\n# .idea/misc.xml\n# *.ipr\n\n\n### OSX ###\n*.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n# Thumbnails\n._*\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n# End of https://www.gitignore.io/api/python,pycharm,osx\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: python\n\npython:\n  - \"2.7\"\n  - \"3.4\"\n  - \"3.5\"\n  - \"3.6\"\n\ninstall:\n  - pip install -r requirements/dev.txt\n  - pip install tox-travis\n\nscript:\n  - tox\n  - coverage run --source icon_font_to_png -m py.test\n  - coverage report -m\n\nafter_success:\n  - coveralls\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016-2017 Pythonity\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include *.md\ninclude *.txt\ninclude *.yml\ninclude LICENSE\ninclude tox.ini\nrecursive-include icon_font_to_png *.css\nrecursive-include icon_font_to_png *.png\nrecursive-include icon_font_to_png *.py\nrecursive-include icon_font_to_png *.ttf\nrecursive-include requirements *.txt\n"
  },
  {
    "path": "README.md",
    "content": "# Icon Font to PNG\n[![Build status](https://img.shields.io/travis/Pythonity/icon-font-to-png.svg)][travis]\n[![Test coverage](https://img.shields.io/coveralls/Pythonity/icon-font-to-png.svg)][coveralls]\n[![PyPI version](https://img.shields.io/pypi/v/icon_font_to_png.svg)][pypi]\n[![Python versions](https://img.shields.io/pypi/pyversions/icon_font_to_png.svg)][pypi]\n[![License](https://img.shields.io/github/license/Pythonity/icon-font-to-png.svg)][license]\n\nPython script (and library) for easy and simple export of icons from web\nicon fonts (e.g. Font Awesome, Octicons) as PNG images. The best part is\nthe provided shell script, but you can also use it's functionality\ndirectly in your (*probably awesome*) Python project.\n\nThere's also `font-awesome-to-png` script for backwards compatibility\nwith the [first][odyniec fa2p] iteration of the concept.\n\n## Installation\nMake sure you have required packages for [Pillow installation][pillow].\n\nFrom PyPI (recommended):\n\n```\n$ pip install icon_font_to_png\n```\n\nWith `git clone`:\n\n```shell\n$ git clone https://github.com/Pythonity/icon-font-to-png\n$ pip install -r icon-font-to-png/requirements.txt\n$ cd icon-font-to-png/bin\n```\n\n### OS X\nAs reported [here][if2p osx bug], to install it on OS X:\n\n```\n$ pip install icon_font_to_png --ignore-installed six\n```\n\n## Usage\n\n```\nusage: icon-font-to-png [-h] [--list] [--download {font-awesome,octicons}]\n                        [--ttf TTF-FILE] [--css CSS-FILE] [--size SIZE]\n                        [--scale SCALE] [--color COLOR] [--filename FILENAME]\n                        [--keep_prefix]\n                        [icons [icons ...]]\n\nExports font icons as PNG images.\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --list                list all available icon names and exit\n  --download {font-awesome,octicons}\n                        download latest icon font and exit\n\nrequired arguments:\n  --ttf TTF-FILE        path to TTF file\n  --css CSS-FILE        path to CSS file\n\nexporting icons:\n  icons                 names of the icons to export (or 'ALL' for all icons)\n  --size SIZE           icon size in pixels (default: 16)\n  --scale SCALE         scaling factor between 0 and 1, or 'auto' for\n                        automatic scaling (default: auto); be careful, as\n                        setting it may lead to icons being cropped\n  --color COLOR         color name or hex value (default: black)\n  --filename FILENAME   name of the output file (without '.png' extension);\n                        it's used as a prefix if multiple icons are exported\n  --keep_prefix         do not remove common icon prefix (i.e. 'fa-arrow-\n                        right' instead of 'arrow-right')\n\n```\n\n## Examples\nDownload latest Font Awesome:\n\n```\n$ icon-font-to-png --download font-awesome\n```\n\nList all available icons:\n\n```\n$ icon-font-to-png --css font-awesome.css --ttf fontawesome-webfont.ttf --list\n```\n\nExport 'play' and 'stop' icons, size 64x64:\n\n```\n$ icon-font-to-png --css font-awesome.css --ttf fontawesome-webfont.ttf --size 64 play stop\n```\n\nExport all icons in blue:\n\n```\n$ icon-font-to-png --css font-awesome.css --ttf fontawesome-webfont.ttf --color blue ALL\n```\n\nExport all icons in blue, but using it's hex value:\n\n```\n$ icon-font-to-png --css font-awesome.css --ttf fontawesome-webfont.ttf --color '#0000ff' ALL\n```\n\nOr you can use `font-awesome-to-png`, without css and ttf arguments:\n\n```\n$ font-awesome-to-png ALL\n```\n\n## API\nYou can use `IconFont` (and `IconFontDownloader` for that matter)\ndirectly inside your Python project. There's no proper documentation as of now,\nbut the code is commented and *should* be pretty straightforward to use.\n\nThat said - feel free to ask me via [email](mailto:pawel.ad@gmail.com) or \n[GitHub issues][github add issue] if anything is unclear.\n\n## Tests\nPackage was tested with the help of `py.test` and `tox` on Python 2.7, 3.4, 3.5\nand 3.6 (see `tox.ini`).\n\nCode coverage is available at [Coveralls][coveralls].\n\nTo run tests yourself you need to run `tox` inside the repository:\n\n```shell\n$ pip install -r requirements/dev.txt\n$ tox\n```\n\n## Contributions\nPackage source code is available at [GitHub][github].\n\nFeel free to use, ask, fork, star, report bugs, fix them, suggest enhancements,\nadd functionality and point out any mistakes. Thanks!\n\n## Authors\nDeveloped and maintained by [Pythonity][pythonity], a group of Python enthusiasts who love open source, have a neat [blog][pythonity blog] and are available [for hire][pythonity].\n\nOriginal version by [Michał Wojciechowski][odyniec], refactored by \n[Paweł Adamczak][pawelad].\n\n\n[coveralls]: https://coveralls.io/github/Pythonity/icon-font-to-png\n[github]: https://github.com/Pythonity/icon-font-to-png\n[github add issue]: https://github.com/Pythonity/icon-font-to-png/issues/new\n[if2p osx bug]: https://github.com/Pythonity/icon-font-to-png/issues/2#issuecomment-197068427\n[license]: https://github.com/Pythonity/icon-font-to-png/blob/master/LICENSE\n[odyniec]: https://github.com/odyniec\n[odyniec fa2p]: https://github.com/odyniec/font-awesome-to-png\n[pawelad]: https://github.com/pawelad\n[pillow]: https://pillow.readthedocs.org/en/latest/installation.html\n[pypi]: https://pypi.python.org/pypi/icon_font_to_png\n[pythonity]: https://pythonity.com/\n[pythonity blog]: http://blog.pythonity.com/\n[travis]: https://travis-ci.org/Pythonity/icon-font-to-png\n"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-leap-day\n\ngems:\n  - jekyll-default-layout\n  - jekyll-optional-front-matter\n  - jekyll-readme-index\n  - jekyll-titles-from-headings\n"
  },
  {
    "path": "bin/font-awesome-to-png",
    "content": "#!/usr/bin/env python\n\nimport os\nimport sys\n\ntry:\n    # Installed system wide\n    from icon_font_to_png import command_line\nexcept ImportError:\n    # Locally\n    sys.path.append(os.path.join(os.path.dirname(__file__), '..'))\n    from icon_font_to_png import command_line\n\n\nif __name__ == '__main__':\n    # TODO: Download only once, and load after?\n    # Download Font Awesome to temp directory\n    font_awesome = command_line.download_icon_font('font-awesome',\n                                                   directory=None)\n\n    # Append paths to Font Awesome files\n    args = sys.argv[1:]\n    args.append('--css')\n    args.append(font_awesome.css_path)\n    args.append('--ttf')\n    args.append(font_awesome.ttf_path)\n\n    # Execute original script\n    command_line.run(args)\n"
  },
  {
    "path": "bin/icon-font-to-png",
    "content": "#!/usr/bin/env python\n\nimport os\nimport sys\n\ntry:\n    # Installed system wide\n    from icon_font_to_png import command_line\nexcept ImportError:\n    # Locally\n    sys.path.append(os.path.join(os.path.dirname(__file__), '..'))\n    from icon_font_to_png import command_line\n\n\nif __name__ == '__main__':\n    command_line.run(sys.argv[1:])\n"
  },
  {
    "path": "icon_font_to_png/__init__.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import absolute_import, unicode_literals\n\nfrom icon_font_to_png.icon_font import IconFont  # noqa\nfrom icon_font_to_png.icon_font_downloader import (  # noqa\n    FontAwesomeDownloader, OcticonsDownloader, AVAILABLE_ICON_FONTS\n)\n\n\n__version__ = '0.4.1'\n"
  },
  {
    "path": "icon_font_to_png/command_line.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import absolute_import, unicode_literals, print_function\n\nimport os\nimport argparse\n\nfrom icon_font_to_png import IconFont, AVAILABLE_ICON_FONTS\n\n\ndef run(arguments):\n    \"\"\"Main function for command line usage\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Exports font icons as PNG images.\"\n    )\n    parser.add_argument(\n        '--list',\n        action='store_true',\n        help=\"list all available icon names and exit\"\n    )\n    parser.add_argument(\n        '--download',\n        choices=[x for x in AVAILABLE_ICON_FONTS.keys()],\n        help=\"download latest icon font and exit\"\n    )\n\n    required_group = parser.add_argument_group(\"required arguments\")\n    required_group.add_argument(\n        '--ttf',\n        metavar='TTF-FILE',\n        type=open,\n        help='path to TTF file'\n    )\n    required_group.add_argument(\n        '--css',\n        metavar='CSS-FILE',\n        type=open,\n        help=\"path to CSS file\"\n    )\n\n    exp_group = parser.add_argument_group(\"exporting icons\")\n    exp_group.add_argument(\n        'icons',\n        type=str,\n        nargs='*',\n        help=\"names of the icons to export (or 'ALL' for all icons)\"\n    )\n    exp_group.add_argument(\n        '--size',\n        type=int,\n        default=16,\n        help=\"icon size in pixels (default: 16)\"\n    )\n    exp_group.add_argument(\n        '--scale',\n        type=str,\n        default='auto',\n        help=\"scaling factor between 0 and 1, or 'auto' for automatic scaling \"\n             \"(default: auto); be careful, as setting it may lead to icons \"\n             \"being cropped\"\n    )\n    exp_group.add_argument(\n        '--color',\n        type=str,\n        default='black',\n        help=\"color name or hex value (default: black)\"\n    )\n    exp_group.add_argument(\n        '--filename',\n        type=str,\n        help=\"name of the output file (without '.png' extension); \"\n             \"it's used as a prefix if multiple icons are exported\"\n    )\n    exp_group.add_argument(\n        '--keep_prefix',\n        default=False,\n        action='store_true',\n        help=\"do not remove common icon prefix \"\n             \"(i.e. 'fa-arrow-right' instead of 'arrow-right')\"\n    )\n\n    args = parser.parse_args(arguments)\n\n    # Parse '--download' argument first\n    if args.download:\n        downloader = download_icon_font(args.download, os.getcwd())\n        downloader.download_files()\n        print(\"Icon font '{name}' successfully downloaded\".format(\n            name=args.download)\n        )\n        parser.exit()\n\n    # If not '--download', then css and tff files are required\n    if not args.css or not args.ttf:\n        parser.error(\"You have to provide CSS and TTF files\")\n\n    icon_font = IconFont(css_file=args.css.name,\n                         ttf_file=args.ttf.name,\n                         keep_prefix=args.keep_prefix)\n    args.css.close()\n    args.ttf.close()\n\n    # Then '--list'\n    if args.list:\n        for icon in icon_font.css_icons.keys():\n            print(icon)\n        parser.exit()\n\n    # If not '--list' or '--download', parse passed icons\n    selected_icons = list()\n    if not args.icons:\n        parser.error(\"You have to pass at least one icon name\")\n    elif args.icons == ['ALL']:\n        selected_icons = icon_font.css_icons.keys()\n    else:\n        for icon in args.icons:\n            if (args.keep_prefix and\n                    not icon.startswith(icon_font.common_prefix)):\n                # Prepend icon name with prefix\n                icon = icon_font.common_prefix + icon\n            elif (not args.keep_prefix and\n                  icon.startswith(icon_font.common_prefix)):\n                # Remove prefix from icon name\n                icon = icon[len(icon_font.common_prefix):]\n\n            # Check if given icon names exist\n            if icon in icon_font.css_icons:\n                selected_icons.append(icon)\n            else:\n                parser.error(\"Unknown icon name '{icon}'\".format(icon=icon))\n\n    # Parse filename and remove the extension if necessary\n    given_filename = args.filename or ''\n    if given_filename.lower().endswith('.png'):\n        given_filename = given_filename[:-4]\n\n    # Some fonts have empty values\n    # (prefix only - which we remove - for common styles)\n    selected_icons = list(filter(None, selected_icons))\n\n    # Commence exporting\n    for icon in selected_icons:\n        if len(selected_icons) > 1:\n            # Multiple icons - treat the filename option as name prefix\n            filename = '{prefix}{icon}.png'.format(\n                prefix=given_filename, icon=icon,\n            )\n        else:\n            if given_filename:\n                # Use the specified filename\n                filename = given_filename + '.png'\n            else:\n                # Use icon name as filename\n                filename = str(icon) + '.png'\n\n        print(\"Exporting icon '{icon}' as '{filename}'\"\n              \"({size}x{size} pixels)\".format(icon=icon,\n                                              filename=filename,\n                                              size=args.size))\n\n        icon_font.export_icon(icon=icon, filename=filename, size=args.size,\n                              color=args.color, scale=args.scale)\n\n    print()\n    print(\"All done\")\n\n\n# Isolated for use in wrapper scripts\ndef download_icon_font(icon_font, directory):\n    \"\"\"Download given (implemented) icon font into passed directory\"\"\"\n    try:\n        downloader = AVAILABLE_ICON_FONTS[icon_font]['downloader'](directory)\n        downloader.download_files()\n        return downloader\n    except KeyError:  # pragma: no cover\n        raise Exception(\"We don't support downloading font '{name}'\".format(\n            name=icon_font)\n        )\n"
  },
  {
    "path": "icon_font_to_png/icon_font.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import absolute_import, unicode_literals\n\nimport os\nimport re\nfrom collections import OrderedDict\n\nimport tinycss\nfrom PIL import Image, ImageFont, ImageDraw\nfrom six import unichr\n\n\nclass IconFont(object):\n    \"\"\"Base class that represents web icon font\"\"\"\n    def __init__(self, css_file, ttf_file, keep_prefix=False):\n        \"\"\"\n        :param css_file: path to icon font CSS file\n        :param ttf_file: path to icon font TTF file\n        :param keep_prefix: whether to keep common icon prefix\n        \"\"\"\n        self.css_file = css_file\n        self.ttf_file = ttf_file\n        self.keep_prefix = keep_prefix\n\n        self.css_icons, self.common_prefix = self.load_css()\n\n    def load_css(self):\n        \"\"\"\n        Creates a dict of all icons available in CSS file, and finds out\n        what's their common prefix.\n\n        :returns sorted icons dict, common icon prefix\n        \"\"\"\n        icons = dict()\n        common_prefix = None\n        parser = tinycss.make_parser('page3')\n        stylesheet = parser.parse_stylesheet_file(self.css_file)\n\n        is_icon = re.compile(\"\\.(.*):before,?\")\n\n        for rule in stylesheet.rules:\n            selector = rule.selector.as_css()\n\n            # Skip CSS classes that are not icons\n            if not is_icon.match(selector):\n                continue\n\n            # Find out what the common prefix is\n            if common_prefix is None:\n                common_prefix = selector[1:]\n            else:\n                common_prefix = os.path.commonprefix((common_prefix,\n                                                      selector[1:]))\n\n            for match in is_icon.finditer(selector):\n                name = match.groups()[0]\n                for declaration in rule.declarations:\n                    if declaration.name == \"content\":\n                        val = declaration.value.as_css()\n                        # Strip quotation marks\n                        if re.match(\"^['\\\"].*['\\\"]$\", val):\n                            val = val[1:-1]\n                        icons[name] = unichr(int(val[1:], 16))\n\n        common_prefix = common_prefix or ''\n\n        # Remove common prefix\n        if not self.keep_prefix and len(common_prefix) > 0:\n            non_prefixed_icons = {}\n            for name in icons.keys():\n                non_prefixed_icons[name[len(common_prefix):]] = icons[name]\n            icons = non_prefixed_icons\n\n        sorted_icons = OrderedDict(sorted(icons.items(), key=lambda t: t[0]))\n\n        return sorted_icons, common_prefix\n\n    def export_icon(self, icon, size, color='black', scale='auto',\n                    filename=None, export_dir='exported'):\n        \"\"\"\n        Exports given icon with provided parameters.\n\n        If the desired icon size is less than 150x150 pixels, we will first\n        create a 150x150 pixels image and then scale it down, so that\n        it's much less likely that the edges of the icon end up cropped.\n\n        :param icon: valid icon name\n        :param filename: name of the output file\n        :param size: icon size in pixels\n        :param color: color name or hex value\n        :param scale: scaling factor between 0 and 1,\n                      or 'auto' for automatic scaling\n        :param export_dir: path to export directory\n        \"\"\"\n        org_size = size\n        size = max(150, size)\n\n        image = Image.new(\"RGBA\", (size, size), color=(0, 0, 0, 0))\n        draw = ImageDraw.Draw(image)\n\n        if scale == 'auto':\n            scale_factor = 1\n        else:\n            scale_factor = float(scale)\n\n        font = ImageFont.truetype(self.ttf_file, int(size * scale_factor))\n        width, height = draw.textsize(self.css_icons[icon], font=font)\n\n        # If auto-scaling is enabled, we need to make sure the resulting\n        # graphic fits inside the boundary. The values are rounded and may be\n        # off by a pixel or two, so we may need to do a few iterations.\n        # The use of a decrementing multiplication factor protects us from\n        # getting into an infinite loop.\n        if scale == 'auto':\n            iteration = 0\n            factor = 1\n\n            while True:\n                width, height = draw.textsize(self.css_icons[icon], font=font)\n\n                # Check if the image fits\n                dim = max(width, height)\n                if dim > size:\n                    font = ImageFont.truetype(self.ttf_file,\n                                              int(size * size/dim * factor))\n                else:\n                    break\n\n                # Adjust the factor every two iterations\n                iteration += 1\n                if iteration % 2 == 0:\n                    factor *= 0.99\n\n        draw.text((float(size - width) / 2, float(size - height) / 2),\n                  self.css_icons[icon], font=font, fill=color)\n\n        # Get bounding box\n        bbox = image.getbbox()\n\n        # Create an alpha mask\n        image_mask = Image.new(\"L\", (size, size), 0)\n        draw_mask = ImageDraw.Draw(image_mask)\n\n        # Draw the icon on the mask\n        draw_mask.text((float(size - width) / 2, float(size - height) / 2),\n                       self.css_icons[icon], font=font, fill=255)\n\n        # Create a solid color image and apply the mask\n        icon_image = Image.new(\"RGBA\", (size, size), color)\n        icon_image.putalpha(image_mask)\n\n        if bbox:\n            icon_image = icon_image.crop(bbox)\n\n        border_w = int((size - (bbox[2] - bbox[0])) / 2)\n        border_h = int((size - (bbox[3] - bbox[1])) / 2)\n\n        # Create output image\n        out_image = Image.new(\"RGBA\", (size, size), (0, 0, 0, 0))\n        out_image.paste(icon_image, (border_w, border_h))\n\n        # If necessary, scale the image to the target size\n        if org_size != size:\n            out_image = out_image.resize((org_size, org_size), Image.ANTIALIAS)\n\n        # Make sure export directory exists\n        if not os.path.exists(export_dir):\n            os.makedirs(export_dir)\n\n        # Default filename\n        if not filename:\n            filename = icon + '.png'\n\n        # Save file\n        out_image.save(os.path.join(export_dir, filename))\n"
  },
  {
    "path": "icon_font_to_png/icon_font_downloader.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import absolute_import, unicode_literals\n\nimport os\nfrom abc import ABCMeta, abstractmethod\n\nimport requests\nimport six\nfrom six.moves.urllib.request import urlretrieve\n\n\n@six.add_metaclass(ABCMeta)\nclass IconFontDownloader(object):\n    \"\"\"Abstract class for downloading icon font CSS and TTF files\"\"\"\n    css_path = None\n    ttf_path = None\n\n    @property\n    def css_url(self):\n        \"\"\"Icon font CSS file URL\"\"\"\n        raise NotImplementedError\n\n    @property\n    def ttf_url(self):\n        \"\"\"Icon font TTF file URL\"\"\"\n        raise NotImplementedError\n\n    def __init__(self, directory=None):\n        \"\"\"\n        :param directory: path to download directory; temporary dir if None\n        \"\"\"\n        self.directory = directory\n\n    @staticmethod\n    def _download_file_from_url(url, directory=None):\n        \"\"\"\n        Download file from given URL and save it in given directory\n\n        :param url: URL of file\n        :param directory: path to download directory\n        :return: path to downloaded file\n        \"\"\"\n        # Files are saved in temporary folder if `directory` isn't specified\n        if not directory:\n            return urlretrieve(url)[0]\n        else:\n            # Get the filename from URL\n            css_filename = os.path.join(directory, url.split('/')[-1])\n            return urlretrieve(url, filename=css_filename)[0]\n\n    @staticmethod\n    def _get_latest_tag_from_github(repo_api_url):\n        \"\"\"Get latest icon font tag via GitHub API\"\"\"\n        url = '/'.join([repo_api_url, 'tags'])\n        r = requests.get(url)\n        latest = r.json()[0]\n\n        return latest['name']\n\n    @abstractmethod\n    def get_latest_version_number(self):\n        \"\"\"Get latest icon font version number\"\"\"\n        return\n\n    def download_css(self, directory):\n        \"\"\"Downloads icon font CSS file and returns its path\"\"\"\n        return self._download_file_from_url(self.css_url, directory)\n\n    def download_ttf(self, directory):\n        \"\"\"Downloads icon font TTF file and returns its path\"\"\"\n        return self._download_file_from_url(self.ttf_url, directory)\n\n    def download_files(self):\n        \"\"\"Download CSS and TTF files\"\"\"\n        self.css_path = self.download_css(self.directory)\n        self.ttf_path = self.download_ttf(self.directory)\n\n\nclass FontAwesomeDownloader(IconFontDownloader):\n    \"\"\"\n    Font Awesome icon font downloader.\n\n    Project page:\n        https://fortawesome.github.io/Font-Awesome/\n    \"\"\"\n    css_url = (\n        'https://cdn.rawgit.com/FortAwesome/Font-Awesome/'\n        'master/css/font-awesome.css'\n    )\n    ttf_url = (\n        'https://cdn.rawgit.com/FortAwesome/Font-Awesome/'\n        'master/fonts/fontawesome-webfont.ttf'\n    )\n\n    def get_latest_version_number(self):\n        return self._get_latest_tag_from_github(\n            'https://api.github.com/repos/FortAwesome/Font-Awesome'\n        )\n\n\nclass OcticonsDownloader(IconFontDownloader):\n    \"\"\"\n    Octicons icon font downloader.\n\n    They unfortunately deleted compiled files from their GitHub repo, so let's\n    get them via CDN fow now.\n\n    Project page:\n        https://octicons.github.com/\n    \"\"\"\n    css_url = (\n        'https://cdnjs.cloudflare.com/ajax/libs/'\n        'octicons/4.4.0/font/octicons.css'\n    )\n    ttf_url = (\n        'https://cdnjs.cloudflare.com/ajax/libs/'\n        'octicons/4.4.0/font/octicons.ttf'\n    )\n\n    def get_latest_version_number(self):\n        return self._get_latest_tag_from_github(\n            'https://api.github.com/repos/github/octicons'\n        )\n\n\n# List of implemented icon font downloader classes\nAVAILABLE_ICON_FONTS = {\n    'font-awesome': {\n        'name': 'Font Awesome',\n        'downloader': FontAwesomeDownloader,\n    },\n    'octicons': {\n        'name': 'Octicons',\n        'downloader': OcticonsDownloader,\n    },\n}\n"
  },
  {
    "path": "icon_font_to_png/test/files/font-awesome.css",
    "content": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');\n  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n.fa {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333333em;\n  line-height: 0.75em;\n  vertical-align: -15%;\n}\n.fa-2x {\n  font-size: 2em;\n}\n.fa-3x {\n  font-size: 3em;\n}\n.fa-4x {\n  font-size: 4em;\n}\n.fa-5x {\n  font-size: 5em;\n}\n.fa-fw {\n  width: 1.28571429em;\n  text-align: center;\n}\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.14285714em;\n  list-style-type: none;\n}\n.fa-ul > li {\n  position: relative;\n}\n.fa-li {\n  position: absolute;\n  left: -2.14285714em;\n  width: 2.14285714em;\n  top: 0.14285714em;\n  text-align: center;\n}\n.fa-li.fa-lg {\n  left: -1.85714286em;\n}\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eeeeee;\n  border-radius: .1em;\n}\n.fa-pull-left {\n  float: left;\n}\n.fa-pull-right {\n  float: right;\n}\n.fa.fa-pull-left {\n  margin-right: .3em;\n}\n.fa.fa-pull-right {\n  margin-left: .3em;\n}\n/* Deprecated as of 4.4.0 */\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n.fa.pull-left {\n  margin-right: .3em;\n}\n.fa.pull-right {\n  margin-left: .3em;\n}\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none;\n}\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.fa-stack-1x {\n  line-height: inherit;\n}\n.fa-stack-2x {\n  font-size: 2em;\n}\n.fa-inverse {\n  color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\\f000\";\n}\n.fa-music:before {\n  content: \"\\f001\";\n}\n.fa-search:before {\n  content: \"\\f002\";\n}\n.fa-envelope-o:before {\n  content: \"\\f003\";\n}\n.fa-heart:before {\n  content: \"\\f004\";\n}\n.fa-star:before {\n  content: \"\\f005\";\n}\n.fa-star-o:before {\n  content: \"\\f006\";\n}\n.fa-user:before {\n  content: \"\\f007\";\n}\n.fa-film:before {\n  content: \"\\f008\";\n}\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n.fa-th:before {\n  content: \"\\f00a\";\n}\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n.fa-check:before {\n  content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n  content: \"\\f00d\";\n}\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n.fa-power-off:before {\n  content: \"\\f011\";\n}\n.fa-signal:before {\n  content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n  content: \"\\f013\";\n}\n.fa-trash-o:before {\n  content: \"\\f014\";\n}\n.fa-home:before {\n  content: \"\\f015\";\n}\n.fa-file-o:before {\n  content: \"\\f016\";\n}\n.fa-clock-o:before {\n  content: \"\\f017\";\n}\n.fa-road:before {\n  content: \"\\f018\";\n}\n.fa-download:before {\n  content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n  content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n  content: \"\\f01b\";\n}\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n  content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\\f01e\";\n}\n.fa-refresh:before {\n  content: \"\\f021\";\n}\n.fa-list-alt:before {\n  content: \"\\f022\";\n}\n.fa-lock:before {\n  content: \"\\f023\";\n}\n.fa-flag:before {\n  content: \"\\f024\";\n}\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n.fa-tags:before {\n  content: \"\\f02c\";\n}\n.fa-book:before {\n  content: \"\\f02d\";\n}\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n.fa-print:before {\n  content: \"\\f02f\";\n}\n.fa-camera:before {\n  content: \"\\f030\";\n}\n.fa-font:before {\n  content: \"\\f031\";\n}\n.fa-bold:before {\n  content: \"\\f032\";\n}\n.fa-italic:before {\n  content: \"\\f033\";\n}\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n.fa-list:before {\n  content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n.fa-video-camera:before {\n  content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\\f03e\";\n}\n.fa-pencil:before {\n  content: \"\\f040\";\n}\n.fa-map-marker:before {\n  content: \"\\f041\";\n}\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n.fa-tint:before {\n  content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n  content: \"\\f044\";\n}\n.fa-share-square-o:before {\n  content: \"\\f045\";\n}\n.fa-check-square-o:before {\n  content: \"\\f046\";\n}\n.fa-arrows:before {\n  content: \"\\f047\";\n}\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n.fa-play:before {\n  content: \"\\f04b\";\n}\n.fa-pause:before {\n  content: \"\\f04c\";\n}\n.fa-stop:before {\n  content: \"\\f04d\";\n}\n.fa-forward:before {\n  content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n.fa-eject:before {\n  content: \"\\f052\";\n}\n.fa-chevron-left:before {\n  content: \"\\f053\";\n}\n.fa-chevron-right:before {\n  content: \"\\f054\";\n}\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n.fa-times-circle:before {\n  content: \"\\f057\";\n}\n.fa-check-circle:before {\n  content: \"\\f058\";\n}\n.fa-question-circle:before {\n  content: \"\\f059\";\n}\n.fa-info-circle:before {\n  content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n  content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n  content: \"\\f05d\";\n}\n.fa-ban:before {\n  content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n.fa-arrow-right:before {\n  content: \"\\f061\";\n}\n.fa-arrow-up:before {\n  content: \"\\f062\";\n}\n.fa-arrow-down:before {\n  content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n  content: \"\\f064\";\n}\n.fa-expand:before {\n  content: \"\\f065\";\n}\n.fa-compress:before {\n  content: \"\\f066\";\n}\n.fa-plus:before {\n  content: \"\\f067\";\n}\n.fa-minus:before {\n  content: \"\\f068\";\n}\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n.fa-fire:before {\n  content: \"\\f06d\";\n}\n.fa-eye:before {\n  content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n  content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n  content: \"\\f071\";\n}\n.fa-plane:before {\n  content: \"\\f072\";\n}\n.fa-calendar:before {\n  content: \"\\f073\";\n}\n.fa-random:before {\n  content: \"\\f074\";\n}\n.fa-comment:before {\n  content: \"\\f075\";\n}\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n.fa-chevron-up:before {\n  content: \"\\f077\";\n}\n.fa-chevron-down:before {\n  content: \"\\f078\";\n}\n.fa-retweet:before {\n  content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.fa-folder:before {\n  content: \"\\f07b\";\n}\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n  content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n  content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n  content: \"\\f080\";\n}\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n.fa-key:before {\n  content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n  content: \"\\f085\";\n}\n.fa-comments:before {\n  content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n  content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n  content: \"\\f088\";\n}\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n.fa-heart-o:before {\n  content: \"\\f08a\";\n}\n.fa-sign-out:before {\n  content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n  content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n  content: \"\\f08d\";\n}\n.fa-external-link:before {\n  content: \"\\f08e\";\n}\n.fa-sign-in:before {\n  content: \"\\f090\";\n}\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n.fa-upload:before {\n  content: \"\\f093\";\n}\n.fa-lemon-o:before {\n  content: \"\\f094\";\n}\n.fa-phone:before {\n  content: \"\\f095\";\n}\n.fa-square-o:before {\n  content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n  content: \"\\f097\";\n}\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n.fa-github:before {\n  content: \"\\f09b\";\n}\n.fa-unlock:before {\n  content: \"\\f09c\";\n}\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n.fa-feed:before,\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n  content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.fa-bell:before {\n  content: \"\\f0f3\";\n}\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n  content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n  content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n  content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n  content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n.fa-globe:before {\n  content: \"\\f0ac\";\n}\n.fa-wrench:before {\n  content: \"\\f0ad\";\n}\n.fa-tasks:before {\n  content: \"\\f0ae\";\n}\n.fa-filter:before {\n  content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n  content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n  content: \"\\f0c1\";\n}\n.fa-cloud:before {\n  content: \"\\f0c2\";\n}\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n  content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n  content: \"\\f0c7\";\n}\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n  content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n  content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n  content: \"\\f0d5\";\n}\n.fa-money:before {\n  content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n  content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n  content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n  content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\\f0de\";\n}\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n  content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n  content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n  content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n  content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n  content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n  content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n  content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n  content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n  content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n  content: \"\\f0eb\";\n}\n.fa-exchange:before {\n  content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n  content: \"\\f0a2\";\n}\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n  content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n  content: \"\\f0f6\";\n}\n.fa-building-o:before {\n  content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n  content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n.fa-medkit:before {\n  content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n  content: \"\\f103\";\n}\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n.fa-desktop:before {\n  content: \"\\f108\";\n}\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n.fa-circle-o:before {\n  content: \"\\f10c\";\n}\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n.fa-spinner:before {\n  content: \"\\f110\";\n}\n.fa-circle:before {\n  content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\\f112\";\n}\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n.fa-folder-o:before {\n  content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n  content: \"\\f115\";\n}\n.fa-smile-o:before {\n  content: \"\\f118\";\n}\n.fa-frown-o:before {\n  content: \"\\f119\";\n}\n.fa-meh-o:before {\n  content: \"\\f11a\";\n}\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n  content: \"\\f11c\";\n}\n.fa-flag-o:before {\n  content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.fa-terminal:before {\n  content: \"\\f120\";\n}\n.fa-code:before {\n  content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\\f123\";\n}\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n.fa-crop:before {\n  content: \"\\f125\";\n}\n.fa-code-fork:before {\n  content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n  content: \"\\f127\";\n}\n.fa-question:before {\n  content: \"\\f128\";\n}\n.fa-info:before {\n  content: \"\\f129\";\n}\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n.fa-shield:before {\n  content: \"\\f132\";\n}\n.fa-calendar-o:before {\n  content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.fa-rocket:before {\n  content: \"\\f135\";\n}\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n  content: \"\\f142\";\n}\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n.fa-ticket:before {\n  content: \"\\f145\";\n}\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n  content: \"\\f147\";\n}\n.fa-level-up:before {\n  content: \"\\f148\";\n}\n.fa-level-down:before {\n  content: \"\\f149\";\n}\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n  content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n  content: \"\\f14c\";\n}\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\\f153\";\n}\n.fa-gbp:before {\n  content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n  content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n.fa-file:before {\n  content: \"\\f15b\";\n}\n.fa-file-text:before {\n  content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n  content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n  content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n  content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n  content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n  content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n  content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n  content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n.fa-youtube-square:before {\n  content: \"\\f166\";\n}\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n.fa-xing:before {\n  content: \"\\f168\";\n}\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n.fa-youtube-play:before {\n  content: \"\\f16a\";\n}\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n.fa-adn:before {\n  content: \"\\f170\";\n}\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n  content: \"\\f172\";\n}\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.fa-apple:before {\n  content: \"\\f179\";\n}\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n.fa-android:before {\n  content: \"\\f17b\";\n}\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n.fa-trello:before {\n  content: \"\\f181\";\n}\n.fa-female:before {\n  content: \"\\f182\";\n}\n.fa-male:before {\n  content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n.fa-sun-o:before {\n  content: \"\\f185\";\n}\n.fa-moon-o:before {\n  content: \"\\f186\";\n}\n.fa-archive:before {\n  content: \"\\f187\";\n}\n.fa-bug:before {\n  content: \"\\f188\";\n}\n.fa-vk:before {\n  content: \"\\f189\";\n}\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n  content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n  content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n  content: \"\\f192\";\n}\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n  content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n.fa-slack:before {\n  content: \"\\f198\";\n}\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n.fa-spoon:before {\n  content: \"\\f1b1\";\n}\n.fa-cube:before {\n  content: \"\\f1b2\";\n}\n.fa-cubes:before {\n  content: \"\\f1b3\";\n}\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n.fa-recycle:before {\n  content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n.fa-database:before {\n  content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n  content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n  content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n  content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n  content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n  content: \"\\f1c9\";\n}\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n  content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n  content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\\f1d9\";\n}\n.fa-history:before {\n  content: \"\\f1da\";\n}\n.fa-circle-thin:before {\n  content: \"\\f1db\";\n}\n.fa-header:before {\n  content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n.fa-sliders:before {\n  content: \"\\f1de\";\n}\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\\f1e3\";\n}\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n.fa-plug:before {\n  content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n  content: \"\\f1ea\";\n}\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n  content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n  content: \"\\f1f7\";\n}\n.fa-trash:before {\n  content: \"\\f1f8\";\n}\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n  content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n  content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n  content: \"\\f200\";\n}\n.fa-line-chart:before {\n  content: \"\\f201\";\n}\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n.fa-toggle-off:before {\n  content: \"\\f204\";\n}\n.fa-toggle-on:before {\n  content: \"\\f205\";\n}\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n.fa-bus:before {\n  content: \"\\f207\";\n}\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n.fa-cc:before {\n  content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\\f20b\";\n}\n.fa-meanpath:before {\n  content: \"\\f20c\";\n}\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n.fa-diamond:before {\n  content: \"\\f219\";\n}\n.fa-ship:before {\n  content: \"\\f21a\";\n}\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n  content: \"\\f21e\";\n}\n.fa-venus:before {\n  content: \"\\f221\";\n}\n.fa-mars:before {\n  content: \"\\f222\";\n}\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n.fa-intersex:before,\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n.fa-genderless:before {\n  content: \"\\f22d\";\n}\n.fa-facebook-official:before {\n  content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n.fa-server:before {\n  content: \"\\f233\";\n}\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\\f236\";\n}\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n.fa-train:before {\n  content: \"\\f238\";\n}\n.fa-subway:before {\n  content: \"\\f239\";\n}\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n.fa-yc:before,\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n  content: \"\\f240\";\n}\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n  content: \"\\f241\";\n}\n.fa-battery-2:before,\n.fa-battery-half:before {\n  content: \"\\f242\";\n}\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n  content: \"\\f243\";\n}\n.fa-battery-0:before,\n.fa-battery-empty:before {\n  content: \"\\f244\";\n}\n.fa-mouse-pointer:before {\n  content: \"\\f245\";\n}\n.fa-i-cursor:before {\n  content: \"\\f246\";\n}\n.fa-object-group:before {\n  content: \"\\f247\";\n}\n.fa-object-ungroup:before {\n  content: \"\\f248\";\n}\n.fa-sticky-note:before {\n  content: \"\\f249\";\n}\n.fa-sticky-note-o:before {\n  content: \"\\f24a\";\n}\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n.fa-clone:before {\n  content: \"\\f24d\";\n}\n.fa-balance-scale:before {\n  content: \"\\f24e\";\n}\n.fa-hourglass-o:before {\n  content: \"\\f250\";\n}\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n  content: \"\\f251\";\n}\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n  content: \"\\f252\";\n}\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\\f253\";\n}\n.fa-hourglass:before {\n  content: \"\\f254\";\n}\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n  content: \"\\f255\";\n}\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n  content: \"\\f256\";\n}\n.fa-hand-scissors-o:before {\n  content: \"\\f257\";\n}\n.fa-hand-lizard-o:before {\n  content: \"\\f258\";\n}\n.fa-hand-spock-o:before {\n  content: \"\\f259\";\n}\n.fa-hand-pointer-o:before {\n  content: \"\\f25a\";\n}\n.fa-hand-peace-o:before {\n  content: \"\\f25b\";\n}\n.fa-trademark:before {\n  content: \"\\f25c\";\n}\n.fa-registered:before {\n  content: \"\\f25d\";\n}\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n.fa-gg:before {\n  content: \"\\f260\";\n}\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n.fa-tripadvisor:before {\n  content: \"\\f262\";\n}\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n.fa-safari:before {\n  content: \"\\f267\";\n}\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n.fa-tv:before,\n.fa-television:before {\n  content: \"\\f26c\";\n}\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n.fa-calendar-plus-o:before {\n  content: \"\\f271\";\n}\n.fa-calendar-minus-o:before {\n  content: \"\\f272\";\n}\n.fa-calendar-times-o:before {\n  content: \"\\f273\";\n}\n.fa-calendar-check-o:before {\n  content: \"\\f274\";\n}\n.fa-industry:before {\n  content: \"\\f275\";\n}\n.fa-map-pin:before {\n  content: \"\\f276\";\n}\n.fa-map-signs:before {\n  content: \"\\f277\";\n}\n.fa-map-o:before {\n  content: \"\\f278\";\n}\n.fa-map:before {\n  content: \"\\f279\";\n}\n.fa-commenting:before {\n  content: \"\\f27a\";\n}\n.fa-commenting-o:before {\n  content: \"\\f27b\";\n}\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n.fa-vimeo:before {\n  content: \"\\f27d\";\n}\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n.fa-edge:before {\n  content: \"\\f282\";\n}\n.fa-credit-card-alt:before {\n  content: \"\\f283\";\n}\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n.fa-modx:before {\n  content: \"\\f285\";\n}\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n.fa-usb:before {\n  content: \"\\f287\";\n}\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n.fa-pause-circle:before {\n  content: \"\\f28b\";\n}\n.fa-pause-circle-o:before {\n  content: \"\\f28c\";\n}\n.fa-stop-circle:before {\n  content: \"\\f28d\";\n}\n.fa-stop-circle-o:before {\n  content: \"\\f28e\";\n}\n.fa-shopping-bag:before {\n  content: \"\\f290\";\n}\n.fa-shopping-basket:before {\n  content: \"\\f291\";\n}\n.fa-hashtag:before {\n  content: \"\\f292\";\n}\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n.fa-percent:before {\n  content: \"\\f295\";\n}\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n.fa-envira:before {\n  content: \"\\f299\";\n}\n.fa-universal-access:before {\n  content: \"\\f29a\";\n}\n.fa-wheelchair-alt:before {\n  content: \"\\f29b\";\n}\n.fa-question-circle-o:before {\n  content: \"\\f29c\";\n}\n.fa-blind:before {\n  content: \"\\f29d\";\n}\n.fa-audio-description:before {\n  content: \"\\f29e\";\n}\n.fa-volume-control-phone:before {\n  content: \"\\f2a0\";\n}\n.fa-braille:before {\n  content: \"\\f2a1\";\n}\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\";\n}\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\";\n}\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n  content: \"\\f2a4\";\n}\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n.fa-signing:before,\n.fa-sign-language:before {\n  content: \"\\f2a7\";\n}\n.fa-low-vision:before {\n  content: \"\\f2a8\";\n}\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\";\n}\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n  content: \"\\f2b3\";\n}\n.fa-fa:before,\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n.fa-handshake-o:before {\n  content: \"\\f2b5\";\n}\n.fa-envelope-open:before {\n  content: \"\\f2b6\";\n}\n.fa-envelope-open-o:before {\n  content: \"\\f2b7\";\n}\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n.fa-address-book:before {\n  content: \"\\f2b9\";\n}\n.fa-address-book-o:before {\n  content: \"\\f2ba\";\n}\n.fa-vcard:before,\n.fa-address-card:before {\n  content: \"\\f2bb\";\n}\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n  content: \"\\f2bc\";\n}\n.fa-user-circle:before {\n  content: \"\\f2bd\";\n}\n.fa-user-circle-o:before {\n  content: \"\\f2be\";\n}\n.fa-user-o:before {\n  content: \"\\f2c0\";\n}\n.fa-id-badge:before {\n  content: \"\\f2c1\";\n}\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\\f2c2\";\n}\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n  content: \"\\f2c3\";\n}\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n  content: \"\\f2c7\";\n}\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\";\n}\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n  content: \"\\f2c9\";\n}\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\";\n}\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\";\n}\n.fa-shower:before {\n  content: \"\\f2cc\";\n}\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n  content: \"\\f2cd\";\n}\n.fa-podcast:before {\n  content: \"\\f2ce\";\n}\n.fa-window-maximize:before {\n  content: \"\\f2d0\";\n}\n.fa-window-minimize:before {\n  content: \"\\f2d1\";\n}\n.fa-window-restore:before {\n  content: \"\\f2d2\";\n}\n.fa-times-rectangle:before,\n.fa-window-close:before {\n  content: \"\\f2d3\";\n}\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n  content: \"\\f2d4\";\n}\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n.fa-eercast:before {\n  content: \"\\f2da\";\n}\n.fa-microchip:before {\n  content: \"\\f2db\";\n}\n.fa-snowflake-o:before {\n  content: \"\\f2dc\";\n}\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n"
  },
  {
    "path": "icon_font_to_png/test/files/octicons.css",
    "content": "\n@font-face {\n  font-family:\"Octicons\";\n  src:url(\"octicons.eot?ef21c39f0ca9b1b5116e5eb7ac5eabe6\");\n  src:url(\"octicons.eot?#iefix\") format(\"embedded-opentype\"),\n\t\turl(\"octicons.woff2?ef21c39f0ca9b1b5116e5eb7ac5eabe6\") format(\"woff2\"),\n\t\turl(\"octicons.woff?ef21c39f0ca9b1b5116e5eb7ac5eabe6\") format(\"woff\"),\n\t\turl(\"octicons.ttf?ef21c39f0ca9b1b5116e5eb7ac5eabe6\") format(\"truetype\"),\n\t\turl(\"octicons.svg?ef21c39f0ca9b1b5116e5eb7ac5eabe6#octicons\") format(\"svg\");\n  font-weight:normal;\n  font-style:normal;\n}\n\n\n/*\n\n.octicon is optimized for 16px.\n.mega-octicon is optimized for 32px but can be used larger.\n\n*/\n.octicon, .mega-octicon {\n  font: normal normal normal 16px/1 Octicons;\n  display: inline-block;\n  text-decoration: none;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  speak: none;\n}\n.mega-octicon { font-size: 32px; }\n\n.octicon-alert:before { content:\"\\f02d\"; }\n\n.octicon-arrow-down:before { content:\"\\f03f\"; }\n\n.octicon-arrow-left:before { content:\"\\f040\"; }\n\n.octicon-arrow-right:before { content:\"\\f03e\"; }\n\n.octicon-arrow-small-down:before { content:\"\\f0a0\"; }\n\n.octicon-arrow-small-left:before { content:\"\\f0a1\"; }\n\n.octicon-arrow-small-right:before { content:\"\\f071\"; }\n\n.octicon-arrow-small-up:before { content:\"\\f09f\"; }\n\n.octicon-arrow-up:before { content:\"\\f03d\"; }\n\n.octicon-beaker:before { content:\"\\f0dd\"; }\n\n.octicon-bell:before { content:\"\\f0de\"; }\n\n.octicon-bold:before { content:\"\\f0e2\"; }\n\n.octicon-book:before { content:\"\\f007\"; }\n\n.octicon-bookmark:before { content:\"\\f07b\"; }\n\n.octicon-briefcase:before { content:\"\\f0d3\"; }\n\n.octicon-broadcast:before { content:\"\\f048\"; }\n\n.octicon-browser:before { content:\"\\f0c5\"; }\n\n.octicon-bug:before { content:\"\\f091\"; }\n\n.octicon-calendar:before { content:\"\\f068\"; }\n\n.octicon-check:before { content:\"\\f03a\"; }\n\n.octicon-checklist:before { content:\"\\f076\"; }\n\n.octicon-chevron-down:before { content:\"\\f0a3\"; }\n\n.octicon-chevron-left:before { content:\"\\f0a4\"; }\n\n.octicon-chevron-right:before { content:\"\\f078\"; }\n\n.octicon-chevron-up:before { content:\"\\f0a2\"; }\n\n.octicon-circle-slash:before { content:\"\\f084\"; }\n\n.octicon-circuit-board:before { content:\"\\f0d6\"; }\n\n.octicon-clippy:before { content:\"\\f035\"; }\n\n.octicon-clock:before { content:\"\\f046\"; }\n\n.octicon-cloud-download:before { content:\"\\f00b\"; }\n\n.octicon-cloud-upload:before { content:\"\\f00c\"; }\n\n.octicon-code:before { content:\"\\f05f\"; }\n\n.octicon-comment-discussion:before { content:\"\\f04f\"; }\n\n.octicon-comment:before { content:\"\\f02b\"; }\n\n.octicon-credit-card:before { content:\"\\f045\"; }\n\n.octicon-dash:before { content:\"\\f0ca\"; }\n\n.octicon-dashboard:before { content:\"\\f07d\"; }\n\n.octicon-database:before { content:\"\\f096\"; }\n\n.octicon-desktop-download:before { content:\"\\f0dc\"; }\n\n.octicon-device-camera-video:before { content:\"\\f057\"; }\n\n.octicon-device-camera:before { content:\"\\f056\"; }\n\n.octicon-device-desktop:before { content:\"\\f27c\"; }\n\n.octicon-device-mobile:before { content:\"\\f038\"; }\n\n.octicon-diff-added:before { content:\"\\f06b\"; }\n\n.octicon-diff-ignored:before { content:\"\\f099\"; }\n\n.octicon-diff-modified:before { content:\"\\f06d\"; }\n\n.octicon-diff-removed:before { content:\"\\f06c\"; }\n\n.octicon-diff-renamed:before { content:\"\\f06e\"; }\n\n.octicon-diff:before { content:\"\\f04d\"; }\n\n.octicon-ellipses:before { content:\"\\f101\"; }\n\n.octicon-ellipsis:before { content:\"\\f09a\"; }\n\n.octicon-eye:before { content:\"\\f04e\"; }\n\n.octicon-file-binary:before { content:\"\\f094\"; }\n\n.octicon-file-code:before { content:\"\\f010\"; }\n\n.octicon-file-directory:before { content:\"\\f016\"; }\n\n.octicon-file-media:before { content:\"\\f012\"; }\n\n.octicon-file-pdf:before { content:\"\\f014\"; }\n\n.octicon-file-submodule:before { content:\"\\f017\"; }\n\n.octicon-file-symlink-directory:before { content:\"\\f0b1\"; }\n\n.octicon-file-symlink-file:before { content:\"\\f0b0\"; }\n\n.octicon-file-text:before { content:\"\\f011\"; }\n\n.octicon-file-zip:before { content:\"\\f013\"; }\n\n.octicon-file:before { content:\"\\f102\"; }\n\n.octicon-flame:before { content:\"\\f0d2\"; }\n\n.octicon-fold:before { content:\"\\f0cc\"; }\n\n.octicon-gear:before { content:\"\\f02f\"; }\n\n.octicon-gift:before { content:\"\\f042\"; }\n\n.octicon-gist-secret:before { content:\"\\f08c\"; }\n\n.octicon-gist:before { content:\"\\f00e\"; }\n\n.octicon-git-branch:before { content:\"\\f020\"; }\n\n.octicon-git-commit:before { content:\"\\f01f\"; }\n\n.octicon-git-compare:before { content:\"\\f0ac\"; }\n\n.octicon-git-merge:before { content:\"\\f023\"; }\n\n.octicon-git-pull-request:before { content:\"\\f009\"; }\n\n.octicon-globe:before { content:\"\\f0b6\"; }\n\n.octicon-grabber:before { content:\"\\f103\"; }\n\n.octicon-graph:before { content:\"\\f043\"; }\n\n.octicon-heart:before { content:\"\\2665\"; }\n\n.octicon-history:before { content:\"\\f07e\"; }\n\n.octicon-home:before { content:\"\\f08d\"; }\n\n.octicon-horizontal-rule:before { content:\"\\f070\"; }\n\n.octicon-hubot:before { content:\"\\f09d\"; }\n\n.octicon-inbox:before { content:\"\\f0cf\"; }\n\n.octicon-info:before { content:\"\\f059\"; }\n\n.octicon-issue-closed:before { content:\"\\f028\"; }\n\n.octicon-issue-opened:before { content:\"\\f026\"; }\n\n.octicon-issue-reopened:before { content:\"\\f027\"; }\n\n.octicon-italic:before { content:\"\\f0e4\"; }\n\n.octicon-jersey:before { content:\"\\f019\"; }\n\n.octicon-key:before { content:\"\\f049\"; }\n\n.octicon-keyboard:before { content:\"\\f00d\"; }\n\n.octicon-law:before { content:\"\\f0d8\"; }\n\n.octicon-light-bulb:before { content:\"\\f000\"; }\n\n.octicon-link-external:before { content:\"\\f07f\"; }\n\n.octicon-link:before { content:\"\\f05c\"; }\n\n.octicon-list-ordered:before { content:\"\\f062\"; }\n\n.octicon-list-unordered:before { content:\"\\f061\"; }\n\n.octicon-location:before { content:\"\\f060\"; }\n\n.octicon-lock:before { content:\"\\f06a\"; }\n\n.octicon-logo-gist:before { content:\"\\f0ad\"; }\n\n.octicon-logo-github:before { content:\"\\f092\"; }\n\n.octicon-mail-read:before { content:\"\\f03c\"; }\n\n.octicon-mail-reply:before { content:\"\\f051\"; }\n\n.octicon-mail:before { content:\"\\f03b\"; }\n\n.octicon-mark-github:before { content:\"\\f00a\"; }\n\n.octicon-markdown:before { content:\"\\f0c9\"; }\n\n.octicon-megaphone:before { content:\"\\f077\"; }\n\n.octicon-mention:before { content:\"\\f0be\"; }\n\n.octicon-milestone:before { content:\"\\f075\"; }\n\n.octicon-mirror:before { content:\"\\f024\"; }\n\n.octicon-mortar-board:before { content:\"\\f0d7\"; }\n\n.octicon-mute:before { content:\"\\f080\"; }\n\n.octicon-no-newline:before { content:\"\\f09c\"; }\n\n.octicon-octoface:before { content:\"\\f008\"; }\n\n.octicon-organization:before { content:\"\\f037\"; }\n\n.octicon-package:before { content:\"\\f0c4\"; }\n\n.octicon-paintcan:before { content:\"\\f0d1\"; }\n\n.octicon-pencil:before { content:\"\\f058\"; }\n\n.octicon-person:before { content:\"\\f018\"; }\n\n.octicon-pin:before { content:\"\\f041\"; }\n\n.octicon-plug:before { content:\"\\f0d4\"; }\n\n.octicon-plus-small:before { content:\"\\f104\"; }\n\n.octicon-plus:before { content:\"\\f05d\"; }\n\n.octicon-primitive-dot:before { content:\"\\f052\"; }\n\n.octicon-primitive-square:before { content:\"\\f053\"; }\n\n.octicon-pulse:before { content:\"\\f085\"; }\n\n.octicon-question:before { content:\"\\f02c\"; }\n\n.octicon-quote:before { content:\"\\f063\"; }\n\n.octicon-radio-tower:before { content:\"\\f030\"; }\n\n.octicon-reply:before { content:\"\\f105\"; }\n\n.octicon-repo-clone:before { content:\"\\f04c\"; }\n\n.octicon-repo-force-push:before { content:\"\\f04a\"; }\n\n.octicon-repo-forked:before { content:\"\\f002\"; }\n\n.octicon-repo-pull:before { content:\"\\f006\"; }\n\n.octicon-repo-push:before { content:\"\\f005\"; }\n\n.octicon-repo:before { content:\"\\f001\"; }\n\n.octicon-rocket:before { content:\"\\f033\"; }\n\n.octicon-rss:before { content:\"\\f034\"; }\n\n.octicon-ruby:before { content:\"\\f047\"; }\n\n.octicon-search:before { content:\"\\f02e\"; }\n\n.octicon-server:before { content:\"\\f097\"; }\n\n.octicon-settings:before { content:\"\\f07c\"; }\n\n.octicon-shield:before { content:\"\\f0e1\"; }\n\n.octicon-sign-in:before { content:\"\\f036\"; }\n\n.octicon-sign-out:before { content:\"\\f032\"; }\n\n.octicon-smiley:before { content:\"\\f0e7\"; }\n\n.octicon-squirrel:before { content:\"\\f0b2\"; }\n\n.octicon-star:before { content:\"\\f02a\"; }\n\n.octicon-stop:before { content:\"\\f08f\"; }\n\n.octicon-sync:before { content:\"\\f087\"; }\n\n.octicon-tag:before { content:\"\\f015\"; }\n\n.octicon-tasklist:before { content:\"\\f0e5\"; }\n\n.octicon-telescope:before { content:\"\\f088\"; }\n\n.octicon-terminal:before { content:\"\\f0c8\"; }\n\n.octicon-text-size:before { content:\"\\f0e3\"; }\n\n.octicon-three-bars:before { content:\"\\f05e\"; }\n\n.octicon-thumbsdown:before { content:\"\\f0db\"; }\n\n.octicon-thumbsup:before { content:\"\\f0da\"; }\n\n.octicon-tools:before { content:\"\\f031\"; }\n\n.octicon-trashcan:before { content:\"\\f0d0\"; }\n\n.octicon-triangle-down:before { content:\"\\f05b\"; }\n\n.octicon-triangle-left:before { content:\"\\f044\"; }\n\n.octicon-triangle-right:before { content:\"\\f05a\"; }\n\n.octicon-triangle-up:before { content:\"\\f0aa\"; }\n\n.octicon-unfold:before { content:\"\\f039\"; }\n\n.octicon-unmute:before { content:\"\\f0ba\"; }\n\n.octicon-unverified:before { content:\"\\f0e8\"; }\n\n.octicon-verified:before { content:\"\\f0e6\"; }\n\n.octicon-versions:before { content:\"\\f064\"; }\n\n.octicon-watch:before { content:\"\\f0e0\"; }\n\n.octicon-x:before { content:\"\\f081\"; }\n\n.octicon-zap:before { content:\"\\26a1\"; }\n\n"
  },
  {
    "path": "icon_font_to_png/test/files/test-foo.css",
    "content": ".foo-bar:before { content: '\\f001' }\n.foo-test:before { content: '\\f002' }\n"
  },
  {
    "path": "icon_font_to_png/test/files/test.css",
    "content": ".foo:before { content: '\\f001' }\n.bar:before { content: '\\f002' }\n\n"
  },
  {
    "path": "icon_font_to_png/test/test_command_line.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import absolute_import, unicode_literals\n\nimport os\nimport shutil\n\nimport pytest\n\nfrom icon_font_to_png import command_line\n\n\nBASE_DIR = os.path.dirname(os.path.realpath(__file__))\n\n\n# Tests\ndef test_list_option(capfd):\n    \"\"\"Test listing CSS icons\"\"\"\n    css_file = os.path.join(BASE_DIR, 'files', 'test-foo.css')\n    ttf_file = os.path.join(BASE_DIR, 'files', 'test.ttf')  # Required argument\n\n    # No CSS and TTF files\n    with pytest.raises(SystemExit):\n        command_line.run(\n            '--list'.split()\n        )\n    out, err = capfd.readouterr()\n    assert out == ''\n\n    # Lists correctly\n    with pytest.raises(SystemExit):\n        command_line.run(\n            '--css {css_file} --ttf {ttf_file} --list'.format(\n                css_file=css_file, ttf_file=ttf_file\n            ).split()\n        )\n    out, err = capfd.readouterr()\n    assert out == 'bar\\ntest\\n'\n\n    # Lists correctly, with the prefix\n    with pytest.raises(SystemExit):\n        command_line.run(\n            '--css {css_file} --ttf {ttf_file} --keep_prefix --list'.format(\n                css_file=css_file, ttf_file=ttf_file\n            ).split()\n        )\n    out, err = capfd.readouterr()\n    assert out == 'foo-bar\\nfoo-test\\n'\n\n\ndef test_icon_export(capfd):\n    \"\"\"Test exporting icons (on Font Awesome files)\"\"\"\n    css_file = os.path.join(BASE_DIR, 'files', 'font-awesome.css')\n    ttf_file = os.path.join(BASE_DIR, 'files', 'fontawesome-webfont.ttf')\n\n    # Export none icons\n    with pytest.raises(SystemExit):\n        command_line.run(\n            '--css {css_file} --ttf {ttf_file}'.format(\n                css_file=css_file, ttf_file=ttf_file\n            ).split()\n        )\n    out, err = capfd.readouterr()  # For skipping stdout\n\n    # Export one icon\n    command_line.run(\n        '--css {css_file} --ttf {ttf_file} github'.format(\n            css_file=css_file, ttf_file=ttf_file\n        ).split()\n    )\n    out, err = capfd.readouterr()  # For skipping stdout\n\n    assert os.path.isfile(os.path.join('exported', 'github.png'))\n\n    # Export two icons\n    command_line.run(\n        '--css {css_file} --ttf {ttf_file} github star'.format(\n            css_file=css_file, ttf_file=ttf_file\n        ).split()\n    )\n    out, err = capfd.readouterr()  # For skipping stdout\n\n    assert os.path.isfile(os.path.join('exported', 'github.png'))\n    assert os.path.isfile(os.path.join('exported', 'star.png'))\n\n    # Export all icons\n    command_line.run(\n        '--css {css_file} --ttf {ttf_file} ALL'.format(\n            css_file=css_file, ttf_file=ttf_file\n        ).split()\n    )\n    out, err = capfd.readouterr()  # For skipping stdout\n\n\ndef test_filename_option(capfd):\n    \"\"\"Test filename option\"\"\"\n    css_file = os.path.join(BASE_DIR, 'files', 'font-awesome.css')\n    ttf_file = os.path.join(BASE_DIR, 'files', 'fontawesome-webfont.ttf')\n\n    # Export one icon\n    command_line.run(\n        '--css {css_file} --ttf {ttf_file} '\n        '--filename foo github'.format(\n            css_file=css_file, ttf_file=ttf_file\n        ).split()\n    )\n    out, err = capfd.readouterr()  # For skipping stdout\n\n    assert os.path.isfile(os.path.join('exported', 'foo.png'))\n\n    # Export multiple icons\n    command_line.run(\n        '--css {css_file} --ttf {ttf_file} '\n        '--filename foo- github star'.format(\n            css_file=css_file, ttf_file=ttf_file\n        ).split()\n    )\n    out, err = capfd.readouterr()  # For skipping stdout\n\n    assert os.path.isfile(os.path.join('exported', 'foo-github.png'))\n    assert os.path.isfile(os.path.join('exported', 'foo-star.png'))\n\n\ndef test_download_option(capfd):\n    \"\"\"Test icon font download option\"\"\"\n    with pytest.raises(SystemExit):\n        command_line.run(\n            '--download {font_name}'.format(font_name='font-awesome').split()\n        )\n    out, err = capfd.readouterr()  # For skipping stdout\n    assert out == \"Icon font 'font-awesome' successfully downloaded\\n\"\n\n    assert os.path.isfile('font-awesome.css')\n    assert os.path.isfile('fontawesome-webfont.ttf')\n\n\n# Teardown\ndef teardown_module():\n    \"\"\"Delete exported icons directory and downloaded FontAwesome files\"\"\"\n    if os.path.isdir('exported'):\n        shutil.rmtree('exported')\n\n    if os.path.isfile('font-awesome.css'):\n        os.remove('font-awesome.css')\n\n    if os.path.isfile('fontawesome-webfont.ttf'):\n        os.remove('fontawesome-webfont.ttf')\n"
  },
  {
    "path": "icon_font_to_png/test/test_font_awesome.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import absolute_import, unicode_literals\n\nimport os\nimport random\n\nimport pytest\n\nfrom icon_font_to_png import icon_font\n\n\nBASE_DIR = os.path.dirname(os.path.realpath(__file__))\n\n\n# Fixtures\n@pytest.fixture(scope='module')\ndef font_awesome():\n    \"\"\"Create a IconFont instance from Font Awesome files\"\"\"\n    css_file = os.path.join(BASE_DIR, 'files', 'font-awesome.css')\n    ttf_file = os.path.join(BASE_DIR, 'files', 'fontawesome-webfont.ttf')\n    return icon_font.IconFont(css_file=css_file, ttf_file=ttf_file)\n\n\n# Tests\ndef test_font_awesome_load_icons(font_awesome):\n    \"\"\"Test Font Awesome icon loading\"\"\"\n    assert len(font_awesome.css_icons) > 0\n\n\ndef test_font_awesome_prefix(font_awesome):\n    \"\"\"Test Font Awesome common prefix\"\"\"\n    assert font_awesome.common_prefix == 'fa-'\n\n\ndef test_font_awesome_export_icon(font_awesome):\n    \"\"\"Test Font Awesome random icon exporting\"\"\"\n    icon = random.choice(list(font_awesome.css_icons.keys()))\n    font_awesome.export_icon(icon, size=128, export_dir='/tmp')\n    font_awesome.export_icon(icon, size=128, color='blue', export_dir='/tmp')\n    font_awesome.export_icon(icon, size=256, export_dir='/tmp')\n    font_awesome.export_icon(icon, size=256, color='blue', export_dir='/tmp')\n"
  },
  {
    "path": "icon_font_to_png/test/test_icon_font.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import absolute_import, unicode_literals\n\nimport os\nimport shutil\nimport tempfile\nimport uuid\n\nimport pytest\nfrom PIL import Image, ImageChops\n\nfrom icon_font_to_png import icon_font\n\n\nBASE_DIR = os.path.dirname(os.path.realpath(__file__))\n\n\n# Fixtures\n@pytest.fixture(scope='module')\ndef font_awesome():\n    \"\"\"Create a IconFont instance from Font Awesome files\"\"\"\n    css_file = os.path.join(BASE_DIR, 'files', 'font-awesome.css')\n    ttf_file = os.path.join(BASE_DIR, 'files', 'fontawesome-webfont.ttf')\n    return icon_font.IconFont(css_file=css_file, ttf_file=ttf_file)\n\n\n# Tests\ndef test_init():\n    \"\"\"Test initializing\"\"\"\n    # No arguments\n    with pytest.raises(TypeError):\n        icon_font.IconFont()\n\n    # Non-existent files\n    with pytest.raises(IOError):\n        icon_font.IconFont(css_file=str(uuid.uuid4()),\n                           ttf_file=str(uuid.uuid4()))\n\n    obj = icon_font.IconFont(css_file=tempfile.mkstemp()[1],\n                             ttf_file=tempfile.mkstemp()[1])\n    assert len(obj.css_icons) == 0\n\n\ndef test_common_prefix():\n    \"\"\"Test finding out what the common prefix is\"\"\"\n    css_file = os.path.join(BASE_DIR, 'files', 'test-foo.css')\n    obj = icon_font.IconFont(css_file=css_file, ttf_file=None,\n                             keep_prefix=True)\n    assert obj.common_prefix == 'foo-'\n\n    css_file = os.path.join(BASE_DIR, 'files', 'test.css')\n    obj = icon_font.IconFont(css_file=css_file, ttf_file=None,\n                             keep_prefix=True)\n    assert obj.common_prefix == ''\n\n\n@pytest.mark.parametrize(\"image,size\", [\n    (\"rocket_16.png\", 16),\n    (\"rocket_100.png\", 100),\n    (\"rocket_256.png\", 256),\n])\ndef test_size(font_awesome, image, size):\n    \"\"\"Test size option\"\"\"\n    original_file = os.path.join(BASE_DIR, 'files', image)\n\n    font_awesome.export_icon(icon='rocket', size=size)\n    exported_file = os.path.join('exported', 'rocket.png')\n\n    img1 = Image.open(original_file)\n    img2 = Image.open(exported_file)\n\n    # Check dimensions\n    assert img1.size == (size, size)\n    assert img2.size == (size, size)\n\n    # Check if the images are equal\n    assert ImageChops.difference(img1, img2).getbbox() is None\n\n\n@pytest.mark.parametrize(\"image,color\", [\n    (\"rocket_blue.png\", 'blue'),\n    (\"rocket_cyan.png\", 'cyan'),\n    (\"rocket_123123.png\", '#123123'),\n])\ndef test_color(font_awesome, image, color):\n    \"\"\"Test color option\"\"\"\n    original_file = os.path.join(BASE_DIR, 'files', image)\n\n    font_awesome.export_icon(icon='rocket', size=16, color=color)\n    exported_file = os.path.join('exported', 'rocket.png')\n\n    img1 = Image.open(original_file)\n    img2 = Image.open(exported_file)\n\n    # Check if the images are equal\n    assert ImageChops.difference(img1, img2).getbbox() is None\n\n\n@pytest.mark.parametrize(\"image,scale\", [\n    (\"rocket_x1.png\", 1),\n    (\"rocket_x05.png\", 0.5),\n    (\"rocket_auto.png\", 'auto'),\n])\ndef test_scale(font_awesome, image, scale):\n    \"\"\"Test scale option\"\"\"\n    original_file = os.path.join(BASE_DIR, 'files', image)\n\n    font_awesome.export_icon(icon='rocket', size=16, scale=scale)\n    exported_file = os.path.join('exported', 'rocket.png')\n\n    img1 = Image.open(original_file)\n    img2 = Image.open(exported_file)\n\n    # Check if the images are equal\n    assert ImageChops.difference(img1, img2).getbbox() is None\n\n\n# Teardown\ndef teardown_module():\n    \"\"\"Delete exported icons directory\"\"\"\n    if os.path.isdir('exported'):\n        shutil.rmtree('exported')\n"
  },
  {
    "path": "icon_font_to_png/test/test_icon_font_downloader.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import absolute_import, unicode_literals\n\nimport os\nimport tempfile\n\nimport pytest\nfrom flaky import flaky\n\nfrom icon_font_to_png.icon_font_downloader import (\n    FontAwesomeDownloader, OcticonsDownloader\n)\n\n\n# Tests\n@flaky\n@pytest.mark.parametrize(\"downloader\", [\n    FontAwesomeDownloader,\n    OcticonsDownloader,\n])\ndef test_icon_font_downloader(downloader):\n    \"\"\"Test initializing Font Awesome Downloader\"\"\"\n    # With directory\n    obj = downloader(tempfile.mkdtemp())\n    obj.download_files()\n\n    assert os.path.isfile(obj.css_path)\n    assert os.path.isfile(obj.ttf_path)\n\n    # Without directory\n    obj = downloader()\n    obj.download_files()\n\n    assert os.path.isfile(obj.css_path)\n    assert os.path.isfile(obj.ttf_path)\n\n\n@pytest.mark.parametrize(\"downloader\", [\n    FontAwesomeDownloader,\n    OcticonsDownloader,\n])\ndef test_font_awesome_latest_version_number(downloader):\n    \"\"\"Test that getting latest version number\"\"\"\n    obj = downloader(tempfile.mkdtemp())\n    assert obj.get_latest_version_number()\n"
  },
  {
    "path": "icon_font_to_png/test/test_octicons.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import absolute_import, unicode_literals\n\nimport os\nimport random\n\nimport pytest\n\nfrom icon_font_to_png import icon_font\n\n\nBASE_DIR = os.path.dirname(os.path.realpath(__file__))\n\n\n# Fixtures\n@pytest.fixture(scope='module')\ndef octicons():\n    \"\"\"Create a IconFont instance from Octicons files\"\"\"\n    css_file = os.path.join(BASE_DIR, 'files', 'octicons.css')\n    ttf_file = os.path.join(BASE_DIR, 'files', 'octicons.ttf')\n    return icon_font.IconFont(css_file=css_file, ttf_file=ttf_file)\n\n\n# Tests\ndef test_octicons_load_icons(octicons):\n    \"\"\"Test Octicons icon loading\"\"\"\n    assert len(octicons.css_icons) > 0\n\n\ndef test_octicons_prefix(octicons):\n    \"\"\"Test Octicons common prefix\"\"\"\n    assert octicons.common_prefix == 'octicon-'\n\n\ndef test_octicons_export_icon(octicons):\n    \"\"\"Test Octicons random icon exporting\"\"\"\n    icon = random.choice(list(octicons.css_icons.keys()))\n    octicons.export_icon(icon=icon, size=128, export_dir='/tmp')\n    octicons.export_icon(icon=icon, size=128, color='blue', export_dir='/tmp')\n    octicons.export_icon(icon=icon, size=256, export_dir='/tmp')\n    octicons.export_icon(icon=icon, size=256, color='blue', export_dir='/tmp')\n"
  },
  {
    "path": "requirements/common.txt",
    "content": "Pillow>=4.0.0\nrequests>=2.13.0\nsix>=1.10.0\ntinycss>=0.4\n"
  },
  {
    "path": "requirements/dev.txt",
    "content": "-r common.txt\n\ncheck-manifest>=0.35\ncoverage>=4.3.4\ncoveralls>=1.1\nflake8>=3.2.1\nflaky>=3.3.0\npypandoc>=1.3.3\npytest>=3.0.6\ntox>=2.6.0\ntwine>=1.8.1\n"
  },
  {
    "path": "requirements.txt",
    "content": "-r requirements/common.txt\n"
  },
  {
    "path": "setup.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nimport io\nimport os\nimport re\n\nfrom setuptools import setup, find_packages\n\n\n# Convert description from markdown to reStructuredText\ntry:\n    import pypandoc\n    description = pypandoc.convert('README.md', 'rst', 'markdown')\nexcept (OSError, ImportError):\n    description = ''\n\n\n# Get package version number\n# Source: https://packaging.python.org/single_source_version/\ndef read(*names, **kwargs):\n    with io.open(\n        os.path.join(os.path.dirname(__file__), *names),\n        encoding=kwargs.get('encoding', 'utf8')\n    ) as fp:\n        return fp.read()\n\n\ndef find_version(*file_paths):\n    version_file = read(*file_paths)\n    version_match = re.search(\n        r\"^__version__ = ['\\\"]([^'\\\"]*)['\\\"]\",\n        version_file, re.M\n    )\n    if version_match:\n        return version_match.group(1)\n    raise RuntimeError(\"Unable to find version string.\")\n\n\nsetup(\n    name='icon_font_to_png',\n    url='https://github.com/Pythonity/icon-font-to-png',\n    download_url='https://github.com/Pythonity/icon-font-to-png/releases/'\n                 'latest',\n    bugtrack_url='https://github.com/Pythonity/icon-font-to-png/issues',\n    version=find_version('icon_font_to_png', '__init__.py'),\n    license='MIT License',\n    author='Pythonity',\n    author_email='pythonity@pythonity.com',\n    maintainer='Paweł Adamczak',\n    maintainer_email='pawel.adamczak@sidnet.info',\n    description=\"Python script (and library) for exporting icons from \"\n                \"icon fonts (e.g. Font Awesome, Octicons) as PNG images.\",\n    long_description=description,\n    packages=find_packages(),\n    include_package_data=True,\n    install_requires=[\n        'Pillow>=4.0.0',\n        'requests>=2.12.5',\n        'six>=1.10.0',\n        'tinycss>=0.4',\n    ],\n    extras_require={\n        'testing': ['pytest'],\n    },\n    scripts=['bin/font-awesome-to-png', 'bin/icon-font-to-png'],\n    keywords='icon font export font awesome octicons',\n    classifiers=[\n        'Development Status :: 4 - Beta',\n        'Environment :: Console',\n        'Intended Audience :: End Users/Desktop',\n        'License :: OSI Approved :: MIT License',\n        'Operating System :: OS Independent',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: 2',\n        'Programming Language :: Python :: 2.7',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.4',\n        'Programming Language :: Python :: 3.5',\n        'Programming Language :: Python :: 3.6',\n        'Topic :: Utilities',\n    ],\n)\n"
  },
  {
    "path": "tox.ini",
    "content": "[tox]\nenvlist = py27,py34,py35,py36,py36-flake8\n\n[testenv]\ncommands = py.test -v\ndeps = -r{toxinidir}/requirements/dev.txt\npassenv =\n    TRAVIS*\n\n[testenv:flake8]\ncommands = flake8 .\ndeps = flake8\n\n[pytest]\naddopts = --ignore=setup.py\npython_files = *.py\npython_functions = test_\n\n[flake8]\nexclude =\n    .git,\n    .tox,\n    build,\n    dist\n"
  }
]