From a4d4640f0122a7c5a074906a6567c1b33a3fb1cd Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 15 May 2023 00:29:20 +0000 Subject: [PATCH] chore: change batteries --- bin/scripts/name_parser/FontnameParser.py | 212 +++------ bin/scripts/name_parser/FontnameTools.py | 403 ++++++++---------- font-patcher | 136 +++--- src/glyphs/codicons/LICENSE.txt | 4 +- src/glyphs/octicons/analyze_octicons | 4 +- .../octicons/file-symlink-directory-16.svg | 1 + .../octicons/file-symlink-directory-24.svg | 1 + src/glyphs/octicons/generate | 164 ++++--- src/glyphs/octicons/mapping | 3 +- src/glyphs/octicons/octicons.ttf | Bin 76520 -> 76796 bytes src/glyphs/original-source.otf | Bin 151836 -> 152012 bytes src/glyphs/powerline-symbols/LICENSE.txt | 26 +- src/glyphs/weather-icons/OFL-FAQ.txt | 35 +- src/glyphs/weather-icons/OFL.txt | 2 +- 14 files changed, 431 insertions(+), 560 deletions(-) create mode 100644 src/glyphs/octicons/file-symlink-directory-16.svg create mode 100644 src/glyphs/octicons/file-symlink-directory-24.svg diff --git a/bin/scripts/name_parser/FontnameParser.py b/bin/scripts/name_parser/FontnameParser.py index e6d70c5..544452a 100644 --- a/bin/scripts/name_parser/FontnameParser.py +++ b/bin/scripts/name_parser/FontnameParser.py @@ -4,32 +4,20 @@ import re from FontnameTools import FontnameTools - class FontnameParser: """Parse a font name and generate all kinds of names""" def __init__(self, filename, logger): """Parse a font filename and store the results""" self.parse_ok = False - self.use_short_families = ( - False, - False, - False, - ) # ( camelcase name, short styles, aggressive ) - self.keep_regular_in_family = None # None = auto, True, False + self.use_short_families = (False, False, False) # ( camelcase name, short styles, aggressive ) + self.keep_regular_in_family = None # None = auto, True, False self.suppress_preferred_if_identical = True - self.family_suff = "" - self.ps_fontname_suff = "" - self.short_family_suff = "" + self.family_suff = '' + self.ps_fontname_suff = '' + self.short_family_suff = '' self.name_subst = [] - [ - self.parse_ok, - self._basename, - self.weight_token, - self.style_token, - self.other_token, - self._rest, - ] = FontnameTools.parse_font_name(filename) + [ self.parse_ok, self._basename, self.weight_token, self.style_token, self.other_token, self._rest ] = FontnameTools.parse_font_name(filename) self.basename = self._basename self.rest = self._rest self.add_name_substitution_table(FontnameTools.SIL_TABLE) @@ -38,25 +26,21 @@ class FontnameParser: def _make_ps_name(self, n, is_family): """Helper to limit font name length in PS names""" - fam = "family " if is_family else "" + fam = 'family ' if is_family else '' limit = 31 if is_family else 63 if len(n) <= limit: return n - r = re.search("(.*)(-.*)", n) + r = re.search('(.*)(-.*)', n) if not r: new_n = n[:limit] else: q = limit - len(r.groups()[1]) if q < 1: q = 1 - self.logger.error( - "====-< Shortening too long PS {}name: Garbage warning".format(fam) - ) + self.logger.error('====-< Shortening too long PS {}name: Garbage warning'. format(fam)) new_n = r.groups()[0][:q] + r.groups()[1] if new_n != n: - self.logger.error( - "====-< Shortening too long PS {}name: {} -> {}".format(fam, n, new_n) - ) + self.logger.error('====-< Shortening too long PS {}name: {} -> {}'.format(fam, n, new_n)) return new_n def _shortened_name(self): @@ -64,7 +48,7 @@ class FontnameParser: if not self.use_short_families[0]: return (self.basename, self.rest) else: - return (FontnameTools.concat(self.basename, self.rest).replace(" ", ""), "") + return (FontnameTools.concat(self.basename, self.rest).replace(' ', ''), '') def set_keep_regular_in_family(self, keep): """Familyname may contain 'Regular' where it should normally be suppressed""" @@ -79,7 +63,7 @@ class FontnameParser: # is not needed, or rather contraproductive. This can not be detected on a # font file level but needs to be specified per family from the outside. # Returns true if setting was successful. - if "Italic" in self.style_token: + if 'Italic' in self.style_token: self.rename_oblique = True return not noitalic self.rename_oblique = not noitalic @@ -92,7 +76,7 @@ class FontnameParser: def inject_suffix(self, family, ps_fontname, short_family): """Add a custom additonal string that shows up in the resulting names""" self.family_suff = family.strip() - self.ps_fontname_suff = ps_fontname.replace(" ", "") + self.ps_fontname_suff = ps_fontname.replace(' ', '') self.short_family_suff = short_family.strip() return self @@ -102,7 +86,7 @@ class FontnameParser: # prefix is either a string or False/True if isinstance(prefix, str): prefix = self._basename.startswith(prefix) - self.use_short_families = (camelcase_name, prefix, aggressive) + self.use_short_families = ( camelcase_name, prefix, aggressive ) return self def add_name_substitution_table(self, table): @@ -113,29 +97,27 @@ class FontnameParser: self.basename = self._basename self.rest = self._rest for regex, replacement in self.name_subst: - base_and_rest = self.basename + (" " + self.rest if len(self.rest) else "") + base_and_rest = self.basename + (' ' + self.rest if len(self.rest) else '') m = re.match(regex, base_and_rest, re.IGNORECASE) if not m: continue i = len(self.basename) - len(m.group(0)) if i < 0: self.basename = m.expand(replacement).rstrip() - self.rest = self.rest[-(i + 1) :].lstrip() + self.rest = self.rest[-(i+1):].lstrip() else: - self.basename = m.expand(replacement) + self.basename[len(m.group(0)) :] + self.basename = m.expand(replacement) + self.basename[len(m.group(0)):] return self def drop_for_powerline(self): """Remove 'for Powerline' from all names (can not be undone)""" - if "Powerline" in self.other_token: - idx = self.other_token.index("Powerline") + if 'Powerline' in self.other_token: + idx = self.other_token.index('Powerline') self.other_token.pop(idx) - if idx > 0 and self.other_token[idx - 1] == "For": + if idx > 0 and self.other_token[idx - 1] == 'For': self.other_token.pop(idx - 1) - self._basename = re.sub( - r"(\b|for\s?)?powerline\b", "", self._basename, 1, re.IGNORECASE - ).strip() - self.add_name_substitution_table(self.name_subst) # re-evaluate + self._basename = re.sub(r'(\b|for\s?)?powerline\b', '', self._basename, 1, re.IGNORECASE).strip() + self.add_name_substitution_table(self.name_subst) # re-evaluate return self ### Following the creation of the name parts: @@ -166,26 +148,20 @@ class FontnameParser: styles = self.style_token weights = self.weight_token if self.keep_regular_in_family == None: - keep_regular = FontnameTools.is_keep_regular( - self._basename + " " + self._rest - ) + keep_regular = FontnameTools.is_keep_regular(self._basename + ' ' + self._rest) else: keep_regular = self.keep_regular_in_family - if "Regular" in styles and ( - not keep_regular or len(self.weight_token) > 0 - ): # This is actually a malformed font name + if ('Regular' in styles + and (not keep_regular + or len(self.weight_token) > 0)): # This is actually a malformed font name styles = list(self.style_token) - styles.remove("Regular") + styles.remove('Regular') # For naming purposes we want Oblique to be part of the styles (weights, styles) = FontnameTools.make_oblique_style(weights, styles) (name, rest) = self._shortened_name() if self.use_short_families[1]: - [weights, styles] = FontnameTools.short_styles( - [weights, styles], self.use_short_families[2] - ) - return FontnameTools.concat( - name, rest, self.other_token, self.short_family_suff, weights, styles - ) + [ weights, styles ] = FontnameTools.short_styles([ weights, styles ], self.use_short_families[2]) + return FontnameTools.concat(name, rest, self.other_token, self.short_family_suff, weights, styles) def psname(self): """Get the SFNT PostScriptName (ID 6)""" @@ -196,12 +172,10 @@ class FontnameParser: if self.use_short_families[1]: styles = FontnameTools.short_styles(styles, self.use_short_families[2]) weights = FontnameTools.short_styles(weights, self.use_short_families[2]) - fam = FontnameTools.camel_casify( - FontnameTools.concat(name, rest, self.other_token, self.ps_fontname_suff) - ) + fam = FontnameTools.camel_casify(FontnameTools.concat(name, rest, self.other_token, self.ps_fontname_suff)) sub = FontnameTools.camel_casify(FontnameTools.concat(weights, styles)) if len(sub) > 0: - sub = "-" + sub + sub = '-' + sub fam = FontnameTools.postscript_char_filter(fam) sub = FontnameTools.postscript_char_filter(sub) return self._make_ps_name(fam + sub, False) @@ -212,7 +186,7 @@ class FontnameParser: pfn = FontnameTools.concat(name, rest, self.other_token, self.family_suff) if self.suppress_preferred_if_identical and pfn == self.family(): # Do not set if identical to ID 1 - return "" + return '' return pfn def preferred_styles(self): @@ -224,7 +198,7 @@ class FontnameParser: pfs = FontnameTools.concat(weights, styles) if self.suppress_preferred_if_identical and pfs == self.subfamily(): # Do not set if identical to ID 2 - return "" + return '' return pfs def family(self): @@ -237,8 +211,8 @@ class FontnameParser: if not self.rename_oblique: (weights, styles) = FontnameTools.make_oblique_style(weights, []) if self.use_short_families[1]: - [other, weights] = FontnameTools.short_styles([other, weights], aggressive) - weights = [w if w != "Oblique" else "Obl" for w in weights] + [ other, weights ] = FontnameTools.short_styles([ other, weights ], aggressive) + weights = [ w if w != 'Oblique' else 'Obl' for w in weights ] return FontnameTools.concat(name, rest, other, self.short_family_suff, weights) def subfamily(self): @@ -248,11 +222,11 @@ class FontnameParser: if not self.rename_oblique: (weights, styles) = FontnameTools.make_oblique_style(weights, styles) if len(styles) == 0: - if "Oblique" in weights: - return FontnameTools.concat(styles, "Italic") - return "Regular" - if "Oblique" in weights and not "Italic" in styles: - return FontnameTools.concat(styles, "Italic") + if 'Oblique' in weights: + return FontnameTools.concat(styles, 'Italic') + return 'Regular' + if 'Oblique' in weights and not 'Italic' in styles: + return FontnameTools.concat(styles, 'Italic') return FontnameTools.concat(styles) def ps_familyname(self): @@ -265,45 +239,33 @@ class FontnameParser: def macstyle(self, style): """Modify a given macStyle value for current name, just bits 0 and 1 touched""" b = style & (~3) - b |= 1 if "Bold" in self.style_token else 0 - b |= 2 if "Italic" in self.style_token else 0 + b |= 1 if 'Bold' in self.style_token else 0 + b |= 2 if 'Italic' in self.style_token else 0 return b def fs_selection(self, fs): """Modify a given fsSelection value for current name, bits 0, 5, 6, 8, 9 touched""" - ITALIC = 1 << 0 - BOLD = 1 << 5 - REGULAR = 1 << 6 - WWS = 1 << 8 - OBLIQUE = 1 << 9 + ITALIC = 1 << 0; BOLD = 1 << 5; REGULAR = 1 << 6; WWS = 1 << 8; OBLIQUE = 1 << 9 b = fs & (~(ITALIC | BOLD | REGULAR | WWS | OBLIQUE)) - if "Bold" in self.style_token: + if 'Bold' in self.style_token: b |= BOLD # Ignore Italic if we have Oblique - if "Oblique" in self.weight_token: + if 'Oblique' in self.weight_token: b |= OBLIQUE - elif "Italic" in self.style_token: + elif 'Italic' in self.style_token: b |= ITALIC # Regular is just the basic weight - if len(self.weight_token) == 0: + if len(self.weight_token) == 0 and not b & (ITALIC | BOLD | OBLIQUE): b |= REGULAR - b |= WWS # We assert this by our naming process + b |= WWS # We assert this by our naming process return b def checklen(self, max_len, entry_id, name): """Check the length of a name string and report violations""" if len(name) <= max_len: - self.logger.debug( - "=====> {:18} ok ({:2} <={:2}): {}".format( - entry_id, len(name), max_len, name - ) - ) + self.logger.debug('=====> {:18} ok ({:2} <={:2}): {}'.format(entry_id, len(name), max_len, name)) else: - self.logger.error( - "====-< {:18} too long ({:2} > {:2}): {}".format( - entry_id, len(name), max_len, name - ) - ) + self.logger.error('====-< {:18} too long ({:2} > {:2}): {}'.format(entry_id, len(name), max_len, name)) return name def rename_font(self, font): @@ -339,78 +301,32 @@ class FontnameParser: # and it is actually embedded as empty string, but empty strings are not # shown if you query the sfnt_names *rolleyes* - version_tag = "" + version_tag = '' sfnt_list = [] - TO_DEL = [ - "Family", - "SubFamily", - "Fullname", - "PostScriptName", - "Preferred Family", - "Preferred Styles", - "Compatible Full", - "WWS Family", - "WWS Subfamily", - "UniqueID", - "CID findfont Name", - ] + TO_DEL = ['Family', 'SubFamily', 'Fullname', 'PostScriptName', 'Preferred Family', + 'Preferred Styles', 'Compatible Full', 'WWS Family', 'WWS Subfamily', + 'UniqueID', 'CID findfont Name'] # Remove these entries in all languages and add (at least the vital ones) some # back, but only as 'English (US)'. This makes sure we do not leave contradicting # names over different languages. for l, k, v in list(font.sfnt_names): if not k in TO_DEL: - sfnt_list += [(l, k, v)] - if k == "Version" and l == "English (US)": - version_tag = " " + v.split()[-1] + sfnt_list += [( l, k, v )] + if k == 'Version' and l == 'English (US)': + version_tag = ' ' + v.split()[-1] - sfnt_list += [ - ( - "English (US)", - "Family", - self.checklen(31, "Family (ID 1)", self.family()), - ) - ] # 1 - sfnt_list += [ - ( - "English (US)", - "SubFamily", - self.checklen(31, "SubFamily (ID 2)", self.subfamily()), - ) - ] # 2 - sfnt_list += [("English (US)", "UniqueID", self.fullname() + version_tag)] # 3 - sfnt_list += [ - ( - "English (US)", - "Fullname", - self.checklen(63, "Fullname (ID 4)", self.fullname()), - ) - ] # 4 - sfnt_list += [ - ( - "English (US)", - "PostScriptName", - self.checklen(63, "PSN (ID 6)", self.psname()), - ) - ] # 6 + sfnt_list += [( 'English (US)', 'Family', self.checklen(31, 'Family (ID 1)', self.family()) )] # 1 + sfnt_list += [( 'English (US)', 'SubFamily', self.checklen(31, 'SubFamily (ID 2)', self.subfamily()) )] # 2 + sfnt_list += [( 'English (US)', 'UniqueID', self.fullname() + version_tag )] # 3 + sfnt_list += [( 'English (US)', 'Fullname', self.checklen(63, 'Fullname (ID 4)', self.fullname()) )] # 4 + sfnt_list += [( 'English (US)', 'PostScriptName', self.checklen(63, 'PSN (ID 6)', self.psname()) )] # 6 p_fam = self.preferred_family() if len(p_fam): - sfnt_list += [ - ( - "English (US)", - "Preferred Family", - self.checklen(31, "PrefFamily (ID 16)", p_fam), - ) - ] # 16 + sfnt_list += [( 'English (US)', 'Preferred Family', self.checklen(31, 'PrefFamily (ID 16)', p_fam) )] # 16 p_sty = self.preferred_styles() if len(p_sty): - sfnt_list += [ - ( - "English (US)", - "Preferred Styles", - self.checklen(31, "PrefStyles (ID 17)", p_sty), - ) - ] # 17 + sfnt_list += [( 'English (US)', 'Preferred Styles', self.checklen(31, 'PrefStyles (ID 17)', p_sty) )] # 17 font.sfnt_names = tuple(sfnt_list) diff --git a/bin/scripts/name_parser/FontnameTools.py b/bin/scripts/name_parser/FontnameTools.py index 6b6c099..f4a9c13 100644 --- a/bin/scripts/name_parser/FontnameTools.py +++ b/bin/scripts/name_parser/FontnameTools.py @@ -4,7 +4,6 @@ import re import sys - class FontnameTools: """Deconstruct a font filename to get standardized name parts""" @@ -16,32 +15,32 @@ class FontnameTools: @staticmethod def camel_casify(word): """Remove blanks and use CamelCase for the new word""" - return "".join(map(FontnameTools.front_upper, word.split(" "))) + return ''.join(map(FontnameTools.front_upper, word.split(' '))) @staticmethod def camel_explode(word): """Explode CamelCase -> Camel Case""" # But do not explode "JetBrains" etc at string start... excludes = [ - "JetBrains", - "DejaVu", - "OpenDyslexicAlta", - "OpenDyslexicMono", - "OpenDyslexic", - "DaddyTimeMono", - "InconsolataGo", - "ProFontWindows", - "ProFont", - "ProggyClean", - ] - m = re.match("(" + "|".join(excludes) + ")(.*)", word) - (prefix, word) = m.group(1, 2) if m != None else ("", word) + 'JetBrains', + 'DejaVu', + 'OpenDyslexicAlta', + 'OpenDyslexicMono', + 'OpenDyslexic', + 'DaddyTimeMono', + 'InconsolataGo', + 'ProFontWindows', + 'ProFont', + 'ProggyClean', + ] + m = re.match('(' + '|'.join(excludes) + ')(.*)', word) + (prefix, word) = m.group(1,2) if m != None else ('', word) if len(word) == 0: return prefix - parts = re.split("(?<=[a-z0-9])(?=[A-Z])", word) + parts = re.split('(?<=[a-z0-9])(?=[A-Z])', word) if len(prefix): parts.insert(0, prefix) - return " ".join(parts) + return ' '.join(parts) @staticmethod def drop_empty(l): @@ -57,7 +56,7 @@ class FontnameTools: all.append(thing) else: all += thing - return " ".join(FontnameTools.drop_empty(all)) + return ' '.join(FontnameTools.drop_empty(all)) @staticmethod def unify_style_names(style_name): @@ -65,20 +64,20 @@ class FontnameTools: known_names = { # Source of the table is the current sourcefonts # Left side needs to be lower case - "-": "", - "book": "", - "text": "", - "ce": "CE", + '-': '', + 'book': '', + 'text': '', + 'ce': 'CE', #'semibold': 'Demi', - "ob": "Oblique", - "it": "Italic", - "i": "Italic", - "b": "Bold", - "normal": "Regular", - "c": "Condensed", - "r": "Regular", - "m": "Medium", - "l": "Light", + 'ob': 'Oblique', + 'it': 'Italic', + 'i': 'Italic', + 'b': 'Bold', + 'normal': 'Regular', + 'c': 'Condensed', + 'r': 'Regular', + 'm': 'Medium', + 'l': 'Light', } if style_name in known_names: return known_names[style_name.lower()] @@ -89,7 +88,7 @@ class FontnameTools: """Find an entry in a list of dicts, return entry and in which list it was""" for i, d in enumerate(dicts): if key in d: - return (d[key], i) + return ( d[key], i ) return (None, 0) @staticmethod @@ -111,26 +110,20 @@ class FontnameTools: # - has modifier: use second form of mod plus first form of weights2 # - has modifier: use second form of mod plus second form of widths name_rest = name - name_pre = "" - form = FontnameTools.get_shorten_form_idx(aggressive, "", 0) + name_pre = '' + form = FontnameTools.get_shorten_form_idx(aggressive, '', 0) for mod in FontnameTools.known_modifiers: - if name.startswith(mod) and len(name) > len( - mod - ): # Second condition specifically for 'Demi' + if name.startswith(mod) and len(name) > len(mod): # Second condition specifically for 'Demi' name_pre = FontnameTools.known_modifiers[mod][form] - name_rest = name[len(mod) :] + name_rest = name[len(mod):] break - subst, i = FontnameTools.find_in_dicts( - name_rest, [FontnameTools.known_weights2, FontnameTools.known_widths] - ) + subst, i = FontnameTools.find_in_dicts(name_rest, [ FontnameTools.known_weights2, FontnameTools.known_widths ]) form = FontnameTools.get_shorten_form_idx(aggressive, name_pre, i) if isinstance(subst, tuple): return name_pre + subst[form] if not len(name_pre): # The following sets do not allow modifiers - subst, _ = FontnameTools.find_in_dicts( - name_rest, [FontnameTools.known_weights1, FontnameTools.known_slopes] - ) + subst, _ = FontnameTools.find_in_dicts(name_rest, [ FontnameTools.known_weights1, FontnameTools.known_slopes ]) if isinstance(subst, tuple): return subst[form] return name @@ -139,26 +132,21 @@ class FontnameTools: def short_styles(lists, aggressive): """Shorten all style names in a list or a list of lists""" if not len(lists) or not isinstance(lists[0], list): - return list( - map(lambda x: FontnameTools.shorten_style_name(x, aggressive), lists) - ) - return [ - list(map(lambda x: FontnameTools.shorten_style_name(x, aggressive), styles)) - for styles in lists - ] + return list(map(lambda x: FontnameTools.shorten_style_name(x, aggressive), lists)) + return [ list(map(lambda x: FontnameTools.shorten_style_name(x, aggressive), styles)) for styles in lists ] @staticmethod def make_oblique_style(weights, styles): """Move "Oblique" from weights to styles for font naming purposes""" - if "Oblique" in weights: + if 'Oblique' in weights: weights = list(weights) - weights.remove("Oblique") + weights.remove('Oblique') styles = list(styles) - styles.append("Oblique") + styles.append('Oblique') return (weights, styles) @staticmethod - def get_name_token(name, tokens, allow_regex_token=False): + def get_name_token(name, tokens, allow_regex_token = False): """Try to find any case insensitive token from tokens in the name, return tuple with found token-list and rest""" # The default mode (allow_regex_token = False) will try to find any verbatim string in the # tokens list (case insensitive matching) and give that tokens list item back with @@ -168,29 +156,27 @@ class FontnameTools: # # Token are always used in a regex and may not capture, use non capturing # grouping if needed (?: ... ) - lower_tokens = [t.lower() for t in tokens] + lower_tokens = [ t.lower() for t in tokens ] not_matched = "" all_tokens = [] j = 1 - regex = re.compile("(.*?)(" + "|".join(tokens) + ")(.*)", re.IGNORECASE) + regex = re.compile('(.*?)(' + '|'.join(tokens) + ')(.*)', re.IGNORECASE) while j: j = regex.match(name) if not j: break if len(j.groups()) != 3: - sys.exit("Malformed regex in FontnameTools.get_name_token()") - not_matched += ( - " " + j.groups()[0] - ) # Blanc prevents unwanted concatenation of unmatched substrings + sys.exit('Malformed regex in FontnameTools.get_name_token()') + not_matched += ' ' + j.groups()[0] # Blanc prevents unwanted concatenation of unmatched substrings tok = j.groups()[1].lower() if tok in lower_tokens: tok = tokens[lower_tokens.index(tok)] tok = FontnameTools.unify_style_names(tok) if len(tok): all_tokens.append(tok) - name = j.groups()[2] # Recurse rest - not_matched += " " + name - return (not_matched.strip(), all_tokens) + name = j.groups()[2] # Recurse rest + not_matched += ' ' + name + return ( not_matched.strip(), all_tokens ) @staticmethod def postscript_char_filter(name): @@ -199,48 +185,42 @@ class FontnameTools: # except for the 10 characters '[', ']', '(', ')', '{', '}', '<', '>', '/', '%' out = "" for c in name: - if c in "[](){}<>/%" or ord(c) < 33 or ord(c) > 126: + if c in '[](){}<>/%' or ord(c) < 33 or ord(c) > 126: continue out += c return out SIL_TABLE = [ - ("(a)nonymous", r"\1nonymice"), - ("(b)itstream( ?)(v)era( ?sans ?mono)?", r"\1itstrom\2Wera"), - ("(s)ource", r"\1auce"), - ("(h)ermit", r"\1urmit"), - ("(h)asklig", r"\1asklug"), - ("(s)hare", r"\1hure"), - ("IBM[- ]?plex", r"Blex"), # We do not keep the case here - ("(t)erminus", r"\1erminess"), - ("(l)iberation", r"\1iteration"), - ("iA([- ]?)writer", r"iM\1Writing"), - ("(a)nka/(c)oder", r"\1na\2onder"), - ("(c)ascadia( ?)(c)ode", r"\1askaydia\2\3ove"), - ("(c)ascadia( ?)(m)ono", r"\1askaydia\2\3ono"), - ("(m)( ?)plus", r"\1+"), # Added this, because they use a plus symbol :-> - ("Gohufont", r"GohuFont"), # Correct to CamelCase + ( '(a)nonymous', r'\1nonymice' ), + ( '(b)itstream( ?)(v)era( ?sans ?mono)?', r'\1itstrom\2Wera' ), + ( '(s)ource', r'\1auce' ), + ( '(h)ermit', r'\1urmit' ), + ( '(h)asklig', r'\1asklug' ), + ( '(s)hare', r'\1hure' ), + ( 'IBM[- ]?plex', r'Blex' ), # We do not keep the case here + ( '(t)erminus', r'\1erminess' ), + ( '(l)iberation', r'\1iteration' ), + ( 'iA([- ]?)writer', r'iM\1Writing' ), + ( '(a)nka/(c)oder', r'\1na\2onder' ), + ( '(c)ascadia( ?)(c)ode', r'\1askaydia\2\3ove' ), + ( '(c)ascadia( ?)(m)ono', r'\1askaydia\2\3ono' ), + ( '(m)( ?)plus', r'\1+'), # Added this, because they use a plus symbol :-> + ( 'Gohufont', r'GohuFont'), # Correct to CamelCase # Noone cares that font names starting with a digit are forbidden: - ("IBM 3270", r"3270"), # for historical reasons and 'IBM' is a TM or something + ( 'IBM 3270', r'3270'), # for historical reasons and 'IBM' is a TM or something # Some name parts that are too long for us - ("(.*sans ?m)ono", r"\1"), # Various SomenameSansMono fonts - ("(.*code ?lat)in Expanded", r"\1X"), # for 'M PLUS Code Latin Expanded' - ("(.*code ?lat)in", r"\1"), # for 'M PLUS Code Latin' - ("(b)ig( ?)(b)lue( ?)(t)erminal", r"\1ig\3lue\5erm"), # Shorten BigBlueTerminal - ("(.*)437TT", r"\g<1>437"), # Shorten BigBlueTerminal 437 TT even further - ("(.*dyslexic ?alt)a", r"\1"), # Open Dyslexic Alta -> Open Dyslexic Alt - ("(.*dyslexic ?m)ono", r"\1"), # Open Dyslexic Mono -> Open Dyslexic M - ("(overpass ?m)ono", r"\1"), # Overpass Mono -> Overpass M - ("(proggyclean) ?tt", r"\1"), # Remove TT from ProggyClean - ( - "(terminess) ?\(ttf\)", - r"\1", - ), # Remove TTF from Terminus (after renamed to Terminess) - ("(im ?writing ?q)uattro", r"\1uat"), # Rename iM Writing Quattro to Quat - ( - "(im ?writing ?(mono|duo|quat)) ?s", - r"\1", - ), # Remove S from all iM Writing styles + ( '(.*sans ?m)ono', r'\1'), # Various SomenameSansMono fonts + ( '(.*code ?lat)in Expanded', r'\1X'), # for 'M PLUS Code Latin Expanded' + ( '(.*code ?lat)in', r'\1'), # for 'M PLUS Code Latin' + ( '(b)ig( ?)(b)lue( ?)(t)erminal', r'\1ig\3lue\5erm'), # Shorten BigBlueTerminal + ( '(.*)437TT', r'\g<1>437'), # Shorten BigBlueTerminal 437 TT even further + ( '(.*dyslexic ?alt)a', r'\1'), # Open Dyslexic Alta -> Open Dyslexic Alt + ( '(.*dyslexic ?m)ono', r'\1'), # Open Dyslexic Mono -> Open Dyslexic M + ( '(overpass ?m)ono', r'\1'), # Overpass Mono -> Overpass M + ( '(proggyclean) ?tt', r'\1'), # Remove TT from ProggyClean + ( '(terminess) ?\(ttf\)', r'\1'), # Remove TTF from Terminus (after renamed to Terminess) + ( '(im ?writing ?q)uattro', r'\1uat'), # Rename iM Writing Quattro to Quat + ( '(im ?writing ?(mono|duo|quat)) ?s', r'\1'), # Remove S from all iM Writing styles ] # From https://adobe-type-tools.github.io/font-tech-notes/pdfs/5088.FontNames.pdf @@ -254,103 +234,98 @@ class FontnameTools: # - has modifier: use second form of mod plus first form of weights2 # - has modifier: use second form of mod plus second form of widths # This is encoded in get_shorten_form_idx() - known_weights1 = { # can not take modifiers - "Medium": ("Md", "Med"), - "Nord": ("Nd", "Nord"), - "Book": ("Bk", "Book"), - "Poster": ("Po", "Poster"), - "Demi": ( - "Dm", - "Demi", - ), # Demi is sometimes used as a weight, sometimes as a modifier - "Regular": ("Rg", "Reg"), - "Display": ("DS", "Disp"), - "Super": ("Su", "Sup"), - "Retina": ("Rt", "Ret"), + known_weights1 = { # can not take modifiers + 'Medium': ('Md', 'Med'), + 'Nord': ('Nd', 'Nord'), + 'Book': ('Bk', 'Book'), + 'Poster': ('Po', 'Poster'), + 'Demi': ('Dm', 'Demi'), # Demi is sometimes used as a weight, sometimes as a modifier + 'Regular': ('Rg', 'Reg'), + 'Display': ('DS', 'Disp'), + 'Super': ('Su', 'Sup'), + 'Retina': ('Rt', 'Ret'), } - known_weights2 = { # can take modifiers - "Black": ("Blk", "Black"), - "Bold": ("Bd", "Bold"), - "Heavy": ("Hv", "Heavy"), - "Thin": ("Th", "Thin"), - "Light": ("Lt", "Light"), - " ": (), # Just for CodeClimate :-/ + known_weights2 = { # can take modifiers + 'Black': ('Blk', 'Black'), + 'Bold': ('Bd', 'Bold'), + 'Heavy': ('Hv', 'Heavy'), + 'Thin': ('Th', 'Thin'), + 'Light': ('Lt', 'Light'), + ' ': (), # Just for CodeClimate :-/ } - known_widths = { # can take modifiers - "Compressed": ("Cm", "Comp"), - "Extended": ("Ex", "Extd"), - "Condensed": ("Cn", "Cond"), - "Narrow": ("Nr", "Narrow"), - "Compact": ("Ct", "Compact"), + known_widths = { # can take modifiers + 'Compressed': ('Cm', 'Comp'), + 'Extended': ('Ex', 'Extd'), + 'Condensed': ('Cn', 'Cond'), + 'Narrow': ('Nr', 'Narrow'), + 'Compact': ('Ct', 'Compact'), } - known_slopes = { # can not take modifiers - "Inclined": ("Ic", "Incl"), - "Oblique": ("Obl", "Obl"), - "Italic": ("It", "Italic"), - "Upright": ("Up", "Uprght"), - "Kursiv": ("Ks", "Kurs"), - "Sloped": ("Sl", "Slop"), + known_slopes = { # can not take modifiers + 'Inclined': ('Ic', 'Incl'), + 'Oblique': ('Obl', 'Obl'), + 'Italic': ('It', 'Italic'), + 'Upright': ('Up', 'Uprght'), + 'Kursiv': ('Ks', 'Kurs'), + 'Sloped': ('Sl', 'Slop'), } known_modifiers = { - "Demi": ("Dm", "Dem"), - "Ultra": ("Ult", "Ult"), - "Semi": ("Sm", "Sem"), - "Extra": ("X", "Ext"), + 'Demi': ('Dm', 'Dem'), + 'Ultra': ('Ult', 'Ult'), + 'Semi': ('Sm', 'Sem'), + 'Extra': ('X', 'Ext'), } @staticmethod def is_keep_regular(basename): """This has been decided by the font designers, we need to mimic that (for comparison purposes)""" KEEP_REGULAR = [ - "Agave", - "Arimo", - "Aurulent", - "Cascadia", - "Cousine", - "Fantasque", - "Fira", - "Overpass", - "Lilex", - "Inconsolata$", # not InconsolataGo - "IAWriter", - "Meslo", - "Monoid", - "Mononoki", - "Hack", - "JetBrains Mono", - "Noto Sans", - "Noto Serif", - "Victor", + 'Agave', + 'Arimo', + 'Aurulent', + 'Cascadia', + 'Cousine', + 'Fantasque', + 'Fira', + + 'Overpass', + 'Lilex', + 'Inconsolata$', # not InconsolataGo + 'IAWriter', + 'Meslo', + 'Monoid', + 'Mononoki', + 'Hack', + 'JetBrains Mono', + 'Noto Sans', + 'Noto Serif', + 'Victor', ] for kr in KEEP_REGULAR: - if (basename.rstrip() + "$").startswith(kr): - return True + if (basename.rstrip() + '$').startswith(kr): return True return False @staticmethod def _parse_simple_font_name(name): """Parse a filename that does not follow the 'FontFamilyName-FontStyle' pattern""" # No dash in name, maybe we have blanc separated filename? - if " " in name: - return FontnameTools.parse_font_name(name.replace(" ", "-")) + if ' ' in name: + return FontnameTools.parse_font_name(name.replace(' ', '-')) # Do we have a number-name boundary? - p = re.split("(?<=[0-9])(?=[a-zA-Z])", name) + p = re.split('(?<=[0-9])(?=[a-zA-Z])', name) if len(p) > 1: - return FontnameTools.parse_font_name("-".join(p)) + return FontnameTools.parse_font_name('-'.join(p)) # Or do we have CamelCase? n = FontnameTools.camel_explode(name) if n != name: - return FontnameTools.parse_font_name(n.replace(" ", "-")) - return (False, FontnameTools.camel_casify(name), [], [], [], "") + return FontnameTools.parse_font_name(n.replace(' ', '-')) + return (False, FontnameTools.camel_casify(name), [], [], [], '') @staticmethod def parse_font_name(name): """Expects a filename following the 'FontFamilyName-FontStyle' pattern and returns ... parts""" - name = re.sub( - r"\bsemi-condensed\b", "SemiCondensed", name, 1, re.IGNORECASE - ) # Just for "3270 Semi-Condensed" :-/ - name = re.sub("[_\s]+", " ", name) - matches = re.match(r"([^-]+)(?:-(.*))?", name) + name = re.sub(r'\bsemi-condensed\b', 'SemiCondensed', name, 1, re.IGNORECASE) # Just for "3270 Semi-Condensed" :-/ + name = re.sub('[_\s]+', ' ', name) + matches = re.match(r'([^-]+)(?:-(.*))?', name) familyname = FontnameTools.camel_casify(matches.group(1)) style = matches.group(2) @@ -361,81 +336,47 @@ class FontnameTools: # Weights end up as Typographic Family parts ('after the dash') # Styles end up as Family parts (for classic grouping of four) # Others also end up in Typographic Family ('before the dash') - weights = ( - [ - m + s - for s in list(FontnameTools.known_weights2) - + list(FontnameTools.known_widths) - for m in list(FontnameTools.known_modifiers) + [""] - if m != s - ] - + list(FontnameTools.known_weights1) - + list(FontnameTools.known_slopes) - ) - styles = [ - "Bold", - "Italic", - "Regular", - "Normal", - ] - weights = [w for w in weights if w not in styles] + weights = [ m + s + for s in list(FontnameTools.known_weights2) + list(FontnameTools.known_widths) + for m in list(FontnameTools.known_modifiers) + [''] if m != s + ] + list(FontnameTools.known_weights1) + list(FontnameTools.known_slopes) + styles = [ 'Bold', 'Italic', 'Regular', 'Normal', ] + weights = [ w for w in weights if w not in styles ] # Some font specialities: other = [ - "-", - "Book", - "For", - "Powerline", - "Text", # Plex - "IIx", # Profont IIx - "LGC", # Inconsolata LGC - r"\bCE\b", # ProggycleanTT CE - r"[12][cmp]n?", # MPlus - r"(?:uni-)?1[14]", # GohuFont uni + '-', 'Book', 'For', 'Powerline', + 'Text', # Plex + 'IIx', # Profont IIx + 'LGC', # Inconsolata LGC + r'\bCE\b', # ProggycleanTT CE + r'[12][cmp]n?', # MPlus + r'(?:uni-)?1[14]', # GohuFont uni ] # Sometimes used abbreviations - weight_abbrevs = [ - "ob", - "c", - "m", - "l", - ] - style_abbrevs = [ - "it", - "r", - "b", - "i", - ] + weight_abbrevs = [ 'ob', 'c', 'm', 'l', ] + style_abbrevs = [ 'it', 'r', 'b', 'i', ] - (style, weight_token) = FontnameTools.get_name_token(style, weights) - (style, style_token) = FontnameTools.get_name_token(style, styles) - (style, other_token) = FontnameTools.get_name_token(style, other, True) - if ( - len(style) < 4 and style.lower() != "pro" - ): # Prevent 'r' of Pro to be detected as style_abbrev - (style, weight_token_abbrevs) = FontnameTools.get_name_token( - style, weight_abbrevs - ) - (style, style_token_abbrevs) = FontnameTools.get_name_token( - style, style_abbrevs - ) + ( style, weight_token ) = FontnameTools.get_name_token(style, weights) + ( style, style_token ) = FontnameTools.get_name_token(style, styles) + ( style, other_token ) = FontnameTools.get_name_token(style, other, True) + if (len(style) < 4 + and style.lower() != 'pro'): # Prevent 'r' of Pro to be detected as style_abbrev + ( style, weight_token_abbrevs ) = FontnameTools.get_name_token(style, weight_abbrevs) + ( style, style_token_abbrevs ) = FontnameTools.get_name_token(style, style_abbrevs) weight_token += weight_token_abbrevs style_token += style_token_abbrevs - while "Regular" in style_token and len(style_token) > 1: + while 'Regular' in style_token and len(style_token) > 1: # Correct situation where "Regular" and something else is given - style_token.remove("Regular") + style_token.remove('Regular') # Recurse to see if unmatched stuff between dashes can belong to familyname - matches2 = re.match(r"(\w+)-(.*)", style) + matches2 = re.match(r'(\w+)-(.*)', style) if matches2: - return FontnameTools.parse_font_name( - familyname + matches2.group(1) + "-" + matches2.group(2) - ) + return FontnameTools.parse_font_name(familyname + matches2.group(1) + '-' + matches2.group(2)) - style = re.sub( - r"(^|\s)\d+(\.\d+)+(\s|$)", r"\1\3", style - ) # Remove (free standing) version numbers - style_parts = FontnameTools.drop_empty(style.split(" ")) - style = " ".join(map(FontnameTools.front_upper, style_parts)) + style = re.sub(r'(^|\s)\d+(\.\d+)+(\s|$)', r'\1\3', style) # Remove (free standing) version numbers + style_parts = FontnameTools.drop_empty(style.split(' ')) + style = ' '.join(map(FontnameTools.front_upper, style_parts)) familyname = FontnameTools.camel_explode(familyname) return (True, familyname, weight_token, style_token, other_token, style) diff --git a/font-patcher b/font-patcher index 55639be..ede9298 100755 --- a/font-patcher +++ b/font-patcher @@ -1,14 +1,14 @@ #!/usr/bin/env python # coding=utf8 -# Nerd Fonts Version: 3.0.0 +# Nerd Fonts Version: 3.0.1 # Script version is further down from __future__ import absolute_import, print_function, unicode_literals # Change the script version when you edit this script: -script_version = "4.1.2" +script_version = "4.3.1" -version = "3.0.0" +version = "3.0.1" projectName = "Nerd Fonts" projectNameAbbreviation = "NF" projectNameSingular = projectName[:-1] @@ -324,7 +324,7 @@ class font_patcher: self.font_dim = None # class 'dict' self.font_extrawide = False self.source_monospaced = None # Later True or False - self.symbolsonly = False + self.symbolsonly = False # Are we generating the SymbolsOnly font? self.onlybitmaps = 0 self.essential = set() self.config = configparser.ConfigParser(empty_lines_in_values=False, allow_no_value=True) @@ -337,8 +337,8 @@ class font_patcher: self.setup_name_backup(font) self.assert_monospace() self.remove_ligatures() - self.setup_patch_set() self.get_sourcefont_dimensions() + self.setup_patch_set() self.improve_line_dimensions() self.sourceFont.encoding = 'UnicodeFull' # Update the font encoding to ensure that the Unicode glyphs are available self.onlybitmaps = self.sourceFont.onlybitmaps # Fetch this property before adding outlines. NOTE self.onlybitmaps initialized and never used @@ -373,15 +373,16 @@ class font_patcher: if symfont: symfont.close() symfont = None - if not os.path.isfile(self.args.glyphdir + patch['Filename']): + symfont_file = os.path.join(self.args.glyphdir, patch['Filename']) + if not os.path.isfile(symfont_file): logger.critical("Can not find symbol source for '%s' (i.e. %s)", - patch['Name'], self.args.glyphdir + patch['Filename']) + patch['Name'], symfont_file) sys.exit(1) - if not os.access(self.args.glyphdir + patch['Filename'], os.R_OK): + if not os.access(symfont_file, os.R_OK): logger.critical("Can not open symbol source for '%s' (i.e. %s)", - patch['Name'], self.args.glyphdir + patch['Filename']) + patch['Name'], symfont_file) sys.exit(1) - symfont = fontforge.open(os.path.join(self.args.glyphdir, patch['Filename'])) + symfont = fontforge.open(symfont_file) symfont.encoding = 'UnicodeFull' # Match the symbol font size to the source font size @@ -434,10 +435,10 @@ class font_patcher: sanitize_filename(fontname) + self.args.extension)) bitmaps = str() if len(self.sourceFont.bitmapSizes): - logger.debug("Preserving bitmaps {}".format(self.sourceFont.bitmapSizes)) + logger.debug("Preserving bitmaps %s", repr(self.sourceFont.bitmapSizes)) bitmaps = str('otf') # otf/ttf, both is bf_ttf if self.args.dry_run: - logger.debug("=====> Filename '{}'".format(outfile)) + logger.debug("=====> Filename '%s'", outfile) return sourceFont.generate(outfile, bitmap_type=bitmaps, flags=gen_flags) message = " {}\n \===> '{}'".format(self.sourceFont.fullname, outfile) @@ -784,7 +785,7 @@ class font_patcher: def setup_patch_set(self): """ Creates list of dicts to with instructions on copying glyphs from each symbol font into self.sourceFont """ - box_enabled = self.source_monospaced # Box glyph only for monospaced + box_enabled = self.source_monospaced and not self.symbolsonly # Box glyph only for monospaced and not for Symbols Only box_keep = False if box_enabled: self.sourceFont.selection.select(("ranges",), 0x2500, 0x259f) @@ -802,7 +803,7 @@ class font_patcher: box_enabled = False # Cowardly not scaling existing glyphs, although the code would allow this # Stretch 'xz' or 'pa' (preserve aspect ratio) - # Supported params: overlap | careful | xy-ratio | dont_copy + # Supported params: overlap | careful | xy-ratio | dont_copy | ypadding # Overlap value is used horizontally but vertically limited to 0.01 # Careful does not overwrite/modify existing glyphs # The xy-ratio limits the x-scale for a given y-scale to make the ratio <= this value (to prevent over-wide glyphs) @@ -810,6 +811,8 @@ class font_patcher: # '2' means occupy 2 cells (default for 'pa') # '!' means do the 'pa' scaling even with non mono fonts (else it just scales down, never up) # Dont_copy does not overwrite existing glyphs but rescales the preexisting ones + # + # Be careful, stretch may not change within a ScaleRule! SYM_ATTR_DEFAULT = { 'default': {'align': 'c', 'valign': 'c', 'stretch': 'pa', 'params': {}} @@ -886,7 +889,7 @@ class font_patcher: 0xf0de: {'align': 'c', 'valign': '', 'stretch': 'pa', 'params': {}} } SYM_ATTR_HEAVYBRACKETS = { - 'default': {'align': 'c', 'valign': 'c', 'stretch': 'pa', 'params': {'careful': True}} + 'default': {'align': 'c', 'valign': 'c', 'stretch': 'pa1!', 'params': {'ypadding': 0.3, 'careful': True}} } SYM_ATTR_BOX = { 'default': {'align': 'c', 'valign': 'c', 'stretch': 'xy', 'params': {'overlap': 0.02, 'dont_copy': box_keep}}, @@ -896,8 +899,9 @@ class font_patcher: # 0x2593: {'align': 'c', 'valign': 'c', 'stretch': 'xy', 'params': {'dont_copy': box_keep}}, } CUSTOM_ATTR = { - # 'pa' == preserve aspect ratio - 'default': {'align': 'c', 'valign': '', 'stretch': '', 'params': {}} + # previous custom scaling => do not touch the icons + # 'default': {'align': 'c', 'valign': '', 'stretch': '', 'params': {}} + 'default': {'align': 'c', 'valign': 'c', 'stretch': 'pa', 'params': {'careful': self.args.careful}} } # Most glyphs we want to maximize (individually) during the scale @@ -956,6 +960,9 @@ class font_patcher: range(0xeab4, 0xeab7 + 1), # chevrons [0xea71, *range(0xeaa6, 0xeaab + 1), 0xeabc, 0xeb18, 0xeb87, 0xeb88, 0xeb8a, 0xeb8c, 0xebb4], # cicles [0xeacc, 0xeaba], # dash + [0xea75, 0xebe7], # lock pair + [0xeacf, 0xebe0], # debug-continue pair + [0xeb91, 0xeba8], # debug-alt pair ]} DEVI_SCALE_LIST = {'ScaleGlyph': 0xE60E, # Android logo 'GlyphsToScale': [ @@ -982,14 +989,21 @@ class font_patcher: range(0xf221, 0xf22d + 1), # gender or so range(0xf255, 0xf25b + 1), # hand symbols ]} - OCTI_SCALE_LIST = {'ScaleGlyph': 0xF02E, # looking glass (probably biggest glyph?) + HEAVY_SCALE_LIST = {'ScaleGlyph': 0x2771, # widest bracket, horizontally 'GlyphsToScale': [ - (0xf03d, 0xf040), # arrows - 0xf044, 0xf05a, 0xf05b, 0xf0aa, # triangles - (0xf051, 0xf053), # small stuff - 0xf071, 0xf09f, 0xf0a0, 0xf0a1, # small arrows - 0xf078, 0xf0a2, 0xf0a3, 0xf0a4, # chevrons - 0xf0ca, # dash + (0x276c, 0x2771) # all + ]} + OCTI_SCALE_LIST = {'ScaleGroups': [ + [*range(0xf03d, 0xf040 + 1), 0xf019, 0xf030, 0xf04a, 0xf050, 0xf071, 0xf08c ], # arrows + [0xF0E7, # Smily and ... + 0xf044, 0xf05a, 0xf05b, 0xf0aa, # triangles + 0xf052, 0xf053, 0x296, 0xf2f0, # small stuff + 0xf078, 0xf0a2, 0xf0a3, 0xf0a4, # chevrons + 0xf0ca, 0xf081, 0xf092, # dash, X, github-text + ], + [0xf09c, 0xf09f, 0xf0de], # bells + range(0xf2c2, 0xf2c5 + 1), # move to + [0xf07b, 0xf0a1, 0xf0d6, 0xf306], # bookmarks ]} WEATH_SCALE_LIST = {'ScaleGroups': [ [0xf03c, 0xf042, 0xf045 ], # degree signs @@ -1016,7 +1030,7 @@ class font_patcher: # Symbol font ranges self.patch_set = [ {'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': None, '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': True, 'Name': "Devicons", 'Filename': "devicons.ttf", 'Exact': False, 'SymStart': 0xE600, 'SymEnd': 0xE6C5, '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}, @@ -1038,7 +1052,7 @@ class font_patcher: {'Enabled': self.args.octicons, 'Name': "Octicons", 'Filename': "octicons/octicons.ttf", 'Exact': False, 'SymStart': 0xF000, 'SymEnd': 0xF105, 'SrcStart': 0xF400, 'ScaleRules': OCTI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT}, # Magnifying glass {'Enabled': self.args.octicons, 'Name': "Octicons", 'Filename': "octicons/octicons.ttf", 'Exact': True, 'SymStart': 0x2665, 'SymEnd': 0x2665, 'SrcStart': None, 'ScaleRules': OCTI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT}, # Heart {'Enabled': self.args.octicons, 'Name': "Octicons", 'Filename': "octicons/octicons.ttf", 'Exact': True, 'SymStart': 0X26A1, 'SymEnd': 0X26A1, 'SrcStart': None, 'ScaleRules': OCTI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT}, # Zap - {'Enabled': self.args.octicons, 'Name': "Octicons", 'Filename': "octicons/octicons.ttf", 'Exact': False, 'SymStart': 0xF27C, 'SymEnd': 0xF305, 'SrcStart': 0xF4A9, 'ScaleRules': OCTI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT}, + {'Enabled': self.args.octicons, 'Name': "Octicons", 'Filename': "octicons/octicons.ttf", 'Exact': False, 'SymStart': 0xF27C, 'SymEnd': 0xF306, 'SrcStart': 0xF4A9, 'ScaleRules': OCTI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT}, {'Enabled': self.args.codicons, 'Name': "Codicons", 'Filename': "codicons/codicon.ttf", 'Exact': True, 'SymStart': 0xEA60, 'SymEnd': 0xEBEB, 'SrcStart': None, 'ScaleRules': CODI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT}, {'Enabled': self.args.custom, 'Name': "Custom", 'Filename': self.args.custom, 'Exact': True, 'SymStart': 0x0000, 'SymEnd': 0x0000, 'SrcStart': None, 'ScaleRules': None, 'Attributes': CUSTOM_ATTR} ] @@ -1081,10 +1095,11 @@ class font_patcher: # Sometimes basic glyphs are constructed from multiple other glyphs. # Find out which other glyphs are also needed to keep the basic # glyphs intact. - # 0x00-0x17f is the Latin Extended-A range + # 0x0000-0x017f is the Latin Extended-A range + # 0xfb00-0xfb06 are 'fi' and other ligatures basic_glyphs = set() # Collect substitution destinations - for glyph in range(0x21, 0x17f + 1): + for glyph in [*range(0x21, 0x17f + 1), *range(0xfb00, 0xfb06 + 1)]: if not glyph in self.sourceFont: continue basic_glyphs.add(glyph) @@ -1120,8 +1135,8 @@ class font_patcher: # Try the other metric our_btb = typo_btb if not use_typo else win_btb if our_btb == hhea_btb: - logger.warning("Font vertical metrics probably wrong USE TYPO METRICS, assume opposite (i.e. %s)", 'True' if not use_typo else 'False') use_typo = not use_typo + logger.warning("Font vertical metrics probably wrong USE TYPO METRICS, assume opposite (i.e. %s)", repr(use_typo)) self.sourceFont.os2_use_typo_metrics = 1 if use_typo else 0 metrics = Metric.TYPO if use_typo else Metric.WIN else: @@ -1132,7 +1147,7 @@ class font_patcher: # print("FINI hhea {} typo {} win {} use {} {} {}".format(hhea_btb, typo_btb, win_btb, use_typo, our_btb != hhea_btb, self.sourceFont.fontname)) - self.font_dim = {'xmin': 0, 'ymin': 0, 'xmax': 0, 'ymax': 0, 'width' : 0, 'height': 0} + self.font_dim = {'xmin': 0, 'ymin': 0, 'xmax': 0, 'ymax': 0, 'width' : 0, 'height': 0, 'ypadding': 0} if metrics == Metric.HHEA: self.font_dim['ymin'] = self.sourceFont.hhea_descent - half_gap(self.sourceFont.hhea_linegap, False) @@ -1240,7 +1255,7 @@ class font_patcher: # 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') - target_height = self.font_dim['height'] + target_height = self.font_dim['height'] * (1.0 - self.font_dim['ypadding']) scale_ratio_y = target_height / sym_dim['height'] if 'pa' in stretch: @@ -1324,6 +1339,9 @@ class font_patcher: # if currentSourceFontGlyph != 0xe7bd: # continue + ypadding = sym_attr['params'].get('ypadding') + self.font_dim['ypadding'] = ypadding or 0.0 + if not self.args.quiet: if self.args.progressbars: update_progress(round(float(index + 1) / glyphSetLength, 2)) @@ -1333,7 +1351,8 @@ class font_patcher: sys.stdout.flush() # check if a glyph already exists in this location - if careful or 'careful' in sym_attr['params'] or currentSourceFontGlyph in self.essential: + do_careful = sym_attr['params'].get('careful', careful) # params take precedence + if do_careful or currentSourceFontGlyph in self.essential: if currentSourceFontGlyph in self.sourceFont: careful_type = 'essential' if currentSourceFontGlyph in self.essential else 'existing' logger.debug("Found %s Glyph at %X. Skipping...", careful_type, currentSourceFontGlyph) @@ -1345,14 +1364,15 @@ class font_patcher: if currentSourceFontGlyph in self.sourceFont: self.sourceFont[currentSourceFontGlyph].removePosSub("*") + stretch = sym_attr['stretch'] dont_copy = sym_attr['params'].get('dont_copy') if dont_copy: # Just prepare scaling of existing glyphs - glyph_scale_data = self.get_glyph_scale(sym_glyph.encoding, scaleRules, self.sourceFont, currentSourceFontGlyph) if scaleRules is not None else None + glyph_scale_data = self.get_glyph_scale(sym_glyph.encoding, scaleRules, stretch, self.sourceFont, currentSourceFontGlyph) if scaleRules is not None else None else: # This will destroy any content currently in currentSourceFontGlyph, so do it first - glyph_scale_data = self.get_glyph_scale(sym_glyph.encoding, scaleRules, symbolFont, currentSourceFontGlyph) if scaleRules is not None else None + glyph_scale_data = self.get_glyph_scale(sym_glyph.encoding, scaleRules, stretch, symbolFont, currentSourceFontGlyph) if scaleRules is not None else None # Select and copy symbol from its encoding point # We need to do this select after the careful check, this way we don't @@ -1371,15 +1391,18 @@ class font_patcher: if glyph_scale_data is not None: if glyph_scale_data[1] is not None: sym_dim = glyph_scale_data[1] # Use combined bounding box - (scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, sym_attr['stretch']) + (scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, stretch) else: # This is roughly alike get_scale_factors(glyph_scale_data[1], 'pa') # Except we do not have glyph_scale_data[1] always... (scale_ratio_x, scale_ratio_y) = (glyph_scale_data[0], glyph_scale_data[0]) else: - (scale_ratio_x, scale_ratio_y) = self.get_scale_factors(sym_dim, sym_attr['stretch']) + (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 @@ -1429,7 +1452,7 @@ class font_patcher: x_align_distance += (self.font_dim['width'] / 2) - (sym_dim['width'] / 2) elif sym_attr['align'] == 'r': # Right align - x_align_distance += self.font_dim['width'] * self.get_target_width(sym_attr['stretch']) - sym_dim['width'] + x_align_distance += self.font_dim['width'] * self.get_target_width(stretch) - sym_dim['width'] # 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) @@ -1442,7 +1465,7 @@ class font_patcher: x_align_distance -= overlap_width / 2 elif sym_attr['align'] == 'r': # 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(sym_attr['stretch']) + target_xmax = (self.font_dim['xmin'] + self.font_dim['width']) * self.get_target_width(stretch) target_xmax += overlap_width glyph_xmax = sym_dim['xmax'] + x_align_distance correction = target_xmax - glyph_xmax @@ -1484,8 +1507,8 @@ class font_patcher: if self.args.single: (xmin, _, xmax, _) = self.sourceFont[currentSourceFontGlyph].boundingBox() if int(xmax - xmin) > self.font_dim['width'] * (1 + (overlap or 0)): - logger.warning("Scaled glyph %X wider than one monospace width (%d / %d (overlap %f))", - currentSourceFontGlyph, int(xmax - xmin), self.font_dim['width'], overlap) + logger.warning("Scaled glyph %X wider than one monospace width (%d / %d (overlap %s))", + currentSourceFontGlyph, int(xmax - xmin), self.font_dim['width'], repr(overlap)) # end for @@ -1538,7 +1561,7 @@ class font_patcher: except: pass - def prepareScaleRules(self, scaleRules, symbolFont, destGlyph): + def prepareScaleRules(self, scaleRules, stretch, symbolFont, destGlyph): """ Prepare raw ScaleRules data for use """ # The scaleRules is/will be a dict with these (possible) entries: # 'ScaleGroups': List of ((lists of glyph codes) or (ranges of glyph codes)) that shall be scaled @@ -1572,7 +1595,7 @@ class font_patcher: 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) - scale = self.get_scale_factors(sym_dim, 'pa')[0] + scale = self.get_scale_factors(sym_dim, stretch)[0] scaleRules['scales'].append(scale) scaleRules['bbdims'].append(sym_dim) @@ -1591,7 +1614,7 @@ class font_patcher: else: group_list.append(i) sym_dim = get_glyph_dimensions(symbolFont[scaleRules['ScaleGlyph']]) - scale = self.get_scale_factors(sym_dim, 'pa')[0] + scale = self.get_scale_factors(sym_dim, stretch)[0] scaleRules['ScaleGroups'].append(group_list) scaleRules['scales'].append(scale) if plus: @@ -1599,13 +1622,13 @@ class font_patcher: else: scaleRules['bbdims'].append(None) # The 'old' style keeps just the scale, not the positioning - def get_glyph_scale(self, symbol_unicode, scaleRules, symbolFont, dest_unicode): + def get_glyph_scale(self, symbol_unicode, scaleRules, stretch, symbolFont, dest_unicode): """ Determines whether or not to use scaled glyphs for glyph in passed symbol_unicode """ # Potentially destorys the contents of self.sourceFont[dest_unicode] if not 'scales' in scaleRules: if not dest_unicode in self.sourceFont: self.sourceFont.createChar(dest_unicode) - self.prepareScaleRules(scaleRules, symbolFont, self.sourceFont[dest_unicode]) + self.prepareScaleRules(scaleRules, stretch, symbolFont, self.sourceFont[dest_unicode]) for glyph_list, scale, box in zip(scaleRules['ScaleGroups'], scaleRules['scales'], scaleRules['bbdims']): for e in glyph_list: if isinstance(e, range): @@ -1805,7 +1828,7 @@ def setup_arguments(): parser.add_argument('--removeligs', '--removeligatures', dest='removeligatures', default=False, action='store_true', help='Removes ligatures specificed in JSON configuration file') parser.add_argument('--postprocess', dest='postprocess', default=False, type=str, nargs='?', help='Specify a Script for Post Processing') parser.add_argument('--configfile', dest='configfile', default=False, type=str, nargs='?', help='Specify a file path for JSON configuration file (see sample: src/config.sample.json)') - parser.add_argument('--custom', dest='custom', default=False, type=str, nargs='?', help='Specify a custom symbol font. All new glyphs will be copied, with no scaling applied.') + parser.add_argument('--custom', dest='custom', default=False, type=str, nargs='?', help='Specify a custom symbol font, all glyphs will be copied; absolute path suggested') parser.add_argument('-ext', '--extension', dest='extension', default="", type=str, nargs='?', help='Change font file type to create (e.g., ttf, otf)') parser.add_argument('-out', '--outputdir', dest='outputdir', default=".", type=str, nargs='?', help='The directory to output the patched font file to') parser.add_argument('--glyphdir', dest='glyphdir', default=__dir__ + "/src/glyphs/", type=str, nargs='?', help='Path to glyphs to be used for patching') @@ -1829,7 +1852,7 @@ def setup_arguments(): progressbars_group_parser.add_argument('--progressbars', dest='progressbars', action='store_true', help='Show percentage completion progress bars per Glyph Set (default)') progressbars_group_parser.add_argument('--no-progressbars', dest='progressbars', action='store_false', help='Don\'t show percentage completion progress bars per Glyph Set') parser.set_defaults(progressbars=True) - parser.add_argument('--debug', dest='debugmode', default=False, action='store_true', help='Verbose mode') + parser.add_argument('--debug', dest='debugmode', default=0, type=int, nargs='?', help='Verbose mode (optional: 1=just to file; 2*=just to terminal; 3=display and file)', const=2, choices=range(0, 3 + 1)) parser.add_argument('--dry', dest='dry_run', default=False, action='store_true', help='Do neither patch nor store the font, to check naming') parser.add_argument('--xavgcharwidth', dest='xavgwidth', default=None, type=int, nargs='?', help='Adjust xAvgCharWidth (optional: concrete value)', const=True) # --xavgcharwidth for compatibility with old applications like notepad and non-latin fonts @@ -1952,16 +1975,23 @@ def main(): global logger logger = logging.getLogger(os.path.basename(args.font)) logger.setLevel(logging.DEBUG) - f_handler = logging.FileHandler('font-patcher-log.txt') - f_handler.setFormatter(logging.Formatter('%(levelname)s: %(name)s %(message)s')) - logger.addHandler(f_handler) - logger.debug(allversions) - logger.debug("Options %s", repr(sys.argv[1:])) + log_to_file = (args.debugmode & 1 == 1) + if log_to_file: + try: + f_handler = logging.FileHandler('font-patcher-log.txt') + f_handler.setFormatter(logging.Formatter('%(levelname)s: %(name)s %(message)s')) + logger.addHandler(f_handler) + except: + log_to_file = False + logger.debug(allversions) + logger.debug("Options %s", repr(sys.argv[1:])) c_handler = logging.StreamHandler(stream=sys.stdout) c_handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) - if not args.debugmode: + if not (args.debugmode & 2 == 2): c_handler.setLevel(logging.INFO) logger.addHandler(c_handler) + if (args.debugmode & 1 == 1) and not log_to_file: + logger.info("Can not write logfile, disabling") logger.debug("Naming mode %d", args.makegroups) patcher = font_patcher(args) diff --git a/src/glyphs/codicons/LICENSE.txt b/src/glyphs/codicons/LICENSE.txt index 964cba1..085c3ca 100644 --- a/src/glyphs/codicons/LICENSE.txt +++ b/src/glyphs/codicons/LICENSE.txt @@ -49,7 +49,7 @@ exhaustive, and do not form part of our licenses. such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations - for the public: + for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= @@ -392,4 +392,4 @@ understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. -Creative Commons may be contacted at creativecommons.org. +Creative Commons may be contacted at creativecommons.org. \ No newline at end of file diff --git a/src/glyphs/octicons/analyze_octicons b/src/glyphs/octicons/analyze_octicons index a273b9e..35fa961 100755 --- a/src/glyphs/octicons/analyze_octicons +++ b/src/glyphs/octicons/analyze_octicons @@ -14,10 +14,10 @@ import fontforge octi_orig = "octicons.ttf" current_cp = 0xF400 -print("# Examining {}".format(octi_orig)) +print('# Examining {}'.format(octi_orig)) font = fontforge.open(octi_orig) -for glyph in font.glyphs("encoding"): +for glyph in font.glyphs('encoding'): point = glyph.unicode if point < 0: continue diff --git a/src/glyphs/octicons/file-symlink-directory-16.svg b/src/glyphs/octicons/file-symlink-directory-16.svg new file mode 100644 index 0000000..af5dbe1 --- /dev/null +++ b/src/glyphs/octicons/file-symlink-directory-16.svg @@ -0,0 +1 @@ + diff --git a/src/glyphs/octicons/file-symlink-directory-24.svg b/src/glyphs/octicons/file-symlink-directory-24.svg new file mode 100644 index 0000000..cb48984 --- /dev/null +++ b/src/glyphs/octicons/file-symlink-directory-24.svg @@ -0,0 +1 @@ + diff --git a/src/glyphs/octicons/generate b/src/glyphs/octicons/generate index 29af0e6..31970b1 100755 --- a/src/glyphs/octicons/generate +++ b/src/glyphs/octicons/generate @@ -8,95 +8,81 @@ import subprocess import fontforge # Double-quotes required here, for version-bump.sh: -version = "2.3.3" +# version-bump.sh is not working here, need to adjust manually! +version = "3.0.0" -archive = "v18.3.0.tar.gz" +archive = 'v18.3.0.tar.gz' -vectorsdir = "icons" -fontdir = "." -fontfile = "octicons.ttf" -glyphsetfile = "i_oct.sh" -glyphsetsdir = "../../../bin/scripts/lib" - -subset = "-16" # use 16 px subset if possible -subset_other = "-24" # use 24 px subset otherwise +vectorsdir = 'icons' +fontdir = '.' +fontfile = 'octicons.ttf' +glyphsetfile = 'i_oct.sh' +glyphsetsdir = '../../../bin/scripts/lib' +subset = '-16' # use 16 px subset if possible +subset_other = '-24' # use 24 px subset otherwise def renamer(old_name): - """Return new equivalent icon name""" + """ Return new equivalent icon name """ return { - "trashcan": "trash", - "cloud-download": "download", - "cloud-upload": "upload", - "clippy": "paste", - "mail-read": "read", - "primitive-dot": "dot-fill", - "primitive-square": "square-fill", - "settings": "sliders", - "dashboard": "meter", - "paintcan": "paintbrush", - }.get(old_name, old_name) - + 'trashcan' : 'trash', + 'cloud-download' : 'download', + 'cloud-upload' : 'upload', + 'clippy' : 'paste', + 'mail-read' : 'read', + 'primitive-dot' : 'dot-fill', + 'primitive-square' : 'square-fill', + 'settings' : 'sliders', + 'dashboard' : 'meter', + 'paintcan' : 'paintbrush', + }.get(old_name, old_name) def addIcon(codepoint, name, filename): - """Add one outline file and rescale/move""" - dBB = [120, 0, 1000 - 120, 900] # just some nice sizes + """ Add one outline file and rescale/move """ + dBB = [120, 0, 1000-120, 900] # just some nice sizes filename = os.path.join(vectorsdir, filename) glyph = font.createChar(codepoint, name) glyph.importOutlines(filename) glyph.manualHints = True - def createGlyphInfo(icon_datasets, filepathname, into): - """Write the glyphinfo file""" - with open(filepathname, "w", encoding="utf8") as f: - f.write("#!/usr/bin/env bash\n") + """ 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("# Script Version: (autogenerated)\n") - f.write('test -n "$__i_oct_loaded" && return || __i_oct_loaded=1\n') + f.write(u'# Script Version: (autogenerated)\n') + f.write(u'test -n "$__i_oct_loaded" && return || __i_oct_loaded=1\n') for _, codepoint, name in icon_datasets: codepoint = int(codepoint, 16) - f.write( - "i='{}' i_oct_{}=$i\n".format(chr(codepoint), name.replace("-", "_")) - ) - f.write("unset i\n") + f.write(u"i='{}' i_oct_{}=$i\n".format(chr(codepoint), name.replace('-', '_'))) + f.write(u'unset i\n') - -print("\nReading mapping file") +print('\nReading mapping file') old_mapping = [] -with open("mapping", "r") as f: +with open('mapping', 'r') as f: for line in f.readlines(): - if line.startswith("#"): + if line.startswith('#'): continue - old_mapping.append(tuple(re.split(" +", line.strip()))) -print("Found {} entries".format(len(old_mapping))) + old_mapping.append(tuple(re.split(' +', line.strip()))) +print('Found {} entries'.format(len(old_mapping))) old_mapping.sort(key=(lambda x: x[0])) print('Fetching octicons archive "{}"\n'.format(archive)) -if subprocess.call( - "curl -OL https://github.com/primer/octicons/archive/" + archive, shell=True -): - sys.exit("Error fetching octicons archive") -print("\nUnpacking octicons archive") -if subprocess.call( - "rm -rf icons octicons-* && tar zxf *.gz && mv octicons-*/icons . && rm -rf octicons-*", - shell=True, -): - sys.exit("Error unpacking archive") +if subprocess.call('curl -OL https://github.com/primer/octicons/archive/' + archive, shell=True): + sys.exit('Error fetching octicons archive') +print('\nUnpacking octicons archive') +if subprocess.call('rm -rf icons octicons-* && tar zxf *.gz && mv octicons-*/icons . && rm -rf octicons-* && cp file-symlink-directory-*.svg icons', shell=True): + sys.exit('Error unpacking archive') svgs = os.listdir(vectorsdir) -print("Found {} svgs".format(len(svgs))) -names = { - s[0 : -len("-xx.svg")] - for s in svgs - if s.endswith(subset + ".svg") or s.endswith(subset_other + ".svg") -} -print("Found {} icons after de-duplicating\n".format(len(names))) +print('Found {} svgs'.format(len(svgs))) +names = { s[0:-len('-xx.svg')] for s in svgs if s.endswith(subset + '.svg') or s.endswith(subset_other + '.svg') } +print('Found {} icons after de-duplicating\n'.format(len(names))) num_found = 0 num_missing = 0 -misslist = "" -renamelist = "" +misslist = '' +renamelist = '' freeslots = [] new_mapping = [] @@ -108,22 +94,18 @@ for i, j, old_n in old_mapping: continue new_n = renamer(old_n) if new_n in names: - renamelist += "Renamed {} -> {}\n".format(old_n, new_n) + renamelist += 'Renamed {} -> {}\n'.format(old_n, new_n) names.remove(new_n) new_mapping.append((i, j, new_n)) num_found += 1 continue - misslist += "Missing {}\n".format(old_n) + misslist += 'Missing {}\n'.format(old_n) freeslots.append((i, j)) num_missing += 1 print(renamelist) print(misslist) -print( - "Found {} (of {}, missing {}) and new {}".format( - num_found, len(old_mapping), num_missing, len(names) - ) -) +print('Found {} (of {}, missing {}) and new {}'.format(num_found, len(old_mapping), num_missing, len(names))) names = list(names) names.sort() @@ -135,7 +117,7 @@ for n in list(names): names.remove(n) freeslots = freeslots[1:] -print("Filled in missing, remaining new {}".format(len(names))) +print('Filled in missing, remaining new {}'.format(len(names))) i_max = 0 j_max = 0 @@ -150,52 +132,50 @@ for i, j, _ in new_mapping: for n in names: i_max += 1 j_max += 1 - new_mapping.append(("{:X}".format(i_max), "{:X}".format(j_max), n)) + new_mapping.append(('{:X}'.format(i_max), '{:X}'.format(j_max), n)) -print("Appended remaining new, total new mapping {}".format(len(new_mapping))) +print('Appended remaining new, total new mapping {}'.format(len(new_mapping))) new_mapping.sort(key=(lambda x: x[0])) -with open("mapping", "w") as f: +with open('mapping', 'w') as f: for i, j, n in new_mapping: - f.write("{} {} {}\n".format(i, j, n)) + f.write('{} {} {}\n'.format(i, j, n)) font = fontforge.font() -font.fontname = "OcticonsNerdFont-Regular" -font.fullname = "Octicons Nerd Font Regular" -font.familyname = "Octicons Nerd Font" +font.fontname = 'OcticonsNerdFont-Regular' +font.fullname = 'Octicons Nerd Font Regular' +font.familyname = 'Octicons Nerd Font' font.em = 2048 -font.encoding = "UnicodeFull" +font.encoding = 'UnicodeFull' # Add valid space glyph to avoid "unknown character" box on IE11 glyph = font.createChar(32) glyph.width = 200 -font.sfntRevision = None # Auto-set (refreshed) by fontforge +font.sfntRevision = None # Auto-set (refreshed) by fontforge font.version = version -font.copyright = "GitHub Inc." -font.appendSFNTName("English (US)", "Version", archive + "; " + version) -font.appendSFNTName( - "English (US)", "Vendor URL", "https://github.com/ryanoasis/nerd-fonts" -) -font.appendSFNTName("English (US)", "Copyright", "GitHub Inc.") +font.copyright = 'GitHub Inc.' +font.appendSFNTName('English (US)', 'Version', archive + '; ' + version) +font.appendSFNTName('English (US)', 'Vendor URL', 'https://github.com/ryanoasis/nerd-fonts') +font.appendSFNTName('English (US)', 'Copyright', 'GitHub Inc.') for codepoint, _, name in new_mapping: codepoint = int(codepoint, 16) - filename = name + subset + ".svg" + filename = name + subset + '.svg' if filename not in svgs: - filename = name + subset_other + ".svg" + filename = name + subset_other + '.svg' addIcon(codepoint, name, filename) num_icons = len(new_mapping) -print("Generating {} with {} glyphs".format(fontfile, num_icons)) +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 new_mapping] -intro = "# Octicons ({} icons)\n".format(num_icons) -intro += "# Codepoints: {:X}-{:X} with gaps\n".format(min(codepoints), max(codepoints)) -intro += "# Nerd Fonts Version: {}\n".format(version) +codepoints = [ int(p, 16) for _, p, _ in new_mapping ] +intro = u'# Octicons ({} icons)\n'.format(num_icons) +intro += u'# Codepoints: {:X}-{:X} with gaps\n'.format(min(codepoints), max(codepoints)) +intro += u'# Nerd Fonts Version: {}\n'.format(version) -print("Generating GlyphInfo {}".format(glyphsetfile)) +print('Generating GlyphInfo {}'.format(glyphsetfile)) createGlyphInfo(new_mapping, os.path.join(glyphsetsdir, glyphsetfile), intro) -print("Finished") +print('Finished') diff --git a/src/glyphs/octicons/mapping b/src/glyphs/octicons/mapping index 880fca0..580becc 100644 --- a/src/glyphs/octicons/mapping +++ b/src/glyphs/octicons/mapping @@ -130,7 +130,7 @@ F0AA F47E triangle-up F0AC F47F git-compare F0AD F480 logo-gist F0B0 F481 file-symlink-file -F0B1 F482 bookmark-slash +F0B1 F482 file-symlink-directory F0B2 F483 squirrel F0B6 F484 globe F0BA F485 unmute @@ -307,3 +307,4 @@ F302 F52F x-circle F303 F530 x-circle-fill F304 F531 zoom-in F305 F532 zoom-out +F306 F533 bookmark-slash diff --git a/src/glyphs/octicons/octicons.ttf b/src/glyphs/octicons/octicons.ttf index f864314465d20e0fef1e59c76720d4be5a77e4ee..1ed38ae5220ada1b51fcceb4f60009367c4e84f0 100644 GIT binary patch delta 1265 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 Fk#+!;W*JiEx{&Mcpb5~ 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

}i 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

!%ym$$V;Eme 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 Ktt9F#8utdpT(yM& diff --git a/src/glyphs/powerline-symbols/LICENSE.txt b/src/glyphs/powerline-symbols/LICENSE.txt index 71c497a..23b2ab2 100644 --- a/src/glyphs/powerline-symbols/LICENSE.txt +++ b/src/glyphs/powerline-symbols/LICENSE.txt @@ -1,21 +1,21 @@ Copyright 2013 Kim Silkebækken and other contributors https://github.com/powerline/powerline -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/glyphs/weather-icons/OFL-FAQ.txt b/src/glyphs/weather-icons/OFL-FAQ.txt index 11f9028..e058b79 100644 --- a/src/glyphs/weather-icons/OFL-FAQ.txt +++ b/src/glyphs/weather-icons/OFL-FAQ.txt @@ -82,10 +82,10 @@ Consult the copyright statement(s) in the license for ways to contact the origin 1.19 What do you mean in condition 4 of the OFL's permissions and conditions? Can you provide examples of abusive promotion / endorsement / advertisement vs. normal acknowledgement? The intent is that the goodwill and reputation of the author(s) should not be used in a way that makes it sound like the original author(s) endorse or approve of a specific Modified Version or software bundle. For example, it would not be right to advertise a word processor by naming the author(s) in a listing of software features, or to promote a Modified Version on a web site by saying "designed by ...". However, it would be appropriate to acknowledge the author(s) if your software package has a list of people who deserve thanks. We realize that this can seem to be a grey area, but the standard used to judge an acknowledgement is that if the acknowledgement benefits the author(s) it is allowed, but if it primarily benefits other parties, or could reflect poorly on the author(s), then it is not. -1.20 I'm writing a small app for mobile platforms, do I need to include the whole package? +1.20 I'm writing a small app for mobile platforms, do I need to include the whole package? If you bundle a font under the OFL with your mobile app you must comply with the terms of the license. At a minimum you must include the copyright statement, the license notice and the license text. A mention of this information in your About box or Changelog, with a link to where the font package is from, is good practice, and the extra space needed to carry these items is very small. You do not, however, need to include the full contents of the font package - only the fonts you use and the copyright and license that apply to them. For example, if you only use the regular weight in your app, you do not need to include the italic and bold versions. -1.21 What about including OFL fonts by default in my firmware or dedicated operating system? +1.21 What about including OFL fonts by default in my firmware or dedicated operating system? Many such systems are restricted and turned into appliances so that users cannot study or modify them. Using open fonts to increase quality and language coverage is a great idea, but you need to be aware that if there is a way for users to extract fonts you cannot legally prevent them from doing that. The fonts themselves, including any changes you make to them, must be distributed under the OFL even if your firmware has a more restrictive license. If you do transform the fonts and change their formats when you include them in your firmware you must respect any names reserved by the font authors via the RFN mechanism and pick your own font name. Alternatively if you directly add a font under the OFL to the font folder of your firmware without modifying or optimizing it you are simply bundling the font like with any other software collection, and do not need to make any further changes. 1.22 Can I make and publish CMS themes or templates that use OFL fonts? Can I include the fonts themselves in the themes or templates? Can I sell the whole package? @@ -103,7 +103,7 @@ No. The terms of use of such services cannot replace or restrict the terms of th NOTE: This section often refers to a separate paper on 'Web Fonts & RFNs'. This is available at http://scripts.sil.org/OFL_web_fonts_and_RFNs 2.1 Can I make webpages using these fonts? -Yes! Go ahead! Using CSS (Cascading Style Sheets) is recommended. Your three best options are: +Yes! Go ahead! Using CSS (Cascading Style Sheets) is recommended. Your three best options are: - referring directly in your stylesheet to open fonts which may be available on the user's system - providing links to download the full package of the font - either from your own website or from elsewhere - so users can install it themselves - using @font-face to distribute the font directly to browsers. This is recommended and explicitly allowed by the licensing model because it is distribution. The font file itself is distributed with other components of the webpage. It is not embedded in the webpage but referenced through a web address which will cause the browser to retrieve and use the corresponding font to render the webpage (see 1.11 and 1.15 for details related to embedding fonts into documents). As you take advantage of the @font-face cross-platform standard, be aware that web fonts are often tuned for a web environment and not intended for installation and use outside a browser. The reasons in favour of using web fonts are to allow design of dynamic text elements instead of static graphics, to make it easier for content to be localized and translated, indexed and searched, and all this with cross-platform open standards without depending on restricted extensions or plugins. You should check the CSS cascade (the order in which fonts are being called or delivered to your users) when testing. @@ -119,12 +119,12 @@ If the original font data or metadata is changed, or the WOFF-specific metadata Please note that most WOFF conversion tools and online services do not meet the two requirements listed above, and so their output must be considered a Modified Version. So be very careful and check to be sure that the tool or service you're using is compressing unchanged data and completely and accurately reflecting the original font metadata. 2.3 What about other web font formats such as EOT/EOTLite/CWT/etc.? -In most cases these formats alter the original font data more than WOFF, and do not completely support appropriate metadata, so their use must be considered modification and RFNs may not be used. However, there may be certain formats or usage scenarios that may allow the use of RFNs. See http://scripts.sil.org/OFL_web_fonts_and_RFNs +In most cases these formats alter the original font data more than WOFF, and do not completely support appropriate metadata, so their use must be considered modification and RFNs may not be used. However, there may be certain formats or usage scenarios that may allow the use of RFNs. See http://scripts.sil.org/OFL_web_fonts_and_RFNs 2.4 Can I make OFL fonts available through web font online services? Yes, you are welcome to include OFL fonts in online web font services as long as you properly meet all the conditions of the license. The origin and open status of the font should be clear among the other fonts you are hosting. Authorship, copyright notices and license information must be sufficiently visible to your users or subscribers so they know where the font comes from and the rights granted by the author(s). Make sure the font file contains the needed copyright notice(s) and licensing information in its metadata. Please double-check the accuracy of every field to prevent contradictory information. Other font formats, including EOT/EOTLite/CWT and superior alternatives like WOFF, already provide fields for this information. Remember that if you modify the font within your library or convert it to another format for any reason the OFL restrictions apply and you need to change the names accordingly. Please respect the author's wishes as expressed in the OFL and do not misrepresent original designers and their work. Don't lump quality open fonts together with dubious freeware or public domain fonts. Consider how you can best work with the original designers and foundries, support their efforts and generate goodwill that will benefit your service. (See 1.17 for details related to URL-based access restrictions methods or DRM mechanisms). -2.5 Some web font formats and services provide ways of "optimizing" the font for a particular website or web application; is that allowed? +2.5 Some web font formats and services provide ways of "optimizing" the font for a particular website or web application; is that allowed? Yes, it is permitted, but remember that these optimized versions are Modified Versions and so must follow OFL requirements like appropriate renaming. Also you need to bear in mind the other important parameters beyond compression, speed and responsiveness: you need to consider the audience of your particular website or web application, as choosing some optimization parameters may turn out to be less than ideal for them. Subsetting by removing certain glyphs or features may seriously limit functionality of the font in various languages that your users expect. It may also introduce degradation of quality in the rendering or specific bugs on the various target platforms compared to the original font from upstream. In other words, remember that one person's optimized font may be another person's missing feature. Various advanced typographic features (OpenType, Graphite or AAT) are also available through CSS and may provide the desired effects without the need to modify the font. 2.6 Is subsetting a web font considered modification? @@ -136,7 +136,7 @@ Yes. If a web font is optimized only in ways that preserve Functional Equivalenc 2.8 How do you know if an optimization to a web font preserves Functional Equivalence? Functional Equivalence is described in full in the 'Web fonts and RFNs' paper at http://scripts.sil.org/OFL_web_fonts_and_RFNs, in general, an optimized font is deemed to be Functionally Equivalent (FE) to the Original Version if it: -- Supports the same full character inventory. If a character can be properly displayed using the Original Version, then that same character, encoded correctly on a web page, will display properly. +- Supports the same full character inventory. If a character can be properly displayed using the Original Version, then that same character, encoded correctly on a web page, will display properly. - Provides the same smart font behavior. Any dynamic shaping behavior that works with the Original Version should work when optimized, unless the browser or environment does not support it. There does not need to be guaranteed support in the client, but there should be no forced degradation of smart font or shaping behavior, such as the removal or obfuscation of OpenType, Graphite or AAT tables. - Presents text with no obvious degradation in visual quality. The lettershapes should be equally (or more) readable, within limits of the rendering platform. - Preserves original author, project and license metadata. At a minimum, this should include: Copyright and authorship; The license as stated in the Original Version, whether that is the full text of the OFL or a link to the web version; Any RFN declarations; Information already present in the font or documentation that points back to the Original Version, such as a link to the project or the author's website. @@ -178,7 +178,7 @@ No, but please consider sharing your improvements with others. You may find that 3.7 If a trademark is claimed in the OFL font, does that trademark need to remain in modified fonts? Yes. Any trademark notices must remain in any derivative fonts to respect trademark laws, but you may add any additional trademarks you claim, officially registered or not. For example if an OFL font called "Foo" contains a notice that "Foo is a trademark of Acme", then if you rename the font to "Bar" when creating a Modified Version, the new trademark notice could say "Foo is a trademark of Acme Inc. - Bar is a trademark of Roadrunner Technologies Ltd.". Trademarks work alongside the OFL and are not subject to the terms of the licensing agreement. The OFL does not grant any rights under trademark law. Bear in mind that trademark law varies from country to country and that there are no international trademark conventions as there are for copyright. You may need to significantly invest in registering and defending a trademark for it to remain valid in the countries you are interested in. This may be costly for an individual independent designer. -3.8 If I commit changes to a font (or publish a branch in a DVCS) as part of a public open source software project, do I have to change the internal font names? +3.8 If I commit changes to a font (or publish a branch in a DVCS) as part of a public open source software project, do I have to change the internal font names? Only if there are declared RFNs. Making a public commit or publishing a public branch is effectively redistributing your modifications, so any change to the font will require that you do not use the RFNs. Even if there are no RFNs, it may be useful to change the name or add a suffix indicating that a particular version of the font is still in development and not released yet. This will clearly indicate to users and fellow designers that this particular font is not ready for release yet. See section 5 for more details. @@ -198,13 +198,13 @@ If you want to release your fonts under the OFL, we recommend you do the followi 4.2.4 Include the relevant practical documentation on the license by adding the current OFL-FAQ.txt file in your package. -4.2.5 If you wish you can use the OFL graphics (http://scripts.sil.org/OFL_logo) on your website. +4.2.5 If you wish you can use the OFL graphics (http://scripts.sil.org/OFL_logo) on your website. 4.3 Will you make my font OFL for me? -We won't do the work for you. We can, however, try to answer your questions, unfortunately we do not have the resources to review and check your font packages for correct use of the OFL. We recommend you turn to designers, foundries or consulting companies with experience in doing open font design to provide this service to you. +We won't do the work for you. We can, however, try to answer your questions, unfortunately we do not have the resources to review and check your font packages for correct use of the OFL. We recommend you turn to designers, foundries or consulting companies with experience in doing open font design to provide this service to you. 4.4 Will you distribute my OFL font for me? -No, although if the font is of sufficient quality and general interest we may include a link to it on our partial list of OFL fonts on the OFL web site. You may wish to consider other open font catalogs or hosting services, such as the Unifont Font Guide (http://unifont.org/fontguide), The League of Movable Type (http://theleagueofmovabletype.com) or the Open Font Library (http://openfontlibrary.org/), which despite the name has no direct relationship to the OFL or SIL. We do not endorse any particular catalog or hosting service - it is your responsibility to determine if the service is right for you and if it treats authors with fairness. +No, although if the font is of sufficient quality and general interest we may include a link to it on our partial list of OFL fonts on the OFL web site. You may wish to consider other open font catalogs or hosting services, such as the Unifont Font Guide (http://unifont.org/fontguide), The League of Movable Type (http://theleagueofmovabletype.com) or the Open Font Library (http://openfontlibrary.org/), which despite the name has no direct relationship to the OFL or SIL. We do not endorse any particular catalog or hosting service - it is your responsibility to determine if the service is right for you and if it treats authors with fairness. 4.5 Why should I use the OFL for my fonts? - to meet needs for fonts that can be modified to support lesser-known languages @@ -216,15 +216,15 @@ No, although if the font is of sufficient quality and general interest we may in - to allow your font to be included in Libre Software operating systems like Ubuntu - to give your font world status and wide, unrestricted distribution - to educate students about quality typeface and font design -- to expand your test base and get more useful feedback +- to expand your test base and get more useful feedback - to extend your reach to new markets when users see your metadata and go to your website - to get your font more easily into one of the web font online services - to attract attention for your commercial fonts - to make money through web font services - to make money by bundling fonts with applications - to make money adjusting and extending existing open fonts -- to get a better chance that foundations/NGOs/charities/companies who commission fonts will pick you -- to be part of a sharing design and development community +- to get a better chance that foundations/NGOs/charities/companies who commission fonts will pick you +- to be part of a sharing design and development community - to give back and contribute to a growing body of font sources @@ -237,7 +237,7 @@ These are font names, or portions of font names, that the author has chosen to r The best way to acknowledge the source of the design is to thank the original authors and any other contributors in the files that are distributed with your revised font (although no acknowledgement is required). The FONTLOG is a natural place to do this. Reserved Font Names ensure that the only fonts that have the original names are the unmodified Original Versions. This allows designers to maintain artistic integrity while allowing collaboration to happen. It eliminates potential confusion and name conflicts. When choosing a name, be creative and avoid names that reuse almost all the same letters in the same order or sound like the original. It will help everyone if Original Versions and Modified Versions can easily be distinguished from one another and from other derivatives. Any substitution and matching mechanism is outside the scope of the license. 5.3 What do you mean by "primary name as presented to the user"? Are you referring to the font menu name? -Yes, this applies to the font menu name and other mechanisms that specify a font in a document. It would be fine, however, to keep a text reference to the original fonts in the description field, in your modified source file or in documentation provided alongside your derivative as long as no one could be confused that your modified source is the original. But you cannot use the Reserved Font Names in any way to identify the font to the user (unless the Copyright Holder(s) allow(s) it through a separate agreement). Users who install derivatives (Modified Versions) on their systems should not see any of the original Reserved Font Names in their font menus, for example. Again, this is to ensure that users are not confused and do not mistake one font for another and so expect features only another derivative or the Original Version can actually offer. +Yes, this applies to the font menu name and other mechanisms that specify a font in a document. It would be fine, however, to keep a text reference to the original fonts in the description field, in your modified source file or in documentation provided alongside your derivative as long as no one could be confused that your modified source is the original. But you cannot use the Reserved Font Names in any way to identify the font to the user (unless the Copyright Holder(s) allow(s) it through a separate agreement). Users who install derivatives (Modified Versions) on their systems should not see any of the original Reserved Font Names in their font menus, for example. Again, this is to ensure that users are not confused and do not mistake one font for another and so expect features only another derivative or the Original Version can actually offer. 5.4 Am I not allowed to use any part of the Reserved Font Names? You may not use individual words from the Reserved Font Names, but you would be allowed to use parts of words, as long as you do not use any word from the Reserved Font Names entirely. We do not recommend using parts of words because of potential confusion, but it is allowed. For example, if "Foobar" was a Reserved Font Name, you would be allowed to use "Foo" or "bar", although we would not recommend it. Such an unfortunate choice would confuse the users of your fonts as well as make it harder for other designers to contribute. @@ -330,12 +330,12 @@ SIL gives permission to publish unofficial translations into other languages pro "This is an unofficial translation of the SIL Open Font License into . It was not published by SIL International, and does not legally state the distribution terms for fonts that use the OFL. A release under the OFL is only valid when using the original English text. However, we recognize that this unofficial translation will help users and designers not familiar with English to better understand and use the OFL. We encourage designers who consider releasing their creation under the OFL to read the OFL-FAQ in their own language if it is available. Please go to http://scripts.sil.org/OFL for the official version of the license and the accompanying OFL-FAQ." -- Keep your unofficial translation current and update it at our request if needed, for example if there is any ambiguity which could lead to confusion. +- Keep your unofficial translation current and update it at our request if needed, for example if there is any ambiguity which could lead to confusion. If you start such a unofficial translation effort of the OFL and OFL-FAQ please let us know. 8.7 Does the OFL have an explicit expiration term? -No, the implicit intent of the OFL is that the permissions granted are perpetual and irrevocable. +No, the implicit intent of the OFL is that the permissions granted are perpetual and irrevocable. 9 ABOUT SIL INTERNATIONAL @@ -393,7 +393,7 @@ ChangeLog - Corrected minor typos in the documentation - Fixed position of combining inverted breve below (U+032F) - Added OpenType/Graphite smart code for Armenian -- Added Armenian glyphs (U+0531 -> U+0587) +- Added Armenian glyphs (U+0531 -> U+0587) - Released as "NewWorldFontFamily" 1 Jan 2005 (Joe Smith) GlobalFontFamily Version 1.0 @@ -433,3 +433,4 @@ Foobar.org is a distributed community of developers... Company.com is a small business who likes to support community designers... University.edu is a renowned educational institution with a strong design department... ----- + diff --git a/src/glyphs/weather-icons/OFL.txt b/src/glyphs/weather-icons/OFL.txt index e8a4fd1..fd295ff 100644 --- a/src/glyphs/weather-icons/OFL.txt +++ b/src/glyphs/weather-icons/OFL.txt @@ -22,7 +22,7 @@ with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, +fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The