From 1394c154ded49971ea0c15b53883d9cdfa9da52a Mon Sep 17 00:00:00 2001 From: Juhani Naskali Date: Sat, 28 May 2022 09:59:13 +0300 Subject: [PATCH] Added Braille support GPL 2 licensed TTF file from https://yudit.org/download/fonts/UBraille/UBraille.ttf Fixes #482 --- font-patcher | 7 +++++++ src/glyphs/UBraille.ttf | Bin 0 -> 154412 bytes 2 files changed, 7 insertions(+) create mode 100644 src/glyphs/UBraille.ttf diff --git a/font-patcher b/font-patcher index 7d063ab247b..f25f352f513 100755 --- a/font-patcher +++ b/font-patcher @@ -186,6 +186,7 @@ class font_patcher: sym_font_group.add_argument('--powerlineextra', dest='powerlineextra', default=False, action='store_true', help='Add Powerline Glyphs (https://github.com/ryanoasis/powerline-extra-symbols)') sym_font_group.add_argument('--material', '--materialdesignicons', '--mdi', dest='material', default=False, action='store_true', help='Add Material Design Icons (https://github.com/templarian/MaterialDesign)') sym_font_group.add_argument('--weather', '--weathericons', dest='weather', default=False, action='store_true', help='Add Weather Icons (https://github.com/erikflowers/weather-icons)') + sym_font_group.add_argument('--braille', dest='braille', default=False, action='store_true', help='Add Braille Glyphs') self.args = parser.parse_args() @@ -202,6 +203,7 @@ class font_patcher: self.args.powerlineextra = True self.args.material = True self.args.weather = True + self.args.braille = True if not self.args.complete: # add the list of arguments for each symbol font to the list self.sym_font_args @@ -274,6 +276,10 @@ class font_patcher: if self.args.weather: additionalFontNameSuffix += " WEA" verboseAdditionalFontNameSuffix += " Plus Weather Icons" + if self.args.braille: + additionalFontNameSuffix += " B" + verboseAdditionalFontNameSuffix += " Plus Braille Icons" + # if all source glyphs included simplify the name else: @@ -609,6 +615,7 @@ class font_patcher: {'Enabled': self.args.octicons, 'Name': "Octicons", 'Filename': "octicons.ttf", 'Exact': self.octiconsExactEncodingPosition, 'SymStart': 0X26A1, 'SymEnd': 0X26A1, 'SrcStart': None, 'SrcEnd': None, 'ScaleGlyph': OCTI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT}, # Zap {'Enabled': self.args.octicons, 'Name': "Octicons", 'Filename': "octicons.ttf", 'Exact': self.octiconsExactEncodingPosition, 'SymStart': 0xF27C, 'SymEnd': 0xF27C, 'SrcStart': 0xF4A9, 'SrcEnd': 0xF4A9, 'ScaleGlyph': OCTI_SCALE_LIST, 'Attributes': SYM_ATTR_DEFAULT}, # Desktop {'Enabled': self.args.codicons, 'Name': "Codicons", 'Filename': "codicons/codicon.ttf", 'Exact': True, 'SymStart': 0xEA60, 'SymEnd': 0xEBEB, 'SrcStart': None, 'SrcEnd': None, 'ScaleGlyph': None, 'Attributes': SYM_ATTR_DEFAULT}, + {'Enabled': self.args.braille, 'Name': "Braille", 'Filename': "UBraille.ttf", 'Exact': False, 'SymStart': 0x2800, 'SymEnd': 0x28FF, 'SrcStart': None, 'SrcEnd': None, 'ScaleGlyph': None, 'Attributes': SYM_ATTR_DEFAULT}, {'Enabled': self.args.custom, 'Name': "Custom", 'Filename': self.args.custom, 'Exact': True, 'SymStart': 0x0000, 'SymEnd': 0x0000, 'SrcStart': 0x0000, 'SrcEnd': 0x0000, 'ScaleGlyph': None, 'Attributes': CUSTOM_ATTR} ] diff --git a/src/glyphs/UBraille.ttf b/src/glyphs/UBraille.ttf new file mode 100644 index 0000000000000000000000000000000000000000..18a9f1256928f83bc59a45397c00288d9847529a GIT binary patch literal 154412 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

A#xl-!7-0Nh}3=Zg7YZ|0xY`{|F|O5+sR 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