Compare commits
No commits in common. "cdd3762e4a385386f2ca80ed364083603485bc74" and "1ae0f071ecfd0bf742cf5c402a60a7c56c1fd8d3" have entirely different histories.
cdd3762e4a
...
1ae0f071ec
6
.github/workflows/ci.yml
vendored
|
@ -3,8 +3,8 @@ name: "Update Nerd Fonts"
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
schedule:
|
schedule:
|
||||||
# “At 00:00 on Monday.”
|
# 1st and 15th at 12:00 AM
|
||||||
- cron: "0 0 * * 1"
|
- cron: "0 0 1,15 * *"
|
||||||
|
|
||||||
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@v4
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Setup Git Bot
|
- name: Setup Git Bot
|
||||||
run: |
|
run: |
|
||||||
|
|
153
font-patcher
|
@ -1,14 +1,14 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# coding=utf8
|
# coding=utf8
|
||||||
# Nerd Fonts Version: 3.3.0
|
# Nerd Fonts Version: 3.2.1
|
||||||
# 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.16.1"
|
script_version = "4.14.5"
|
||||||
|
|
||||||
version = "3.3.0"
|
version = "3.2.1"
|
||||||
projectName = "Nerd Fonts"
|
projectName = "Nerd Fonts"
|
||||||
projectNameAbbreviation = "NF"
|
projectNameAbbreviation = "NF"
|
||||||
projectNameSingular = projectName[:-1]
|
projectNameSingular = projectName[:-1]
|
||||||
|
@ -318,16 +318,6 @@ 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):
|
||||||
|
@ -343,7 +333,6 @@ 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
|
||||||
|
@ -899,21 +888,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.05}},
|
0xe0b8: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.02}},
|
||||||
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.05}},
|
0xe0ba: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.02}},
|
||||||
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.05}},
|
0xe0bc: {'align': 'l', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.02}},
|
||||||
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.05}},
|
0xe0be: {'align': 'r', 'valign': 'c', 'stretch': '^xy', 'params': {'overlap': 0.02}},
|
||||||
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.05}},
|
0xe0c0: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.01}},
|
||||||
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.05}},
|
0xe0c2: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.01}},
|
||||||
0xe0c3: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {}},
|
0xe0c3: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {}},
|
||||||
|
|
||||||
# Small squares
|
# Small squares
|
||||||
|
@ -925,8 +914,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.05}},
|
0xe0c8: {'align': 'l', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.01}},
|
||||||
0xe0ca: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.05}},
|
0xe0ca: {'align': 'r', 'valign': 'c', 'stretch': '^xy2', 'params': {'overlap': 0.01}},
|
||||||
|
|
||||||
# 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}},
|
||||||
|
@ -964,16 +953,6 @@ 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': {}}
|
||||||
|
@ -993,9 +972,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 (see bottom). The basis for it is
|
# with the same scaling and shifting. The basis for it is a 'combined
|
||||||
# a 'combined bounding box' of all glyphs in that group. All glyphs are
|
# bounding box' of all glyphs in that group. All glyphs are handled as
|
||||||
# handled as if they fill that combined bounding box.
|
# 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.
|
||||||
|
@ -1012,7 +991,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 (see bottom) for all the glyphs in the group.
|
# and based on that the scale and shift 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': [
|
||||||
|
@ -1023,21 +1002,15 @@ 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 = {'ShiftMode': 'xy', 'ScaleGroups': [
|
BOX_SCALE_LIST = {'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, 0x259f + 1), # blocks and greys (greys are less tall originally, so overlap will be less)
|
[*range(0x2580, 0x2590 + 1), 0x2594, 0x2595], # blocks
|
||||||
|
range(0x2591, 0x2593 + 1), # greys
|
||||||
|
range(0x2594, 0x259f + 1), # quards (Note: quard 2597 in Hack is wrong, scales like block!)
|
||||||
]}
|
]}
|
||||||
CODI_SCALE_LIST = {'ShiftMode': 'xy', 'ScaleGroups': [
|
CODI_SCALE_LIST = {'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
|
||||||
|
@ -1048,8 +1021,11 @@ 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 = None
|
DEVI_SCALE_LIST = {'ScaleGlyph': 0xE60E, # Android logo
|
||||||
FONTA_SCALE_LIST = {'ShiftMode': '', 'ScaleGroups': [
|
'GlyphsToScale': [
|
||||||
|
(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
|
||||||
|
@ -1070,11 +1046,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 = {'ShiftMode': 'y', 'ScaleGlyph': 0x2771, # widest bracket, horizontally
|
HEAVY_SCALE_LIST = {'ScaleGlyph': 0x2771, # widest bracket, horizontally
|
||||||
'GlyphsToScale': [
|
'GlyphsToScale': [
|
||||||
(0x276c, 0x2771) # all
|
(0x276c, 0x2771) # all
|
||||||
]}
|
]}
|
||||||
OCTI_SCALE_LIST = {'ShiftMode': '', 'ScaleGroups': [
|
OCTI_SCALE_LIST = {'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
|
||||||
|
@ -1086,11 +1062,7 @@ 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
|
||||||
]}
|
]}
|
||||||
PROGR_SCALE_LIST = {'ShiftMode': 'xy', 'ScaleGroups': [
|
WEATH_SCALE_LIST = {'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
|
||||||
|
@ -1099,8 +1071,6 @@ 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).
|
||||||
|
@ -1108,12 +1078,7 @@ 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, 0xf041 + 1),
|
range(0xf000, 0xf0cb + 1), # lots of clouds and other (Please read note above!)
|
||||||
*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
|
||||||
|
|
||||||
|
@ -1124,8 +1089,7 @@ 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': "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': 0xE6C5, 'SrcStart': 0xE700, 'ScaleRules': DEVI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT},
|
||||||
{'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},
|
||||||
|
@ -1365,29 +1329,25 @@ class font_patcher:
|
||||||
return 1
|
return 1
|
||||||
return 2
|
return 2
|
||||||
|
|
||||||
def get_scale_factors(self, sym_dim, stretch, overlap=None):
|
def get_scale_factors(self, sym_dim, stretch):
|
||||||
""" 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 and not overlap:
|
if not self.args.single and not '!' in stretch:
|
||||||
# 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
|
||||||
|
@ -1521,32 +1481,30 @@ 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 = \
|
self.sourceFont[currentSourceFontGlyph].glyphname = sym_glyph.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])
|
||||||
overlap = sym_attr['params'].get('overlap')
|
|
||||||
if overlap and ypadding:
|
|
||||||
logger.critical("Conflicting params: overlap and ypadding")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if glyph_scale_data is not None:
|
if glyph_scale_data is not None:
|
||||||
if glyph_scale_data[1] is not None:
|
if glyph_scale_data[1] is not None:
|
||||||
sym_dim = glyph_scale_data[1] # Use combined bounding box
|
sym_dim = glyph_scale_data[1] # Use combined bounding box
|
||||||
(scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, stretch, overlap)
|
(scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, stretch)
|
||||||
else:
|
else:
|
||||||
# This is roughly alike get_scale_factors(glyph_scale_data[1], 'pa')
|
# This is roughly alike get_scale_factors(glyph_scale_data[1], 'pa')
|
||||||
# Except we do not have glyph_scale_data[1] always...
|
# Except we do not have glyph_scale_data[1] always...
|
||||||
(scale_ratio_x, scale_ratio_y) = (glyph_scale_data[0], glyph_scale_data[0])
|
(scale_ratio_x, scale_ratio_y) = (glyph_scale_data[0], glyph_scale_data[0])
|
||||||
if 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
|
|
||||||
scale_ratio_y *= 1.0 + (self.font_dim['height'] / (sym_dim['height'] * scale_ratio_y)) * y_overlap
|
|
||||||
else:
|
else:
|
||||||
(scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, stretch, overlap)
|
(scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, stretch)
|
||||||
|
|
||||||
|
overlap = sym_attr['params'].get('overlap')
|
||||||
|
if overlap and ypadding:
|
||||||
|
logger.critical("Conflicting params: overlap and ypadding")
|
||||||
|
sys.exit(1)
|
||||||
|
if 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
|
||||||
|
scale_ratio_y *= 1.0 + (self.font_dim['height'] / (sym_dim['height'] * scale_ratio_y)) * y_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')
|
||||||
|
@ -1580,8 +1538,7 @@ class font_patcher:
|
||||||
|
|
||||||
# Handle glyph l/r/c alignment
|
# Handle glyph l/r/c alignment
|
||||||
x_align_distance = 0
|
x_align_distance = 0
|
||||||
simple_nonmono = self.args.nonmono and sym_dim['advance'] is None
|
if 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
|
||||||
|
@ -1594,19 +1551,17 @@ 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)
|
|
||||||
|
|
||||||
if overlap:
|
if overlap:
|
||||||
overlap_width = self.font_dim['width'] * overlap
|
overlap_width = self.font_dim['width'] * overlap
|
||||||
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':
|
||||||
# center aligned keeps being center aligned even with overlap
|
if overlap_width > 0:
|
||||||
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' and not simple_nonmono:
|
elif sym_attr['align'] == 'r':
|
||||||
# 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
|
||||||
|
@ -1638,7 +1593,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:
|
if overlap and (sym_attr['align'] == 'l' or sym_attr['align'] == 'r'):
|
||||||
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
|
||||||
|
@ -1736,21 +1691,11 @@ 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,13 +1,12 @@
|
||||||
# Devicons
|
# Devicons
|
||||||
|
|
||||||
From the Devicons the non-linemark versions are selected and assembled into a custom
|
For more information have a look at the upstream website: https://github.com/vorillaz/devicons
|
||||||
icon font. This font guarantees that the codepoints of existing icons do not change
|
|
||||||
when other icons are added or removed.
|
|
||||||
|
|
||||||
For more information have a look at the upstream website: https://github.com/devicons/devicon
|
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.
|
||||||
|
|
||||||
The helper scripts need to be called in this order (note the individual prerequisites):
|
## Source bugs fixed
|
||||||
* `analyze`
|
|
||||||
* `generate` (possibly via `fontforge`)
|
|
||||||
|
|
||||||
Version: 2.16.0.custom
|
Glyph 0xE6B6 is defective in the original font. We hand optimized and fixed that.
|
||||||
|
|
||||||
|
Version: 1.8.1
|
||||||
|
|
|
@ -1,159 +0,0 @@
|
||||||
#!/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)))
|
|
|
@ -1,5 +0,0 @@
|
||||||
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.
|
|
|
@ -1 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 346 B |
Before Width: | Height: | Size: 6.8 KiB |
|
@ -1 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 9 KiB |
|
@ -1 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 832 B |
|
@ -1,140 +0,0 @@
|
||||||
#!/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')
|
|
|
@ -1,500 +0,0 @@
|
||||||
# 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
|
|
|
@ -1,16 +0,0 @@
|
||||||
# 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
|
|
Before Width: | Height: | Size: 6.1 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,7 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 2.4 KiB |
|
@ -1,4 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 383 B |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 650 B |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 19 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 958 B |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 5.5 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.7 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.8 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.7 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 648 B |
|
@ -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 = 1050
|
font.ascent = 1000
|
||||||
font.descent = 250
|
font.descent = 200
|
||||||
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 ]
|
||||||
|
|
|
@ -12,8 +12,5 @@ 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.200 (our version)
|
Version: 1.100 (our version)
|
||||||
|
|