diff --git a/src/glyphs/octicons/analyze_octicons b/src/glyphs/octicons/analyze_octicons new file mode 100755 index 0000000000..67d6728b0d --- /dev/null +++ b/src/glyphs/octicons/analyze_octicons @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +# coding=utf8 + +# This extracts the names and source and destination codepoints +# of the old octicons font file to keep their codepoints stable +# +# You do not need to redo it, the result is in the repo +# +# Usage: +# fontforge analyze_octicons > mapping + +import fontforge + +octi_orig = "octicons_old.ttf" +current_cp = 0xF400 + +print('# Examining {}'.format(octi_orig)) + +font = fontforge.open(octi_orig) +for glyph in font.glyphs('encoding'): + point = glyph.unicode + if point < 0: + continue + desti = glyph.unicode + if point < 0xF000: + desti = point + else: + desti = current_cp + current_cp += 1 + print("{:X} {:X} {}".format(point, desti, glyph.glyphname)) + +font.close() diff --git a/src/glyphs/octicons/generate b/src/glyphs/octicons/generate new file mode 100644 index 0000000000..5c9c7cb2cb --- /dev/null +++ b/src/glyphs/octicons/generate @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +# coding=utf8 + +import sys +import os +import re +import subprocess +import fontforge + +archive = 'v18.2.0.tar.gz' +subset = '-24' # use 24 px subset if possible + +def renamer(old_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) + +print('\nReading mapping file') +old_mapping = [] +with open('mapping', 'r') as f: + for line in f.readlines(): + if line.startswith('#'): + continue + old_mapping.append(tuple(re.split(' +', line.strip()))) +print('Found {} entries'.format(len(old_mapping))) + +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') + +svgs = os.listdir('icons') # icons is the subdir we got from the archive +print('Found {} svgs'.format(len(svgs))) +names = { s[0:-len('-xx.svg')] for s in svgs if s.endswith('-16.svg') or s.endswith('-24.svg') } +print('Found {} icons after de-duplicating\n'.format(len(names))) + +num_found = 0 +num_missing = 0 +misslist = '' +renamelist = '' + +for [i, j, old_n] in old_mapping: + if old_n not in names: + new_n = renamer(old_n) + if new_n not in names: + misslist += 'Missing {}\n'.format(old_n) + num_missing += 1 + continue + renamelist += 'Renamed {} -> {}\n'.format(old_n, new_n) + old_n = new_n + names.remove(old_n) + num_found += 1 + +print(renamelist) +print(misslist) +print("Found {} (of {}, missing {}) and new {}".format(num_found, len(old_mapping), num_missing, len(names))) diff --git a/src/glyphs/octicons/mapping b/src/glyphs/octicons/mapping new file mode 100644 index 0000000000..a70dab0a99 --- /dev/null +++ b/src/glyphs/octicons/mapping @@ -0,0 +1,173 @@ +# Examining octicons_old.ttf +2665 2665 heart +26A1 26A1 zap +F000 F400 light-bulb +F001 F401 repo +F002 F402 repo-forked +F005 F403 repo-push +F006 F404 repo-pull +F007 F405 book +F008 F406 octoface +F009 F407 git-pull-request +F00A F408 mark-github +F00B F409 cloud-download +F00C F40A cloud-upload +F00D F40B keyboard +F00E F40C gist +F010 F40D file-code +F011 F40E file-text +F012 F40F file-media +F013 F410 file-zip +F014 F411 file-pdf +F015 F412 tag +F016 F413 file-directory +F017 F414 file-submodule +F018 F415 person +F019 F416 jersey +F01F F417 git-commit +F020 F418 git-branch +F023 F419 git-merge +F024 F41A mirror +F026 F41B issue-opened +F027 F41C issue-reopened +F028 F41D issue-closed +F02A F41E star +F02B F41F comment +F02C F420 question +F02D F421 alert +F02E F422 search +F02F F423 gear +F030 F424 radio-tower +F031 F425 tools +F032 F426 sign-out +F033 F427 rocket +F034 F428 rss +F035 F429 clippy +F036 F42A sign-in +F037 F42B organization +F038 F42C device-mobile +F039 F42D unfold +F03A F42E check +F03B F42F mail +F03C F430 mail-read +F03D F431 arrow-up +F03E F432 arrow-right +F03F F433 arrow-down +F040 F434 arrow-left +F041 F435 pin +F042 F436 gift +F043 F437 graph +F044 F438 triangle-left +F045 F439 credit-card +F046 F43A clock +F047 F43B ruby +F048 F43C broadcast +F049 F43D key +F04A F43E repo-force-push +F04C F43F repo-clone +F04D F440 diff +F04E F441 eye +F04F F442 comment-discussion +F051 F443 mail-reply +F052 F444 primitive-dot +F053 F445 primitive-square +F056 F446 device-camera +F057 F447 device-camera-video +F058 F448 pencil +F059 F449 info +F05A F44A triangle-right +F05B F44B triangle-down +F05C F44C link +F05D F44D plus +F05E F44E three-bars +F05F F44F code +F060 F450 location +F061 F451 list-unordered +F062 F452 list-ordered +F063 F453 quote +F064 F454 versions +F068 F455 calendar +F06A F456 lock +F06B F457 diff-added +F06C F458 diff-removed +F06D F459 diff-modified +F06E F45A diff-renamed +F070 F45B horizontal-rule +F071 F45C arrow-small-right +F075 F45D milestone +F076 F45E checklist +F077 F45F megaphone +F078 F460 chevron-right +F07B F461 bookmark +F07C F462 settings +F07D F463 dashboard +F07E F464 history +F07F F465 link-external +F080 F466 mute +F081 F467 x +F084 F468 circle-slash +F085 F469 pulse +F087 F46A sync +F088 F46B telescope +F08C F46C gist-secret +F08D F46D home +F08F F46E stop +F091 F46F bug +F092 F470 logo-github +F094 F471 file-binary +F096 F472 database +F097 F473 server +F099 F474 diff-ignored +F09A F475 ellipsis +F09C F476 no-newline +F09D F477 hubot +F09F F478 arrow-small-up +F0A0 F479 arrow-small-down +F0A1 F47A arrow-small-left +F0A2 F47B chevron-up +F0A3 F47C chevron-down +F0A4 F47D chevron-left +F0AA F47E triangle-up +F0AC F47F git-compare +F0AD F480 logo-gist +F0B0 F481 file-symlink-file +F0B1 F482 file-symlink-directory +F0B2 F483 squirrel +F0B6 F484 globe +F0BA F485 unmute +F0BE F486 mention +F0C4 F487 package +F0C5 F488 browser +F0C8 F489 terminal +F0C9 F48A markdown +F0CA F48B dash +F0CC F48C fold +F0CF F48D inbox +F0D0 F48E trashcan +F0D1 F48F paintcan +F0D2 F490 flame +F0D3 F491 briefcase +F0D4 F492 plug +F0D6 F493 circuit-board +F0D7 F494 mortar-board +F0D8 F495 law +F0DA F496 thumbsup +F0DB F497 thumbsdown +F0DC F498 desktop-download +F0DD F499 beaker +F0DE F49A bell +F0E0 F49B watch +F0E1 F49C shield +F0E2 F49D bold +F0E3 F49E text-size +F0E4 F49F italic +F0E5 F4A0 tasklist +F0E6 F4A1 verified +F0E7 F4A2 smiley +F0E8 F4A3 unverified +F101 F4A4 ellipses +F102 F4A5 file +F103 F4A6 grabber +F104 F4A7 plus-small +F105 F4A8 reply +F27C F4A9 device-desktop diff --git a/src/glyphs/octicons.ttf b/src/glyphs/octicons/octicons_old.ttf similarity index 100% rename from src/glyphs/octicons.ttf rename to src/glyphs/octicons/octicons_old.ttf