Compare commits

..

2 commits

Author SHA1 Message Date
github-actions[bot]
cdd3762e4a chore: change batteries 2024-11-22 17:59:09 +00:00
b84ce0a414
ci: check weekly on monday 2024-11-22 11:58:36 -06:00
39 changed files with 1062 additions and 67 deletions

View file

@ -3,8 +3,8 @@ name: "Update Nerd Fonts"
on: on:
workflow_dispatch: workflow_dispatch:
schedule: schedule:
# 1st and 15th at 12:00 AM # “At 00:00 on Monday.”
- cron: "0 0 1,15 * *" - cron: "0 0 * * 1"
permissions: permissions:
contents: write contents: write
@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Setup Git Bot - name: Setup Git Bot
run: | run: |

View file

@ -1,14 +1,14 @@
#!/usr/bin/env python #!/usr/bin/env python
# coding=utf8 # coding=utf8
# Nerd Fonts Version: 3.2.1 # Nerd Fonts Version: 3.3.0
# Script version is further down # Script version is further down
from __future__ import absolute_import, print_function, unicode_literals from __future__ import absolute_import, print_function, unicode_literals
# Change the script version when you edit this script: # Change the script version when you edit this script:
script_version = "4.14.5" script_version = "4.16.1"
version = "3.2.1" version = "3.3.0"
projectName = "Nerd Fonts" projectName = "Nerd Fonts"
projectNameAbbreviation = "NF" projectNameAbbreviation = "NF"
projectNameSingular = projectName[:-1] projectNameSingular = projectName[:-1]
@ -318,6 +318,16 @@ def create_filename(fonts):
sfnt_psubfam = '-' + sfnt_psubfam sfnt_psubfam = '-' + sfnt_psubfam
return (sfnt_pfam + sfnt_psubfam).replace(' ', '') return (sfnt_pfam + sfnt_psubfam).replace(' ', '')
def fetch_glyphnames():
""" Read the glyphname database and put it into a dictionary """
try:
glyphnamefile = os.path.abspath(os.path.dirname(sys.argv[0])) + '/glyphnames.json'
with open(glyphnamefile, 'r') as f:
namelist = json.load(f)
return { int(v['code'], 16): k for k, v in namelist.items() if 'code' in v }
except Exception as error:
logger.warning("Can not read glyphnames file (%s)", repr(error))
return {}
class font_patcher: class font_patcher:
def __init__(self, args, conf): def __init__(self, args, conf):
@ -333,6 +343,7 @@ class font_patcher:
self.onlybitmaps = 0 self.onlybitmaps = 0
self.essential = set() self.essential = set()
self.xavgwidth = [] # list of ints self.xavgwidth = [] # list of ints
self.glyphnames = fetch_glyphnames()
def patch(self, font): def patch(self, font):
self.sourceFont = font self.sourceFont = font
@ -888,21 +899,21 @@ class font_patcher:
0xe0b7: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'xy-ratio': 0.5}}, 0xe0b7: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'xy-ratio': 0.5}},
# Bottom Triangles # Bottom Triangles
0xe0b8: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.02}}, 0xe0b8: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.05}},
0xe0b9: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {}}, 0xe0b9: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {}},
0xe0ba: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.02}}, 0xe0ba: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.05}},
0xe0bb: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {}}, 0xe0bb: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {}},
# Top Triangles # Top Triangles
0xe0bc: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.02}}, 0xe0bc: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.05}},
0xe0bd: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {}}, 0xe0bd: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {}},
0xe0be: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.02}}, 0xe0be: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.05}},
0xe0bf: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {}}, 0xe0bf: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {}},
# Flames # Flames
0xe0c0: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.01}}, 0xe0c0: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.05}},
0xe0c1: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {}}, 0xe0c1: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {}},
0xe0c2: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.01}}, 0xe0c2: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.05}},
0xe0c3: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {}}, 0xe0c3: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {}},
# Small squares # Small squares
@ -914,8 +925,8 @@ class font_patcher:
0xe0c7: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': -0.03, 'xy-ratio': 0.78}}, 0xe0c7: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': -0.03, 'xy-ratio': 0.78}},
# Waveform # Waveform
0xe0c8: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.01}}, 0xe0c8: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.05}},
0xe0ca: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.01}}, 0xe0ca: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.05}},
# Hexagons # Hexagons
0xe0cc: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.02, 'xy-ratio': 0.85}}, 0xe0cc: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.02, 'xy-ratio': 0.85}},
@ -953,6 +964,16 @@ class font_patcher:
# 0x2592: {'align': 'c', 'valign': 'c', 'stretch': 'xy', 'params': {'dont_copy': box_keep}}, # 0x2592: {'align': 'c', 'valign': 'c', 'stretch': 'xy', 'params': {'dont_copy': box_keep}},
# 0x2593: {'align': 'c', 'valign': 'c', 'stretch': 'xy', 'params': {'dont_copy': box_keep}}, # 0x2593: {'align': 'c', 'valign': 'c', 'stretch': 'xy', 'params': {'dont_copy': box_keep}},
} }
SYM_ATTR_PROGRESS = {
'default': {'align': 'c', 'valign': 'c', 'stretch': '^pa1!', 'params': {'overlap': -0.03, 'careful': True}}, # Cirles
# All the squares:
0xee00: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.05, 'careful': True}},
0xee01: {'align': 'c', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.10, 'careful': True}},
0xee02: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.05, 'careful': True}},
0xee03: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.05, 'careful': True}},
0xee04: {'align': 'c', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.10, 'careful': True}},
0xee05: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.05, 'careful': True}},
}
CUSTOM_ATTR = { CUSTOM_ATTR = {
# previous custom scaling => do not touch the icons # previous custom scaling => do not touch the icons
# 'default': {'align': 'c', 'valign': '', 'stretch': '', 'params': {}} # 'default': {'align': 'c', 'valign': '', 'stretch': '', 'params': {}}
@ -972,9 +993,9 @@ class font_patcher:
# Shifting in addition to scaling can be selected too (see below). # Shifting in addition to scaling can be selected too (see below).
# - ScaleGroups: # - ScaleGroups:
# Here you specify a group of glyphs that should be handled together # Here you specify a group of glyphs that should be handled together
# with the same scaling and shifting. The basis for it is a 'combined # with the same scaling and shifting (see bottom). The basis for it is
# bounding box' of all glyphs in that group. All glyphs are handled as # a 'combined bounding box' of all glyphs in that group. All glyphs are
# if they fill that combined bounding box. # handled as if they fill that combined bounding box.
# (- ScaleGroupsVert: Removed with this commit) # (- ScaleGroupsVert: Removed with this commit)
# #
# The ScaleGlyph method: You set 'ScaleGlyph' to the unicode of the reference glyph. # The ScaleGlyph method: You set 'ScaleGlyph' to the unicode of the reference glyph.
@ -991,7 +1012,7 @@ class font_patcher:
# #
# For the ScaleGroup method you define any number groups of glyphs and each group is # For the ScaleGroup method you define any number groups of glyphs and each group is
# handled separately. The combined bounding box of all glyphs in the group is determined # handled separately. The combined bounding box of all glyphs in the group is determined
# and based on that the scale and shift for all the glyphs in the group. # and based on that the scale and shift (see bottom) for all the glyphs in the group.
# You define the groups as value of 'ScaleGroups'. # You define the groups as value of 'ScaleGroups'.
# It is a List of: ((lists of glyph codes) or (ranges of glyph codes)) # It is a List of: ((lists of glyph codes) or (ranges of glyph codes))
# 'ScaleGroups': [ # 'ScaleGroups': [
@ -1002,15 +1023,21 @@ class font_patcher:
# See prepareScaleRules() for some more details. # See prepareScaleRules() for some more details.
# For historic reasons ScaleGroups is sometimes called 'new method' and ScaleGlyph 'old'. # For historic reasons ScaleGroups is sometimes called 'new method' and ScaleGlyph 'old'.
# The codepoints mentioned here are symbol-font-codepoints. # The codepoints mentioned here are symbol-font-codepoints.
#
# Shifting:
# If we have a combined bounding box stored in a range, that
# box is used to align all symbols in the range identically.
# - If the symbol font is proportinal only the v alignment is synced.
# - If the symbol font is monospaced v and h alignemnts are synced.
# To make sure the behavior is as expected you are required to set a ShiftMode property
# accordingly. It just checks, you can not (!) select what is done with that property.
BOX_SCALE_LIST = {'ScaleGroups': [ BOX_SCALE_LIST = {'ShiftMode': 'xy', 'ScaleGroups': [
[*range(0x2500, 0x2570 + 1), *range(0x2574, 0x257f + 1)], # box drawing [*range(0x2500, 0x2570 + 1), *range(0x2574, 0x257f + 1)], # box drawing
range(0x2571, 0x2573 + 1), # diagonals range(0x2571, 0x2573 + 1), # diagonals
[*range(0x2580, 0x2590 + 1), 0x2594, 0x2595], # blocks range(0x2580, 0x259f + 1), # blocks and greys (greys are less tall originally, so overlap will be less)
range(0x2591, 0x2593 + 1), # greys
range(0x2594, 0x259f + 1), # quards (Note: quard 2597 in Hack is wrong, scales like block!)
]} ]}
CODI_SCALE_LIST = {'ScaleGroups': [ CODI_SCALE_LIST = {'ShiftMode': 'xy', 'ScaleGroups': [
[0xea61, 0xeb13], # lightbulb [0xea61, 0xeb13], # lightbulb
range(0xeab4, 0xeab7 + 1), # chevrons range(0xeab4, 0xeab7 + 1), # chevrons
[0xea7d, *range(0xea99, 0xeaa1 + 1), 0xebcb], # arrows [0xea7d, *range(0xea99, 0xeaa1 + 1), 0xebcb], # arrows
@ -1021,11 +1048,8 @@ class font_patcher:
[*range(0xeb89, 0xeb8b + 1), 0xec07], # smallish dots [*range(0xeb89, 0xeb8b + 1), 0xec07], # smallish dots
range(0xebd5, 0xebd7 + 1), # compasses range(0xebd5, 0xebd7 + 1), # compasses
]} ]}
DEVI_SCALE_LIST = {'ScaleGlyph': 0xE60E, # Android logo DEVI_SCALE_LIST = None
'GlyphsToScale': [ FONTA_SCALE_LIST = {'ShiftMode': '', 'ScaleGroups': [
(0xe6bd, 0xe6c3) # very small things
]}
FONTA_SCALE_LIST = {'ScaleGroups': [
[0xf005, 0xf006, 0xf089], # star, star empty, half star [0xf005, 0xf006, 0xf089], # star, star empty, half star
range(0xf026, 0xf028 + 1), # volume off, down, up range(0xf026, 0xf028 + 1), # volume off, down, up
range(0xf02b, 0xf02c + 1), # tag, tags range(0xf02b, 0xf02c + 1), # tag, tags
@ -1046,11 +1070,11 @@ class font_patcher:
range(0xf221, 0xf22d + 1), # gender or so range(0xf221, 0xf22d + 1), # gender or so
range(0xf255, 0xf25b + 1), # hand symbols range(0xf255, 0xf25b + 1), # hand symbols
]} ]}
HEAVY_SCALE_LIST = {'ScaleGlyph': 0x2771, # widest bracket, horizontally HEAVY_SCALE_LIST = {'ShiftMode': 'y', 'ScaleGlyph': 0x2771, # widest bracket, horizontally
'GlyphsToScale': [ 'GlyphsToScale': [
(0x276c, 0x2771) # all (0x276c, 0x2771) # all
]} ]}
OCTI_SCALE_LIST = {'ScaleGroups': [ OCTI_SCALE_LIST = {'ShiftMode': '', 'ScaleGroups': [
[*range(0xf03d, 0xf040 + 1), 0xf019, 0xf030, 0xf04a, 0xf051, 0xf071, 0xf08c ], # arrows [*range(0xf03d, 0xf040 + 1), 0xf019, 0xf030, 0xf04a, 0xf051, 0xf071, 0xf08c ], # arrows
[0xF0E7, # Smily and ... [0xF0E7, # Smily and ...
0xf044, 0xf05a, 0xf05b, 0xf0aa, # triangles 0xf044, 0xf05a, 0xf05b, 0xf0aa, # triangles
@ -1062,7 +1086,11 @@ class font_patcher:
range(0xf2c2, 0xf2c5 + 1), # move to range(0xf2c2, 0xf2c5 + 1), # move to
[0xf07b, 0xf0a1, 0xf0d6, 0xf306], # bookmarks [0xf07b, 0xf0a1, 0xf0d6, 0xf306], # bookmarks
]} ]}
WEATH_SCALE_LIST = {'ScaleGroups': [ PROGR_SCALE_LIST = {'ShiftMode': 'xy', 'ScaleGroups': [
range(0xedff, 0xee05 + 1), # boxes... with helper glyph for Y padding
range(0xee06, 0xee0b + 1), # circles
]}
WEATH_SCALE_LIST = {'ShiftMode': '', 'ScaleGroups': [
[0xf03c, 0xf042, 0xf045 ], # degree signs [0xf03c, 0xf042, 0xf045 ], # degree signs
[0xf043, 0xf044, 0xf048, 0xf04b, 0xf04c, 0xf04d, 0xf057, 0xf058, 0xf087, 0xf088], # arrows [0xf043, 0xf044, 0xf048, 0xf04b, 0xf04c, 0xf04d, 0xf057, 0xf058, 0xf087, 0xf088], # arrows
range(0xf053, 0xf055 + 1), # thermometers range(0xf053, 0xf055 + 1), # thermometers
@ -1071,6 +1099,8 @@ class font_patcher:
range(0xf095, 0xf0b0 + 1), # moon phases range(0xf095, 0xf0b0 + 1), # moon phases
range(0xf0b7, 0xf0c3 + 1), # wind strengths range(0xf0b7, 0xf0c3 + 1), # wind strengths
[0xf06e, 0xf070 ], # solar/lunar eclipse [0xf06e, 0xf070 ], # solar/lunar eclipse
[0xf051, 0xf052, 0xf0c9, 0xf0ca, 0xf072 ], # sun/moon up/down
[0xf049, 0xf056, 0xf071, *range(0xf073, 0xf07c + 1), 0xf08a], # other things
# Note: Codepoints listed before that are also in the following range # Note: Codepoints listed before that are also in the following range
# will take the scaling of the previous group (the ScaleGroups are # will take the scaling of the previous group (the ScaleGroups are
# searched through in definition order). # searched through in definition order).
@ -1078,7 +1108,12 @@ class font_patcher:
# _will_ include all glyphs in its definition: Make sure the exempt # _will_ include all glyphs in its definition: Make sure the exempt
# glyphs from above are smaller (do not extend) the combined bounding # glyphs from above are smaller (do not extend) the combined bounding
# box of this range: # box of this range:
range(0xf000, 0xf0cb + 1), # lots of clouds and other (Please read note above!) [ *range(0xf000, 0xf041 + 1),
*range(0xf064, 0xf06d + 1),
*range(0xf07d, 0xf083 + 1),
*range(0xf085, 0xf086 + 1),
*range(0xf0b2, 0xf0b6 + 1)
], # lots of clouds (weather states) (Please read note above!)
]} ]}
MDI_SCALE_LIST = None # Maybe later add some selected ScaleGroups MDI_SCALE_LIST = None # Maybe later add some selected ScaleGroups
@ -1089,7 +1124,8 @@ class font_patcher:
{'Enabled': True, 'Name': "Seti-UI + Custom", 'Filename': "original-source.otf", 'Exact': False, 'SymStart': 0xE4FA, 'SymEnd': 0xE5FF, 'SrcStart': 0xE5FA, 'ScaleRules': None, 'Attributes': SYM_ATTR_DEFAULT}, {'Enabled': True, 'Name': "Seti-UI + Custom", 'Filename': "original-source.otf", 'Exact': False, 'SymStart': 0xE4FA, 'SymEnd': 0xE5FF, 'SrcStart': 0xE5FA, 'ScaleRules': None, 'Attributes': SYM_ATTR_DEFAULT},
{'Enabled': True, 'Name': "Heavy Angle Brackets", 'Filename': "extraglyphs.sfd", 'Exact': True, 'SymStart': 0x276C, 'SymEnd': 0x2771, 'SrcStart': None, 'ScaleRules': HEAVY_SCALE_LIST, 'Attributes': SYM_ATTR_HEAVYBRACKETS}, {'Enabled': True, 'Name': "Heavy Angle Brackets", 'Filename': "extraglyphs.sfd", 'Exact': True, 'SymStart': 0x276C, 'SymEnd': 0x2771, 'SrcStart': None, 'ScaleRules': HEAVY_SCALE_LIST, 'Attributes': SYM_ATTR_HEAVYBRACKETS},
{'Enabled': box_enabled, 'Name': "Box Drawing", 'Filename': "extraglyphs.sfd", 'Exact': True, 'SymStart': 0x2500, 'SymEnd': 0x259F, 'SrcStart': None, 'ScaleRules': BOX_SCALE_LIST, 'Attributes': SYM_ATTR_BOX}, {'Enabled': box_enabled, 'Name': "Box Drawing", 'Filename': "extraglyphs.sfd", 'Exact': True, 'SymStart': 0x2500, 'SymEnd': 0x259F, 'SrcStart': None, 'ScaleRules': BOX_SCALE_LIST, 'Attributes': SYM_ATTR_BOX},
{'Enabled': True, 'Name': "Devicons", 'Filename': "devicons/devicons.ttf", 'Exact': False, 'SymStart': 0xE600, 'SymEnd': 0xE6C5, 'SrcStart': 0xE700, 'ScaleRules': DEVI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT}, {'Enabled': True, 'Name': "Progress Indicators", 'Filename': "extraglyphs.sfd", 'Exact': True, 'SymStart': 0xEE00, 'SymEnd': 0xEE0B, 'SrcStart': None, 'ScaleRules': PROGR_SCALE_LIST, 'Attributes': SYM_ATTR_PROGRESS},
{'Enabled': True, 'Name': "Devicons", 'Filename': "devicons/devicons.ttf", 'Exact': False, 'SymStart': 0xE600, 'SymEnd': 0xE7E3, 'SrcStart': 0xE700, 'ScaleRules': DEVI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT},
{'Enabled': self.args.powerline, 'Name': "Powerline Symbols", 'Filename': "powerline-symbols/PowerlineSymbols.otf", 'Exact': True, 'SymStart': 0xE0A0, 'SymEnd': 0xE0A2, 'SrcStart': None, 'ScaleRules': None, 'Attributes': SYM_ATTR_POWERLINE}, {'Enabled': self.args.powerline, 'Name': "Powerline Symbols", 'Filename': "powerline-symbols/PowerlineSymbols.otf", 'Exact': True, 'SymStart': 0xE0A0, 'SymEnd': 0xE0A2, 'SrcStart': None, 'ScaleRules': None, 'Attributes': SYM_ATTR_POWERLINE},
{'Enabled': self.args.powerline, 'Name': "Powerline Symbols", 'Filename': "powerline-symbols/PowerlineSymbols.otf", 'Exact': True, 'SymStart': 0xE0B0, 'SymEnd': 0xE0B3, 'SrcStart': None, 'ScaleRules': None, 'Attributes': SYM_ATTR_POWERLINE}, {'Enabled': self.args.powerline, 'Name': "Powerline Symbols", 'Filename': "powerline-symbols/PowerlineSymbols.otf", 'Exact': True, 'SymStart': 0xE0B0, 'SymEnd': 0xE0B3, 'SrcStart': None, 'ScaleRules': None, 'Attributes': SYM_ATTR_POWERLINE},
{'Enabled': self.args.powerlineextra, 'Name': "Powerline Extra Symbols", 'Filename': "powerline-extra/PowerlineExtraSymbols.otf", 'Exact': True, 'SymStart': 0xE0A3, 'SymEnd': 0xE0A3, 'SrcStart': None, 'ScaleRules': None, 'Attributes': SYM_ATTR_POWERLINE}, {'Enabled': self.args.powerlineextra, 'Name': "Powerline Extra Symbols", 'Filename': "powerline-extra/PowerlineExtraSymbols.otf", 'Exact': True, 'SymStart': 0xE0A3, 'SymEnd': 0xE0A3, 'SrcStart': None, 'ScaleRules': None, 'Attributes': SYM_ATTR_POWERLINE},
@ -1329,25 +1365,29 @@ class font_patcher:
return 1 return 1
return 2 return 2
def get_scale_factors(self, sym_dim, stretch): def get_scale_factors(self, sym_dim, stretch, overlap=None):
""" Get scale in x and y as tuple """ """ Get scale in x and y as tuple """
# It is possible to have empty glyphs, so we need to skip those. # It is possible to have empty glyphs, so we need to skip those.
if not sym_dim['width'] or not sym_dim['height']: if not sym_dim['width'] or not sym_dim['height']:
return (1.0, 1.0) return (1.0, 1.0)
target_width = self.font_dim['width'] * self.get_target_width(stretch) target_width = self.font_dim['width'] * self.get_target_width(stretch)
if overlap:
target_width += self.font_dim['width'] * overlap
scale_ratio_x = target_width / sym_dim['width'] scale_ratio_x = target_width / sym_dim['width']
# font_dim['height'] represents total line height, keep our symbols sized based upon font's em # font_dim['height'] represents total line height, keep our symbols sized based upon font's em
# Use the font_dim['height'] only for explicit 'y' scaling (not 'pa') # Use the font_dim['height'] only for explicit 'y' scaling (not 'pa')
target_height = self.font_dim['height'] if '^' in stretch else self.font_dim['iconheight'] target_height = self.font_dim['height'] if '^' in stretch else self.font_dim['iconheight']
target_height *= 1.0 - self.font_dim['ypadding'] target_height *= 1.0 - self.font_dim['ypadding']
if overlap:
target_height *= 1.0 + min(0.01, overlap) # never aggressive vertical overlap
scale_ratio_y = target_height / sym_dim['height'] scale_ratio_y = target_height / sym_dim['height']
if 'pa' in stretch: if 'pa' in stretch:
# We want to preserve x/y aspect ratio, so find biggest scale factor that allows symbol to fit # We want to preserve x/y aspect ratio, so find biggest scale factor that allows symbol to fit
scale_ratio_x = min(scale_ratio_x, scale_ratio_y) scale_ratio_x = min(scale_ratio_x, scale_ratio_y)
if not self.args.single and not '!' in stretch: if not self.args.single and not '!' in stretch and not overlap:
# non monospaced fonts just scale down on 'pa', not up # non monospaced fonts just scale down on 'pa', not up
scale_ratio_x = min(scale_ratio_x, 1.0) scale_ratio_x = min(scale_ratio_x, 1.0)
scale_ratio_y = scale_ratio_x scale_ratio_y = scale_ratio_x
@ -1481,30 +1521,32 @@ class font_patcher:
# Paste it # Paste it
self.sourceFont.selection.select(currentSourceFontGlyph) self.sourceFont.selection.select(currentSourceFontGlyph)
self.sourceFont.paste() self.sourceFont.paste()
self.sourceFont[currentSourceFontGlyph].glyphname = sym_glyph.glyphname self.sourceFont[currentSourceFontGlyph].glyphname = \
self.glyphnames.get(currentSourceFontGlyph, sym_glyph.glyphname) if setName != 'Custom' else sym_glyph.glyphname
self.sourceFont[currentSourceFontGlyph].manualHints = True # No autohints for symbols self.sourceFont[currentSourceFontGlyph].manualHints = True # No autohints for symbols
# Prepare symbol glyph dimensions # Prepare symbol glyph dimensions
sym_dim = get_glyph_dimensions(self.sourceFont[currentSourceFontGlyph]) sym_dim = get_glyph_dimensions(self.sourceFont[currentSourceFontGlyph])
if glyph_scale_data is not None:
if glyph_scale_data[1] is not None:
sym_dim = glyph_scale_data[1] # Use combined bounding box
(scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, stretch)
else:
# This is roughly alike get_scale_factors(glyph_scale_data[1], 'pa')
# Except we do not have glyph_scale_data[1] always...
(scale_ratio_x, scale_ratio_y) = (glyph_scale_data[0], glyph_scale_data[0])
else:
(scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, stretch)
overlap = sym_attr['params'].get('overlap') overlap = sym_attr['params'].get('overlap')
if overlap and ypadding: if overlap and ypadding:
logger.critical("Conflicting params: overlap and ypadding") logger.critical("Conflicting params: overlap and ypadding")
sys.exit(1) sys.exit(1)
if glyph_scale_data is not None:
if glyph_scale_data[1] is not None:
sym_dim = glyph_scale_data[1] # Use combined bounding box
(scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, stretch, overlap)
else:
# This is roughly alike get_scale_factors(glyph_scale_data[1], 'pa')
# Except we do not have glyph_scale_data[1] always...
(scale_ratio_x, scale_ratio_y) = (glyph_scale_data[0], glyph_scale_data[0])
if overlap: if overlap:
scale_ratio_x *= 1.0 + (self.font_dim['width'] / (sym_dim['width'] * scale_ratio_x)) * overlap scale_ratio_x *= 1.0 + (self.font_dim['width'] / (sym_dim['width'] * scale_ratio_x)) * overlap
y_overlap = min(0.01, overlap) # never aggressive vertical overlap y_overlap = min(0.01, overlap) # never aggressive vertical overlap
scale_ratio_y *= 1.0 + (self.font_dim['height'] / (sym_dim['height'] * scale_ratio_y)) * y_overlap scale_ratio_y *= 1.0 + (self.font_dim['height'] / (sym_dim['height'] * scale_ratio_y)) * y_overlap
else:
(scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, stretch, overlap)
# Size in x to size in y ratio limit (to prevent over-wide glyphs) # Size in x to size in y ratio limit (to prevent over-wide glyphs)
xy_ratio_max = sym_attr['params'].get('xy-ratio') xy_ratio_max = sym_attr['params'].get('xy-ratio')
@ -1538,7 +1580,8 @@ class font_patcher:
# Handle glyph l/r/c alignment # Handle glyph l/r/c alignment
x_align_distance = 0 x_align_distance = 0
if self.args.nonmono and sym_dim['advance'] is None: simple_nonmono = self.args.nonmono and sym_dim['advance'] is None
if simple_nonmono:
# Remove left side bearing # Remove left side bearing
# (i.e. do not remove left side bearing when combined BB is in use) # (i.e. do not remove left side bearing when combined BB is in use)
x_align_distance = -self.sourceFont[currentSourceFontGlyph].left_side_bearing x_align_distance = -self.sourceFont[currentSourceFontGlyph].left_side_bearing
@ -1551,6 +1594,7 @@ class font_patcher:
elif sym_attr['align'] == 'r': elif sym_attr['align'] == 'r':
# Right align # Right align
x_align_distance += self.font_dim['width'] * self.get_target_width(stretch) - sym_dim['width'] x_align_distance += self.font_dim['width'] * self.get_target_width(stretch) - sym_dim['width']
if not overlap:
# If symbol glyph is wider than target font cell, just left-align # If symbol glyph is wider than target font cell, just left-align
x_align_distance = max(self.font_dim['xmin'] - sym_dim['xmin'], x_align_distance) x_align_distance = max(self.font_dim['xmin'] - sym_dim['xmin'], x_align_distance)
@ -1559,9 +1603,10 @@ class font_patcher:
if sym_attr['align'] == 'l': if sym_attr['align'] == 'l':
x_align_distance -= overlap_width x_align_distance -= overlap_width
elif sym_attr['align'] == 'c': elif sym_attr['align'] == 'c':
if overlap_width > 0: # center aligned keeps being center aligned even with overlap
if overlap_width < 0 and simple_nonmono: # Keep positive bearing due to negative overlap (propo)
x_align_distance -= overlap_width / 2 x_align_distance -= overlap_width / 2
elif sym_attr['align'] == 'r': elif sym_attr['align'] == 'r' and not simple_nonmono:
# Check and correct overlap; it can go wrong if we have a xy-ratio limit # Check and correct overlap; it can go wrong if we have a xy-ratio limit
target_xmax = (self.font_dim['xmin'] + self.font_dim['width']) * self.get_target_width(stretch) target_xmax = (self.font_dim['xmin'] + self.font_dim['width']) * self.get_target_width(stretch)
target_xmax += overlap_width target_xmax += overlap_width
@ -1593,7 +1638,7 @@ class font_patcher:
else: else:
width = sym_dim['width'] width = sym_dim['width']
# If we have overlap we need to subtract that to keep/get negative bearings # If we have overlap we need to subtract that to keep/get negative bearings
if overlap and (sym_attr['align'] == 'l' or sym_attr['align'] == 'r'): if overlap:
width -= overlap_width width -= overlap_width
# Fontforge handles the width change like this: # Fontforge handles the width change like this:
# - Keep existing left_side_bearing # - Keep existing left_side_bearing
@ -1691,11 +1736,21 @@ class font_patcher:
scaleRules['bbdims'] = [] scaleRules['bbdims'] = []
if 'ScaleGroups' not in scaleRules: if 'ScaleGroups' not in scaleRules:
scaleRules['ScaleGroups'] = [] scaleRules['ScaleGroups'] = []
mode = scaleRules['ShiftMode'] # Mode is only documentary
for group in scaleRules['ScaleGroups']: for group in scaleRules['ScaleGroups']:
sym_dim = get_multiglyph_boundingBox([ symbolFont[g] if g in symbolFont else None for g in group ], destGlyph) sym_dim = get_multiglyph_boundingBox([ symbolFont[g] if g in symbolFont else None for g in group ], destGlyph)
scale = self.get_scale_factors(sym_dim, stretch)[0] scale = self.get_scale_factors(sym_dim, stretch)[0]
scaleRules['scales'].append(scale) scaleRules['scales'].append(scale)
scaleRules['bbdims'].append(sym_dim) scaleRules['bbdims'].append(sym_dim)
if (mode):
if ('x' in mode) != (sym_dim['advance'] is not None):
d = '0x{:X} - 0x{:X}'.format(group[0], group[-1])
if ('x' in mode) :
logger.critical("Scaling in group %s is expected to do horizonal shifts but can not", d)
else:
logger.critical("Scaling in group %s is expected to not do horizonal shifts but will", d)
sys.exit(1)
if 'ScaleGlyph' in scaleRules: if 'ScaleGlyph' in scaleRules:
# Rewrite to equivalent ScaleGroup # Rewrite to equivalent ScaleGroup

1
glyphnames.json Normal file

File diff suppressed because one or more lines are too long

View file

@ -1,12 +1,13 @@
# Devicons # Devicons
For more information have a look at the upstream website: https://github.com/vorillaz/devicons From the Devicons the non-linemark versions are selected and assembled into a custom
icon font. This font guarantees that the codepoints of existing icons do not change
when other icons are added or removed.
This is taken directly from the repository default branch, which is ahead of release 1.8.0. For more information have a look at the upstream website: https://github.com/devicons/devicon
We call it 1.8.1 here, but there is no such release.
## Source bugs fixed The helper scripts need to be called in this order (note the individual prerequisites):
* `analyze`
* `generate` (possibly via `fontforge`)
Glyph 0xE6B6 is defective in the original font. We hand optimized and fixed that. Version: 2.16.0.custom
Version: 1.8.1

159
src/glyphs/devicons/analyze Executable file
View file

@ -0,0 +1,159 @@
#!/usr/bin/env python3
# coding=utf8
# Create a new mapping file by combining the information from
# the old mapping and checking which icons got dropped; are new;
# or get a different svg file.
# PREREQUISITES:
# $ curl -OL https://github.com/devicons/devicon/archive/refs/tags/v2.16.0.tar.gz
# $ tar zxf v2.16.0.tar.gz
# $ mv devicon-*/icons .
# $ cp -r vorillaz icons
import re, os, sys
vectorsdir = 'icons'
def filename_from_name(filename):
""" Some icons have a name that is not the svg filename """
# Returns '-' if the icon is to be removed
# Giving a full pathname selects a certain svg variant
return {
'awk': 'fixed/awk-plain.svg', # added as fixed icon
'bower': 'bower/bower-line.svg',
'c_lang': 'c',
'clojure': 'clojure/clojure-line.svg',
'composer': 'composer/composer-line.svg',
'css3_full': 'css3/css3-plain-wordmark.svg',
'djangorest': 'djangorest/djangorest-plain-wordmark.svg',
'dotnet': 'dot-net',
'ghost': 'ghost/ghost-original-wordmark.svg',
'github_full': 'github/github-original-wordmark.svg',
'go': 'go/go-line.svg',
'grunt': 'grunt/grunt-line.svg',
'ie': 'ie10',
'jenkins': 'jenkins/jenkins-line.svg',
'meteorfull': 'meteor/meteor-plain-wordmark.svg',
'nodejs': 'nodejs/nodejs-plain-wordmark.svg',
'nodejs_small': 'nodejs',
'windows': 'windows8',
}.get(filename, filename)
def get_aliases(names):
""" For some icons we would like to have aliases """
# Returns a list with aliases, first element is main name and glyphname
name = names[0]
return {
'c': [ 'c_lang', 'c' ],
'github_badge': [ 'github', 'github_badge' ],
'javascript_badge': [ 'javascript', 'javascript_badge' ],
'krakenjs_badge': [ 'krakenjs', 'krakenjs_badge' ],
'symfony_badge': [ 'symfony', 'symfony_badge' ],
'unifiedmodelinglanguage': [ 'unifiedmodelinglanguage', 'uml' ],
}.get(name, names)
def file_with_ending(files, ending):
""" Return the (first) file out of a list of files that has the desired ending """
# Returns False if no match at all
matches = [ file for file in files if file.endswith(ending) ]
if not matches:
return False
return matches[0]
def suggest_new_filename(name):
""" Return a specific svg filename for one icon, preferring some svg filename endings """
name = filename_from_name(name)
subdir = os.path.join(vectorsdir, name)
if not os.path.exists(subdir):
return False
if os.path.isfile(subdir):
# For translation to direct filename hits
return name
svgs = os.listdir(subdir)
filename = file_with_ending(svgs, 'plain.svg')
if not filename:
filename = file_with_ending(svgs, 'original.svg')
if not filename:
filename = file_with_ending(svgs, 'plain-wordmark.svg')
if not filename:
filename = file_with_ending(svgs, 'original-wordmark.svg')
if not filename:
return False
return os.path.join(name, filename)
remix_mapping = []
with open('mapping', 'r') as f:
for line in f.readlines():
if line.startswith('#'):
continue
c1, c2, n, *f = re.split(' +', line.strip())
remix_mapping.append((int(c1, 16), int(c2, 16), n, *f))
new_names = os.listdir(vectorsdir)
new_names.sort()
new_names.remove('vorillaz') # If this fails one prerequisite step is missing
if 'fixed' in new_names:
# This can exist after a generate run
new_names.remove('fixed')
print('Found {} mapping entries and {} devicon directories'.format(
len(remix_mapping), len(new_names)))
notes1 = ''
notes2 = ''
mapping = []
for orig_point, dest_point, filename, *names in remix_mapping:
if not os.path.isfile(os.path.join(vectorsdir, filename)):
newfilename = suggest_new_filename(names[0])
if newfilename:
notes1 += '# SVG change: code: {:04X} name: {}, old: {}, new: {}\n'.format(
orig_point, names[0], filename, newfilename)
filename = newfilename
if filename:
mapping.append((orig_point, dest_point, filename, *names))
dirname = os.path.dirname(filename)
if dirname.endswith('fixed'):
# Translate dirname for fixed icons
dirname = names[0]
if dirname in new_names:
new_names.remove(dirname)
continue
notes2 += '# Icon dropped: code: {:04X} name: {}\n'.format(
orig_point, names[0])
index = 0xE700
taken_codes = set([ e[1] for e in mapping ])
for iconname in new_names:
filename = suggest_new_filename(iconname)
if not filename:
sys.exit('Can not find svg for "{}"'.format(iconname))
while index in taken_codes:
index = index + 1
mapping.append((index - 0x0100, index, filename, iconname))
taken_codes.add(index)
with open('mapping', 'w', encoding = 'utf8') as f:
f.write('# Devicons mapping file\n')
f.write('#\n')
f.write('# DEV-code NF-code filename name [alias [...]]\n')
f.write('#\n')
mapping.sort(key=(lambda x: x[1]))
unique_names = set()
for orig_point, dest_point, filename, *names in mapping:
aliases = get_aliases(names)
for n in aliases:
if n not in unique_names:
unique_names.add(n)
else:
sys.exit('ERROR name duplicate found: {}'.format(n))
f.write('{:04X} {:04X} {} {}\n'.format(orig_point, dest_point, filename, ' '.join(aliases)))
if notes1:
print(notes1)
if notes2:
print(notes2)
print('Generated new mapping with {} entries'.format(len(mapping)))

Binary file not shown.

View file

@ -0,0 +1,5 @@
This folder contains some modified icons, where the 2.16.0 svg file of Devicons had some import problem.
These files will be preferred over the filenames specified in the mapping file.
Be careful on Devicon updates.

View file

@ -0,0 +1 @@
<svg version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><path d="m52.864 64h23.28l-12.375-25.877zm10.946-62.974-59.257 20.854 9.363 77.637 49.957 27.457 50.214-27.828 9.36-77.635zm-15.766 73.974-7.265 18.176-13.581 0.056 36.608-81.079s26.531 56.561 38.19 81.417l-13.074-0.287-8.042-18.58-17.173 0.082z" fill="#c4473a"/></svg>

After

Width:  |  Height:  |  Size: 346 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.8 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill="#293138" d="M109.01 28.64L71.28 6.24c-2.25-1.33-4.77-2-7.28-2s-5.03.67-7.28 2.01l-37.74 22.4c-4.5 2.67-7.28 7.61-7.28 12.96v44.8c0 5.35 2.77 10.29 7.28 12.96l37.73 22.4c2.25 1.34 4.76 2 7.28 2 2.51 0 5.03-.67 7.28-2l37.74-22.4c4.5-2.67 7.28-7.62 7.28-12.96V41.6c0-5.34-2.77-10.29-7.28-12.96zM79.79 98.59l.06 3.22c0 .39-.25.83-.55.99l-1.91 1.1c-.3.15-.56-.03-.56-.42l-.03-3.17c-1.63.68-3.29.84-4.34.42-.2-.08-.29-.37-.21-.71l.69-2.91c.06-.23.18-.46.34-.6.06-.06.12-.1.18-.13.11-.06.22-.07.31-.03 1.14.38 2.59.2 3.99-.5 1.78-.9 2.97-2.72 2.95-4.52-.02-1.64-.9-2.31-3.05-2.33-2.74.01-5.3-.53-5.34-4.57-.03-3.32 1.69-6.78 4.43-8.96l-.03-3.25c0-.4.24-.84.55-1l1.85-1.18c.3-.15.56.04.56.43l.03 3.25c1.36-.54 2.54-.69 3.61-.44.23.06.34.38.24.75l-.72 2.88c-.06.22-.18.44-.33.58a.77.77 0 01-.19.14c-.1.05-.19.06-.28.05-.49-.11-1.65-.36-3.48.56-1.92.97-2.59 2.64-2.58 3.88.02 1.48.77 1.93 3.39 1.97 3.49.06 4.99 1.58 5.03 5.09.05 3.44-1.79 7.15-4.61 9.41zm19.78-5.41c0 .3-.04.58-.29.72l-9.54 5.8c-.25.15-.45.02-.45-.28v-2.46c0-.3.18-.46.43-.61l9.4-5.62c.25-.15.45-.02.45.28v2.17zm6.56-55.09l-35.7 22.05c-4.45 2.6-7.73 5.52-7.74 10.89v43.99c0 3.21 1.3 5.29 3.29 5.9-.65.11-1.32.19-1.98.19-2.09 0-4.15-.57-5.96-1.64l-37.73-22.4c-3.69-2.19-5.98-6.28-5.98-10.67V41.6c0-4.39 2.29-8.48 5.98-10.67l37.74-22.4c1.81-1.07 3.87-1.64 5.96-1.64s4.15.57 5.96 1.64l37.74 22.4c3.11 1.85 5.21 5.04 5.8 8.63-1.27-2.67-4.09-3.39-7.38-1.47z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9 KiB

View file

@ -0,0 +1 @@
<svg width="52.57" height="59.76" version="1.1" viewBox="0 0 52.57 59.76" xmlns="http://www.w3.org/2000/svg"><path class="cls-2" d="m24.75 0.4199-23.2 13.4c-0.9608 0.544-1.551 1.566-1.543 2.67v26.79c0.07194 1.32 0.6075 2.13 1.543 2.67l23.2 13.4c0.9519 0.5593 2.132 0.5593 3.084 0l23.2-13.4c0.9598-0.5447 1.55-1.566 1.541-2.67v-26.79c0.007892-1.104-0.5826-2.126-1.543-2.67l-23.2-13.4c-1.241-0.5845-2.051-0.5958-3.082 0zm14.94 19.26-0.003907 20.48c-0.1115 1.748-1.643 3.059-3.387 2.9-1.557 0.02071-3.045-0.6441-4.068-1.818l-13.37-16c0.002437 4.944-0.004301 9.902 0.001953 14.84-0.07022 3.906-5.894 3.908-5.967 0.001953l0.001953-20.48c0.1126-1.748 1.645-3.058 3.389-2.898 1.556-0.01971 3.043 0.645 4.066 1.818l13.37 16-0.001953-14.83c0-1.648 1.336-2.984 2.985-2.988 1.649-0.004471 2.984 1.331 2.984 2.978z" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 832 B

140
src/glyphs/devicons/generate Executable file
View file

@ -0,0 +1,140 @@
#!/usr/bin/env python3
# coding=utf8
# PREREQUISITES:
# Have a correct and up to date mappings file, updated maybe with analyze
import sys
import os
import re
import subprocess
import fontforge, psMat
# Double-quotes required here, for version-bump.sh:
# version-bump.sh is not working here, need to adjust manually!
version = "3.3.0"
dev_version = 'v2.16.0'
archive = '{}.tar.gz'.format(dev_version)
vectorsdir = 'icons'
fontdir = '.'
fontfile = 'devicons.ttf'
glyphsetfile = 'i_dev.sh'
glyphsetsdir = '../../../bin/scripts/lib'
def replace_with_fixed(filename):
base, name = os.path.split(filename)
base, subdir = os.path.split(base)
fixed = os.path.join(base, 'fixed', name)
if os.path.isfile(fixed):
print('Using fixed svg for {}'.format(name))
return fixed
return filename
def addIcon(codepoint, name, filename):
""" Add one outline file and rescale/move """
filename = os.path.join(vectorsdir, filename)
filename = replace_with_fixed(filename)
glyph = font.createChar(codepoint, name)
if not os.path.isfile(filename):
sys.exit("Mapping file refers to not existing file " + filename);
glyph.importOutlines(filename)
xmin, ymin, xmax, ymax = glyph.boundingBox()
if '/vorillaz/' in filename or (xmax - xmin) < 550:
# old and small icons are not scaled down
pass
else:
glyph.transform(psMat.compose(psMat.scale(0.8, 0.8),psMat.translate(102, 102)))
xmin, ymin, xmax, ymax = glyph.boundingBox()
glyph.width = int(xmax + xmin) # make left and right bearings equal
glyph.manualHints = True
def createGlyphInfo(icon_datasets, filepathname, into):
""" Write the glyphinfo file """
with open(filepathname, 'w', encoding = 'utf8') as f:
f.write(u'#!/usr/bin/env bash\n')
f.write(intro)
f.write(u'# Script Version: (autogenerated)\n')
f.write(u'test -n "$__i_dev_loaded" && return || __i_dev_loaded=1\n')
for _, codepoint, _, *name in icon_datasets:
codepoint = int(codepoint, 16)
f.write(u"i='{}' i_dev_{}=$i\n".format(chr(codepoint), name[0]))
for more_names in name[1:]:
f.write(u" i_dev_{}=$i\n".format(more_names))
f.write(u'unset i\n')
print('\nReading mapping file')
mapping = []
with open('mapping', 'r') as f:
for line in f.readlines():
line = line.strip()
if line.startswith('#') or len(line) < 1:
continue
mapping.append(tuple(re.split(' +', line.strip())))
print('Found {} entries'.format(len(mapping)))
mapping.sort(key=(lambda x: x[1]))
if not os.path.isfile(archive):
print('Fetching Devicons archive "{}"\n'.format(archive))
if subprocess.call('curl -OL https://github.com/devicons/devicon/archive/refs/tags/' + archive, shell=True):
sys.exit('Error fetching Devicons archive')
print('\nUnpacking Devicons archive')
if subprocess.call('rm -rf devicon-* icons && tar zxf ' + archive + \
' && mv devicon-*/icons .', shell=True):
sys.exit('Error unpacking archive')
print('\nMixing Vorillaz Devicons and possible fixes in')
if subprocess.call('cp -r vorillaz fixed icons', shell=True):
sys.exit('Error mixing ...')
svg_dirs = os.listdir(vectorsdir)
svgs = []
for d in svg_dirs:
svgs += os.listdir(os.path.join(vectorsdir, d))
print('Found {} svgs'.format(len(svgs)))
font = fontforge.font()
font.fontname = 'Devicons-NerdFont-Regular'
font.fullname = 'Devicons Nerd Font Regular'
font.familyname = 'Devicons Nerd Font'
font.ascent = 960
font.descent = 64
font.em = 1024
font.encoding = 'UnicodeFull'
# Add valid space glyph to avoid "unknown character" box on IE11
glyph = font.createChar(32)
glyph.width = 512
font.sfntRevision = None # Auto-set (refreshed) by fontforge
font.version = version
font.copyright = 'Devicons devs'
font.appendSFNTName('English (US)', 'Version', archive + '; ' + version)
font.appendSFNTName('English (US)', 'Vendor URL', 'https://github.com/ryanoasis/nerd-fonts')
font.appendSFNTName('English (US)', 'Copyright', 'See https://github.com/devicons/devicon')
for codepoint, _, file, *names in mapping:
codepoint = int(codepoint, 16)
addIcon(codepoint, names[0], file)
num_icons = len(mapping)
print('Generating {} with {} glyphs'.format(fontfile, num_icons))
font.generate(os.path.join(fontdir, fontfile), flags=("no-FFTM-table",))
codepoints = [ int(p, 16) for _, p, *_ in mapping ]
aliases = [ len(n) - 1 for _, _, _, *n in mapping ]
min_code = min(codepoints)
max_code = max(codepoints)
has_gaps = max_code - min_code + 1 != len(codepoints)
intro = u'# Devicons (version {}, {} icons, {} aliases)\n'.format(dev_version, num_icons, sum(aliases))
intro += u'# Does not include all icons of the release\n'
intro += u'# Codepoints: {:X}-{:X}{}\n'.format(min_code, max_code, ' with gaps' if has_gaps else '')
intro += u'# Nerd Fonts Version: {}\n'.format(version)
print('Generating GlyphInfo {}'.format(glyphsetfile))
createGlyphInfo(mapping, os.path.join(glyphsetsdir, glyphsetfile), intro)
print('Finished')

500
src/glyphs/devicons/mapping Normal file
View file

@ -0,0 +1,500 @@
# Devicons mapping file
#
# DEV-code NF-code filename name [alias [...]]
#
E600 E700 aarch64/aarch64-plain.svg aarch64
E601 E701 adonisjs/adonisjs-original.svg adonisjs
E602 E702 git/git-plain.svg git
E603 E703 bitbucket/bitbucket-original.svg bitbucket
E604 E704 mysql/mysql-original.svg mysql
E605 E705 aftereffects/aftereffects-plain.svg aftereffects
E606 E706 vorillaz/database.svg database
E607 E707 vorillaz/dropbox.svg dropbox
E608 E708 akka/akka-plain.svg akka
E609 E709 github/github-original.svg github github_badge
E60A E70A algolia/algolia-original.svg algolia
E60B E70B wordpress/wordpress-plain.svg wordpress
E60C E70C visualstudio/visualstudio-plain.svg visualstudio
E60D E70D jekyll/jekyll-plain.svg jekyll jekyll_small
E60E E70E android/android-plain.svg android
E60F E70F windows8/windows8-original.svg windows
E610 E710 stackoverflow/stackoverflow-plain.svg stackoverflow
E611 E711 apple/apple-original.svg apple
E612 E712 linux/linux-plain.svg linux
E613 E713 alpinejs/alpinejs-original.svg alpinejs
E614 E714 ghost/ghost-original.svg ghost_small
E615 E715 anaconda/anaconda-original.svg anaconda
E616 E716 codepen/codepen-original.svg codepen
E617 E717 github/github-original-wordmark.svg github_full
E618 E718 nodejs/nodejs-plain.svg nodejs_small
E619 E719 nodejs/nodejs-plain-wordmark.svg nodejs
E61A E71A androidstudio/androidstudio-plain.svg androidstudio
E61B E71B ember/ember-plain.svg ember
E61C E71C angularjs/angularjs-plain.svg angularjs
E61D E71D django/django-plain.svg django
E61E E71E npm/npm-original-wordmark.svg npm
E61F E71F ghost/ghost-original-wordmark.svg ghost
E620 E720 angularmaterial/angularmaterial-plain.svg angularmaterial
E621 E721 unity/unity-plain.svg unity unity_small
E622 E722 raspberrypi/raspberrypi-plain.svg raspberry_pi
E623 E723 ansible/ansible-plain.svg ansible
E624 E724 go/go-line.svg go
E625 E725 vorillaz/git_branch.svg git_branch
E626 E726 vorillaz/git_pull_request.svg git_pull_request
E627 E727 vorillaz/git_merge.svg git_merge
E628 E728 vorillaz/git_compare.svg git_compare
E629 E729 vorillaz/git_commit.svg git_commit
E62A E72A antdesign/antdesign-plain.svg antdesign
E62B E72B apache/apache-plain.svg apache
E62C E72C apacheairflow/apacheairflow-plain.svg apacheairflow
E62D E72D vorillaz/smashing_magazine.svg smashing_magazine
E62E E72E apachekafka/apachekafka-original.svg apachekafka
E62F E72F apachespark/apachespark-original.svg apachespark
E630 E730 apl/apl-plain.svg apl
E631 E731 appwrite/appwrite-plain.svg appwrite
E632 E732 archlinux/archlinux-plain.svg archlinux
E633 E733 arduino/arduino-plain.svg arduino
E634 E734 argocd/argocd-plain.svg argocd
E635 E735 astro/astro-plain.svg astro
E636 E736 html5/html5-plain.svg html5
E637 E737 scala/scala-plain.svg scala
E638 E738 java/java-plain.svg java
E639 E739 ruby/ruby-plain.svg ruby
E63A E73A ubuntu/ubuntu-plain.svg ubuntu
E63B E73B rails/rails-plain.svg rails ruby_on_rails
E63C E73C python/python-plain.svg python
E63D E73D php/php-plain.svg php
E63E E73E markdown/markdown-original.svg markdown
E63F E73F laravel/laravel-original.svg laravel
E640 E740 magento/magento-original.svg magento
E641 E741 fixed/awk-plain.svg awk
E642 E742 drupal/drupal-plain.svg drupal
E643 E743 chrome/chrome-plain.svg chrome
E644 E744 ie10/ie10-original.svg ie
E645 E745 firefox/firefox-plain.svg firefox
E646 E746 opera/opera-plain.svg opera
E647 E747 bootstrap/bootstrap-plain.svg bootstrap
E648 E748 safari/safari-plain.svg safari
E649 E749 css3/css3-plain.svg css3
E64A E74A css3/css3-plain-wordmark.svg css3_full
E64B E74B sass/sass-original.svg sass
E64C E74C grunt/grunt-line.svg grunt
E64D E74D bower/bower-line.svg bower
E64E E74E vorillaz/javascript_1.svg javascript_alt
E64F E74F axios/axios-plain.svg axios
E650 E750 jquery/jquery-plain.svg jquery
E651 E751 coffeescript/coffeescript-original.svg coffeescript
E652 E752 backbonejs/backbonejs-plain.svg backbonejs backbone
E653 E753 angular/angular-plain.svg angular
E654 E754 azure/azure-plain.svg azure
E655 E755 swift/swift-plain.svg swift
E656 E756 azuredevops/azuredevops-plain.svg azuredevops
E657 E757 symfony/symfony-original.svg symfony symfony_badge
E658 E758 less/less-plain-wordmark.svg less
E659 E759 stylus/stylus-original.svg stylus
E65A E75A trello/trello-plain.svg trello
E65B E75B azuresqldatabase/azuresqldatabase-plain.svg azuresqldatabase
E65C E75C jira/jira-plain.svg jira
E65D E75D babel/babel-plain.svg babel
E65E E75E ballerina/ballerina-original.svg ballerina
E65F E75F bamboo/bamboo-original.svg bamboo
E660 E760 bash/bash-plain.svg bash
E661 E761 beats/beats-plain.svg beats
E662 E762 behance/behance-plain.svg behance
E663 E763 gulp/gulp-plain.svg gulp
E664 E764 atom/atom-original.svg atom
E665 E765 blazor/blazor-original.svg blazor
E666 E766 blender/blender-original.svg blender
E667 E767 jenkins/jenkins-line.svg jenkins
E668 E768 clojure/clojure-line.svg clojure
E669 E769 perl/perl-plain.svg perl
E66A E76A vorillaz/clojure_alt.svg clojure_alt
E66B E76B browserstack/browserstack-plain.svg browserstack
E66C E76C bulma/bulma-plain.svg bulma
E66D E76D redis/redis-plain.svg redis
E66E E76E postgresql/postgresql-plain.svg postgresql
E66F E76F bun/bun-plain.svg bun
E670 E770 vorillaz/requirejs.svg requirejs
E671 E771 c/c-plain.svg c_lang c
E672 E772 typo3/typo3-original.svg typo3
E673 E773 cairo/cairo-plain.svg cairo
E674 E774 doctrine/doctrine-plain.svg doctrine
E675 E775 groovy/groovy-plain.svg groovy
E676 E776 nginx/nginx-plain.svg nginx
E677 E777 haskell/haskell-plain.svg haskell
E678 E778 zend/zend-original.svg zend
E679 E779 vorillaz/gnu.svg gnu
E67A E77A cakephp/cakephp-plain.svg cakephp
E67B E77B heroku/heroku-plain.svg heroku
E67C E77C canva/canva-original.svg canva
E67D E77D debian/debian-plain.svg debian
E67E E77E travis/travis-plain.svg travis
E67F E77F dot-net/dot-net-plain.svg dotnet
E680 E780 codeigniter/codeigniter-plain.svg codeigniter
E681 E781 javascript/javascript-plain.svg javascript javascript_badge
E682 E782 yii/yii-plain.svg yii
E683 E783 composer/composer-line.svg composer
E684 E784 krakenjs/krakenjs-plain.svg krakenjs krakenjs_badge
E685 E785 capacitor/capacitor-plain.svg capacitor
E686 E786 vorillaz/mozilla.svg mozilla
E687 E787 firebase/firebase-plain.svg firebase
E688 E788 carbon/carbon-original.svg carbon
E689 E789 cassandra/cassandra-plain.svg cassandra
E68A E78A centos/centos-plain.svg centos
E68B E78B ceylon/ceylon-plain.svg ceylon
E68C E78C circleci/circleci-plain.svg circleci
E68D E78D clarity/clarity-plain.svg clarity
E68E E78E clion/clion-plain.svg clion
E68F E78F vorillaz/mootools_badge.svg mootools_badge
E690 E790 clojurescript/clojurescript-plain.svg clojurescript
E691 E791 vorillaz/ruby_rough.svg ruby_rough
E692 E792 cloudflare/cloudflare-plain.svg cloudflare
E693 E793 cloudflareworkers/cloudflareworkers-plain.svg cloudflareworkers
E694 E794 cmake/cmake-plain.svg cmake
E695 E795 vorillaz/terminal.svg terminal
E696 E796 codeac/codeac-original.svg codeac
E697 E797 codecov/codecov-plain.svg codecov
E698 E798 dart/dart-plain.svg dart
E699 E799 confluence/confluence-plain.svg confluence
E69A E79A consul/consul-original.svg consul
E69B E79B contao/contao-original.svg contao
E69C E79C dreamweaver/dreamweaver-plain.svg dreamweaver
E69D E79D corejs/corejs-original.svg corejs
E69E E79E eclipse/eclipse-plain.svg eclipse
E69F E79F cosmosdb/cosmosdb-plain.svg cosmosdb
E6A0 E7A0 couchbase/couchbase-original.svg couchbase
E6A1 E7A1 prolog/prolog-plain.svg prolog
E6A2 E7A2 couchdb/couchdb-plain.svg couchdb
E6A3 E7A3 cplusplus/cplusplus-plain.svg cplusplus
E6A4 E7A4 mongodb/mongodb-plain.svg mongodb
E6A5 E7A5 meteor/meteor-plain.svg meteor
E6A6 E7A6 meteor/meteor-plain-wordmark.svg meteorfull
E6A7 E7A7 fsharp/fsharp-plain.svg fsharp
E6A8 E7A8 rust/rust-original.svg rust
E6A9 E7A9 ionic/ionic-original.svg ionic
E6AA E7AA vorillaz/sublime.svg sublime
E6AB E7AB appcelerator/appcelerator-original.svg appcelerator
E6AC E7AC crystal/crystal-original.svg crystal
E6AD E7AD amazonwebservices/amazonwebservices-plain-wordmark.svg amazonwebservices aws
E6AE E7AE digitalocean/digitalocean-original.svg digitalocean digital_ocean
E6AF E7AF vorillaz/dlang.svg dlang
E6B0 E7B0 docker/docker-plain.svg docker
E6B1 E7B1 erlang/erlang-plain.svg erlang
E6B2 E7B2 csharp/csharp-plain.svg csharp
E6B3 E7B3 grails/grails-plain.svg grails
E6B4 E7B4 illustrator/illustrator-plain.svg illustrator
E6B5 E7B5 intellij/intellij-plain.svg intellij
E6B6 E7B6 materializecss/materializecss-plain.svg materializecss
E6B7 E7B7 cucumber/cucumber-plain.svg cucumber
E6B8 E7B8 photoshop/photoshop-plain.svg photoshop
E6B9 E7B9 cypressio/cypressio-plain.svg cypressio
E6BA E7BA react/react-original.svg react
E6BB E7BB redhat/redhat-plain.svg redhat
E6BC E7BC d3js/d3js-plain.svg d3js
E6BD E7BD datagrip/datagrip-plain.svg datagrip
E6BE E7BE dataspell/dataspell-plain.svg dataspell
E6BF E7BF dbeaver/dbeaver-plain.svg dbeaver
E6C0 E7C0 denojs/denojs-original.svg denojs
E6C1 E7C1 devicon/devicon-plain.svg devicon
E6C2 E7C2 discordjs/discordjs-plain.svg discordjs
E6C3 E7C3 djangorest/djangorest-plain-wordmark.svg djangorest
E6C4 E7C4 sqlite/sqlite-plain.svg sqlite
E6C5 E7C5 vim/vim-plain.svg vim
E6C6 E7C6 dotnetcore/dotnetcore-plain.svg dotnetcore
E6C7 E7C7 dropwizard/dropwizard-plain.svg dropwizard
E6C8 E7C8 dynamodb/dynamodb-plain.svg dynamodb
E6C9 E7C9 ecto/ecto-original.svg ecto
E6CA E7CA elasticsearch/elasticsearch-plain.svg elasticsearch
E6CB E7CB electron/electron-original.svg electron
E6CC E7CC eleventy/eleventy-plain.svg eleventy
E6CD E7CD elixir/elixir-plain.svg elixir
E6CE E7CE elm/elm-plain.svg elm
E6CF E7CF emacs/emacs-original.svg emacs
E6D0 E7D0 embeddedc/embeddedc-plain.svg embeddedc
E6D1 E7D1 envoy/envoy-plain.svg envoy
E6D2 E7D2 eslint/eslint-plain.svg eslint
E6D3 E7D3 express/express-original.svg express
E6D4 E7D4 facebook/facebook-plain.svg facebook
E6D5 E7D5 fastapi/fastapi-plain.svg fastapi
E6D6 E7D6 fastify/fastify-plain.svg fastify
E6D7 E7D7 faunadb/faunadb-original.svg faunadb
E6D8 E7D8 feathersjs/feathersjs-original.svg feathersjs
E6D9 E7D9 fedora/fedora-plain.svg fedora
E6DA E7DA figma/figma-plain.svg figma
E6DB E7DB filezilla/filezilla-plain.svg filezilla
E6DC E7DC flask/flask-original.svg flask
E6DD E7DD flutter/flutter-plain.svg flutter
E6DE E7DE fortran/fortran-original.svg fortran
E6DF E7DF foundation/foundation-plain.svg foundation
E6E0 E7E0 framermotion/framermotion-original.svg framermotion
E6E1 E7E1 framework7/framework7-original.svg framework7
E6E2 E7E2 gatling/gatling-original.svg gatling
E6E3 E7E3 gatsby/gatsby-original.svg gatsby
E6E4 E7E4 gazebo/gazebo-plain.svg gazebo
E6E5 E7E5 gcc/gcc-plain.svg gcc
E6E6 E7E6 gentoo/gentoo-plain.svg gentoo
E6E7 E7E7 gimp/gimp-plain.svg gimp
E6E8 E7E8 gitbook/gitbook-original.svg gitbook
E6E9 E7E9 githubactions/githubactions-plain.svg githubactions
E6EA E7EA githubcodespaces/githubcodespaces-plain.svg githubcodespaces
E6EB E7EB gitlab/gitlab-plain.svg gitlab
E6EC E7EC gitpod/gitpod-plain.svg gitpod
E6ED E7ED gitter/gitter-plain.svg gitter
E6EE E7EE godot/godot-plain.svg godot
E6EF E7EF goland/goland-plain.svg goland
E6F0 E7F0 google/google-plain.svg google
E6F1 E7F1 googlecloud/googlecloud-plain.svg googlecloud
E6F2 E7F2 gradle/gradle-original.svg gradle
E6F3 E7F3 grafana/grafana-plain.svg grafana
E6F4 E7F4 graphql/graphql-plain.svg graphql
E6F5 E7F5 grpc/grpc-plain.svg grpc
E6F6 E7F6 hadoop/hadoop-plain.svg hadoop
E6F7 E7F7 handlebars/handlebars-original.svg handlebars
E6F8 E7F8 hardhat/hardhat-plain.svg hardhat
E6F9 E7F9 harvester/harvester-original.svg harvester
E6FA E7FA haxe/haxe-plain.svg haxe
E6FB E7FB helm/helm-original.svg helm
E6FC E7FC hibernate/hibernate-plain.svg hibernate
E6FD E7FD homebrew/homebrew-plain.svg homebrew
E6FE E7FE hugo/hugo-plain.svg hugo
E6FF E7FF ifttt/ifttt-original.svg ifttt
E700 E800 influxdb/influxdb-original.svg influxdb
E701 E801 inkscape/inkscape-plain.svg inkscape
E702 E802 insomnia/insomnia-plain.svg insomnia
E703 E803 jaegertracing/jaegertracing-plain.svg jaegertracing
E704 E804 jamstack/jamstack-original.svg jamstack
E705 E805 jasmine/jasmine-original.svg jasmine
E706 E806 jeet/jeet-plain.svg jeet
E707 E807 jest/jest-plain.svg jest
E708 E808 jetbrains/jetbrains-plain.svg jetbrains
E709 E809 jetpackcompose/jetpackcompose-plain.svg jetpackcompose
E70A E80A jiraalign/jiraalign-plain.svg jiraalign
E70B E80B json/json-plain.svg json
E70C E80C jule/jule-original.svg jule
E70D E80D julia/julia-plain.svg julia
E70E E80E junit/junit-plain.svg junit
E70F E80F jupyter/jupyter-plain.svg jupyter
E710 E810 k3os/k3os-original.svg k3os
E711 E811 k3s/k3s-original.svg k3s
E712 E812 k6/k6-original.svg k6
E713 E813 kaggle/kaggle-original.svg kaggle
E714 E814 karatelabs/karatelabs-plain.svg karatelabs
E715 E815 karma/karma-plain.svg karma
E716 E816 kdeneon/kdeneon-plain.svg kdeneon
E717 E817 keras/keras-plain.svg keras
E718 E818 kibana/kibana-plain.svg kibana
E719 E819 knexjs/knexjs-original.svg knexjs
E71A E81A knockout/knockout-plain-wordmark.svg knockout
E71B E81B kotlin/kotlin-plain.svg kotlin
E71C E81C ktor/ktor-plain.svg ktor
E71D E81D kubernetes/kubernetes-plain.svg kubernetes
E71E E81E labview/labview-plain.svg labview
E71F E81F latex/latex-original.svg latex
E720 E820 linkedin/linkedin-plain.svg linkedin
E721 E821 liquibase/liquibase-original.svg liquibase
E722 E822 livewire/livewire-plain.svg livewire
E723 E823 llvm/llvm-plain.svg llvm
E724 E824 lodash/lodash-plain.svg lodash
E725 E825 logstash/logstash-plain.svg logstash
E726 E826 lua/lua-plain.svg lua
E727 E827 lumen/lumen-original.svg lumen
E728 E828 mariadb/mariadb-original.svg mariadb
E729 E829 materialui/materialui-plain.svg materialui
E72A E82A matlab/matlab-plain.svg matlab
E72B E82B matplotlib/matplotlib-plain.svg matplotlib
E72C E82C maven/maven-plain.svg maven
E72D E82D maya/maya-plain.svg maya
E72E E82E microsoftsqlserver/microsoftsqlserver-plain.svg microsoftsqlserver
E72F E82F minitab/minitab-plain.svg minitab
E730 E830 mithril/mithril-original.svg mithril
E731 E831 mobx/mobx-plain.svg mobx
E732 E832 mocha/mocha-plain.svg mocha
E733 E833 modx/modx-plain.svg modx
E734 E834 moleculer/moleculer-original.svg moleculer
E735 E835 mongoose/mongoose-original.svg mongoose
E736 E836 moodle/moodle-plain.svg moodle
E737 E837 msdos/msdos-plain.svg msdos
E738 E838 nano/nano-plain.svg nano
E739 E839 neo4j/neo4j-plain.svg neo4j
E73A E83A neovim/neovim-plain.svg neovim
E73B E83B nestjs/nestjs-original.svg nestjs
E73C E83C netlify/netlify-plain.svg netlify
E73D E83D networkx/networkx-plain.svg networkx
E73E E83E nextjs/nextjs-plain.svg nextjs
E73F E83F ngrx/ngrx-plain.svg ngrx
E740 E840 nhibernate/nhibernate-plain.svg nhibernate
E741 E841 nim/nim-plain.svg nim
E742 E842 nimble/nimble-plain.svg nimble
E743 E843 nixos/nixos-plain.svg nixos
E744 E844 nodemon/nodemon-plain.svg nodemon
E745 E845 nodewebkit/nodewebkit-plain.svg nodewebkit
E746 E846 nomad/nomad-original.svg nomad
E747 E847 norg/norg-plain.svg norg
E748 E848 notion/notion-plain.svg notion
E749 E849 nuget/nuget-original.svg nuget
E74A E84A numpy/numpy-plain.svg numpy
E74B E84B nuxtjs/nuxtjs-plain.svg nuxtjs
E74C E84C oauth/oauth-plain.svg oauth
E74D E84D objectivec/objectivec-plain.svg objectivec
E74E E84E ocaml/ocaml-plain.svg ocaml
E74F E84F ohmyzsh/ohmyzsh-plain.svg ohmyzsh
E750 E850 okta/okta-plain.svg okta
E751 E851 openal/openal-plain.svg openal
E752 E852 openapi/openapi-plain.svg openapi
E753 E853 opencl/opencl-plain.svg opencl
E754 E854 opencv/opencv-plain.svg opencv
E755 E855 opengl/opengl-plain.svg opengl
E756 E856 openstack/openstack-original.svg openstack
E757 E857 opensuse/opensuse-original.svg opensuse
E758 E858 opentelemetry/opentelemetry-plain.svg opentelemetry
E759 E859 oracle/oracle-original.svg oracle
E75A E85A ory/ory-original.svg ory
E75B E85B p5js/p5js-original.svg p5js
E75C E85C packer/packer-plain.svg packer
E75D E85D pandas/pandas-plain.svg pandas
E75E E85E pfsense/pfsense-original.svg pfsense
E75F E85F phalcon/phalcon-plain.svg phalcon
E760 E860 phoenix/phoenix-original.svg phoenix
E761 E861 photonengine/photonengine-plain.svg photonengine
E762 E862 phpstorm/phpstorm-plain.svg phpstorm
E763 E863 playwright/playwright-plain.svg playwright
E764 E864 plotly/plotly-plain.svg plotly
E765 E865 pnpm/pnpm-plain.svg pnpm
E766 E866 podman/podman-plain.svg podman
E767 E867 poetry/poetry-plain.svg poetry
E768 E868 polygon/polygon-plain.svg polygon
E769 E869 portainer/portainer-original.svg portainer
E76A E86A postcss/postcss-original.svg postcss
E76B E86B postman/postman-plain.svg postman
E76C E86C powershell/powershell-plain.svg powershell
E76D E86D premierepro/premierepro-plain.svg premierepro
E76E E86E prisma/prisma-original.svg prisma
E76F E86F processing/processing-plain.svg processing
E770 E870 prometheus/prometheus-original.svg prometheus
E771 E871 protractor/protractor-plain.svg protractor
E772 E872 pulsar/pulsar-original.svg pulsar
E773 E873 pulumi/pulumi-plain.svg pulumi
E774 E874 puppeteer/puppeteer-plain.svg puppeteer
E775 E875 purescript/purescript-original.svg purescript
E776 E876 putty/putty-plain.svg putty
E777 E877 pycharm/pycharm-plain.svg pycharm
E778 E878 pypi/pypi-plain.svg pypi
E779 E879 pyscript/pyscript-plain-wordmark.svg pyscript
E77A E87A pytest/pytest-plain.svg pytest
E77B E87B pytorch/pytorch-original.svg pytorch
E77C E87C qodana/qodana-plain.svg qodana
E77D E87D qt/qt-original.svg qt
E77E E87E quarkus/quarkus-plain.svg quarkus
E77F E87F quasar/quasar-plain.svg quasar
E780 E880 qwik/qwik-plain.svg qwik
E781 E881 r/r-plain.svg r
E782 E882 rabbitmq/rabbitmq-original.svg rabbitmq
E783 E883 railway/railway-original.svg railway
E784 E884 rancher/rancher-original.svg rancher
E785 E885 reach/reach-plain.svg reach
E786 E886 reactbootstrap/reactbootstrap-original.svg reactbootstrap
E787 E887 reactnavigation/reactnavigation-original.svg reactnavigation
E788 E888 reactrouter/reactrouter-plain.svg reactrouter
E789 E889 readthedocs/readthedocs-original.svg readthedocs
E78A E88A realm/realm-plain.svg realm
E78B E88B rect/rect-plain.svg rect
E78C E88C redux/redux-original.svg redux
E78D E88D renpy/renpy-plain.svg renpy
E78E E88E replit/replit-original.svg replit
E78F E88F rider/rider-plain.svg rider
E790 E890 rocksdb/rocksdb-plain.svg rocksdb
E791 E891 rockylinux/rockylinux-original.svg rockylinux
E792 E892 rollup/rollup-plain.svg rollup
E793 E893 ros/ros-original.svg ros
E794 E894 rspec/rspec-plain.svg rspec
E795 E895 rstudio/rstudio-plain.svg rstudio
E796 E896 rubymine/rubymine-plain.svg rubymine
E797 E897 rxjs/rxjs-plain.svg rxjs
E798 E898 salesforce/salesforce-plain.svg salesforce
E799 E899 sanity/sanity-plain.svg sanity
E79A E89A scalingo/scalingo-plain.svg scalingo
E79B E89B scikitlearn/scikitlearn-plain.svg scikitlearn
E79C E89C sdl/sdl-plain.svg sdl
E79D E89D selenium/selenium-original.svg selenium
E79E E89E sema/sema-original.svg sema
E79F E89F sentry/sentry-original.svg sentry
E7A0 E8A0 sequelize/sequelize-plain.svg sequelize
E7A1 E8A1 shopware/shopware-original.svg shopware
E7A2 E8A2 shotgrid/shotgrid-plain.svg shotgrid
E7A3 E8A3 sketch/sketch-plain.svg sketch
E7A4 E8A4 slack/slack-plain.svg slack
E7A5 E8A5 socketio/socketio-original.svg socketio
E7A6 E8A6 solidity/solidity-plain.svg solidity
E7A7 E8A7 solidjs/solidjs-plain.svg solidjs
E7A8 E8A8 sonarqube/sonarqube-original.svg sonarqube
E7A9 E8A9 sourcetree/sourcetree-original.svg sourcetree
E7AA E8AA spack/spack-plain.svg spack
E7AB E8AB splunk/splunk-original-wordmark.svg splunk
E7AC E8AC spring/spring-original.svg spring
E7AD E8AD spss/spss-plain.svg spss
E7AE E8AE spyder/spyder-plain.svg spyder
E7AF E8AF sqlalchemy/sqlalchemy-plain.svg sqlalchemy
E7B0 E8B0 sqldeveloper/sqldeveloper-plain.svg sqldeveloper
E7B1 E8B1 ssh/ssh-original.svg ssh
E7B2 E8B2 stata/stata-original-wordmark.svg stata
E7B3 E8B3 storybook/storybook-plain.svg storybook
E7B4 E8B4 streamlit/streamlit-plain.svg streamlit
E7B5 E8B5 subversion/subversion-original.svg subversion
E7B6 E8B6 supabase/supabase-plain.svg supabase
E7B7 E8B7 svelte/svelte-plain.svg svelte
E7B8 E8B8 swagger/swagger-plain.svg swagger
E7B9 E8B9 swiper/swiper-original.svg swiper
E7BA E8BA tailwindcss/tailwindcss-original.svg tailwindcss
E7BB E8BB tauri/tauri-plain.svg tauri
E7BC E8BC tensorflow/tensorflow-original.svg tensorflow
E7BD E8BD terraform/terraform-plain.svg terraform
E7BE E8BE tex/tex-original.svg tex
E7BF E8BF thealgorithms/thealgorithms-plain.svg thealgorithms
E7C0 E8C0 threedsmax/threedsmax-plain.svg threedsmax
E7C1 E8C1 threejs/threejs-original.svg threejs
E7C2 E8C2 titaniumsdk/titaniumsdk-original.svg titaniumsdk
E7C3 E8C3 tomcat/tomcat-original.svg tomcat
E7C4 E8C4 tortoisegit/tortoisegit-plain.svg tortoisegit
E7C5 E8C5 towergit/towergit-plain.svg towergit
E7C6 E8C6 traefikmesh/traefikmesh-original.svg traefikmesh
E7C7 E8C7 traefikproxy/traefikproxy-original.svg traefikproxy
E7C8 E8C8 trpc/trpc-plain.svg trpc
E7C9 E8C9 twitter/twitter-original.svg twitter
E7CA E8CA typescript/typescript-plain.svg typescript
E7CB E8CB unifiedmodelinglanguage/unifiedmodelinglanguage-plain.svg unifiedmodelinglanguage uml
E7CC E8CC unix/unix-original.svg unix
E7CD E8CD unrealengine/unrealengine-original.svg unrealengine
E7CE E8CE uwsgi/uwsgi-plain.svg uwsgi
E7CF E8CF v8/v8-plain.svg v8
E7D0 E8D0 vagrant/vagrant-plain.svg vagrant
E7D1 E8D1 vala/vala-plain.svg vala
E7D2 E8D2 vault/vault-original.svg vault
E7D3 E8D3 vercel/vercel-original.svg vercel
E7D4 E8D4 vertx/vertx-plain.svg vertx
E7D5 E8D5 visualbasic/visualbasic-plain.svg visualbasic
E7D6 E8D6 vite/vite-original.svg vite
E7D7 E8D7 vitejs/vitejs-plain.svg vitejs
E7D8 E8D8 vitess/vitess-plain.svg vitess
E7D9 E8D9 vitest/vitest-plain.svg vitest
E7DA E8DA vscode/vscode-plain.svg vscode
E7DB E8DB vsphere/vsphere-plain.svg vsphere
E7DC E8DC vuejs/vuejs-plain.svg vuejs
E7DD E8DD vuestorefront/vuestorefront-plain.svg vuestorefront
E7DE E8DE vuetify/vuetify-plain.svg vuetify
E7DF E8DF vyper/vyper-plain.svg vyper
E7E0 E8E0 wasm/wasm-original.svg wasm
E7E1 E8E1 webflow/webflow-original.svg webflow
E7E2 E8E2 weblate/weblate-plain.svg weblate
E7E3 E8E3 webpack/webpack-plain.svg webpack
E7E4 E8E4 webstorm/webstorm-plain.svg webstorm
E7E5 E8E5 windows11/windows11-original.svg windows11
E7E6 E8E6 woocommerce/woocommerce-plain.svg woocommerce
E7E7 E8E7 xamarin/xamarin-original.svg xamarin
E7E8 E8E8 xcode/xcode-plain.svg xcode
E7E9 E8E9 xd/xd-plain.svg xd
E7EA E8EA xml/xml-plain.svg xml
E7EB E8EB yaml/yaml-plain.svg yaml
E7EC E8EC yarn/yarn-original.svg yarn
E7ED E8ED yugabytedb/yugabytedb-plain.svg yugabytedb
E7EE E8EE yunohost/yunohost-plain.svg yunohost
E7EF E8EF zig/zig-original.svg zig

View file

@ -0,0 +1,16 @@
# Vorillaz' Devicons
Here are some very few icons from the Devicons project before it got forked.
They got dropped when Devicons had been forked. But we find them basic enough
to be important and there are no direct substitudes in other sets.
Most icons that were dropped on the Devicons for are now also dropped here:
For more information have a look at the upstream websites:
* https://github.com/vorillaz/devicons
* https://github.com/devicon/devicons
This is taken directly from the repository default branch, which is ahead of release 1.8.0.
We call it 1.8.1 here, but there is no such release.
Version: 1.8.1

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M16 27.534c-5.323 0-9.641-1.44-9.641-3.214 0-0.97 0-2.031 0-3.214 0-0.279 0.14-0.545 0.341-0.803 1.075 1.384 4.813 2.41 9.301 2.41s8.226-1.026 9.301-2.41c0.201 0.259 0.34 0.524 0.34 0.803 0 0.931 0 1.918 0 3.214 0 1.773-4.318 3.214-9.641 3.214zM16 21.106c-5.323 0-9.641-1.441-9.641-3.214 0-0.97 0-2.030 0-3.214 0-0.17 0.064-0.336 0.151-0.5v0c0.049-0.103 0.113-0.204 0.19-0.304 1.075 1.383 4.813 2.41 9.301 2.41s8.226-1.027 9.301-2.41c0.077 0.1 0.141 0.201 0.19 0.304v0c0.086 0.164 0.151 0.33 0.151 0.5 0 0.931 0 1.917 0 3.214 0 1.773-4.318 3.214-9.641 3.214zM16 14.679c-5.323 0-9.641-1.44-9.641-3.214 0-0.508 0-1.044 0-1.607 0-0.511 0-1.041 0-1.607 0-1.774 4.318-3.214 9.641-3.214s9.641 1.44 9.641 3.214c0 0.501 0 1.033 0 1.607 0 0.492 0 1.011 0 1.607 0 1.774-4.318 3.214-9.641 3.214zM16 6.645c-3.55 0-6.427 0.718-6.427 1.607s2.878 1.607 6.427 1.607c3.55 0 6.427-0.718 6.427-1.607s-2.878-1.607-6.427-1.607z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="34" height="32" viewBox="0 0 34 32">
<path fill="#444444" d="M16.008 13.294c0-0.003 0-0.008 0-0.011-0.327-0.254-0.708-0.458-1.145-0.624-0.441-0.17-0.857-0.28-1.237-0.332-0.375-0.051-1.035-0.080-1.964-0.078l-1.987 0.003 0.010 7.491 2.045-0.003c0.96-0.001 1.698-0.057 2.183-0.154 0.515-0.108 0.923-0.234 1.236-0.379 0.331-0.156 0.631-0.345 0.9-0.568 0.877-0.733 1.287-1.608 1.284-2.73-0.001-1.097-0.426-1.925-1.326-2.614z"></path>
<path fill="#444444" d="M26.011 7.612h-18.177c-1.185 0-2.145 1.066-2.145 2.382v12.013c0 1.315 0.96 2.382 2.145 2.382h18.177c1.185 0 2.145-1.067 2.145-2.382v-12.013c0-1.316-0.96-2.382-2.145-2.382zM24.666 13.857c0.001 1.643-1.45 2.976-3.243 2.977-0.066 0-0.132-0.002-0.197-0.006-0.086 0.516-0.252 1.019-0.499 1.503-0.379 0.743-0.918 1.402-1.615 1.96-0.711 0.575-1.538 1.006-2.471 1.298-0.536 0.174-1.030 0.293-1.496 0.358-0.003 0-0.009 0-0.011 0-0.487 0.061-1.304 0.082-2.524 0.084l-4.315 0.017c-0.029 0-0.059-0.006-0.087-0.011-0.017-0.001-0.035-0.002-0.052-0.005-0.012-0.005-0.024-0.010-0.035-0.016-0.003 0-0.003 0-0.006 0-0.012-0.005-0.024-0.011-0.035-0.016-0.003 0-0.009 0-0.012 0-0.024-0.014-0.048-0.031-0.069-0.049-0.003 0-0.003 0-0.006 0-0.009-0.007-0.015-0.013-0.023-0.021-0.003-0.003-0.009-0.008-0.012-0.011-0.009-0.008-0.015-0.013-0.023-0.021 0-0.003 0-0.008 0-0.011-0.012-0.007-0.024-0.013-0.035-0.021 0-0.003 0-0.008 0-0.011-0.006-0.010-0.012-0.021-0.017-0.033 0-0.003 0-0.003 0-0.005-0.009-0.010-0.021-0.021-0.029-0.032 0-0.003 0-0.003 0-0.005-0.006-0.011-0.012-0.022-0.017-0.032 0-0.003 0-0.008 0-0.011-0.003-0.011-0.003-0.022-0.006-0.033 0-0.003 0-0.003 0-0.005-0.003-0.011-0.009-0.022-0.012-0.032 0-0.003 0-0.008 0-0.011-0.003-0.026-0.003-0.049-0-0.076-0.001-0.016-0.001-0.032 0-0.048l-0.014-11.146c0.001-0.218 0.178-0.399 0.404-0.427 0.019-0.002 0.038 0 0.058-0l4.61-0.007c1.899-0.003 3.431 0.223 4.605 0.721 0.637 0.267 1.208 0.609 1.707 1.023 0.581-0.504 1.365-0.815 2.228-0.816 1.792-0.001 3.246 1.33 3.248 2.973 0 0.001 0 0.003 0 0.004zM26.162 10.588c0 0.528-0.466 0.956-1.042 0.957s-1.043-0.427-1.044-0.955c0-0.001 0-0.001 0-0.001-0-0.528 0.466-0.956 1.042-0.957s1.043 0.427 1.044 0.955c-0 0-0 0.001-0 0.001z"></path>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<path d="m21.92 13.5 5.843 3.722-5.884 3.749-5.879-3.745-5.879 3.745-5.884-3.749 5.843-3.722-5.843-3.722 5.884-3.749 5.879 3.745 5.879-3.745 5.884 3.749zm-0.08233 5.5e-5 -5.838-3.719-5.838 3.719 5.838 3.719zm-11.68 8.715 5.884-3.748 5.884 3.748-5.884 3.749z"/>
</svg>

After

Width:  |  Height:  |  Size: 383 B

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M21.5 7.119c-2.023 0-3.667 1.643-3.667 3.667 0 1.353 0.741 2.523 1.833 3.159v0.508c0 0 0 3.667-3.667 3.667-1.52 0-2.711 0.326-3.667 0.825v-8.666c1.093-0.636 1.833-1.806 1.833-3.159 0-2.024-1.643-3.667-3.667-3.667s-3.667 1.643-3.667 3.667c0 1.353 0.74 2.523 1.833 3.159v12.016c-1.093 0.636-1.833 1.805-1.833 3.158 0 2.023 1.643 3.667 3.667 3.667s3.667-1.644 3.667-3.667c0-0.96-0.378-1.826-0.981-2.482 0.534-0.655 1.401-1.185 2.815-1.185 7.276 0 7.333-7.333 7.333-7.333v-0.508c1.092-0.636 1.833-1.806 1.833-3.159 0-2.024-1.644-3.667-3.667-3.667zM10.5 5.286c1.014 0 1.833 0.819 1.833 1.833s-0.819 1.833-1.833 1.833c-1.014 0-1.833-0.819-1.833-1.833s0.819-1.833 1.833-1.833zM10.5 27.286c-1.014 0-1.833-0.82-1.833-1.833 0-1.012 0.819-1.833 1.833-1.833s1.833 0.822 1.833 1.833c0 1.013-0.819 1.833-1.833 1.833zM21.5 12.619c-1.013 0-1.833-0.819-1.833-1.833s0.82-1.833 1.833-1.833 1.833 0.819 1.833 1.833c0 1.014-0.82 1.833-1.833 1.833z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M22.161 14.689c-0.711-2.75-3.188-4.791-6.161-4.791s-5.449 2.041-6.161 4.791h-5.018v3.194h5.018c0.712 2.751 3.19 4.791 6.161 4.791s5.45-2.040 6.161-4.791h5.019v-3.194h-5.019zM16 19.48c-1.763 0-3.194-1.432-3.194-3.194s1.431-3.194 3.194-3.194c1.762 0 3.194 1.431 3.194 3.194s-1.432 3.194-3.194 3.194z"></path>
</svg>

After

Width:  |  Height:  |  Size: 650 B

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M25.453 21.285v-9.89c0-4.739-4.726-4.726-4.726-4.726h-1.575v-3.151l-4.726 4.727 4.726 4.726v-3.151c0 0 0.657 0 1.575 0 1.389 0 1.575 1.575 1.575 1.575v9.89c-0.939 0.546-1.575 1.548-1.575 2.714 0 1.739 1.412 3.151 3.151 3.151s3.151-1.413 3.151-3.151c0-1.163-0.637-2.168-1.575-2.714zM23.878 25.575c-0.869 0-1.576-0.705-1.576-1.575 0-0.869 0.706-1.575 1.576-1.575 0.871 0 1.575 0.706 1.575 1.575 0 0.871-0.705 1.575-1.575 1.575zM6.547 11.287v9.889c0 4.739 4.727 4.727 4.727 4.727h1.575v3.151l4.726-4.726-4.726-4.727v3.151c0 0-0.657 0-1.575 0-1.389 0-1.575-1.575-1.575-1.575v-9.889c0.939-0.547 1.575-1.549 1.575-2.715 0-1.739-1.412-3.151-3.151-3.151s-3.151 1.412-3.151 3.151c0 1.164 0.636 2.168 1.575 2.715zM8.123 10.214c-0.869 0-1.575-0.704-1.575-1.575 0-0.869 0.706-1.575 1.575-1.575 0.872 0 1.575 0.706 1.575 1.575 0 0.872-0.704 1.575-1.575 1.575z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M23.308 14.459c-1.36 0-2.53 0.751-3.158 1.853-0.164-0.012-0.325-0.026-0.496-0.026-3.742 0-7.292-2.85-8.588-6.379 0.779-0.67 1.279-1.651 1.279-2.757 0-2.017-1.637-3.654-3.654-3.654s-3.654 1.637-3.654 3.654c0 1.348 0.738 2.514 1.827 3.148v11.975c-1.089 0.633-1.827 1.799-1.827 3.147 0 2.016 1.637 3.654 3.654 3.654s3.654-1.638 3.654-3.654c0-1.349-0.738-2.514-1.827-3.147v-6.574c2.403 2.542 5.72 4.24 9.135 4.24 0.182 0 0.332-0.012 0.496-0.018 0.632 1.097 1.802 1.845 3.158 1.845 2.016 0 3.654-1.638 3.654-3.654s-1.638-3.654-3.654-3.654zM8.692 27.248c-1.008 0-1.827-0.817-1.827-1.827 0-1.008 0.819-1.827 1.827-1.827 1.011 0 1.827 0.819 1.827 1.827 0 1.010-0.816 1.827-1.827 1.827zM8.692 8.977c-1.008 0-1.827-0.816-1.827-1.827s0.819-1.827 1.827-1.827c1.011 0 1.827 0.816 1.827 1.827s-0.816 1.827-1.827 1.827zM23.308 19.94c-1.008 0-1.827-0.817-1.827-1.827s0.819-1.827 1.827-1.827c1.010 0 1.827 0.816 1.827 1.827s-0.817 1.827-1.827 1.827z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M9.169 5.186c-1.885 0-3.415 1.53-3.415 3.415 0 1.26 0.691 2.35 1.708 2.943v11.192c-1.016 0.592-1.708 1.681-1.708 2.942 0 1.884 1.53 3.415 3.415 3.415s3.415-1.531 3.415-3.415c0-1.261-0.69-2.35-1.708-2.942v-11.192c1.018-0.593 1.708-1.683 1.708-2.943-0-1.885-1.53-3.415-3.415-3.415zM9.169 27.385c-0.942 0-1.708-0.764-1.708-1.708 0-0.942 0.765-1.708 1.708-1.708 0.945 0 1.708 0.765 1.708 1.708 0 0.944-0.763 1.708-1.708 1.708zM9.169 10.309c-0.942 0-1.708-0.763-1.708-1.708s0.765-1.708 1.708-1.708c0.945 0 1.708 0.763 1.708 1.708s-0.763 1.708-1.708 1.708zM24.538 22.736v-10.72c0-5.136-5.123-5.123-5.123-5.123h-1.708v-3.415l-5.123 5.123 5.123 5.123v-3.415c0 0 0.712 0 1.708 0 1.506 0 1.708 1.708 1.708 1.708v10.719c-1.017 0.592-1.708 1.679-1.708 2.942 0 1.884 1.531 3.415 3.415 3.415s3.415-1.531 3.415-3.415c0-1.261-0.691-2.35-1.708-2.942zM22.831 27.385c-0.942 0-1.708-0.764-1.708-1.708 0-0.942 0.765-1.708 1.708-1.708 0.944 0 1.708 0.765 1.708 1.708 0 0.944-0.764 1.708-1.708 1.708z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M9.633 7.968h3.751v10.514c0 4.738-2.271 6.392-5.899 6.392-0.888 0-2.024-0.148-2.764-0.395l0.42-3.036c0.518 0.173 1.185 0.296 1.925 0.296 1.58 0 2.567-0.716 2.567-3.282v-10.489zM16.641 20.753c0.987 0.518 2.567 1.037 4.171 1.037 1.728 0 2.641-0.716 2.641-1.826 0-1.012-0.79-1.629-2.789-2.32-2.764-0.987-4.59-2.517-4.59-4.961 0-2.838 2.394-4.985 6.293-4.985 1.9 0 3.258 0.37 4.245 0.839l-0.839 3.011c-0.642-0.321-1.851-0.79-3.455-0.79-1.629 0-2.419 0.765-2.419 1.604 0 1.061 0.913 1.53 3.085 2.369 2.937 1.086 4.294 2.616 4.294 4.985 0 2.789-2.122 5.158-6.688 5.158-1.9 0-3.776-0.518-4.714-1.037l0.765-3.085z"></path>
</svg>

After

Width:  |  Height:  |  Size: 958 B

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M16.693 5.666c-0.186-0.050-0.381-0.062-0.525 0.071-0.174 0.161-0.031 0.34 0.032 0.504 0.265 0.692 0.526 1.385 0.802 2.072 0.275 0.684 0.027 1.183-0.613 1.406-0.636 0.222-1.239 0.111-1.489-0.649-0.213-0.645-0.392-1.302-0.607-1.946-0.070-0.21-0.010-0.56-0.362-0.553-0.317 0.007-0.469 0.263-0.553 0.546-0.219 0.74-0.413 1.488-0.657 2.22-0.395 1.182-0.387 2.312 0.027 3.522 0.595 1.739 0.689 3.556 0.472 5.399-0.239 2.027-0.665 4.020-0.961 6.036-0.209 1.424 0.874 2.667 2.277 2.646 1.231-0.018 2.232-0.985 2.26-2.231 0.026-1.174 0.033-2.349 0.001-3.523-0.096-3.473 0.242-6.774 2.369-9.774 1.484-2.093 0.059-5.073-2.472-5.746zM14.576 25.809c-0.73-0.014-1.167-0.411-1.184-1.061s0.407-1.111 1.096-1.115c0.633-0.004 1.052 0.382 1.094 1.018 0.046 0.69-0.354 1.071-1.007 1.158z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.5 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M16 4.567c-5.377 0-9.736 4.359-9.736 9.736s4.358 9.736 9.736 9.736c5.377 0 9.736-4.359 9.736-9.736s-4.359-9.736-9.736-9.736zM16 21.695c-4.074 0-7.392-3.314-7.392-7.392s3.317-7.392 7.392-7.392c4.077 0 7.392 3.314 7.392 7.392s-3.315 7.392-7.392 7.392zM16 11.057c-1.792 0-3.245 1.452-3.245 3.245 0 1.791 1.453 3.245 3.245 3.245s3.245-1.454 3.245-3.245c0-1.793-1.453-3.245-3.245-3.245zM16 7.812c-3.584 0-6.49 2.906-6.49 6.49s2.906 6.491 6.49 6.491c3.584 0 6.49-2.906 6.49-6.491s-2.907-6.49-6.49-6.49zM16 18.449c-2.285 0-4.147-1.86-4.147-4.147s1.862-4.147 4.147-4.147c2.286 0 4.147 1.86 4.147 4.147s-1.861 4.147-4.147 4.147zM21.95 26.562l-2.524-1.082v0.721h-4.973l-1.029-1.029c-0.070-0.070-0.185-0.070-0.255 0s-0.070 0.184 0 0.255l0.774 0.774h-0.392l-1.029-1.029c-0.070-0.070-0.185-0.070-0.255 0s-0.070 0.184 0 0.255l0.774 0.774h-0.392l-1.029-1.029c-0.070-0.070-0.185-0.070-0.255 0s-0.070 0.184 0 0.255l0.774 0.774h-0.392l-1.029-1.029c-0.070-0.070-0.185-0.070-0.255 0s-0.070 0.184 0 0.255l0.774 0.774h-0.827c-0.203 0-0.361 0.211-0.361 0.361s0.163 0.361 0.361 0.361h0.827l-0.774 0.774c-0.070 0.070-0.070 0.184 0 0.255s0.185 0.070 0.255 0l1.029-1.029h0.392l-0.774 0.774c-0.070 0.070-0.070 0.184 0 0.255s0.185 0.070 0.255 0l1.029-1.029h0.392l-0.774 0.774c-0.070 0.070-0.070 0.184 0 0.255s0.185 0.070 0.255 0l1.029-1.029h0.392l-0.774 0.774c-0.070 0.070-0.070 0.184 0 0.255s0.185 0.070 0.255 0l1.029-1.029h4.973v0.721l2.524-1.082z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M6.248 16.554c0.132-0.413 0.289-1.255 0.655-1.995 1.781-3.594 4.536-6.208 8.215-7.796 0.71-0.306 1.555-0.404 2.339-0.408 0.98-0.005 1.637 0.677 1.723 1.666 0.045 0.515 0.039 1.087-0.138 1.561-1.743 4.662-5.032 7.784-9.656 9.538-0.18 0.068-0.381 0.086-0.575 0.112-1.574 0.216-2.587-0.676-2.563-2.678zM18.349 13.099c2.556-0.179 5.069-0.355 7.702-0.54-0.192-0.183-0.3-0.303-0.425-0.403-2.292-1.838-4.59-3.668-6.873-5.517-0.226-0.183-0.366-0.471-0.668-0.871 0.981 0 1.774-0.009 2.567 0.002 0.957 0.014 1.937-0.079 2.867 0.093 2.011 0.372 3.084 1.669 3.046 3.713-0.035 1.916-0.233 3.829-0.375 5.742-0.217 2.929-0.445 5.858-0.671 8.786-0.039 0.505-0.086 1.010-0.137 1.61-1.063-0.947-2.080-1.852-3.095-2.758-0.131-0.117-0.24-0.268-0.385-0.361-1.241-0.79-1.759-1.968-2.041-3.376-0.368-1.84-0.907-3.646-1.371-5.467-0.052-0.204-0.090-0.412-0.142-0.655zM8.765 24.301c0.547-0.076 1.059-0.108 1.547-0.234 0.192-0.049 0.415-0.283 0.477-0.479 0.46-1.455 0.882-2.923 1.317-4.385 0.038-0.128 0.091-0.252 0.161-0.443 2.662 0.852 5.303 1.698 8.022 2.568-1.415 1.428-2.92 2.625-4.602 3.701 2.997 0.229 5.994 0.458 8.991 0.687 0 0.038 0 0.077 0.001 0.115-0.646 0.046-1.292 0.094-1.938 0.137-3.812 0.251-7.623 0.501-11.435 0.75-0.606 0.040-1.213 0.106-1.818 0.095-2.566-0.047-4.020-1.453-4.053-4.027-0.019-1.446 0.13-2.894 0.222-4.34 0.007-0.109 0.163-0.209 0.25-0.313 0.129 0.115 0.317 0.205 0.38 0.349 0.766 1.776 1.514 3.56 2.267 5.341 0.061 0.143 0.126 0.284 0.211 0.478z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M22.622 5.145c0.394 0.161 0.788 0.52 0.977 0.869 0.116 0.224 0.717 2.777 3.118 13.205 0.323 1.389 0.582 2.732 0.582 2.992 0 0.564-0.188 0.968-0.636 1.371-0.358 0.331-0.555 0.403-2.365 0.833l-1.075 0.251 0.287-0.546c0.394-0.735 0.582-1.604 0.582-2.634 0-1.98-0.735-3.619-2.213-4.936-0.86-0.771-2.132-1.478-4.076-2.276-2.705-1.102-3.494-1.783-3.494-3.010 0.009-1.362 1.084-2.061 2.956-1.935 0.932 0.072 1.917 0.314 2.938 0.735 0.43 0.179 0.842 0.34 0.914 0.367 0.108 0.036 0.278-0.349 0.753-1.639 0.34-0.923 0.636-1.729 0.654-1.783 0.054-0.143-1.433-0.797-2.437-1.075-1.174-0.314-1.201-0.322-1.030-0.367 2.267-0.573 3.001-0.663 3.566-0.421zM10 8.155c-0.269 0.385-0.537 0.941-0.681 1.371-0.206 0.618-0.242 0.869-0.242 1.837 0 0.985 0.027 1.2 0.233 1.774 0.779 2.168 2.607 3.727 5.895 5.035 1.469 0.582 2.455 1.138 2.956 1.666 0.511 0.538 0.663 0.985 0.609 1.792-0.045 0.753-0.34 1.192-1.030 1.532-0.502 0.242-0.564 0.251-1.863 0.251-1.245 0-1.415-0.018-2.329-0.287-0.538-0.152-1.29-0.412-1.657-0.564-0.367-0.161-0.744-0.296-0.833-0.305-0.117-0.009-0.34 0.385-0.959 1.684-0.448 0.932-0.806 1.729-0.806 1.756 0 0.108 1.406 0.717 2.32 1.003 0.475 0.152 0.923 0.296 0.994 0.314 0.072 0.027-0.349 0.161-0.941 0.304-1.863 0.457-2.741 0.26-3.234-0.726-0.125-0.251-0.905-3.449-2.007-8.233-1.98-8.555-1.926-8.224-1.442-8.985 0.349-0.555 0.887-0.788 2.652-1.191 1.236-0.269 2.741-0.627 2.795-0.663 0.009-0.009-0.179 0.278-0.43 0.636z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
<path fill="#444444" d="M2.944 16.286v10.539h21.079v-21.079h-21.079v10.539zM14.895 11.078c0.228 0.056 0.448 0.124 0.655 0.203 0.452 0.173 1.065 0.378 1.476 0.789 0.166 0.166 0.146 0.215-0.234 0.761-0.224 0.312-0.439 0.615-0.478 0.664-0.049 0.049-0.171-0.039-0.566-0.224-0.794-0.373-1.522-0.712-2.323-0.712-1.122 0-1.698 0.429-1.698 1.278 0 0.781 0.537 1.132 2.44 1.62 2.508 0.644 3.396 1.493 3.357 3.23-0.025 1.104-0.863 2.233-1.841 2.661-1.11 0.486-2.413 0.418-3.55 0.066-0.623-0.193-1.272-0.455-1.839-0.779-0.211-0.12-0.5-0.301-0.68-0.481-0.197-0.197-0.096-0.235 0.083-0.462 0.137-0.185 0.381-0.478 0.537-0.654l0.273-0.332 0.654 0.439c0.947 0.634 1.62 0.859 2.576 0.869 0.947 0.010 1.425-0.185 1.776-0.703 0.185-0.264 0.224-0.429 0.176-0.732-0.068-0.585-0.527-0.956-1.591-1.269-2.342-0.703-2.752-0.849-3.123-1.113-0.468-0.342-0.839-0.81-0.995-1.269-0.156-0.468-0.137-1.454 0.049-1.981 0.689-1.958 3.046-2.314 4.866-1.87z"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path fill="#444444" d="M25.716 6.696h-19.296c-0.888 0-1.608 0.72-1.608 1.608v16.080c0 0.888 0.72 1.608 1.608 1.608h19.296c0.888 0 1.608-0.72 1.608-1.608v-16.080c0-0.888-0.72-1.608-1.608-1.608zM8.028 17.952l3.216-3.216-3.216-3.216 1.608-1.608 4.824 4.824-4.824 4.824-1.608-1.608zM20.892 19.56h-6.432v-1.608h6.432v1.608z"></path>
</svg>

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

View file

@ -93,8 +93,8 @@ for _, codepoint, file, *names in mapping:
num_icons = len(mapping) num_icons = len(mapping)
print('Generating {} with {} glyphs'.format(fontfile, num_icons)) print('Generating {} with {} glyphs'.format(fontfile, num_icons))
font.ascent = 1000 font.ascent = 1050
font.descent = 200 font.descent = 250
font.generate(os.path.join(fontdir, fontfile), flags=("no-FFTM-table",)) font.generate(os.path.join(fontdir, fontfile), flags=("no-FFTM-table",))
codepoints = [ int(p, 16) for _, p, *_ in mapping ] codepoints = [ int(p, 16) for _, p, *_ in mapping ]

Binary file not shown.

View file

@ -12,5 +12,8 @@ Version: 1.000 (from about 2016)
* Glyph 0xE0B4 and 0xE0B6 got an additional 7% strip on their straight side. * Glyph 0xE0B4 and 0xE0B6 got an additional 7% strip on their straight side.
* Add inverse triangular glyphs at 0xE0D6 and 0xE0D7 * Add inverse triangular glyphs at 0xE0D6 and 0xE0D7
* Change version of font to 1.100 * Change version of font to 1.100
* Add 'landing platform' to glyphs at 0xE0B8, 0xE0BA, 0xE0BC, and 0xE0BE
* Add 'landing platform' to glyphs at 0xE0C0 and 0xE0C2
* Change version of font to 1.200
Version: 1.100 (our version) Version: 1.200 (our version)