├── Info ├── GlyphData.xml └── GlyphDataCYR.xml ├── LICENSE ├── Layers ├── BracketLayerFromSuffixed2.py └── DeleteOrphanLayer.py ├── Metrics G2 ├── Fix Vertical Metrics.py ├── Gridster.py ├── Inherit Kerning Groups.py ├── Inherit Metrics Keys.py ├── Steal Metric Keys.py ├── Update WinMetrics.py ├── set Kerning Groups for GF Lat+Cyr Plus.py └── set Metrics Keys.py ├── Metrics ├── Fix Vertical Metrics.py ├── Gridster.py ├── Inherit Kerning Groups.py ├── Inherit Metrics Keys.py ├── Remove Kerning groups of selected glyphs.py ├── Steal Metric Keys.py ├── Update WinMetrics.py ├── set Kerning Groups for GF Lat+Cyr Plus.py └── set Metrics Keys.py ├── Paths ├── SlantRounds-py2.py └── SlantRounds.py ├── README.md ├── SlantRounds.gif ├── Test-Modules.py └── kerning-texts ├── GF Plus kern strings.txt ├── GF_Plus_LATCYR_kern_strings.txt ├── Metrics-GF-CyrillicPro.txt ├── Prata_Regular.glyphs_kern_strings.txt ├── Raleway-CYR kern.glyphs_kern_strings.txt ├── check-metrics-GF-Plus-unique.txt ├── currencies.txt ├── cyrgrid.txt ├── frac-feature.txt ├── list.txt ├── loclBGR-kern.txt ├── numbers.txt └── superior-figures-matrix.txt /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | -------------------------------------------------------------------------------- /Layers/BracketLayerFromSuffixed2.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Create Bracket Layer from suffixed child glyph 2 2 | # -*- coding: utf-8 -*- 3 | __doc__=""" 4 | Creates a bracket layer from a suffixed(.bold) child glyph. 5 | Uses weight value of second boldest instance. 2 6 | """ 7 | 8 | thisFont = Glyphs.font # frontmost font 9 | thisFontMaster = thisFont.selectedFontMaster # active master 10 | selectedLayers = thisFont.selectedLayers # active layers of selected glyphs 11 | 12 | changes = "" 13 | boldWeight = thisFont.instances[-2].weightValue - 1 14 | boldWeight = str( int( boldWeight )) # convert to int and string from float 15 | 16 | for thisLayer in selectedLayers: 17 | sourceGlyph = thisLayer.parent.name 18 | name = thisLayer.parent.name 19 | baseName = name 20 | suffix = None 21 | periodPos = baseName.find(".") 22 | if periodPos > 0: 23 | baseName = name[:periodPos] 24 | suffix = name[periodPos:] 25 | targetGlyph = baseName 26 | 27 | newLayer = thisFont.glyphs[ sourceGlyph ].layers[thisFont.masters[-1].id].copy() 28 | newLayer.associatedMasterId = thisFont.masters[-1].id # attach to last master 29 | newLayer.name = 'Bold [' + boldWeight + ']' 30 | newLayer.leftMetricsKey = '' 31 | newLayer.rightMetricsKey = '' 32 | thisFont.glyphs [ targetGlyph ].layers.append( newLayer ) 33 | print "Copied %s --> %s in %s" % (sourceGlyph, newLayer.name, targetGlyph) 34 | changes += "/"+targetGlyph 35 | 36 | Glyphs.currentDocument.windowController().addTabWithString_( changes ) 37 | 38 | -------------------------------------------------------------------------------- /Layers/DeleteOrphanLayer.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Delete orphan layers 2 | # -*- coding: utf-8 -*- 3 | __doc__=""" 4 | Delete orphan layers in selected 5 | """ 6 | 7 | thisFont = Glyphs.font # frontmost font 8 | thisFontMaster = thisFont.selectedFontMaster # active master 9 | selectedLayers = thisFont.selectedLayers # active layers of selected glyphs 10 | 11 | def process( thisLayer ): 12 | 13 | for thisLayer in selectedLayers: 14 | for l in thisLayer.parent.layers: 15 | if l.name == None or l.name != 'Bold Italic': 16 | deleteId = l.layerId 17 | del(thisFont.glyphs[thisLayer.parent.name].layers[deleteId]) 18 | print "Deleted orphan layer in glyph %s." % (thisLayer.parent.name) 19 | 20 | thisFont.disableUpdateInterface() # suppresses UI updates in Font View 21 | 22 | process( thisLayer ) 23 | 24 | thisFont.enableUpdateInterface() # re-enables UI updates in Font View 25 | -------------------------------------------------------------------------------- /Metrics G2/Fix Vertical Metrics.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Fix vertical metrics 2 | ''' 3 | Sets custom parameters for vertical metrics in all masters. 4 | Replaces vertical metrics with values calculated from key glyphs. 5 | 6 | ''' 7 | # 8 | # Based on scripts from Marc Foley 9 | # https://github.com/m4rc1e/mf-glyphs-scripts 10 | # 11 | 12 | font = Glyphs.font 13 | 14 | tallest = 0 15 | tallest_name = '' 16 | 17 | deepest = 0 18 | deepest_name = '' 19 | 20 | masters = font.masters 21 | 22 | for i, master in enumerate(masters): 23 | for glyph in font.glyphs: 24 | height = glyph.layers[i].bounds[-1][-1] 25 | depth = glyph.layers[i].bounds[0][-1] 26 | 27 | if height > tallest: 28 | tallest = height 29 | tallest_name = glyph.name 30 | 31 | if depth < deepest: 32 | deepest = depth 33 | deepest_name = glyph.name 34 | 35 | tallest = int( round(tallest) ) 36 | deepest = int( round(deepest) ) 37 | 38 | print '' 39 | print '#############################################' 40 | print '' 41 | print 'Tallest glyph is %s %s' % (tallest_name, tallest) 42 | print 'winAscent = %s' % tallest 43 | print ' ' 44 | print 'Deepest glyph is %s %s' % (deepest_name, deepest) 45 | print 'winDescent = %s' % abs(deepest) 46 | print '' 47 | 48 | # Update vertical metrics for each master individually 49 | 50 | ASC_G = 'l' 51 | CAP_G = 'H' 52 | XHEIGHT_G = 'x' 53 | DESC_G = 'p' 54 | 55 | for i, master in enumerate(masters): 56 | n_asc = font.glyphs[ASC_G].layers[master.id].bounds[-1][-1] - abs(font.glyphs[ASC_G].layers[master.id].bounds[0][-1]) 57 | n_cap = font.glyphs[CAP_G].layers[master.id].bounds[-1][-1] 58 | n_xhe = font.glyphs[XHEIGHT_G].layers[master.id].bounds[-1][-1] 59 | n_desc = font.glyphs[DESC_G].layers[master.id].bounds[0][-1] 60 | 61 | master.ascender = int(round(n_asc)) 62 | master.capHeight = int(round(n_cap)) 63 | master.xHeight = int(round(n_xhe)) 64 | master.descender = int(round(n_desc)) 65 | 66 | ## Update vertical metrics custom paramters for all master 67 | 68 | for i, master in enumerate(masters): 69 | 70 | ''' 71 | master.ascender = n_asc 72 | master.capHeight = n_cap 73 | master.xHeight = n_xhe 74 | master.descender = n_desc 75 | ''' 76 | 77 | remainder = int( round( 1250 - abs(n_desc) - n_asc) ) 78 | 79 | master.customParameters['winAscent'] = tallest 80 | master.customParameters['winDescent'] = abs(deepest) 81 | 82 | master.customParameters['typoAscender'] = n_asc+remainder 83 | master.customParameters['hheaAscender'] = n_asc+remainder 84 | 85 | master.customParameters['typoDescender'] = deepest 86 | master.customParameters['hheaDescender'] = deepest 87 | 88 | master.customParameters['hheaLineGap'] = 0 89 | master.customParameters['typoLineGap'] = 0 90 | 91 | print '' 92 | print '#############################################' 93 | print '' 94 | print 'New vertical metrics values for all masters:' 95 | print '' 96 | print '#############################################' 97 | print '' 98 | print 'winAscent = %s' % tallest 99 | print 'winDescent = %s' % abs(deepest) 100 | print ' ' 101 | print 'typoAscender = %s' % (n_asc+remainder) 102 | print 'hheaAscender = %s' % (n_asc+remainder) 103 | print ' ' 104 | print 'typoDescender = %s' % deepest 105 | print 'hheaDescender = %s' % deepest 106 | print ' ' 107 | print 'hheaLineGap = 0' 108 | print 'typoLineGap = 0' 109 | print '' 110 | print 'Vertical metrics updated according to 125 %% rule' 111 | print '' 112 | -------------------------------------------------------------------------------- /Metrics G2/Gridster.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Gridster LAT-CYR 2 | # encoding: utf-8 3 | # Copyright: Alexei Vanyashin, 2017, Version 0.1 4 | # 5 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 6 | # Opens a new tab with Latin and Cyrillic grid tests. 7 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 8 | 9 | import re 10 | Glyphs.clearLog() # clears macro window log 11 | 12 | stringLatin = 'abcdefghijklmnopqrstuvwxyz' 13 | outputLatin = stringLatin + '\n' 14 | 15 | string = 'абвгдеёжзийклмнопрстуфхчцшщьъыэюя' 16 | string = string.decode('utf-8') 17 | output = string + '\n' # adding line breaks to string 18 | 19 | for i in range(15): # prints x lines of Latin grid test 20 | stringLatin = re.sub('^(\S){1}(.*)', r"\2\1", stringLatin) 21 | outputLatin += stringLatin + '\n' 22 | 23 | outputFormatted = re.sub('(\S{1})', r"\1 ", outputLatin) # adding spaces 24 | 25 | for i in range(15): # prints x lines of Cyrillic grid test 26 | string = re.sub('^(\S){1}(.*)', r"\2\1", string) 27 | output += string + '\n' 28 | 29 | outputFormatted += re.sub('(\S{1})', r"\1 ", output) # adding spaces 30 | outputFormattedUpper = outputFormatted.upper() 31 | 32 | Glyphs.currentDocument.windowController().addTabWithString_( outputFormatted ) 33 | Glyphs.currentDocument.windowController().addTabWithString_( outputFormattedUpper ) 34 | -------------------------------------------------------------------------------- /Metrics G2/Inherit Kerning Groups.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Inherit Kerning Groups to suffixed glyphs 2 | # -*- coding: utf-8 -*- 3 | __doc__=""" 4 | Inherits Kerning Group to suffixed glyphs (.ssXX) from parent 5 | """ 6 | 7 | thisFont = Glyphs.font # frontmost font 8 | thisFontMaster = thisFont.selectedFontMaster # active master 9 | selectedLayers = thisFont.selectedLayers # active layers of selected glyphs 10 | 11 | def process( thisLayer ): 12 | 13 | for thisLayer in selectedLayers: 14 | name = thisLayer.parent.name 15 | baseName = name 16 | suffix = None 17 | periodPos = baseName.find(".") 18 | if periodPos > 0: 19 | baseName = name[:periodPos] 20 | suffix = name[periodPos:] 21 | baseGlyph = thisFont.glyphs[ baseName ] 22 | if (baseGlyph.leftKerningGroup != None ): 23 | thisLayer.parent.leftKerningGroup = '' 24 | thisLayer.parent.leftKerningGroup = baseGlyph.leftKerningGroup 25 | if (baseGlyph.rightKerningGroup != None ): 26 | thisLayer.parent.rightKerningGroup = '' 27 | thisLayer.parent.rightKerningGroup = baseGlyph.rightKerningGroup 28 | thisLayer.syncMetrics() 29 | 30 | thisFont.disableUpdateInterface() # suppresses UI updates in Font View 31 | 32 | for thisLayer in selectedLayers: 33 | thisGlyph = thisLayer.parent 34 | print "Processing %s" % thisGlyph.name 35 | thisGlyph.beginUndo() # begin undo grouping 36 | process( thisLayer ) 37 | thisGlyph.endUndo() # end undo grouping 38 | 39 | thisFont.enableUpdateInterface() # re-enables UI updates in Font View 40 | 41 | # brings macro window to front and clears its log: 42 | Glyphs.clearLog() 43 | Glyphs.showMacroWindow() -------------------------------------------------------------------------------- /Metrics G2/Inherit Metrics Keys.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Inherit Metrics Keys to suffixed glyphs 2 | # -*- coding: utf-8 -*- 3 | __doc__=""" 4 | Inherits Metrics Keys to suffixed glyphs (.ssXX) from parent 5 | """ 6 | 7 | thisFont = Glyphs.font # frontmost font 8 | thisFontMaster = thisFont.selectedFontMaster # active master 9 | selectedLayers = thisFont.selectedLayers # active layers of selected glyphs 10 | 11 | def process( thisLayer ): 12 | 13 | for thisLayer in selectedLayers: 14 | name = thisLayer.parent.name 15 | baseName = name 16 | suffix = None 17 | periodPos = baseName.find(".") 18 | if periodPos > 0: 19 | baseName = name[:periodPos] 20 | suffix = name[periodPos:] 21 | thisLayer.leftMetricsKey = baseName 22 | thisLayer.rightMetricsKey = baseName 23 | thisLayer.syncMetrics() 24 | 25 | thisFont.disableUpdateInterface() # suppresses UI updates in Font View 26 | 27 | for thisLayer in selectedLayers: 28 | thisGlyph = thisLayer.parent 29 | print "Processing %s" % thisGlyph.name 30 | thisGlyph.beginUndo() # begin undo grouping 31 | process( thisLayer ) 32 | thisGlyph.endUndo() # end undo grouping 33 | 34 | thisFont.enableUpdateInterface() # re-enables UI updates in Font View 35 | 36 | # brings macro window to front and clears its log: 37 | Glyphs.clearLog() 38 | Glyphs.showMacroWindow() -------------------------------------------------------------------------------- /Metrics G2/Steal Metric Keys.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Steal Metrics Keys from font 2 | """Copy Metrics Keys from one font to another.""" 3 | # Based on 'Steal kerning groups from font' by @mekkablue 4 | import vanilla 5 | 6 | class KeysCopy(object): 7 | """GUI for copying Metrics Keys from one font to another""" 8 | def __init__(self): 9 | self.w = vanilla.FloatingWindow((400, 70), "Steal Metrics Keys") 10 | 11 | self.w.text_anchor = vanilla.TextBox((15, 12+2, 130, 14), "Copy keys from:", sizeStyle='small') 12 | self.w.from_font = vanilla.PopUpButton((150, 12, 150, 17), self.GetFonts(isSourceFont=True), sizeStyle='small', callback=self.buttonCheck) 13 | 14 | self.w.text_value = vanilla.TextBox((15, 12+2+25, 130, 14), "To selected glyphs in:", sizeStyle='small') 15 | self.w.to_font = vanilla.PopUpButton((150, 12+25, 150, 17), self.GetFonts(isSourceFont=False), sizeStyle='small', callback=self.buttonCheck) 16 | 17 | self.w.copybutton = vanilla.Button((-80, 12+25, -15, 17), "Copy", sizeStyle='small', callback=self.copyKeys) 18 | self.w.setDefaultButton( self.w.copybutton ) 19 | 20 | self.w.open() 21 | self.buttonCheck(None) 22 | 23 | def GetFonts(self, isSourceFont): 24 | myFontList = [ "%s - %s" % ( x.font.familyName, x.selectedFontMaster().name ) for x in Glyphs.orderedDocuments() ] 25 | 26 | if isSourceFont: 27 | myFontList.reverse() 28 | 29 | return myFontList 30 | 31 | def buttonCheck(self, sender): 32 | fromFont = self.w.from_font.getItems()[ self.w.from_font.get() ] 33 | toFont = self.w.to_font.getItems()[ self.w.to_font.get() ] 34 | 35 | if fromFont == toFont: 36 | self.w.copybutton.enable( onOff=False ) 37 | else: 38 | self.w.copybutton.enable( onOff=True ) 39 | 40 | def copyKeys(self, sender): 41 | fromFont = self.w.from_font.getItems()[ self.w.from_font.get() ] 42 | toFont = self.w.to_font.getItems()[ self.w.to_font.get() ] 43 | 44 | Doc_source = [ x for x in Glyphs.orderedDocuments() if ("%s - %s" % ( x.font.familyName, x.selectedFontMaster().name )) == fromFont ][0] 45 | Master_source = Doc_source.selectedFontMaster().id 46 | Font_source = Doc_source.font 47 | Font_target = [ x.font for x in Glyphs.orderedDocuments() if ("%s - %s" % ( x.font.familyName, x.selectedFontMaster().name )) == toFont ][0] 48 | Glyphs_selected = [ x.parent for x in Font_target.parent.selectedLayers() ] 49 | 50 | print "Syncing metrics keys for", len(Glyphs_selected), "glyphs from", Font_source.familyName, "to", Font_target.familyName, ":" 51 | 52 | try: 53 | for thisGlyph in Glyphs_selected: 54 | glyphName = thisGlyph.name 55 | try: 56 | sourceGlyph = Font_source.glyphs[ glyphName ] 57 | oldL = thisGlyph.leftMetricsKey 58 | oldR = thisGlyph.rightMetricsKey 59 | newL = sourceGlyph.leftMetricsKey 60 | newR = sourceGlyph.rightMetricsKey 61 | 62 | if oldL != newL or oldR != newR: 63 | thisGlyph.leftMetricsKey = newL 64 | thisGlyph.rightMetricsKey = newR 65 | 66 | print " ", glyphName, ":", newL, "<--->", newR 67 | print "Syncing metrics..." 68 | 69 | myLayers = Glyphs.font.selectedLayers 70 | for thisLayer in myLayers: 71 | thisLayer.syncMetrics() 72 | 73 | pass 74 | except Exception, e: 75 | print " ", glyphName,": Error" 76 | # print e 77 | 78 | except Exception, e: 79 | self.showMessage( "Error", e ) 80 | 81 | finally: 82 | print "Done." 83 | 84 | self.w.close() 85 | 86 | KeysCopy() 87 | -------------------------------------------------------------------------------- /Metrics G2/Update WinMetrics.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Update winAsc and winDesc 2 | ''' 3 | Update custom paramters winAscender and winDescender 4 | 5 | ''' 6 | # 7 | # Based on scripts from Marc Foley 8 | # https://github.com/m4rc1e/mf-glyphs-scripts 9 | # 10 | 11 | font = Glyphs.font 12 | 13 | tallest = 0 14 | tallest_name = '' 15 | 16 | deepest = 0 17 | deepest_name = '' 18 | 19 | masters = font.masters 20 | 21 | for i, master in enumerate(masters): 22 | for glyph in font.glyphs: 23 | height = glyph.layers[i].bounds[-1][-1] 24 | depth = glyph.layers[i].bounds[0][-1] 25 | 26 | if height > tallest: 27 | tallest = height 28 | tallest_name = glyph.name 29 | 30 | if depth < deepest: 31 | deepest = depth 32 | deepest_name = glyph.name 33 | 34 | tallest = int( round(tallest) ) 35 | deepest = int( round(deepest) ) 36 | 37 | print 'tallest glyph is %s %s' % (tallest_name, tallest) 38 | print 'winAscent = %s %s' % (tallest_name, round(tallest) ) 39 | print ' ' 40 | print 'deepest glyph is %s %s' % (deepest_name, deepest) 41 | print 'winDescent = %s %s' % (deepest_name, int( round (abs(deepest)) )) 42 | 43 | for i, master in enumerate(masters): 44 | master.customParameters['winAscent'] = tallest 45 | master.customParameters['winDescent'] = deepest -------------------------------------------------------------------------------- /Metrics G2/set Kerning Groups for GF Lat+Cyr Plus.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Set Kerning Groups for GF Latin Plus 2 | # encoding: utf-8 3 | # Copyright: Georg Seifert, 2010, www.schriftgestaltung.de Version 1.0 4 | # Copyright: Alexei Vanyashin, 2016, www.cyreal.org Version 1.01 5 | # 6 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 7 | # 8 | # This script is derived from Georg Seifert's 'Set Kerning Groups' 9 | # located at 10 | # https://github.com/schriftgestalt/Glyphs-Scripts/blob/master/Metrics%20%26%20Classes/set%20Kerning%20Groups.py 11 | # 12 | # It is reworked to include kerning classes for GF Latin Plus, GF Cyrillic Plus glyphs sets. 13 | # 14 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 15 | 16 | 17 | import sys 18 | import os 19 | from GlyphsApp import * 20 | import objc 21 | from AppKit import * 22 | from Foundation import * 23 | import traceback 24 | 25 | Keys = [ 26 | "A", 27 | "B", 28 | "C", 29 | "D", 30 | "E", 31 | "F", 32 | "G", 33 | "H", 34 | "I", 35 | "J", 36 | "K", 37 | "L", 38 | "M", 39 | "N", 40 | "O", 41 | "P", 42 | "Q", 43 | "R", 44 | "S", 45 | "T", 46 | "U", 47 | "V", 48 | "W", 49 | "X", 50 | "Y", 51 | "Z", 52 | "Agrave", 53 | "Aacute", 54 | "Acircumflex", 55 | "Atilde", 56 | "Adieresis", 57 | "Amacron", 58 | "Abreve", 59 | "Aring", 60 | "Aringacute", 61 | "Adotbelow", 62 | "Aogonek", 63 | "AE", 64 | "AEacute", 65 | "Cacute", 66 | "Ccircumflex", 67 | "Ccaron", 68 | "Cdotaccent", 69 | "Ccedilla", 70 | "Dcaron", 71 | "Dcroat", 72 | "Eth", 73 | "Egrave", 74 | "Eacute", 75 | "Ecircumflex", 76 | "Etilde", 77 | "Ecaron", 78 | "Edieresis", 79 | "Emacron", 80 | "Ebreve", 81 | "Edotaccent", 82 | "Edotbelow", 83 | "Eogonek", 84 | "Gcircumflex", 85 | "Gcaron", 86 | "Gbreve", 87 | "Gdotaccent", 88 | "Gcommaaccent", 89 | "Hcircumflex", 90 | "Hbar", 91 | "Igrave", 92 | "Iacute", 93 | "Icircumflex", 94 | "Itilde", 95 | "Idieresis", 96 | "Imacron", 97 | "Ibreve", 98 | "Idotaccent", 99 | "Idotbelow", 100 | "Iogonek", 101 | "Jcircumflex", 102 | "Kcommaaccent", 103 | "Lacute", 104 | "Lcaron", 105 | "Lcommaaccent", 106 | "Lslash", 107 | "Ldot", 108 | "Nacute", 109 | "Ntilde", 110 | "Ncaron", 111 | "Ncommaaccent", 112 | "Eng", 113 | "Ograve", 114 | "Oacute", 115 | "Ocircumflex", 116 | "Otilde", 117 | "Odieresis", 118 | "Omacron", 119 | "Obreve", 120 | "Ohungarumlaut", 121 | "Odotbelow", 122 | "Oogonek", 123 | "Oslash", 124 | "Oslashacute", 125 | "OE", 126 | "Racute", 127 | "Rcaron", 128 | "Rcommaaccent", 129 | "Sacute", 130 | "Scircumflex", 131 | "Scaron", 132 | "Scedilla", 133 | "Scommaaccent", 134 | "Germandbls", 135 | "Tcaron", 136 | "Tcedilla", 137 | "Tcommaaccent", 138 | "Tbar", 139 | "Thorn", 140 | "Ugrave", 141 | "Uacute", 142 | "Ucircumflex", 143 | "Utilde", 144 | "Udieresis", 145 | "Umacron", 146 | "Ubreve", 147 | "Uring", 148 | "Uhungarumlaut", 149 | "Udotbelow", 150 | "Uogonek", 151 | "Wgrave", 152 | "Wacute", 153 | "Wcircumflex", 154 | "Wdieresis", 155 | "Ygrave", 156 | "Yacute", 157 | "Ycircumflex", 158 | "Ytilde", 159 | "Ydieresis", 160 | "Ymacron", 161 | "Zacute", 162 | "Zcaron", 163 | "Zdotaccent", 164 | "Schwa", 165 | "DZcaron", 166 | "Dzcaron", 167 | "LJ", 168 | "Lj", 169 | "NJ", 170 | "Nj", 171 | "Adblgrave", 172 | "Ainvertedbreve", 173 | "Edblgrave", 174 | "Einvertedbreve", 175 | "Idblgrave", 176 | "Iinvertedbreve", 177 | "Odblgrave", 178 | "Oinvertedbreve", 179 | "Rdblgrave", 180 | "Rinvertedbreve", 181 | "Udblgrave", 182 | "Uinvertedbreve", 183 | "Odieresismacron", 184 | "Otildemacron", 185 | "Odotaccentmacron", 186 | "Abreveacute", 187 | "Abrevedotbelow", 188 | "Abrevegrave", 189 | "Abrevehookabove", 190 | "Abrevetilde", 191 | "Acircumflexacute", 192 | "Acircumflexdotbelow", 193 | "Acircumflexgrave", 194 | "Acircumflexhookabove", 195 | "Acircumflextilde", 196 | "Ahookabove", 197 | "Ecircumflexacute", 198 | "Ecircumflexdotbelow", 199 | "Ecircumflexgrave", 200 | "Ecircumflexhookabove", 201 | "Ecircumflextilde", 202 | "Ehookabove", 203 | "Ocircumflexacute", 204 | "Ocircumflexdotbelow", 205 | "Ocircumflexgrave", 206 | "Ocircumflexhookabove", 207 | "Ocircumflextilde", 208 | "Ohookabove", 209 | "Ohorn", 210 | "Ohornacute", 211 | "Ohorndotbelow", 212 | "Ohorngrave", 213 | "Ohornhookabove", 214 | "Ohorntilde", 215 | "Uhookabove", 216 | "Uhorn", 217 | "Uhornacute", 218 | "Uhorndotbelow", 219 | "Uhorngrave", 220 | "Uhornhookabove", 221 | "Uhorntilde", 222 | "Ydotbelow", 223 | "Yhookabove", 224 | "Ihookabove", 225 | "I_J.loclNLD", 226 | "Iacute_J.loclNLD", 227 | "a", 228 | "aacute", 229 | "abreve", 230 | "abreveacute", 231 | "abrevedotbelow", 232 | "abrevegrave", 233 | "abrevehookabove", 234 | "abrevetilde", 235 | "acircumflex", 236 | "acircumflexacute", 237 | "acircumflexdotbelow", 238 | "acircumflexgrave", 239 | "acircumflexhookabove", 240 | "acircumflextilde", 241 | "adblgrave", 242 | "adieresis", 243 | "adotbelow", 244 | "agrave", 245 | "ahookabove", 246 | "ainvertedbreve", 247 | "amacron", 248 | "aogonek", 249 | "aring", 250 | "aringacute", 251 | "atilde", 252 | "ae", 253 | "aeacute", 254 | "b", 255 | "c", 256 | "cacute", 257 | "ccaron", 258 | "ccedilla", 259 | "ccircumflex", 260 | "cdotaccent", 261 | "d", 262 | "eth", 263 | "dcaron", 264 | "dcroat", 265 | "dz", 266 | "dzcaron", 267 | "e", 268 | "eacute", 269 | "ebreve", 270 | "ecaron", 271 | "ecircumflex", 272 | "ecircumflexacute", 273 | "ecircumflexdotbelow", 274 | "ecircumflexgrave", 275 | "ecircumflexhookabove", 276 | "ecircumflextilde", 277 | "edblgrave", 278 | "edieresis", 279 | "edotaccent", 280 | "edotbelow", 281 | "egrave", 282 | "ehookabove", 283 | "einvertedbreve", 284 | "emacron", 285 | "eogonek", 286 | "etilde", 287 | "f", 288 | "g", 289 | "gbreve", 290 | "gcaron", 291 | "gcircumflex", 292 | "gcommaaccent", 293 | "gdotaccent", 294 | "h", 295 | "hbar", 296 | "hcircumflex", 297 | "i", 298 | "idotless", 299 | "iacute", 300 | "ibreve", 301 | "icircumflex", 302 | "idblgrave", 303 | "idieresis", 304 | "idotaccent", 305 | "idotbelow", 306 | "igrave", 307 | "ihookabove", 308 | "iinvertedbreve", 309 | "imacron", 310 | "iogonek", 311 | "itilde", 312 | "j", 313 | "jdotless", 314 | "jcircumflex", 315 | "k", 316 | "kcommaaccent", 317 | "kgreenlandic", 318 | "l", 319 | "lacute", 320 | "lcaron", 321 | "lcommaaccent", 322 | "ldot", 323 | "lj", 324 | "lslash", 325 | "m", 326 | "n", 327 | "nacute", 328 | "ncaron", 329 | "ncommaaccent", 330 | "eng", 331 | "nj", 332 | "ntilde", 333 | "o", 334 | "oacute", 335 | "obreve", 336 | "ocircumflex", 337 | "ocircumflexacute", 338 | "ocircumflexdotbelow", 339 | "ocircumflexgrave", 340 | "ocircumflexhookabove", 341 | "ocircumflextilde", 342 | "odblgrave", 343 | "odieresis", 344 | "odieresismacron", 345 | "odotaccentmacron", 346 | "odotbelow", 347 | "ograve", 348 | "ohookabove", 349 | "ohorn", 350 | "ohornacute", 351 | "ohorndotbelow", 352 | "ohorngrave", 353 | "ohornhookabove", 354 | "ohorntilde", 355 | "ohungarumlaut", 356 | "oinvertedbreve", 357 | "omacron", 358 | "oogonek", 359 | "oslash", 360 | "oslashacute", 361 | "otilde", 362 | "otildemacron", 363 | "oe", 364 | "p", 365 | "thorn", 366 | "q", 367 | "r", 368 | "racute", 369 | "rcaron", 370 | "rcommaaccent", 371 | "rdblgrave", 372 | "rinvertedbreve", 373 | "s", 374 | "sacute", 375 | "scaron", 376 | "scedilla", 377 | "scircumflex", 378 | "scommaaccent", 379 | "germandbls", 380 | "schwa", 381 | "t", 382 | "tbar", 383 | "tcaron", 384 | "tcedilla", 385 | "tcommaaccent", 386 | "u", 387 | "uacute", 388 | "ubreve", 389 | "ucircumflex", 390 | "udblgrave", 391 | "udieresis", 392 | "udotbelow", 393 | "ugrave", 394 | "uhookabove", 395 | "uhorn", 396 | "uhornacute", 397 | "uhorndotbelow", 398 | "uhorngrave", 399 | "uhornhookabove", 400 | "uhorntilde", 401 | "uhungarumlaut", 402 | "uinvertedbreve", 403 | "umacron", 404 | "uogonek", 405 | "uring", 406 | "utilde", 407 | "v", 408 | "w", 409 | "wacute", 410 | "wcircumflex", 411 | "wdieresis", 412 | "wgrave", 413 | "x", 414 | "y", 415 | "yacute", 416 | "ycircumflex", 417 | "ydieresis", 418 | "ydotbelow", 419 | "ygrave", 420 | "yhookabove", 421 | "ymacron", 422 | "ytilde", 423 | "z", 424 | "zacute", 425 | "zcaron", 426 | "zdotaccent", 427 | "f_f", 428 | "f_f_i", 429 | "f_f_ij", 430 | "f_f_l", 431 | "f_ij", 432 | "fi", 433 | "fl", 434 | "i_j.loclNLD", 435 | "iacute_j.loclNLD", 436 | "ordfeminine", 437 | "ordmasculine", 438 | "onehalf", 439 | "onequarter", 440 | "threequarters", 441 | "asterisk", 442 | "backslash", 443 | "periodcentered", 444 | "bullet", 445 | "colon", 446 | "comma", 447 | "ellipsis", 448 | "exclam", 449 | "exclamdown", 450 | "numbersign", 451 | "period", 452 | "question", 453 | "questiondown", 454 | "quotedbl", 455 | "quotesingle", 456 | "semicolon", 457 | "slash", 458 | "underscore", 459 | "periodcentered.loclCAT", 460 | "braceleft", 461 | "braceright", 462 | "bracketleft", 463 | "bracketright", 464 | "parenleft", 465 | "parenright", 466 | "braceleft.case", 467 | "braceright.case", 468 | "bracketleft.case", 469 | "bracketright.case", 470 | "parenleft.case", 471 | "parenright.case", 472 | "emdash", 473 | "endash", 474 | "hyphen", 475 | "guillemetleft", 476 | "guillemetright", 477 | "guilsinglleft", 478 | "guilsinglright", 479 | "quotedblbase", 480 | "quotedblleft", 481 | "quotedblright", 482 | "quoteleft", 483 | "quoteright", 484 | "quotesinglbase", 485 | "space", 486 | "nbspace", 487 | "cedi", 488 | "cent", 489 | "colonsign", 490 | "currency", 491 | "dollar", 492 | "dong", 493 | "euro", 494 | "florin", 495 | "franc", 496 | "guarani", 497 | "kip", 498 | "lira", 499 | "liraTurkish", 500 | "manat", 501 | "naira", 502 | "peseta", 503 | "peso", 504 | "ruble", 505 | "rupeeIndian", 506 | "sterling", 507 | "won", 508 | "yen", 509 | "bulletoperator", 510 | "divisionslash", 511 | "plus", 512 | "minus", 513 | "multiply", 514 | "divide", 515 | "equal", 516 | "notequal", 517 | "greater", 518 | "less", 519 | "greaterequal", 520 | "lessequal", 521 | "plusminus", 522 | "approxequal", 523 | "asciitilde", 524 | "logicalnot", 525 | "micro", 526 | "percent", 527 | "perthousand", 528 | "at", 529 | "ampersand", 530 | "paragraph", 531 | "section", 532 | "copyright", 533 | "registered", 534 | "trademark", 535 | "degree", 536 | "bar", 537 | "brokenbar", 538 | "dagger", 539 | "daggerdbl", 540 | "numero", 541 | "asciicircum", 542 | "one", 543 | "two", 544 | "three", 545 | "four", 546 | "five", 547 | "six", 548 | "seven", 549 | "eight", 550 | "nine", 551 | "ten", 552 | "one.lf", 553 | "two.lf", 554 | "three.lf", 555 | "four.lf", 556 | "five.lf", 557 | "six.lf", 558 | "seven.lf", 559 | "eight.lf", 560 | "nine.lf", 561 | "ten.lf", 562 | "one.osf", 563 | "two.osf", 564 | "three.osf", 565 | "four.osf", 566 | "five.osf", 567 | "six.osf", 568 | "seven.osf", 569 | "eight.osf", 570 | "nine.osf", 571 | "ten.osf", 572 | ### End GF Latin Plus list 573 | ### Start Cyrillic 574 | "A-cy", 575 | "Be-cy", 576 | "Ve-cy", 577 | "Ge-cy", 578 | "Gje-cy", 579 | "Gheupturn-cy", 580 | "De-cy", 581 | "Ie-cy", 582 | "Iegrave-cy", 583 | "Io-cy", 584 | "Zhe-cy", 585 | "Ze-cy", 586 | "Ii-cy", 587 | "Iishort-cy", 588 | "Iigrave-cy", 589 | "Ka-cy", 590 | "Kje-cy", 591 | "El-cy", 592 | "Em-cy", 593 | "En-cy", 594 | "O-cy", 595 | "Pe-cy", 596 | "Er-cy", 597 | "Es-cy", 598 | "Te-cy", 599 | "U-cy", 600 | "Ushort-cy", 601 | "Ef-cy", 602 | "Ha-cy", 603 | "Che-cy", 604 | "Tse-cy", 605 | "Sha-cy", 606 | "Shcha-cy", 607 | "Dzhe-cy", 608 | "Softsign-cy", 609 | "Hardsign-cy", 610 | "Yeru-cy", 611 | "Lje-cy", 612 | "Nje-cy", 613 | "Dze-cy", 614 | "E-cy", 615 | "Ereversed-cy", 616 | "I-cy", 617 | "Yi-cy", 618 | "Je-cy", 619 | "Tshe-cy", 620 | "Iu-cy", 621 | "Ia-cy", 622 | "Dje-cy", 623 | "Yat-cy", 624 | "Yusbig-cy", 625 | "Fita-cy", 626 | "Izhitsa-cy", 627 | "Ghestroke-cy", 628 | "Ghemiddlehook-cy", 629 | "Zhedescender-cy", 630 | "Zedescender-cy", 631 | "Kadescender-cy", 632 | "Kaverticalstroke-cy", 633 | "Kastroke-cy", 634 | "Kabashkir-cy", 635 | "Endescender-cy", 636 | "Pemiddlehook-cy", 637 | "Pedescender-cy", 638 | "Haabkhasian-cy", 639 | "Esdescender-cy", 640 | "Tedescender-cy", 641 | "Ustrait-cy", 642 | "Ustraitstroke-cy", 643 | "Hadescender-cy", 644 | "Chedescender-cy", 645 | "Cheverticalstroke-cy", 646 | "Shha-cy", 647 | "Cheabkhasian-cy", 648 | "Chedescenderabkhasian-cy", 649 | "Palochka-cy", 650 | "Zhebreve-cy", 651 | "Chekhakassian-cy", 652 | "Abreve-cy", 653 | "Adieresis-cy", 654 | "Iebreve-cy", 655 | "Schwa-cy", 656 | "Zhedieresis-cy", 657 | "Zedieresis-cy", 658 | "Dzeabkhasian-cy", 659 | "Imacron-cy", 660 | "Idieresis-cy", 661 | "Odieresis-cy", 662 | "Obarred-cy", 663 | "Umacron-cy", 664 | "Udieresis-cy", 665 | "Uhungarumlaut-cy", 666 | "Chedieresis-cy", 667 | "Gedescender-cy", 668 | "Yerudieresis-cy", 669 | "Qa-cy", 670 | "We-cy", 671 | "Ef-cy.loclBGR", 672 | "Ghestroke-cy.loclBSH", 673 | "Zedescender-cy.loclBSH", 674 | "Esdescender-cy.loclBSH", 675 | "Esdescender-cy.loclCHU", 676 | "Lje-cy.ss01", 677 | "El-cy.sso1", 678 | "De-cy.loclBGR", 679 | "Ii-cy.loclBGR", 680 | "Iishort-cy.loclBGR", 681 | "Iigrave-cy.loclBGR", 682 | "El-cy.loclBGR", 683 | "a-cy", 684 | "be-cy", 685 | "ve-cy", 686 | "ge-cy", 687 | "gje-cy", 688 | "gheupturn-cy", 689 | "de-cy", 690 | "ie-cy", 691 | "iegrave-cy", 692 | "io-cy", 693 | "zhe-cy", 694 | "ze-cy", 695 | "ii-cy", 696 | "iishort-cy", 697 | "iigrave-cy", 698 | "ka-cy", 699 | "kje-cy", 700 | "el-cy", 701 | "em-cy", 702 | "en-cy", 703 | "o-cy", 704 | "pe-cy", 705 | "er-cy", 706 | "es-cy", 707 | "te-cy", 708 | "u-cy", 709 | "ushort-cy", 710 | "ef-cy", 711 | "ha-cy", 712 | "che-cy", 713 | "tse-cy", 714 | "sha-cy", 715 | "shcha-cy", 716 | "dzhe-cy", 717 | "softsign-cy", 718 | "hardsign-cy", 719 | "yeru-cy", 720 | "lje-cy", 721 | "nje-cy", 722 | "dze-cy", 723 | "e-cy", 724 | "ereversed-cy", 725 | "i-cy", 726 | "yi-cy", 727 | "je-cy", 728 | "tshe-cy", 729 | "iu-cy", 730 | "ia-cy", 731 | "dje-cy", 732 | "yat-cy", 733 | "yusbig-cy", 734 | "fita-cy", 735 | "izhitsa-cy", 736 | "ghestroke-cy", 737 | "ghemiddlehook-cy", 738 | "zhedescender-cy", 739 | "zedescender-cy", 740 | "kadescender-cy", 741 | "kaverticalstroke-cy", 742 | "kastroke-cy", 743 | "kabashkir-cy", 744 | "endescender-cy", 745 | "pedescender-cy", 746 | "pemiddlehook-cy", 747 | "haabkhasian-cy", 748 | "esdescender-cy", 749 | "tedescender-cy", 750 | "ustrait-cy", 751 | "ustraitstroke-cy", 752 | "hadescender-cy", 753 | "chedescender-cy", 754 | "cheverticalstroke-cy", 755 | "shha-cy", 756 | "cheabkhasian-cy", 757 | "chedescenderabkhasian-cy", 758 | "palochka-cy", 759 | "zhebreve-cy", 760 | "chekhakassian-cy", 761 | "abreve-cy", 762 | "adieresis-cy", 763 | "iebreve-cy", 764 | "schwa-cy", 765 | "zhedieresis-cy", 766 | "zedieresis-cy", 767 | "dzeabkhasian-cy", 768 | "imacron-cy", 769 | "idieresis-cy", 770 | "odieresis-cy", 771 | "obarred-cy", 772 | "umacron-cy", 773 | "udieresis-cy", 774 | "uhungarumlaut-cy", 775 | "chedieresis-cy", 776 | "gedescender-cy", 777 | "yerudieresis-cy", 778 | "qa-cy", 779 | "we-cy", 780 | "ve-cy.loclBGR", 781 | "ge-cy.loclBGR", 782 | "de-cy.loclBGR", 783 | "zhe-cy.loclBGR", 784 | "ze-cy.loclBGR", 785 | "ii-cy.loclBGR", 786 | "iishort-cy.loclBGR", 787 | "iigrave-cy.loclBGR", 788 | "ka-cy.loclBGR", 789 | "pe-cy.loclBGR", 790 | "te-cy.loclBGR", 791 | "che-cy.loclBGR", 792 | "tse-cy.loclBGR", 793 | "sha-cy.loclBGR", 794 | "shcha-cy.loclBGR", 795 | "softsign-cy.loclBGR", 796 | "hardsign-cy.loclBGR", 797 | "iu-cy.loclBGR", 798 | "ghestroke-cy.loclBSH", 799 | "zedescender-cy.loclBSH", 800 | "esdescender-cy.loclBSH", 801 | "esdescender-cy.loclCHU", 802 | "be-cy.loclSRB", 803 | "el-cy.loclBGR", 804 | "en-cy.loclBGR", 805 | "gje-cy.loclMKD", 806 | "ge-cy.loclSRB", 807 | "de-cy.loclSRB", 808 | "pe-cy.loclSRB", 809 | "te-cy.loclSRB", 810 | "Enghe-cy", 811 | "enghe-cy", 812 | "Tetse-cy", 813 | "tetse-cy", 814 | ### Start Greek 815 | "Alpha", 816 | "Beta", 817 | "Gamma", 818 | "Delta", 819 | "Epsilon", 820 | "Zeta", 821 | "Eta", 822 | "Theta", 823 | "Iota", 824 | "Kappa", 825 | "Lambda", 826 | "Mu", 827 | "Nu", 828 | "Omicron", 829 | "Pi", 830 | "Rho", 831 | "Tau", 832 | "Upsilon", 833 | "Chi", 834 | "Alphatonos", 835 | "Epsilontonos", 836 | "Etatonos", 837 | "Iotatonos", 838 | "Iotadieresis", 839 | "Omicrontonos", 840 | "Upsilontonos", 841 | "Upsilondieresis", 842 | "Omegatonos", 843 | "beta", 844 | "eta", 845 | "kappa", 846 | "mu", 847 | "omicron", 848 | "rho", 849 | "sigma", 850 | "psi", 851 | "alphatonos", 852 | "epsilontonos", 853 | "etatonos", 854 | "iotadieresis", 855 | "omicrontonos", 856 | "upsilontonos", 857 | "upsilondieresistonos", 858 | "upsilondieresis", 859 | "omegatonos", 860 | ### End Greek 861 | ] 862 | 863 | DefaultKeys = { 864 | "A": ["A","A"], 865 | "B": ["I","B"], 866 | "C": ["O","C"], 867 | "D": ["I","O"], 868 | "E": ["I","E"], 869 | "F": ["I","F"], 870 | "G": ["O","C"], 871 | "H": ["I","I"], 872 | "I": ["I","I"], 873 | "J": ["J","U"], 874 | "K": ["I","K"], 875 | "L": ["I","L"], 876 | "M": ["I","I"], 877 | "N": ["I","I"], 878 | "O": ["O","O"], 879 | "P": ["I","P"], 880 | "Q": ["O","O"], 881 | "R": ["I","R"], 882 | "S": ["S","S"], 883 | "T": ["T","T"], 884 | "U": ["U","U"], 885 | "V": ["V","V"], 886 | "W": ["V","V"], 887 | "X": ["X","X"], 888 | "Y": ["Y","Y"], 889 | "Z": ["Z","Z"], 890 | "Agrave": ["A","A"], 891 | "Aacute": ["A","A"], 892 | "Acircumflex": ["A","A"], 893 | "Atilde": ["A","A"], 894 | "Adieresis": ["A","A"], 895 | "Amacron": ["A","A"], 896 | "Abreve": ["A","A"], 897 | "Aring": ["A","A"], 898 | "Aringacute": ["A","A"], 899 | "Adotbelow": ["A","A"], 900 | "Aogonek": ["A","A"], 901 | "AE": ["A","E"], 902 | "AEacute": ["A","E"], 903 | "Cacute": ["O","C"], 904 | "Ccircumflex": ["O","C"], 905 | "Ccaron": ["O","C"], 906 | "Cdotaccent": ["O","C"], 907 | "Ccedilla": ["O","C"], 908 | "Dcaron": ["I","O"], 909 | "Dcroat": ["Hbar","O"], 910 | "Eth": ["Hbar","E"], 911 | "Egrave": ["I","E"], 912 | "Eacute": ["I","E"], 913 | "Ecircumflex": ["I","E"], 914 | "Etilde": ["I","E"], 915 | "Ecaron": ["I","E"], 916 | "Edieresis": ["I","E"], 917 | "Emacron": ["I","E"], 918 | "Ebreve": ["I","E"], 919 | "Edotaccent": ["I","E"], 920 | "Edotbelow": ["I","E"], 921 | "Eogonek": ["I","E"], 922 | "Gcircumflex": ["O","C"], 923 | "Gcaron": ["O","C"], 924 | "Gbreve": ["O","C"], 925 | "Gdotaccent": ["O","C"], 926 | "Gcommaaccent": ["O","C"], 927 | "Hcircumflex": ["I","I"], 928 | "Hbar": ["Hbar","Hbar"], 929 | "Igrave": ["I","I"], 930 | "Iacute": ["I","I"], 931 | "Icircumflex": ["I","I"], 932 | "Itilde": ["I","I"], 933 | "Idieresis": ["I","I"], 934 | "Imacron": ["I","I"], 935 | "Ibreve": ["I","I"], 936 | "Idotaccent": ["I","I"], 937 | "Idotbelow": ["I","I"], 938 | "Iogonek": ["I","I"], 939 | "Jcircumflex": ["J","U"], 940 | "Kcommaaccent": ["I","K"], 941 | "Lacute": ["I","L"], 942 | "Lcaron": ["I","L"], 943 | "Lcommaaccent": ["I","L"], 944 | "Lslash": ["Hbar","L"], 945 | "Ldot": ["I","L"], 946 | "Nacute": ["I","I"], 947 | "Ntilde": ["I","I"], 948 | "Ncaron": ["I","I"], 949 | "Ncommaaccent": ["I","I"], 950 | "Eng": ["I","I"], 951 | "Ograve": ["O","O"], 952 | "Oacute": ["O","O"], 953 | "Ocircumflex": ["O","O"], 954 | "Otilde": ["O","O"], 955 | "Odieresis": ["O","O"], 956 | "Omacron": ["O","O"], 957 | "Obreve": ["O","O"], 958 | "Ohungarumlaut": ["O","O"], 959 | "Odotbelow": ["O","O"], 960 | "Oogonek": ["O","O"], 961 | "Oslash": ["O","O"], 962 | "Oslashacute": ["O","O"], 963 | "OE": ["O","E"], 964 | "Racute": ["I","R"], 965 | "Rcaron": ["I","R"], 966 | "Rcommaaccent": ["I","R"], 967 | "Sacute": ["S","S"], 968 | "Scircumflex": ["S","S"], 969 | "Scaron": ["S","S"], 970 | "Scedilla": ["S","S"], 971 | "Scommaaccent": ["S","S"], 972 | "Germandbls": ["I","Germandbls"], 973 | "Tcaron": ["T","T"], 974 | "Tcedilla": ["T","T"], 975 | "Tcommaaccent": ["T","T"], 976 | "Tbar": ["T","T"], 977 | "Thorn": ["I","P"], 978 | "Ugrave": ["U","U"], 979 | "Uacute": ["U","U"], 980 | "Ucircumflex": ["U","U"], 981 | "Utilde": ["U","U"], 982 | "Udieresis": ["U","U"], 983 | "Umacron": ["U","U"], 984 | "Ubreve": ["U","U"], 985 | "Uring": ["U","U"], 986 | "Uhungarumlaut": ["U","U"], 987 | "Udotbelow": ["U","U"], 988 | "Uogonek": ["U","U"], 989 | "Wgrave": ["V","V"], 990 | "Wacute": ["V","V"], 991 | "Wcircumflex": ["V","V"], 992 | "Wdieresis": ["V","V"], 993 | "Ygrave": ["Y","Y"], 994 | "Yacute": ["Y","Y"], 995 | "Ycircumflex": ["Y","Y"], 996 | "Ytilde": ["Y","Y"], 997 | "Ydieresis": ["Y","Y"], 998 | "Ymacron": ["Y","Y"], 999 | "Zacute": ["Z","Z"], 1000 | "Zcaron": ["Z","Z"], 1001 | "Zdotaccent": ["Z","Z"], 1002 | "Schwa": ["O","O"], 1003 | "DZcaron": ["I","Z"], 1004 | "Dzcaron": ["I","Z"], 1005 | "LJ": ["I","U"], 1006 | "Lj": ["I","j"], 1007 | "NJ": ["I","U"], 1008 | "Nj": ["N","j"], 1009 | "Adblgrave": ["A","A"], 1010 | "Ainvertedbreve": ["A","A"], 1011 | "Edblgrave": ["I","E"], 1012 | "Einvertedbreve": ["I","E"], 1013 | "Idblgrave": ["I","I"], 1014 | "Iinvertedbreve": ["I","I"], 1015 | "Odblgrave": ["O","O"], 1016 | "Oinvertedbreve": ["O","O"], 1017 | "Rdblgrave": ["I","R"], 1018 | "Rinvertedbreve": ["I","R"], 1019 | "Udblgrave": ["U","U"], 1020 | "Uinvertedbreve": ["U","U"], 1021 | "Odieresismacron": ["O","O"], 1022 | "Otildemacron": ["O","O"], 1023 | "Odotaccentmacron": ["O","O"], 1024 | "Abreveacute": ["A","A"], 1025 | "Abrevedotbelow": ["A","A"], 1026 | "Abrevegrave": ["A","A"], 1027 | "Abrevehookabove": ["A","A"], 1028 | "Abrevetilde": ["A","A"], 1029 | "Acircumflexacute": ["A","A"], 1030 | "Acircumflexdotbelow": ["A","A"], 1031 | "Acircumflexgrave": ["A","A"], 1032 | "Acircumflexhookabove": ["A","A"], 1033 | "Acircumflextilde": ["A","A"], 1034 | "Ahookabove": ["A","A"], 1035 | "Ecircumflexacute": ["I","E"], 1036 | "Ecircumflexdotbelow": ["I","E"], 1037 | "Ecircumflexgrave": ["I","E"], 1038 | "Ecircumflexhookabove": ["I","E"], 1039 | "Ecircumflextilde": ["I","E"], 1040 | "Ehookabove": ["I","E"], 1041 | "Ocircumflexacute": ["O","O"], 1042 | "Ocircumflexdotbelow": ["O","O"], 1043 | "Ocircumflexgrave": ["O","O"], 1044 | "Ocircumflexhookabove": ["O","O"], 1045 | "Ocircumflextilde": ["O","O"], 1046 | "Ohookabove": ["O","O"], 1047 | "Ohorn": ["O","O"], 1048 | "Ohornacute": ["O","O"], 1049 | "Ohorndotbelow": ["O","O"], 1050 | "Ohorngrave": ["O","O"], 1051 | "Ohornhookabove": ["O","O"], 1052 | "Ohorntilde": ["O","O"], 1053 | "Uhookabove": ["U","U"], 1054 | "Uhorn": ["U","Uhorn"], 1055 | "Uhornacute": ["U","Uhorn"], 1056 | "Uhorndotbelow": ["U","Uhorn"], 1057 | "Uhorngrave": ["U","Uhorn"], 1058 | "Uhornhookabove": ["U",""], 1059 | "Uhorntilde": ["U","U"], 1060 | "Ydotbelow": ["Y","Y"], 1061 | "Yhookabove": ["Y","Y"], 1062 | "Ihookabove": ["I","I"], 1063 | "I_J.loclNLD" : ["I", "U"], 1064 | "Iacute_J.loclNLD" : ["I", "U"], 1065 | "a": ["a","n"], 1066 | "aacute": ["a","n"], 1067 | "abreve": ["a","n"], 1068 | "abreveacute": ["a","n"], 1069 | "abrevedotbelow": ["a","n"], 1070 | "abrevegrave": ["a","n"], 1071 | "abrevehookabove": ["a","n"], 1072 | "abrevetilde": ["a","n"], 1073 | "acircumflex": ["a","n"], 1074 | "acircumflexacute": ["a","n"], 1075 | "acircumflexdotbelow": ["a","n"], 1076 | "acircumflexgrave": ["a","n"], 1077 | "acircumflexhookabove": ["a","n"], 1078 | "acircumflextilde": ["a","n"], 1079 | "adblgrave": ["a","n"], 1080 | "adieresis": ["a","n"], 1081 | "adotbelow": ["a","n"], 1082 | "agrave": ["a","n"], 1083 | "ahookabove": ["a","n"], 1084 | "ainvertedbreve": ["a","n"], 1085 | "amacron": ["a","n"], 1086 | "aogonek": ["a","n"], 1087 | "aring": ["a","n"], 1088 | "aringacute": ["a","n"], 1089 | "atilde": ["a","n"], 1090 | "ae": ["a","e"], 1091 | "aeacute": ["a","e"], 1092 | "b": ["I","o"], 1093 | "c": ["o","c"], 1094 | "cacute": ["o","c"], 1095 | "ccaron": ["o","c"], 1096 | "ccedilla": ["o","c"], 1097 | "ccircumflex": ["o","c"], 1098 | "cdotaccent": ["o","c"], 1099 | "d": ["o","d"], 1100 | "eth": ["o","o"], 1101 | "dcaron": ["o","d"], 1102 | "dcroat": ["o","hbar"], 1103 | "dz": ["o","z"], 1104 | "dzcaron": ["o","z"], 1105 | "e": ["o","e"], 1106 | "eacute": ["o","e"], 1107 | "ebreve": ["o","e"], 1108 | "ecaron": ["o","e"], 1109 | "ecircumflex": ["o","e"], 1110 | "ecircumflexacute": ["o","e"], 1111 | "ecircumflexdotbelow": ["o","e"], 1112 | "ecircumflexgrave": ["o","e"], 1113 | "ecircumflexhookabove": ["o","e"], 1114 | "ecircumflextilde": ["o","e"], 1115 | "edblgrave": ["o","e"], 1116 | "edieresis": ["o","e"], 1117 | "edotaccent": ["o","e"], 1118 | "edotbelow": ["o","e"], 1119 | "egrave": ["o","e"], 1120 | "ehookabove": ["o","e"], 1121 | "einvertedbreve": ["o","e"], 1122 | "emacron": ["o","e"], 1123 | "eogonek": ["o","e"], 1124 | "etilde": ["o","e"], 1125 | "f": ["f","f"], 1126 | "g": ["g","g"], 1127 | "gbreve": ["g","g"], 1128 | "gcaron": ["g","g"], 1129 | "gcircumflex": ["g","g"], 1130 | "gcommaaccent": ["g","g"], 1131 | "gdotaccent": ["g","g"], 1132 | "h": ["I","n"], 1133 | "hbar": ["hbar","hbar"], 1134 | "hcircumflex": ["I","n"], 1135 | "i": ["idotless","idotless"], 1136 | "idotless": ["idotless","idotless"], 1137 | "iacute": ["idotless","idotless"], 1138 | "ibreve": ["idotless","idotless"], 1139 | "icircumflex": ["idotless","idotless"], 1140 | "idblgrave": ["idotless","idotless"], 1141 | "idieresis": ["idotless","idotless"], 1142 | "idotaccent": ["idotless","idotless"], 1143 | "idotbelow": ["idotless","idotless"], 1144 | "igrave": ["idotless","idotless"], 1145 | "ihookabove": ["idotless","idotless"], 1146 | "iinvertedbreve": ["idotless","idotless"], 1147 | "imacron": ["idotless","idotless"], 1148 | "iogonek": ["idotless","idotless"], 1149 | "itilde": ["idotless","idotless"], 1150 | "j": ["jdotless","jdotless"], 1151 | "jdotless": ["jdotless","jdotless"], 1152 | "jcircumflex": ["jdotless","jdotless"], 1153 | "k": ["I","k"], 1154 | "kcommaaccent": ["I","k"], 1155 | "kgreenlandic": ["n","k"], 1156 | "l": ["I","l"], 1157 | "lacute": ["I","l"], 1158 | "lcaron": ["I","l"], 1159 | "lcommaaccent": ["I","l"], 1160 | "ldot": ["I","l"], 1161 | "lj": ["I","l"], 1162 | "lslash": ["hbar","l"], 1163 | "m": ["n","n"], 1164 | "n": ["n","n"], 1165 | "nacute": ["n","n"], 1166 | "ncaron": ["n","n"], 1167 | "ncommaaccent": ["n","n"], 1168 | "eng": ["n","j"], 1169 | "nj": ["n","j"], 1170 | "ntilde": ["n","n"], 1171 | "o": ["o","o"], 1172 | "oacute": ["o","o"], 1173 | "obreve": ["o","o"], 1174 | "ocircumflex": ["o","o"], 1175 | "ocircumflexacute": ["o","o"], 1176 | "ocircumflexdotbelow": ["o","o"], 1177 | "ocircumflexgrave": ["o","o"], 1178 | "ocircumflexhookabove": ["o","o"], 1179 | "ocircumflextilde": ["o","o"], 1180 | "odblgrave": ["o","o"], 1181 | "odieresis": ["o","o"], 1182 | "odieresismacron": ["o","o"], 1183 | "odotaccentmacron": ["o","o"], 1184 | "odotbelow": ["o","o"], 1185 | "ograve": ["o","o"], 1186 | "ohookabove": ["o","o"], 1187 | "ohorn": ["o","o"], 1188 | "ohornacute": ["o","o"], 1189 | "ohorndotbelow": ["o","o"], 1190 | "ohorngrave": ["o","o"], 1191 | "ohornhookabove": ["o","o"], 1192 | "ohorntilde": ["o","o"], 1193 | "ohungarumlaut": ["o","o"], 1194 | "oinvertedbreve": ["o","o"], 1195 | "omacron": ["o","o"], 1196 | "oogonek": ["o","o"], 1197 | "oslash": ["o","o"], 1198 | "oslashacute": ["o","o"], 1199 | "otilde": ["o","o"], 1200 | "otildemacron": ["o","o"], 1201 | "oe": ["o","e"], 1202 | "p": ["n","o"], 1203 | "thorn": ["I","o"], 1204 | "q": ["o","q"], 1205 | "r": ["n","r"], 1206 | "racute": ["n","r"], 1207 | "rcaron": ["n","r"], 1208 | "rcommaaccent": ["n","r"], 1209 | "rdblgrave": ["n","r"], 1210 | "rinvertedbreve": ["n","r"], 1211 | "s": ["s","s"], 1212 | "sacute": ["s","s"], 1213 | "scaron": ["s","s"], 1214 | "scedilla": ["s","s"], 1215 | "scircumflex": ["s","s"], 1216 | "scommaaccent": ["s","s"], 1217 | "germandbls": ["I","germandbls"], 1218 | "schwa": ["o","o"], 1219 | "t": ["t","t"], 1220 | "tbar": ["t","t"], 1221 | "tcaron": ["t","t"], 1222 | "tcedilla": ["t","t"], 1223 | "tcommaaccent": ["t","t"], 1224 | "u": ["u","u"], 1225 | "uacute": ["u","u"], 1226 | "ubreve": ["u","u"], 1227 | "ucircumflex": ["u","u"], 1228 | "udblgrave": ["u","u"], 1229 | "udieresis": ["u","u"], 1230 | "udotbelow": ["u","u"], 1231 | "ugrave": ["u","u"], 1232 | "uhookabove": ["u","u"], 1233 | "uhorn": ["u","uhorn"], 1234 | "uhornacute": ["u","uhorn"], 1235 | "uhorndotbelow": ["u","uhorn"], 1236 | "uhorngrave": ["u","uhorn"], 1237 | "uhornhookabove": ["u","u"], 1238 | "uhorntilde": ["u","u"], 1239 | "uhungarumlaut": ["u","u"], 1240 | "uinvertedbreve": ["u","u"], 1241 | "umacron": ["u","u"], 1242 | "uogonek": ["u","u"], 1243 | "uring": ["u","u"], 1244 | "utilde": ["u","u"], 1245 | "v": ["v","v"], 1246 | "w": ["v","v"], 1247 | "wacute": ["v","v"], 1248 | "wcircumflex": ["v","v"], 1249 | "wdieresis": ["v","v"], 1250 | "wgrave": ["v","v"], 1251 | "x": ["x","x"], 1252 | "y": ["y","y"], 1253 | "yacute": ["y","y"], 1254 | "ycircumflex": ["y","y"], 1255 | "ydieresis": ["y","y"], 1256 | "ydotbelow": ["y","y"], 1257 | "ygrave": ["y","y"], 1258 | "yhookabove": ["y","y"], 1259 | "ymacron": ["y","y"], 1260 | "ytilde": ["y","y"], 1261 | "z": ["z","z"], 1262 | "zacute": ["z","z"], 1263 | "zcaron": ["z","z"], 1264 | "zdotaccent": ["z","z"], 1265 | "f_f" : ["f", "f"], 1266 | "f_f_i" : ["f", "i"], 1267 | "f_f_ij" : ["f", "j"], 1268 | "f_f_l" : ["f", "l"], 1269 | "f_ij" : ["f", "j"], 1270 | "fi" : ["f", "i"], 1271 | "fl" : ["f", "l"], 1272 | "i_j.loclNLD" : ["i", "j"], 1273 | "iacute_j.loclNLD" : ["i", "j"], 1274 | "ordfeminine" : ["ordfeminine", "ordfeminine"], 1275 | "ordmasculine" : ["ordfeminine", "ordfeminine"], 1276 | "onehalf" : ["onehalf", "onehalf"], 1277 | "onequarter" : ["onehalf", "onehalf"], 1278 | "threequarters" : ["onehalf", "onehalf"], 1279 | "asterisk" : ["asterisk", "asterisk"], 1280 | "backslash" : ["backslash", "backslash"], 1281 | "periodcentered" : ["hyphen", "hyphen"], 1282 | "bullet" : ["hyphen", "hyphen"], 1283 | "colon" : ["colon", "colon"], 1284 | "comma" : ["period", "period"], 1285 | "ellipsis" : ["period", "period"], 1286 | "exclam" : ["exclam", "exclam"], 1287 | "exclamdown" : ["exclam", "exclam"], 1288 | "numbersign" : ["numbersign", "numbersign"], 1289 | "period" : ["period", "period"], 1290 | "question" : ["quesion", "question"], 1291 | "questiondown" : ["questiondown", "questiondown"], 1292 | "quotedbl" : ["quotesingle", "quotesingle"], 1293 | "quotesingle" : ["quotesingle", "quotesingle"], 1294 | "semicolon" : ["colon", "colon"], 1295 | "slash" : ["slash", "slash"], 1296 | "underscore" : ["period", "period"], 1297 | "periodcentered.loclCAT" : ["period", "period"], 1298 | "braceleft" : ["parenleft", "parenleft"], 1299 | "braceright" : ["parenright", "parenright"], 1300 | "bracketleft" : ["parenleft", "parenleft"], 1301 | "bracketright" : ["parenright", "parenright"], 1302 | "parenleft" : ["parenleft", "parenleft"], 1303 | "parenright" : ["parenright", "parenright"], 1304 | "braceleft.case" : ["parenleft", "parenleft"], 1305 | "braceright.case" : ["parenright", "parenright"], 1306 | "bracketleft.case" : ["parenleft", "parenleft"], 1307 | "bracketright.case" : ["parenright", "parenright"], 1308 | "parenleft.case" : ["parenleft", "parenleft"], 1309 | "parenright.case" : ["parenright", "parenright"], 1310 | "emdash" : ["hyphen", "hyphen"], 1311 | "endash" : ["hyphen", "hyphen"], 1312 | "hyphen" : ["hyphen", "hyphen"], 1313 | "guillemetleft" : ["guilsinglleft", "guilsinglleft"], 1314 | "guillemetright" : ["guilsinglright", "guilsinglright"], 1315 | "guilsinglleft" : ["guilsinglleft", "guilsinglleft"], 1316 | "guilsinglright" : ["guilsinglright", "guilsinglright"], 1317 | "quotedblbase" : ["period", "period"], 1318 | "quotedblleft" : ["quoteleft", "quoteleft"], 1319 | "quotedblright" : ["quoteright", "quoteright"], 1320 | "quoteleft" : ["quoteleft", "quoteleft"], 1321 | "quoteright" : ["quoteright", "quoteright"], 1322 | "quotesinglbase" : ["period", "period"], 1323 | "space" : ["space", "space"], 1324 | "nbspace" : ["space", "space"], 1325 | "cedi" : ["O", "C"], 1326 | "cent" : ["o", "c"], 1327 | "colonsign" : ["O", "C"], 1328 | "currency" : ["currency", "currency"], 1329 | "dollar" : ["S", "S"], 1330 | "dong" : ["o", "d"], 1331 | "euro" : ["O", "C"], 1332 | "florin" : ["florin", "florin"], 1333 | "franc" : ["Hbar", "F"], 1334 | "guarani" : ["O", "C"], 1335 | "kip" : ["Hbar", "K"], 1336 | "lira" : ["sterling", "sterling"], 1337 | "liraTurkish" : ["Hbar", "L"], 1338 | "manat" : ["U", "U"], 1339 | "naira" : ["Hbar", "Hbar"], 1340 | "peseta" : ["P", "s"], 1341 | "peso" : ["Hbar", "P"], 1342 | "ruble" : ["Hbar", "P"], 1343 | "rupeeIndian" : ["I", "rupeeIndian"], 1344 | "sterling" : ["sterling", "sterling"], 1345 | "won" : ["V", "V"], 1346 | "yen" : ["Y", "Y"], 1347 | "bulletoperator" : ["hyphen", "hyphen"], 1348 | "divisionslash" : ["slash", "slash"], 1349 | "plus" : ["plus", "plus"], 1350 | "minus" : ["plus", "plus"], 1351 | "multiply" : ["plus", "plus"], 1352 | "divide" : ["plus", "plus"], 1353 | "equal" : ["plus", "plus"], 1354 | "notequal" : ["plus", "plus"], 1355 | "greater" : ["plus", "plus"], 1356 | "less" : ["plus", "plus"], 1357 | "greaterequal" : ["plus", "plus"], 1358 | "lessequal" : ["plus", "plus"], 1359 | "plusminus" : ["plus", "plus"], 1360 | "approxequal" : ["plus", "plus"], 1361 | "asciitilde" : ["plus", "plus"], 1362 | "logicalnot" : ["plus", "plus"], 1363 | "micro" : ["u", "micro"], 1364 | "percent" : ["percent", "percent"], 1365 | "perthousand" : ["percent", "percent"], 1366 | "at" : ["at", "at"], 1367 | "ampersand" : ["ampersand", "ampersand"], 1368 | "paragraph" : ["paragraph", "I"], 1369 | "section" : ["section", "section"], 1370 | "copyright" : ["O", "O"], 1371 | "registered" : ["O", "O"], 1372 | "trademark" : ["ordfeminine", "ordfeminine"], 1373 | "degree" : ["ordfeminine", "ordfeminine"], 1374 | "bar" : ["I", "I"], 1375 | "brokenbar" : ["I", "I"], 1376 | "dagger" : ["Hbar", "Hbar"], 1377 | "daggerdbl" : ["Hbar", "Hbar"], 1378 | "numero" : ["I", "ordfeminine"], 1379 | "asciicircum" : ["asterisk", "asterisk"], 1380 | "one" : ["one", "one"], 1381 | "two" : ["two", "two"], 1382 | "three" : ["three", "three"], 1383 | "four" : ["four", "four"], 1384 | "five" : ["five", "five"], 1385 | "six" : ["six", "six"], 1386 | "seven" : ["seven", "seven"], 1387 | "eight" : ["eight", "eight"], 1388 | "nine" : ["nine", "nine"], 1389 | "ten" : ["ten", "ten"], 1390 | "one.lf" : ["one", "one"], 1391 | "two.lf" : ["two", "two"], 1392 | "three.lf" : ["three", "three"], 1393 | "four.lf" : ["four", "four"], 1394 | "five.lf" : ["five", "five"], 1395 | "six.lf" : ["six", "six"], 1396 | "seven.lf" : ["seven", "seven"], 1397 | "eight.lf" : ["eight", "eight"], 1398 | "nine.lf" : ["nine", "nine"], 1399 | "ten.lf" : ["ten", "ten"], 1400 | "one.osf" : ["one", "one"], 1401 | "two.osf" : ["two", "two"], 1402 | "three.osf" : ["three", "three"], 1403 | "four.osf" : ["four", "four"], 1404 | "five.osf" : ["five", "five"], 1405 | "six.osf" : ["six", "six"], 1406 | "seven.osf" : ["seven", "seven"], 1407 | "eight.osf" : ["eight", "eight"], 1408 | "nine.osf" : ["nine", "nine"], 1409 | "ten.osf" : ["ten", "ten"], 1410 | ### Cyrillic 1411 | "A-cy" : ["A", "A"], 1412 | "Be-cy" : ["I", "Be-cy"], 1413 | "Ve-cy" : ["I", "B"], 1414 | "Ge-cy" : ["I", "Ge-cy"], 1415 | "Gje-cy" : ["I", "Ge-cy"], 1416 | "Gheupturn-cy" : ["I", "Ge-cy"], 1417 | "De-cy" : ["De-cy", "Tse-cy"], 1418 | "Ie-cy" : ["I", "E"], 1419 | "Iegrave-cy" : ["I", "E"], 1420 | "Io-cy" : ["I", "E"], 1421 | "Zhe-cy" : ["X", "K"], 1422 | "Ze-cy" : ["Ze-cy", "B"], 1423 | "Ii-cy" : ["I", "I"], 1424 | "Iishort-cy" : ["I", "I"], 1425 | "Iigrave-cy" : ["I", "I"], 1426 | "Ka-cy" : ["I", "K"], 1427 | "Kje-cy" : ["I", "K"], 1428 | "El-cy" : ["El-cy", "I"], 1429 | "Em-cy" : ["I", "I"], 1430 | "En-cy" : ["I", "I"], 1431 | "O-cy" : ["O", "O"], 1432 | "Pe-cy" : ["I", "I"], 1433 | "Er-cy" : ["I", "P"], 1434 | "Es-cy" : ["O", "C"], 1435 | "Te-cy" : ["T", "T"], 1436 | "U-cy" : ["U-cy", "U-cy"], 1437 | "Ushort-cy" : ["U-cy", "U-cy"], 1438 | "Ef-cy" : ["O", "O"], 1439 | "Ha-cy" : ["X", "X"], 1440 | "Che-cy" : ["Che-cy", "I"], 1441 | "Tse-cy" : ["I", "Tse-cy"], 1442 | "Sha-cy" : ["I", "I"], 1443 | "Shcha-cy" : ["I", "Tse-cy"], 1444 | "Dzhe-cy" : ["I", "I"], 1445 | "Softsign-cy" : ["I", "Softsign-cy"], 1446 | "Hardsign-cy" : ["T", "Softsign-cy"], 1447 | "Yeru-cy" : ["I", "I"], 1448 | "Lje-cy" : ["El-cy", "Softsign-cy"], 1449 | "Nje-cy" : ["I", "Softsign-cy"], 1450 | "Dze-cy" : ["S", "S"], 1451 | "E-cy" : ["O", "C"], 1452 | "Ereversed-cy" : ["Ereversed-cy", "O"], 1453 | "I-cy" : ["I", "I"], 1454 | "Yi-cy" : ["I", "I"], 1455 | "Je-cy" : ["J", "J"], 1456 | "Tshe-cy" : ["T", "Tshe-cy"], 1457 | "Iu-cy" : ["I", "O"], 1458 | "Ia-cy" : ["Ia-cy", "I"], 1459 | "Dje-cy" : ["T", "Tshe-cy"], 1460 | "Yat-cy" : ["I", "Softsign-cy"], 1461 | "Yusbig-cy" : ["X", "X"], 1462 | "Fita-cy" : ["O", "O"], 1463 | "Izhitsa-cy" : ["V", "V"], 1464 | "Ghestroke-cy" : ["I", "Ge-cy"], 1465 | "Ghemiddlehook-cy" : ["I", "Tshe-cy"], 1466 | "Zhedescender-cy" : ["X", "Kadescender-cy"], 1467 | "Zedescender-cy" : ["Ze-cy", "B"], 1468 | "Kadescender-cy" : ["I", "Kadescender-cy"], 1469 | "Kaverticalstroke-cy" : ["I", "K"], 1470 | "Kastroke-cy" : ["I", "K"], 1471 | "Kabashkir-cy" : ["T", "K"], 1472 | "Endescender-cy" : ["I", "Tse-cy"], 1473 | "Pemiddlehook-cy" : ["I", "Tshe-cy"], 1474 | "Pedescender-cy" : ["I", "Tse-cy"], 1475 | "Haabkhasian-cy" : ["O", "O"], 1476 | "Esdescender-cy" : ["O", "C"], 1477 | "Tedescender-cy" : ["T", "T"], 1478 | "Ustrait-cy" : ["Y", "Y"], 1479 | "Ustraitstroke-cy" : ["Y", "Y"], 1480 | "Hadescender-cy" : ["X", "Kadescender-cy"], 1481 | "Chedescender-cy" : ["Che-cy", "Tse-cy"], 1482 | "Cheverticalstroke-cy" : ["Che-cy", "I"], 1483 | "Shha-cy" : ["I", "Tshe-cy"], 1484 | "Cheabkhasian-cy" : ["Cheabkhasian-cy", "C"], 1485 | "Chedescenderabkhasian-cy" : ["Cheabkhasian-cy", "Cheabkhasian-cy"], 1486 | "Palochka-cy" : ["I", "I"], 1487 | "Zhebreve-cy" : ["X", "X"], 1488 | "Chekhakassian-cy" : ["Che-cy", "I"], 1489 | "Abreve-cy" : ["A", "A"], 1490 | "Adieresis-cy" : ["A", "A"], 1491 | "Iebreve-cy" : ["I", "E"], 1492 | "Schwa-cy" : ["Ereversed-cy", "O"], 1493 | "Zhedieresis-cy" : ["X", "K"], 1494 | "Zedieresis-cy" : ["Ze-cy", "B"], 1495 | "Dzeabkhasian-cy" : ["Ze-cy", "B"], 1496 | "Imacron-cy" : ["I", "I"], 1497 | "Idieresis-cy" : ["I", "I"], 1498 | "Odieresis-cy" : ["O", "O"], 1499 | "Obarred-cy" : ["O", "O"], 1500 | "Umacron-cy" : ["v", "v"], 1501 | "Udieresis-cy" : ["U-cy", "U-cy"], 1502 | "Uhungarumlaut-cy" : ["U-cy", "U-cy"], 1503 | "Chedieresis-cy" : ["Che-cy", "I"], 1504 | "Gedescender-cy" : ["I", "Ge-cy"], 1505 | "Yerudieresis-cy" : ["I", "I"], 1506 | "Qa-cy" : ["O", "O"], 1507 | "We-cy" : ["V", "V"], 1508 | "Ef-cy.loclBGR" : ["O", "O"], 1509 | "Ghestroke-cy.loclBSH" : ["I", "F"], 1510 | "Zedescender-cy.loclBSH" : ["Ze-cy", "B"], 1511 | "Esdescender-cy.loclBSH" : ["O", "C"], 1512 | "Esdescender-cy.loclCHU" : ["O", "C"], 1513 | "De-cy.loclBGR" : ["De-cy", "Tse-cy"], 1514 | "Ii-cy.loclBGR" : ["I", "I"], 1515 | "Iishort-cy.loclBGR" : ["I", "I"], 1516 | "Iigrave-cy.loclBGR" : ["I", "I"], 1517 | "El-cy.loclBGR" : ["El-cy", "I"], 1518 | "a-cy" : ["a", "n"], 1519 | "be-cy" : ["be-cy", "o"], 1520 | "ve-cy" : ["n", "ve-cy"], 1521 | "ge-cy" : ["n", "ge-cy"], 1522 | "gje-cy" : ["n", "ge-cy"], 1523 | "gheupturn-cy" : ["n", "ge-cy"], 1524 | "de-cy" : ["de-cy", "tse-cy"], 1525 | "ie-cy" : ["o", "e"], 1526 | "iegrave-cy" : ["o", "e"], 1527 | "io-cy" : ["o", "e"], 1528 | "zhe-cy" : ["x", "x"], 1529 | "ze-cy" : ["ze-cy", "ve-cy"], 1530 | "ii-cy" : ["n", "u"], 1531 | "iishort-cy" : ["n", "u"], 1532 | "iigrave-cy" : ["n", "u"], 1533 | "ka-cy" : ["n", "k"], 1534 | "kje-cy" : ["n", "k"], 1535 | "el-cy" : ["el-cy", "u"], 1536 | "em-cy" : ["n", "u"], 1537 | "en-cy" : ["n", "n"], 1538 | "o-cy" : ["o", "o"], 1539 | "pe-cy" : ["n", "u"], 1540 | "er-cy" : ["p", "o"], 1541 | "es-cy" : ["o", "c"], 1542 | "te-cy" : ["te-cy", "te-cy"], 1543 | "u-cy" : ["v", "v"], 1544 | "ushort-cy" : ["v", "v"], 1545 | "ef-cy" : ["o", "o"], 1546 | "ha-cy" : ["x", "x"], 1547 | "che-cy" : ["che-cy", "u"], 1548 | "tse-cy" : ["n", "tse-cy"], 1549 | "sha-cy" : ["n", "u"], 1550 | "shcha-cy" : ["n", "tse-cy"], 1551 | "dzhe-cy" : ["n", "u"], 1552 | "softsign-cy" : ["n", "softsign-cy"], 1553 | "hardsign-cy" : ["te-cy", "softsign-cy"], 1554 | "yeru-cy" : ["n", "u"], 1555 | "lje-cy" : ["el-cy", "softsign-cy"], 1556 | "nje-cy" : ["n", "softsign-cy"], 1557 | "dze-cy" : ["s", "s"], 1558 | "e-cy" : ["o", "c"], 1559 | "ereversed-cy" : ["ereversed-cy", "o"], 1560 | "i-cy" : ["i", "i"], 1561 | "yi-cy" : ["i", "i"], 1562 | "je-cy" : ["j", "i"], 1563 | "tshe-cy" : ["I", "I"], 1564 | "iu-cy" : ["n", "o"], 1565 | "ia-cy" : ["ia-cy", "u"], 1566 | "dje-cy" : ["I", "I"], 1567 | "yat-cy" : ["I", "softsign-cy"], 1568 | "yusbig-cy" : ["x", "x"], 1569 | "fita-cy" : ["o", "o"], 1570 | "izhitsa-cy" : ["v", "v"], 1571 | "ghestroke-cy" : ["n", "ge-cy"], 1572 | "ghemiddlehook-cy" : ["n", "midddehook-cy"], 1573 | "zhedescender-cy" : ["x", "kadescender-cy"], 1574 | "zedescender-cy" : ["ze-cy", "ve-cy"], 1575 | "kadescender-cy" : ["n", "kadescender-cy"], 1576 | "kaverticalstroke-cy" : ["n", "k"], 1577 | "kastroke-cy" : ["I", "k"], 1578 | "kabashkir-cy" : ["te-cy", "k"], 1579 | "endescender-cy" : ["n", "tse-cy"], 1580 | "pedescender-cy" : ["n", "tse-cy"], 1581 | "pemiddlehook-cy" : ["n", "midddehook-cy"], 1582 | "haabkhasian-cy" : ["o", "o"], 1583 | "esdescender-cy" : ["o", "c"], 1584 | "tedescender-cy" : ["te-cy", "te-cy"], 1585 | "ustrait-cy" : ["v", "v"], 1586 | "ustraitstroke-cy" : ["v", "v"], 1587 | "hadescender-cy" : ["x", "kadescender-cy"], 1588 | "chedescender-cy" : ["che-cy", "tse-cy"], 1589 | "cheverticalstroke-cy" : ["che-cy", "u"], 1590 | "shha-cy" : ["I", "n"], 1591 | "cheabkhasian-cy" : ["cheabkhasian-cy", "e"], 1592 | "chedescenderabkhasian-cy" : ["cheabkhasian-cy", "e"], 1593 | "palochka-cy" : ["i", "i"], 1594 | "zhebreve-cy" : ["x", "x"], 1595 | "chekhakassian-cy" : ["che-cy", "u"], 1596 | "abreve-cy" : ["a", "n"], 1597 | "adieresis-cy" : ["a", "n"], 1598 | "iebreve-cy" : ["o", "e"], 1599 | "schwa-cy" : ["o", "o"], 1600 | "zhedieresis-cy" : ["x", "x"], 1601 | "zedieresis-cy" : ["ze-cy", "ve-cy"], 1602 | "dzeabkhasian-cy" : ["ze-cy", "ve-cy"], 1603 | "imacron-cy" : ["n", "u"], 1604 | "idieresis-cy" : ["n", "u"], 1605 | "odieresis-cy" : ["o", "o"], 1606 | "obarred-cy" : ["o", "o"], 1607 | "umacron-cy" : ["v", "v"], 1608 | "udieresis-cy" : ["v", "v"], 1609 | "uhungarumlaut-cy" : ["v", "v"], 1610 | "chedieresis-cy" : ["che-cy", "u"], 1611 | "gedescender-cy" : ["n", "ge-cy"], 1612 | "yerudieresis-cy" : ["n", "u"], 1613 | "qa-cy" : ["o", "q"], 1614 | "we-cy" : ["v", "v"], 1615 | "ve-cy.loclBGR" : ["n", "ve-cy"], 1616 | "ge-cy.loclBGR" : ["s", "s"], 1617 | "de-cy.loclBGR" : ["o", "g"], 1618 | "zhe-cy.loclBGR" : ["x", "x"], 1619 | "ze-cy.loclBGR" : ["ze-cy", "ve-cy"], 1620 | "ii-cy.loclBGR" : ["u", "u"], 1621 | "iishort-cy.loclBGR" : ["u", "u"], 1622 | "iigrave-cy.loclBGR" : ["u", "u"], 1623 | "ka-cy.loclBGR" : ["I", "k"], 1624 | "pe-cy.loclBGR" : ["n", "n"], 1625 | "te-cy.loclBGR" : ["n", "n"], 1626 | "che-cy.loclBGR" : ["che-cy", "u"], 1627 | "tse-cy.loclBGR" : ["u", "tse-cy"], 1628 | "sha-cy.loclBGR" : ["u", "u"], 1629 | "shcha-cy.loclBGR" : ["u", "tse-cy"], 1630 | "softsign-cy.loclBGR" : ["u", "softsign-cy"], 1631 | "hardsign-cy.loclBGR" : ["te-cy", "softsign-cy"], 1632 | "iu-cy.loclBGR" : ["I", "o"], 1633 | "ghestroke-cy.loclBSH" : ["n", "ge-cy"], 1634 | "zedescender-cy.loclBSH" : ["ze-cy", "ze-cy"], 1635 | "esdescender-cy.loclBSH" : ["o", "c"], 1636 | "esdescender-cy.loclCHU" : ["o", "c"], 1637 | "be-cy.loclSRB" : ["o", "o"], 1638 | "el-cy.ss01" : ["el-cy.ss01", "u"], 1639 | "lje-cy.ss01" : ["el-cy.ss01", "softsign-cy"], 1640 | "el-cy.loclBGR" : ["el-cy", "u"], 1641 | "en-cy.loclBGR" : ["u", "n"], 1642 | "gje-cy.loclMKD" : ["ge-cy", "n"], 1643 | "ge-cy.loclSRB" : ["n", "ge-cy"], 1644 | "de-cy.loclSRB" : ["de-cy", "tse-cy"], 1645 | "pe-cy.loclSRB" : ["u", "n"], 1646 | "te-cy.loclSRB" : ["te-cy", "te-cy"], 1647 | "Enghe-cy" : ["I", "Ge-cy"], 1648 | "enghe-cy" : ["n", "ge-cy"], 1649 | "Tetse-cy" : ["T", "Tse-cy"], 1650 | "tetse-cy" : ["te-cy", "tse-cy"], 1651 | ### Greek 1652 | "Alpha" : ["A", "A"], 1653 | "Beta" : ["I", "B"], 1654 | "Gamma" : ["", "I"], 1655 | "Delta" : ["A", "A"], 1656 | "Epsilon" : ["I", "E"], 1657 | "Zeta" : ["Z", "Z"], 1658 | "Eta" : ["I", "I"], 1659 | "Theta" : ["O", "O"], 1660 | "Iota" : ["I", "I"], 1661 | "Kappa" : ["I", "K"], 1662 | "Lambda" : ["A", "A"], 1663 | "Mu" : ["M", "M"], 1664 | "Nu" : ["I", "I"], 1665 | "Omicron" : ["O", "O"], 1666 | "Pi" : ["I", "I"], 1667 | "Rho" : ["I", "P"], 1668 | "Tau" : ["T", "T"], 1669 | "Upsilon" : ["Y", "Y"], 1670 | "Chi" : ["X", "X"], 1671 | "Alphatonos" : ["A", "A"], 1672 | "Epsilontonos" : ["E", "E"], 1673 | "Etatonos" : ["I", "I"], 1674 | "Iotatonos" : ["I", "I"], 1675 | "Iotadieresis" : ["I", "I"], 1676 | "Omicrontonos" : ["O", "O"], 1677 | "Upsilontonos" : ["Y", "Y"], 1678 | "Upsilondieresis" : ["Y", "Y"], 1679 | "Omegatonos" : ["Omega", "Omega"], 1680 | "beta" : ["I", ""], 1681 | "eta" : ["n", "n"], 1682 | "kappa" : ["n", "k"], 1683 | "mu" : ["p", "u"], 1684 | "omicron" : ["o", "o"], 1685 | "rho" : ["rho", "o"], 1686 | "sigma" : ["o", ""], 1687 | "psi" : ["upsilon", "upsilon"], 1688 | "alphatonos" : ["alpha", "alpha"], 1689 | "epsilontonos" : ["epsilon", "epsilon"], 1690 | "etatonos" : ["n", "n"], 1691 | "iotadieresis" : ["i", "i"], 1692 | "omicrontonos" : ["o", "o"], 1693 | "upsilontonos" : ["upsilon", "upsilon"], 1694 | "upsilondieresistonos" : ["upsilon", "upsilon"], 1695 | "upsilondieresis" : ["upsilon", "upsilon"], 1696 | "omegatonos" : ["omega", "omega"], 1697 | } 1698 | 1699 | def KeysForGlyph(Glyph): 1700 | if Glyph == None: 1701 | return [] 1702 | global DefaultKeys 1703 | LeftKey = False 1704 | RightKey = False 1705 | try: 1706 | LeftKey = Glyph.leftKerningGroup 1707 | except: 1708 | print(traceback.format_exc()) 1709 | try: 1710 | RightKey = Glyph.rightKerningGroup 1711 | except: 1712 | print(traceback.format_exc()) 1713 | try: 1714 | if len(LeftKey < 1): 1715 | LeftKey = False 1716 | except TypeError: 1717 | pass 1718 | except: 1719 | print(traceback.format_exc()) 1720 | try: 1721 | if len(RightKey < 1): 1722 | RightKey = False 1723 | except TypeError: 1724 | pass 1725 | except: 1726 | print(traceback.format_exc()) 1727 | return (LeftKey, RightKey) 1728 | 1729 | def updateKeyGlyphsForSelected(): 1730 | Doc = Glyphs.currentDocument 1731 | Font = Doc.font 1732 | SelectedLayers = Doc.selectedLayers() 1733 | for Layer in SelectedLayers: 1734 | Glyph = Layer.parent 1735 | LeftKey = "" 1736 | RightKey = "" 1737 | LigatureComponents = Glyph.name.split("_") 1738 | if len(Layer.components) > 0 and len(Layer.paths) == 0 and Layer.components[0].transformStruct()[0] == 1: 1739 | componentGlyph = Layer.components[0].component 1740 | if not componentGlyph: 1741 | raise Exception("Something is wrong with a Component in Glyphs %s" % Layer.parent.name) 1742 | if componentGlyph.category == "Letter": 1743 | LeftKey = KeysForGlyph(componentGlyph)[0] 1744 | if not LeftKey: 1745 | LeftKey = componentGlyph.name 1746 | 1747 | for Component in Layer.components: 1748 | try: 1749 | if Component.component.category == "Letter": 1750 | if Component.transform[0] == 1: 1751 | componentGlyph = Component.component 1752 | elif Component.component.category != "Mark": 1753 | #componentGlyph = None 1754 | pass 1755 | except: 1756 | pass 1757 | if componentGlyph: 1758 | RightKey = KeysForGlyph(componentGlyph)[1] 1759 | if not RightKey: 1760 | RightKey = componentGlyph.name 1761 | 1762 | elif len(LigatureComponents) > 1: 1763 | LeftGlyph = Font.glyphs[LigatureComponents[0]] 1764 | if LeftGlyph != None: 1765 | LeftKey = KeysForGlyph(LeftGlyph)[0] 1766 | RightGlyph = Font.glyphs[LigatureComponents[-1]] 1767 | if RightGlyph != None: 1768 | RightKey = KeysForGlyph(RightGlyph)[1] 1769 | if LeftKey: 1770 | try: 1771 | if LeftKey not in Font.glyphs and not Font.glyphs[LeftKey].export: 1772 | LeftKey = False 1773 | except: 1774 | LeftKey = False 1775 | if RightKey: 1776 | try: 1777 | if RightKey not in Font.glyphs and not Font.glyphs[RightKey].export: 1778 | RightKey = False 1779 | except: 1780 | pass 1781 | if not LeftKey: 1782 | try: 1783 | LeftKey = DefaultKeys[Glyph.name][0] 1784 | except KeyError: 1785 | pass 1786 | except: 1787 | print(traceback.format_exc()) 1788 | if not RightKey: 1789 | try: 1790 | RightKey = DefaultKeys[Glyph.name][1] 1791 | except KeyError: 1792 | pass 1793 | except: 1794 | print(traceback.format_exc()) 1795 | if not LeftKey and Glyph.name[-3:] == ".sc": 1796 | try: 1797 | Glyph 1798 | LeftKey = DefaultKeys[Glyph.name[:-3].title()][0] 1799 | if (len(LeftKey) > 0): 1800 | LeftKey = LeftKey.lower()+".sc" 1801 | except: 1802 | print(traceback.format_exc()) 1803 | if not RightKey and Glyph.name[-3:] == ".sc": 1804 | try: 1805 | RightKey = DefaultKeys[Glyph.name[:-3].title()][1] 1806 | if (len(RightKey) > 0): 1807 | RightKey = RightKey.lower()+".sc" 1808 | except: 1809 | print(traceback.format_exc()) 1810 | if not LeftKey: 1811 | LeftKey = Glyph.name 1812 | if not RightKey: 1813 | RightKey = Glyph.name 1814 | 1815 | print(Glyph.name, ">", LeftKey, RightKey) 1816 | if Glyph.leftKerningGroup is None or len(Glyph.leftKerningGroup) == 0: 1817 | Glyph.setLeftKerningGroup_(LeftKey) 1818 | if Glyph.rightKerningGroup is None or len(Glyph.rightKerningGroup) == 0: 1819 | Glyph.setRightKerningGroup_(RightKey) 1820 | 1821 | def main(): 1822 | print("*** Start Update Key Glyphs ***\n") 1823 | updateKeyGlyphsForSelected() 1824 | print("*** End ****") 1825 | 1826 | def test(): 1827 | NewDefaultKeys = {} 1828 | for key in Keys: 1829 | key = niceName(key) 1830 | values = DefaultKeys[key] 1831 | newValues = [] 1832 | for value in values: 1833 | newValues.append( niceName(value) ) 1834 | print(" \"%s\" : [\"%s\", \"%s\"]," % (key, newValues[1], newValues[0])) 1835 | NewDefaultKeys[key] = newValues 1836 | #print NewDefaultKeys 1837 | main() 1838 | 1839 | #test() -------------------------------------------------------------------------------- /Metrics G2/set Metrics Keys.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Set Metrics Keys Auto 2 | # encoding: utf-8 3 | # Based on script by Georg Seifert 4 | # Copyright: Georg Seifert, 2010, www.schriftgestaltung.de Version 1.0 5 | import sys 6 | import os 7 | from GlyphsApp import * 8 | import objc 9 | from AppKit import * 10 | from Foundation import * 11 | import traceback 12 | 13 | 14 | def KeysForGlyph(Glyph): 15 | if Glyph == None: 16 | return [] 17 | global DefaultKeys 18 | LeftKey = False 19 | RightKey = False 20 | try: 21 | LeftKey = Glyph.leftMetricsKey 22 | except: 23 | print traceback.format_exc() 24 | try: 25 | RightKey = Glyph.rightMetricsKey 26 | except: 27 | print traceback.format_exc() 28 | try: 29 | if len(LeftKey < 1): 30 | LeftKey = False 31 | except TypeError: 32 | pass 33 | except: 34 | print traceback.format_exc() 35 | try: 36 | if len(RightKey < 1): 37 | RightKey = False 38 | except TypeError: 39 | pass 40 | except: 41 | print traceback.format_exc() 42 | return (LeftKey, RightKey) 43 | 44 | def updateKeyGlyphsForSelected(): 45 | Doc = Glyphs.currentDocument 46 | Font = Doc.font 47 | SelectedLayers = Doc.selectedLayers() 48 | for Layer in SelectedLayers: 49 | Glyph = Layer.parent 50 | LeftKey = "" 51 | RightKey = "" 52 | LigatureComponents = Glyph.name.split("_") 53 | if len(Layer.components) > 0 and len(Layer.paths) == 0 and Layer.components[0].transformStruct()[0] == 1: 54 | componentGlyph = Layer.components[0].component 55 | if not componentGlyph: 56 | raise Exception("Something is wrong with a Component in Glyphs %s" % Layer.parent.name) 57 | if componentGlyph.category == "Letter": 58 | LeftKey = KeysForGlyph(componentGlyph)[0] 59 | if not LeftKey: 60 | LeftKey = componentGlyph.name 61 | 62 | for Component in Layer.components: 63 | try: 64 | if Component.component.category == "Letter": 65 | if Component.transform[0] == 1: 66 | componentGlyph = Component.component 67 | elif Component.component.category != "Mark": 68 | #componentGlyph = None 69 | pass 70 | except: 71 | pass 72 | if componentGlyph: 73 | RightKey = KeysForGlyph(componentGlyph)[1] 74 | if not RightKey: 75 | RightKey = componentGlyph.name 76 | 77 | elif len(LigatureComponents) > 1: 78 | LeftGlyph = Font.glyphs[LigatureComponents[0]] 79 | if LeftGlyph != None: 80 | LeftKey = KeysForGlyph(LeftGlyph)[0] 81 | RightGlyph = Font.glyphs[LigatureComponents[-1]] 82 | if RightGlyph != None: 83 | RightKey = KeysForGlyph(RightGlyph)[1] 84 | if LeftKey: 85 | try: 86 | if LeftKey not in Font.glyphs and not Font.glyphs[LeftKey].export: 87 | LeftKey = False 88 | except: 89 | LeftKey = False 90 | if RightKey: 91 | try: 92 | if RightKey not in Font.glyphs and not Font.glyphs[RightKey].export: 93 | RightKey = False 94 | except: 95 | pass 96 | if not LeftKey: 97 | try: 98 | LeftKey = DefaultKeys[Glyph.name][0] 99 | except KeyError: 100 | pass 101 | except: 102 | print traceback.format_exc() 103 | if not RightKey: 104 | try: 105 | RightKey = DefaultKeys[Glyph.name][1] 106 | except KeyError: 107 | pass 108 | except: 109 | print traceback.format_exc() 110 | if not LeftKey and Glyph.name[-3:] == ".sc": 111 | try: 112 | Glyph 113 | LeftKey = DefaultKeys[Glyph.name[:-3].title()][0] 114 | if (len(LeftKey) > 0): 115 | LeftKey = LeftKey.lower()+".sc" 116 | except: 117 | print traceback.format_exc() 118 | if not RightKey and Glyph.name[-3:] == ".sc": 119 | try: 120 | RightKey = DefaultKeys[Glyph.name[:-3].title()][1] 121 | if (len(RightKey) > 0): 122 | RightKey = RightKey.lower()+".sc" 123 | except: 124 | print traceback.format_exc() 125 | if not LeftKey: 126 | LeftKey = Glyph.name 127 | if not RightKey: 128 | RightKey = Glyph.name 129 | 130 | print Glyph.name, ">", LeftKey, RightKey 131 | if Glyph.leftMetricsKey is None or len(Glyph.leftMetricsKey) == 0: 132 | Glyph.setLeftMetricsKey_(LeftKey) 133 | if Glyph.rightMetricsKey is None or len(Glyph.rightMetricsKey) == 0: 134 | Glyph.setRightMetricsKey_(RightKey) 135 | 136 | def main(): 137 | print "Starting Metrics Keys update\n" 138 | updateKeyGlyphsForSelected() 139 | Doc = Glyphs.currentDocument 140 | Font = Doc.font 141 | SelectedLayers = Doc.selectedLayers() 142 | for Layer in SelectedLayers: 143 | Layer.syncMetrics() 144 | print "End" 145 | 146 | def test(): 147 | NewDefaultKeys = {} 148 | for key in Keys: 149 | key = niceName(key) 150 | values = DefaultKeys[key] 151 | newValues = [] 152 | for value in values: 153 | newValues.append( niceName(value) ) 154 | print " \"%s\" : [\"%s\", \"%s\"]," % (key, newValues[1], newValues[0]) 155 | NewDefaultKeys[key] = newValues 156 | #print NewDefaultKeys 157 | main() 158 | -------------------------------------------------------------------------------- /Metrics/Fix Vertical Metrics.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Fix vertical metrics 2 | ''' 3 | Sets custom parameters for vertical metrics in all masters. 4 | Replaces vertical metrics with values calculated from key glyphs. 5 | 6 | ''' 7 | # 8 | # Based on scripts from Marc Foley 9 | # https://github.com/m4rc1e/mf-glyphs-scripts 10 | # 11 | 12 | font = Glyphs.font 13 | 14 | tallest = 0 15 | tallest_name = '' 16 | 17 | deepest = 0 18 | deepest_name = '' 19 | 20 | masters = font.masters 21 | 22 | for i, master in enumerate(masters): 23 | for glyph in font.glyphs: 24 | height = glyph.layers[i].bounds[-1][-1] 25 | depth = glyph.layers[i].bounds[0][-1] 26 | 27 | if height > tallest: 28 | tallest = height 29 | tallest_name = glyph.name 30 | 31 | if depth < deepest: 32 | deepest = depth 33 | deepest_name = glyph.name 34 | 35 | tallest = int( round(tallest) ) 36 | deepest = int( round(deepest) ) 37 | 38 | print '' 39 | print '#############################################' 40 | print '' 41 | print 'Tallest glyph is %s %s' % (tallest_name, tallest) 42 | print 'winAscent = %s' % tallest 43 | print ' ' 44 | print 'Deepest glyph is %s %s' % (deepest_name, deepest) 45 | print 'winDescent = %s' % abs(deepest) 46 | print '' 47 | 48 | # Update vertical metrics for each master individually 49 | 50 | ASC_G = 'l' 51 | CAP_G = 'H' 52 | XHEIGHT_G = 'x' 53 | DESC_G = 'p' 54 | 55 | for i, master in enumerate(masters): 56 | n_asc = font.glyphs[ASC_G].layers[master.id].bounds[-1][-1] - abs(font.glyphs[ASC_G].layers[master.id].bounds[0][-1]) 57 | n_cap = font.glyphs[CAP_G].layers[master.id].bounds[-1][-1] 58 | n_xhe = font.glyphs[XHEIGHT_G].layers[master.id].bounds[-1][-1] 59 | n_desc = font.glyphs[DESC_G].layers[master.id].bounds[0][-1] 60 | 61 | master.ascender = int(round(n_asc)) 62 | master.capHeight = int(round(n_cap)) 63 | master.xHeight = int(round(n_xhe)) 64 | master.descender = int(round(n_desc)) 65 | 66 | ## Update vertical metrics custom paramters for all master 67 | 68 | for i, master in enumerate(masters): 69 | 70 | ''' 71 | master.ascender = n_asc 72 | master.capHeight = n_cap 73 | master.xHeight = n_xhe 74 | master.descender = n_desc 75 | ''' 76 | 77 | remainder = int( round( 1250 - abs(n_desc) - n_asc) ) 78 | 79 | master.customParameters['winAscent'] = tallest 80 | master.customParameters['winDescent'] = abs(deepest) 81 | 82 | master.customParameters['typoAscender'] = n_asc+remainder 83 | master.customParameters['hheaAscender'] = n_asc+remainder 84 | 85 | master.customParameters['typoDescender'] = deepest 86 | master.customParameters['hheaDescender'] = deepest 87 | 88 | master.customParameters['hheaLineGap'] = 0 89 | master.customParameters['typoLineGap'] = 0 90 | 91 | print '' 92 | print '#############################################' 93 | print '' 94 | print 'New vertical metrics values for all masters:' 95 | print '' 96 | print '#############################################' 97 | print '' 98 | print 'winAscent = %s' % tallest 99 | print 'winDescent = %s' % abs(deepest) 100 | print ' ' 101 | print 'typoAscender = %s' % (n_asc+remainder) 102 | print 'hheaAscender = %s' % (n_asc+remainder) 103 | print ' ' 104 | print 'typoDescender = %s' % deepest 105 | print 'hheaDescender = %s' % deepest 106 | print ' ' 107 | print 'hheaLineGap = 0' 108 | print 'typoLineGap = 0' 109 | print '' 110 | print 'Vertical metrics updated according to 125 %% rule' 111 | print '' 112 | -------------------------------------------------------------------------------- /Metrics/Gridster.py: -------------------------------------------------------------------------------- 1 | # MenuTitle: Gridster LAT-CYR 2 | # encoding: utf-8 3 | # Copyright: Alexei Vanyashin 4 | # Version: 0.2 for Glyphs3 5 | # 6 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 7 | # Opens a new tab with Latin and Cyrillic grid tests. 8 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 9 | 10 | import re 11 | 12 | # Clear the macro window log for debugging purposes 13 | Glyphs.clearLog() 14 | 15 | # Latin and Cyrillic strings 16 | stringLatin = 'abcdefghijklmnopqrstuvwxyz' 17 | stringCyrillic = 'абвгдеёжзийклмнопрстуфхчцшщьъыэюя' 18 | 19 | # Initialize outputs 20 | outputLatin = stringLatin + '\n' 21 | outputCyrillic = stringCyrillic + '\n' 22 | 23 | # Generate Latin grid (15 lines) 24 | for i in range(15): 25 | stringLatin = stringLatin[1:] + stringLatin[0] # Rotate characters 26 | outputLatin += stringLatin + '\n' 27 | 28 | # Add spaces between characters in Latin grid 29 | outputFormattedLatin = re.sub(r'(\S)', r'\1 ', outputLatin) 30 | 31 | # Generate Cyrillic grid (15 lines) 32 | for i in range(15): 33 | stringCyrillic = stringCyrillic[1:] + stringCyrillic[0] # Rotate characters 34 | outputCyrillic += stringCyrillic + '\n' 35 | 36 | # Add spaces between characters in Cyrillic grid 37 | outputFormattedCyrillic = re.sub(r'(\S)', r'\1 ', outputCyrillic) 38 | 39 | # Combine both grids and add an uppercase version 40 | outputFormatted = outputFormattedLatin + outputFormattedCyrillic 41 | outputFormattedUpper = outputFormatted.upper() 42 | 43 | # Open new tabs in Glyphs with the generated grids 44 | Font = Glyphs.font 45 | Font.newTab(outputFormatted) 46 | Font.newTab(outputFormattedUpper) -------------------------------------------------------------------------------- /Metrics/Inherit Kerning Groups.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Inherit Kerning Groups to suffixed glyphs 2 | # -*- coding: utf-8 -*- 3 | __doc__=""" 4 | Inherits Kerning Group to suffixed glyphs (.ssXX) from parent 5 | """ 6 | 7 | thisFont = Glyphs.font # frontmost font 8 | thisFontMaster = thisFont.selectedFontMaster # active master 9 | selectedLayers = thisFont.selectedLayers # active layers of selected glyphs 10 | 11 | def process( thisLayer ): 12 | 13 | for thisLayer in selectedLayers: 14 | name = thisLayer.parent.name 15 | baseName = name 16 | suffix = None 17 | periodPos = baseName.find(".") 18 | if periodPos > 0: 19 | baseName = name[:periodPos] 20 | suffix = name[periodPos:] 21 | baseGlyph = thisFont.glyphs[ baseName ] 22 | if (baseGlyph.leftKerningGroup != None ): 23 | thisLayer.parent.leftKerningGroup = '' 24 | thisLayer.parent.leftKerningGroup = baseGlyph.leftKerningGroup 25 | if (baseGlyph.rightKerningGroup != None ): 26 | thisLayer.parent.rightKerningGroup = '' 27 | thisLayer.parent.rightKerningGroup = baseGlyph.rightKerningGroup 28 | thisLayer.syncMetrics() 29 | 30 | thisFont.disableUpdateInterface() # suppresses UI updates in Font View 31 | 32 | for thisLayer in selectedLayers: 33 | thisGlyph = thisLayer.parent 34 | print "Processing %s" % thisGlyph.name 35 | thisGlyph.beginUndo() # begin undo grouping 36 | process( thisLayer ) 37 | thisGlyph.endUndo() # end undo grouping 38 | 39 | thisFont.enableUpdateInterface() # re-enables UI updates in Font View 40 | 41 | # brings macro window to front and clears its log: 42 | Glyphs.clearLog() 43 | Glyphs.showMacroWindow() -------------------------------------------------------------------------------- /Metrics/Inherit Metrics Keys.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Inherit Metrics Keys to suffixed glyphs 2 | # -*- coding: utf-8 -*- 3 | __doc__=""" 4 | Inherits Metrics Keys to suffixed glyphs (.ssXX) from parent 5 | """ 6 | 7 | thisFont = Glyphs.font # frontmost font 8 | thisFontMaster = thisFont.selectedFontMaster # active master 9 | selectedLayers = thisFont.selectedLayers # active layers of selected glyphs 10 | 11 | def process( thisLayer ): 12 | 13 | for thisLayer in selectedLayers: 14 | name = thisLayer.parent.name 15 | baseName = name 16 | suffix = None 17 | periodPos = baseName.find(".") 18 | if periodPos > 0: 19 | baseName = name[:periodPos] 20 | suffix = name[periodPos:] 21 | thisLayer.leftMetricsKey = baseName 22 | thisLayer.rightMetricsKey = baseName 23 | thisLayer.syncMetrics() 24 | 25 | thisFont.disableUpdateInterface() # suppresses UI updates in Font View 26 | 27 | for thisLayer in selectedLayers: 28 | thisGlyph = thisLayer.parent 29 | print "Processing %s" % thisGlyph.name 30 | thisGlyph.beginUndo() # begin undo grouping 31 | process( thisLayer ) 32 | thisGlyph.endUndo() # end undo grouping 33 | 34 | thisFont.enableUpdateInterface() # re-enables UI updates in Font View 35 | 36 | # brings macro window to front and clears its log: 37 | Glyphs.clearLog() 38 | Glyphs.showMacroWindow() -------------------------------------------------------------------------------- /Metrics/Remove Kerning groups of selected glyphs.py: -------------------------------------------------------------------------------- 1 | # MenuTitle: Remove Kerning Groups from Selected Glyphs 2 | # encoding: utf-8 3 | # Copyright: Alexei Vanyashin 4 | # Version: 0.9 for Glyphs3 5 | # 6 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 7 | # Removes kerning groups of selected glyphs 8 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 9 | 10 | import GlyphsApp 11 | 12 | Font = Glyphs.font # Get the current font 13 | selectedLayers = Font.selectedLayers # Get selected glyphs 14 | 15 | count = 0 16 | for layer in selectedLayers: 17 | glyph = layer.parent 18 | if glyph is not None: 19 | glyph.leftKerningGroup = None # Remove left kerning group 20 | glyph.rightKerningGroup = None # Remove right kerning group 21 | print(f"Removed kerning groups from: {glyph.name}") 22 | count += 1 23 | 24 | Glyphs.showNotification( 25 | "Kerning Groups Removed", 26 | f"Removed kerning groups from {count} glyphs." 27 | ) 28 | 29 | print(f"✅ Removed kerning groups from {count} selected glyphs.") -------------------------------------------------------------------------------- /Metrics/Steal Metric Keys.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Steal Metrics Keys from font 2 | """Copy Metrics Keys from one font to another.""" 3 | # Based on 'Steal kerning groups from font' by @mekkablue 4 | import vanilla 5 | 6 | class KeysCopy(object): 7 | """GUI for copying Metrics Keys from one font to another""" 8 | def __init__(self): 9 | self.w = vanilla.FloatingWindow((400, 70), "Steal Metrics Keys") 10 | 11 | self.w.text_anchor = vanilla.TextBox((15, 12+2, 130, 14), "Copy keys from:", sizeStyle='small') 12 | self.w.from_font = vanilla.PopUpButton((150, 12, 150, 17), self.GetFonts(isSourceFont=True), sizeStyle='small', callback=self.buttonCheck) 13 | 14 | self.w.text_value = vanilla.TextBox((15, 12+2+25, 130, 14), "To selected glyphs in:", sizeStyle='small') 15 | self.w.to_font = vanilla.PopUpButton((150, 12+25, 150, 17), self.GetFonts(isSourceFont=False), sizeStyle='small', callback=self.buttonCheck) 16 | 17 | self.w.copybutton = vanilla.Button((-80, 12+25, -15, 17), "Copy", sizeStyle='small', callback=self.copyKeys) 18 | self.w.setDefaultButton( self.w.copybutton ) 19 | 20 | self.w.open() 21 | self.buttonCheck(None) 22 | 23 | def GetFonts(self, isSourceFont): 24 | myFontList = [ "%s - %s" % ( x.font.familyName, x.selectedFontMaster().name ) for x in Glyphs.orderedDocuments() ] 25 | 26 | if isSourceFont: 27 | myFontList.reverse() 28 | 29 | return myFontList 30 | 31 | def buttonCheck(self, sender): 32 | fromFont = self.w.from_font.getItems()[ self.w.from_font.get() ] 33 | toFont = self.w.to_font.getItems()[ self.w.to_font.get() ] 34 | 35 | if fromFont == toFont: 36 | self.w.copybutton.enable( onOff=False ) 37 | else: 38 | self.w.copybutton.enable( onOff=True ) 39 | 40 | def copyKeys(self, sender): 41 | fromFont = self.w.from_font.getItems()[ self.w.from_font.get() ] 42 | toFont = self.w.to_font.getItems()[ self.w.to_font.get() ] 43 | 44 | Doc_source = [ x for x in Glyphs.orderedDocuments() if ("%s - %s" % ( x.font.familyName, x.selectedFontMaster().name )) == fromFont ][0] 45 | Master_source = Doc_source.selectedFontMaster().id 46 | Font_source = Doc_source.font 47 | Font_target = [ x.font for x in Glyphs.orderedDocuments() if ("%s - %s" % ( x.font.familyName, x.selectedFontMaster().name )) == toFont ][0] 48 | Glyphs_selected = [ x.parent for x in Font_target.parent.selectedLayers() ] 49 | 50 | print "Syncing metrics keys for", len(Glyphs_selected), "glyphs from", Font_source.familyName, "to", Font_target.familyName, ":" 51 | 52 | try: 53 | for thisGlyph in Glyphs_selected: 54 | glyphName = thisGlyph.name 55 | try: 56 | sourceGlyph = Font_source.glyphs[ glyphName ] 57 | oldL = thisGlyph.leftMetricsKey 58 | oldR = thisGlyph.rightMetricsKey 59 | newL = sourceGlyph.leftMetricsKey 60 | newR = sourceGlyph.rightMetricsKey 61 | 62 | if oldL != newL or oldR != newR: 63 | thisGlyph.leftMetricsKey = newL 64 | thisGlyph.rightMetricsKey = newR 65 | 66 | print " ", glyphName, ":", newL, "<--->", newR 67 | print "Syncing metrics..." 68 | 69 | myLayers = Glyphs.font.selectedLayers 70 | for thisLayer in myLayers: 71 | thisLayer.syncMetrics() 72 | 73 | pass 74 | except Exception, e: 75 | print " ", glyphName,": Error" 76 | # print e 77 | 78 | except Exception, e: 79 | self.showMessage( "Error", e ) 80 | 81 | finally: 82 | print "Done." 83 | 84 | self.w.close() 85 | 86 | KeysCopy() 87 | -------------------------------------------------------------------------------- /Metrics/Update WinMetrics.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Update winAsc and winDesc 2 | ''' 3 | Update custom paramters winAscender and winDescender 4 | 5 | ''' 6 | # 7 | # Based on scripts from Marc Foley 8 | # https://github.com/m4rc1e/mf-glyphs-scripts 9 | # 10 | 11 | font = Glyphs.font 12 | 13 | tallest = 0 14 | tallest_name = '' 15 | 16 | deepest = 0 17 | deepest_name = '' 18 | 19 | masters = font.masters 20 | 21 | for i, master in enumerate(masters): 22 | for glyph in font.glyphs: 23 | height = glyph.layers[i].bounds[-1][-1] 24 | depth = glyph.layers[i].bounds[0][-1] 25 | 26 | if height > tallest: 27 | tallest = height 28 | tallest_name = glyph.name 29 | 30 | if depth < deepest: 31 | deepest = depth 32 | deepest_name = glyph.name 33 | 34 | tallest = int( round(tallest) ) 35 | deepest = int( round(deepest) ) 36 | 37 | print 'tallest glyph is %s %s' % (tallest_name, tallest) 38 | print 'winAscent = %s %s' % (tallest_name, round(tallest) ) 39 | print ' ' 40 | print 'deepest glyph is %s %s' % (deepest_name, deepest) 41 | print 'winDescent = %s %s' % (deepest_name, int( round (abs(deepest)) )) 42 | 43 | for i, master in enumerate(masters): 44 | master.customParameters['winAscent'] = tallest 45 | master.customParameters['winDescent'] = deepest -------------------------------------------------------------------------------- /Metrics/set Kerning Groups for GF Lat+Cyr Plus.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Set Kerning Groups for Google Fonts Glyph Sets 2 | # encoding: utf-8 3 | # Copyright: Georg Seifert, 2010, www.schriftgestaltung.de Version 1.0 4 | # Copyright: Alexei Vanyashin, 2016, 2025, www.cyreal.org Version 1.01 5 | # 6 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 7 | # 8 | # This script is derived from Georg Seifert's 'Set Kerning Groups' 9 | # located at 10 | # https://github.com/schriftgestalt/Glyphs-Scripts/blob/master/Metrics%20%26%20Classes/set%20Kerning%20Groups.py 11 | # 12 | # It is reworked to include kerning classes for GF Latin Plus, GF Cyrillic Plus glyphs sets. 13 | # 14 | #-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: 15 | 16 | 17 | import sys 18 | import os 19 | from GlyphsApp import * 20 | import objc 21 | from AppKit import * 22 | from Foundation import * 23 | import traceback 24 | 25 | Keys = [ 26 | "A", 27 | "B", 28 | "C", 29 | "D", 30 | "E", 31 | "F", 32 | "G", 33 | "H", 34 | "H", 35 | "J", 36 | "K", 37 | "L", 38 | "M", 39 | "N", 40 | "O", 41 | "P", 42 | "Q", 43 | "R", 44 | "S", 45 | "T", 46 | "U", 47 | "V", 48 | "W", 49 | "X", 50 | "Y", 51 | "Z", 52 | "Agrave", 53 | "Aacute", 54 | "Acircumflex", 55 | "Atilde", 56 | "Adieresis", 57 | "Amacron", 58 | "Abreve", 59 | "Aring", 60 | "Aringacute", 61 | "Adotbelow", 62 | "Aogonek", 63 | "AE", 64 | "AEacute", 65 | "Cacute", 66 | "Ccircumflex", 67 | "Ccaron", 68 | "Cdotaccent", 69 | "Ccedilla", 70 | "Dcaron", 71 | "Dcroat", 72 | "Eth", 73 | "Egrave", 74 | "Eacute", 75 | "Ecircumflex", 76 | "Etilde", 77 | "Ecaron", 78 | "Edieresis", 79 | "Emacron", 80 | "Ebreve", 81 | "Edotaccent", 82 | "Edotbelow", 83 | "Eogonek", 84 | "Gcircumflex", 85 | "Gcaron", 86 | "Gbreve", 87 | "Gdotaccent", 88 | "Gcommaaccent", 89 | "Hcircumflex", 90 | "Hbar", 91 | "Igrave", 92 | "Iacute", 93 | "Icircumflex", 94 | "Itilde", 95 | "Idieresis", 96 | "Imacron", 97 | "Ibreve", 98 | "Idotaccent", 99 | "Idotbelow", 100 | "Iogonek", 101 | "Jcircumflex", 102 | "Kcommaaccent", 103 | "Lacute", 104 | "Lcaron", 105 | "Lcommaaccent", 106 | "Lslash", 107 | "Ldot", 108 | "Nacute", 109 | "Ntilde", 110 | "Ncaron", 111 | "Ncommaaccent", 112 | "Eng", 113 | "Ograve", 114 | "Oacute", 115 | "Ocircumflex", 116 | "Otilde", 117 | "Odieresis", 118 | "Omacron", 119 | "Obreve", 120 | "Ohungarumlaut", 121 | "Odotbelow", 122 | "Oogonek", 123 | "Oslash", 124 | "Oslashacute", 125 | "OE", 126 | "Racute", 127 | "Rcaron", 128 | "Rcommaaccent", 129 | "Sacute", 130 | "Scircumflex", 131 | "Scaron", 132 | "Scedilla", 133 | "Scommaaccent", 134 | "Germandbls", 135 | "Tcaron", 136 | "Tcedilla", 137 | "Tcommaaccent", 138 | "Tbar", 139 | "Thorn", 140 | "Ugrave", 141 | "Uacute", 142 | "Ucircumflex", 143 | "Utilde", 144 | "Udieresis", 145 | "Umacron", 146 | "Ubreve", 147 | "Uring", 148 | "Uhungarumlaut", 149 | "Udotbelow", 150 | "Uogonek", 151 | "Wgrave", 152 | "Wacute", 153 | "Wcircumflex", 154 | "Wdieresis", 155 | "Ygrave", 156 | "Yacute", 157 | "Ycircumflex", 158 | "Ytilde", 159 | "Ydieresis", 160 | "Ymacron", 161 | "Zacute", 162 | "Zcaron", 163 | "Zdotaccent", 164 | "Schwa", 165 | "DZcaron", 166 | "Dzcaron", 167 | "LJ", 168 | "Lj", 169 | "NJ", 170 | "Nj", 171 | "Adblgrave", 172 | "Ainvertedbreve", 173 | "Edblgrave", 174 | "Einvertedbreve", 175 | "Idblgrave", 176 | "Iinvertedbreve", 177 | "Odblgrave", 178 | "Oinvertedbreve", 179 | "Rdblgrave", 180 | "Rinvertedbreve", 181 | "Udblgrave", 182 | "Uinvertedbreve", 183 | "Odieresismacron", 184 | "Otildemacron", 185 | "Odotaccentmacron", 186 | "Abreveacute", 187 | "Abrevedotbelow", 188 | "Abrevegrave", 189 | "Abrevehookabove", 190 | "Abrevetilde", 191 | "Acircumflexacute", 192 | "Acircumflexdotbelow", 193 | "Acircumflexgrave", 194 | "Acircumflexhookabove", 195 | "Acircumflextilde", 196 | "Ahookabove", 197 | "Ecircumflexacute", 198 | "Ecircumflexdotbelow", 199 | "Ecircumflexgrave", 200 | "Ecircumflexhookabove", 201 | "Ecircumflextilde", 202 | "Ehookabove", 203 | "Ocircumflexacute", 204 | "Ocircumflexdotbelow", 205 | "Ocircumflexgrave", 206 | "Ocircumflexhookabove", 207 | "Ocircumflextilde", 208 | "Ohookabove", 209 | "Ohorn", 210 | "Ohornacute", 211 | "Ohorndotbelow", 212 | "Ohorngrave", 213 | "Ohornhookabove", 214 | "Ohorntilde", 215 | "Uhookabove", 216 | "Uhorn", 217 | "Uhornacute", 218 | "Uhorndotbelow", 219 | "Uhorngrave", 220 | "Uhornhookabove", 221 | "Uhorntilde", 222 | "Ydotbelow", 223 | "Yhookabove", 224 | "Ihookabove", 225 | "I_J.loclNLD", 226 | "Iacute_J.loclNLD", 227 | "a", 228 | "aacute", 229 | "abreve", 230 | "abreveacute", 231 | "abrevedotbelow", 232 | "abrevegrave", 233 | "abrevehookabove", 234 | "abrevetilde", 235 | "acircumflex", 236 | "acircumflexacute", 237 | "acircumflexdotbelow", 238 | "acircumflexgrave", 239 | "acircumflexhookabove", 240 | "acircumflextilde", 241 | "adblgrave", 242 | "adieresis", 243 | "adotbelow", 244 | "agrave", 245 | "ahookabove", 246 | "ainvertedbreve", 247 | "amacron", 248 | "aogonek", 249 | "aring", 250 | "aringacute", 251 | "atilde", 252 | "ae", 253 | "aeacute", 254 | "b", 255 | "c", 256 | "cacute", 257 | "ccaron", 258 | "ccedilla", 259 | "ccircumflex", 260 | "cdotaccent", 261 | "d", 262 | "eth", 263 | "dcaron", 264 | "dcroat", 265 | "dz", 266 | "dzcaron", 267 | "e", 268 | "eacute", 269 | "ebreve", 270 | "ecaron", 271 | "ecircumflex", 272 | "ecircumflexacute", 273 | "ecircumflexdotbelow", 274 | "ecircumflexgrave", 275 | "ecircumflexhookabove", 276 | "ecircumflextilde", 277 | "edblgrave", 278 | "edieresis", 279 | "edotaccent", 280 | "edotbelow", 281 | "egrave", 282 | "ehookabove", 283 | "einvertedbreve", 284 | "emacron", 285 | "eogonek", 286 | "etilde", 287 | "f", 288 | "g", 289 | "gbreve", 290 | "gcaron", 291 | "gcircumflex", 292 | "gcommaaccent", 293 | "gdotaccent", 294 | "h", 295 | "hbar", 296 | "hcircumflex", 297 | "i", 298 | "idotless", 299 | "iacute", 300 | "ibreve", 301 | "icircumflex", 302 | "idblgrave", 303 | "idieresis", 304 | "idotaccent", 305 | "idotbelow", 306 | "igrave", 307 | "ihookabove", 308 | "iinvertedbreve", 309 | "imacron", 310 | "iogonek", 311 | "itilde", 312 | "j", 313 | "jdotless", 314 | "jcircumflex", 315 | "k", 316 | "kcommaaccent", 317 | "kgreenlandic", 318 | "l", 319 | "lacute", 320 | "lcaron", 321 | "lcommaaccent", 322 | "ldot", 323 | "lj", 324 | "lslash", 325 | "m", 326 | "n", 327 | "nacute", 328 | "ncaron", 329 | "ncommaaccent", 330 | "eng", 331 | "nj", 332 | "ntilde", 333 | "o", 334 | "oacute", 335 | "obreve", 336 | "ocircumflex", 337 | "ocircumflexacute", 338 | "ocircumflexdotbelow", 339 | "ocircumflexgrave", 340 | "ocircumflexhookabove", 341 | "ocircumflextilde", 342 | "odblgrave", 343 | "odieresis", 344 | "odieresismacron", 345 | "odotaccentmacron", 346 | "odotbelow", 347 | "ograve", 348 | "ohookabove", 349 | "ohorn", 350 | "ohornacute", 351 | "ohorndotbelow", 352 | "ohorngrave", 353 | "ohornhookabove", 354 | "ohorntilde", 355 | "ohungarumlaut", 356 | "oinvertedbreve", 357 | "omacron", 358 | "oogonek", 359 | "oslash", 360 | "oslashacute", 361 | "otilde", 362 | "otildemacron", 363 | "oe", 364 | "p", 365 | "thorn", 366 | "q", 367 | "r", 368 | "racute", 369 | "rcaron", 370 | "rcommaaccent", 371 | "rdblgrave", 372 | "rinvertedbreve", 373 | "s", 374 | "sacute", 375 | "scaron", 376 | "scedilla", 377 | "scircumflex", 378 | "scommaaccent", 379 | "germandbls", 380 | "schwa", 381 | "t", 382 | "tbar", 383 | "tcaron", 384 | "tcedilla", 385 | "tcommaaccent", 386 | "u", 387 | "uacute", 388 | "ubreve", 389 | "ucircumflex", 390 | "udblgrave", 391 | "udieresis", 392 | "udotbelow", 393 | "ugrave", 394 | "uhookabove", 395 | "uhorn", 396 | "uhornacute", 397 | "uhorndotbelow", 398 | "uhorngrave", 399 | "uhornhookabove", 400 | "uhorntilde", 401 | "uhungarumlaut", 402 | "uinvertedbreve", 403 | "umacron", 404 | "uogonek", 405 | "uring", 406 | "utilde", 407 | "v", 408 | "w", 409 | "wacute", 410 | "wcircumflex", 411 | "wdieresis", 412 | "wgrave", 413 | "x", 414 | "y", 415 | "yacute", 416 | "ycircumflex", 417 | "ydieresis", 418 | "ydotbelow", 419 | "ygrave", 420 | "yhookabove", 421 | "ymacron", 422 | "ytilde", 423 | "z", 424 | "zacute", 425 | "zcaron", 426 | "zdotaccent", 427 | "f_f", 428 | "f_f_i", 429 | "f_f_ij", 430 | "f_f_l", 431 | "f_ij", 432 | "fi", 433 | "fl", 434 | "i_j.loclNLD", 435 | "iacute_j.loclNLD", 436 | "ordfeminine", 437 | "ordmasculine", 438 | "onehalf", 439 | "onequarter", 440 | "threequarters", 441 | "asterisk", 442 | "backslash", 443 | "periodcentered", 444 | "bullet", 445 | "colon", 446 | "comma", 447 | "ellipsis", 448 | "exclam", 449 | "exclamdown", 450 | "numbersign", 451 | "period", 452 | "question", 453 | "questiondown", 454 | "quotedbl", 455 | "quotesingle", 456 | "semicolon", 457 | "slash", 458 | "underscore", 459 | "periodcentered.loclCAT", 460 | "braceleft", 461 | "braceright", 462 | "bracketleft", 463 | "bracketright", 464 | "parenleft", 465 | "parenright", 466 | "braceleft.case", 467 | "braceright.case", 468 | "bracketleft.case", 469 | "bracketright.case", 470 | "parenleft.case", 471 | "parenright.case", 472 | "emdash", 473 | "endash", 474 | "hyphen", 475 | "guillemetleft", 476 | "guillemetright", 477 | "guilsinglleft", 478 | "guilsinglright", 479 | "quotedblbase", 480 | "quotedblleft", 481 | "quotedblright", 482 | "quoteleft", 483 | "quoteright", 484 | "quotesinglbase", 485 | "space", 486 | "nbspace", 487 | "cedi", 488 | "cent", 489 | "colonsign", 490 | "currency", 491 | "dollar", 492 | "dong", 493 | "euro", 494 | "florin", 495 | "franc", 496 | "guarani", 497 | "kip", 498 | "lira", 499 | "liraTurkish", 500 | "manat", 501 | "naira", 502 | "peseta", 503 | "peso", 504 | "ruble", 505 | "rupeeIndian", 506 | "sterling", 507 | "won", 508 | "yen", 509 | "bulletoperator", 510 | "divisionslash", 511 | "plus", 512 | "minus", 513 | "multiply", 514 | "divide", 515 | "equal", 516 | "notequal", 517 | "greater", 518 | "less", 519 | "greaterequal", 520 | "lessequal", 521 | "plusminus", 522 | "approxequal", 523 | "asciitilde", 524 | "logicalnot", 525 | "micro", 526 | "percent", 527 | "perthousand", 528 | "at", 529 | "ampersand", 530 | "paragraph", 531 | "section", 532 | "copyright", 533 | "registered", 534 | "trademark", 535 | "degree", 536 | "bar", 537 | "brokenbar", 538 | "dagger", 539 | "daggerdbl", 540 | "numero", 541 | "asciicircum", 542 | "one", 543 | "two", 544 | "three", 545 | "four", 546 | "five", 547 | "six", 548 | "seven", 549 | "eight", 550 | "nine", 551 | "ten", 552 | "one.lf", 553 | "two.lf", 554 | "three.lf", 555 | "four.lf", 556 | "five.lf", 557 | "six.lf", 558 | "seven.lf", 559 | "eight.lf", 560 | "nine.lf", 561 | "ten.lf", 562 | "one.osf", 563 | "two.osf", 564 | "three.osf", 565 | "four.osf", 566 | "five.osf", 567 | "six.osf", 568 | "seven.osf", 569 | "eight.osf", 570 | "nine.osf", 571 | "ten.osf", 572 | ### End GF Latin Plus list 573 | ### Start Cyrillic 574 | "A-cy", 575 | "Be-cy", 576 | "Ve-cy", 577 | "Ge-cy", 578 | "Gje-cy", 579 | "Gheupturn-cy", 580 | "De-cy", 581 | "Ie-cy", 582 | "Iegrave-cy", 583 | "Io-cy", 584 | "Zhe-cy", 585 | "Ze-cy", 586 | "Ii-cy", 587 | "Iishort-cy", 588 | "Iigrave-cy", 589 | "Ka-cy", 590 | "Kje-cy", 591 | "El-cy", 592 | "Em-cy", 593 | "En-cy", 594 | "O-cy", 595 | "Pe-cy", 596 | "Er-cy", 597 | "Es-cy", 598 | "Te-cy", 599 | "U-cy", 600 | "Ushort-cy", 601 | "Ef-cy", 602 | "Ha-cy", 603 | "Che-cy", 604 | "Tse-cy", 605 | "Sha-cy", 606 | "Shcha-cy", 607 | "Dzhe-cy", 608 | "Softsign-cy", 609 | "Hardsign-cy", 610 | "Yeru-cy", 611 | "Lje-cy", 612 | "Nje-cy", 613 | "Dze-cy", 614 | "E-cy", 615 | "Ereversed-cy", 616 | "I-cy", 617 | "Yi-cy", 618 | "Je-cy", 619 | "Tshe-cy", 620 | "Yu-cy", 621 | "Ia-cy", 622 | "Dje-cy", 623 | "Yat-cy", 624 | "Yusbig-cy", 625 | "Fita-cy", 626 | "Izhitsa-cy", 627 | "Gestroke-cy", 628 | "Gemiddlehook-cy", 629 | "Zhedescender-cy", 630 | "Zedescender-cy", 631 | "Kadescender-cy", 632 | "Kaverticalstroke-cy", 633 | "Kastroke-cy", 634 | "Kabashkir-cy", 635 | "Endescender-cy", 636 | "Pemiddlehook-cy", 637 | "Pedescender-cy", 638 | "Haabkhasian-cy", 639 | "Esdescender-cy", 640 | "Tedescender-cy", 641 | "Ustrait-cy", 642 | "Ustraitstroke-cy", 643 | "Hadescender-cy", 644 | "Chedescender-cy", 645 | "Cheverticalstroke-cy", 646 | "Shha-cy", 647 | "Cheabkhasian-cy", 648 | "Chedescenderabkhasian-cy", 649 | "Palochka-cy", 650 | "Zhebreve-cy", 651 | "Chekhakassian-cy", 652 | "Abreve-cy", 653 | "Adieresis-cy", 654 | "Iebreve-cy", 655 | "Schwa-cy", 656 | "Zhedieresis-cy", 657 | "Zedieresis-cy", 658 | "Dzeabkhasian-cy", 659 | "Imacron-cy", 660 | "Idieresis-cy", 661 | "Odieresis-cy", 662 | "Obarred-cy", 663 | "Umacron-cy", 664 | "Udieresis-cy", 665 | "Uhungarumlaut-cy", 666 | "Chedieresis-cy", 667 | "Gedescender-cy", 668 | "Yerudieresis-cy", 669 | "Qa-cy", 670 | "We-cy", 671 | "Ef-cy.loclBGR", 672 | "Gestroke-cy.loclBSH", 673 | "Zedescender-cy.loclBSH", 674 | "Esdescender-cy.loclBSH", 675 | "Esdescender-cy.loclCHU", 676 | "Lje-cy.ss01", 677 | "El-cy.sso1", 678 | "De-cy.loclBGR", 679 | "Ii-cy.loclBGR", 680 | "Iishort-cy.loclBGR", 681 | "Iigrave-cy.loclBGR", 682 | "El-cy.loclBGR", 683 | "a-cy", 684 | "be-cy", 685 | "ve-cy", 686 | "ge-cy", 687 | "gje-cy", 688 | "geupturn-cy", 689 | "de-cy", 690 | "ie-cy", 691 | "iegrave-cy", 692 | "io-cy", 693 | "zhe-cy", 694 | "ze-cy", 695 | "ii-cy", 696 | "iishort-cy", 697 | "iigrave-cy", 698 | "ka-cy", 699 | "kje-cy", 700 | "el-cy", 701 | "em-cy", 702 | "en-cy", 703 | "o-cy", 704 | "pe-cy", 705 | "er-cy", 706 | "es-cy", 707 | "te-cy", 708 | "u-cy", 709 | "ushort-cy", 710 | "ef-cy", 711 | "ha-cy", 712 | "che-cy", 713 | "tse-cy", 714 | "sha-cy", 715 | "shcha-cy", 716 | "dzhe-cy", 717 | "softsign-cy", 718 | "hardsign-cy", 719 | "yeru-cy", 720 | "lje-cy", 721 | "nje-cy", 722 | "dze-cy", 723 | "e-cy", 724 | "ereversed-cy", 725 | "i-cy", 726 | "yi-cy", 727 | "je-cy", 728 | "tshe-cy", 729 | "yu-cy", 730 | "ia-cy", 731 | "dje-cy", 732 | "yat-cy", 733 | "yusbig-cy", 734 | "fita-cy", 735 | "izhitsa-cy", 736 | "gestroke-cy", 737 | "gemiddlehook-cy", 738 | "zhedescender-cy", 739 | "zedescender-cy", 740 | "kadescender-cy", 741 | "kaverticalstroke-cy", 742 | "kastroke-cy", 743 | "kabashkir-cy", 744 | "endescender-cy", 745 | "pedescender-cy", 746 | "pemiddlehook-cy", 747 | "haabkhasian-cy", 748 | "esdescender-cy", 749 | "tedescender-cy", 750 | "ustrait-cy", 751 | "ustraitstroke-cy", 752 | "hadescender-cy", 753 | "chedescender-cy", 754 | "cheverticalstroke-cy", 755 | "shha-cy", 756 | "cheabkhasian-cy", 757 | "chedescenderabkhasian-cy", 758 | "palochka-cy", 759 | "zhebreve-cy", 760 | "chekhakassian-cy", 761 | "abreve-cy", 762 | "adieresis-cy", 763 | "iebreve-cy", 764 | "schwa-cy", 765 | "zhedieresis-cy", 766 | "zedieresis-cy", 767 | "dzeabkhasian-cy", 768 | "imacron-cy", 769 | "idieresis-cy", 770 | "odieresis-cy", 771 | "obarred-cy", 772 | "umacron-cy", 773 | "udieresis-cy", 774 | "uhungarumlaut-cy", 775 | "chedieresis-cy", 776 | "gedescender-cy", 777 | "yerudieresis-cy", 778 | "qa-cy", 779 | "we-cy", 780 | "ve-cy.loclBGR", 781 | "ge-cy.loclBGR", 782 | "de-cy.loclBGR", 783 | "zhe-cy.loclBGR", 784 | "ze-cy.loclBGR", 785 | "ii-cy.loclBGR", 786 | "iishort-cy.loclBGR", 787 | "iigrave-cy.loclBGR", 788 | "ka-cy.loclBGR", 789 | "pe-cy.loclBGR", 790 | "te-cy.loclBGR", 791 | "che-cy.loclBGR", 792 | "tse-cy.loclBGR", 793 | "sha-cy.loclBGR", 794 | "shcha-cy.loclBGR", 795 | "softsign-cy.loclBGR", 796 | "hardsign-cy.loclBGR", 797 | "yu-cy.loclBGR", 798 | "gestroke-cy.loclBSH", 799 | "zedescender-cy.loclBSH", 800 | "esdescender-cy.loclBSH", 801 | "esdescender-cy.loclCHU", 802 | "be-cy.loclSRB", 803 | "el-cy.loclBGR", 804 | "en-cy.loclBGR", 805 | "gje-cy.loclMKD", 806 | "ge-cy.loclSRB", 807 | "de-cy.loclSRB", 808 | "pe-cy.loclSRB", 809 | "te-cy.loclSRB", 810 | "EnGe-cy", 811 | "enge-cy", 812 | "Tetse-cy", 813 | "tetse-cy", 814 | ### Start Greek 815 | "Alpha", 816 | "Beta", 817 | "Gamma", 818 | "Delta", 819 | "Epsilon", 820 | "Zeta", 821 | "Eta", 822 | "Theta", 823 | "Iota", 824 | "Kappa", 825 | "Lambda", 826 | "Mu", 827 | "Nu", 828 | "Omicron", 829 | "Pi", 830 | "Rho", 831 | "Tau", 832 | "Upsilon", 833 | "Chi", 834 | "Alphatonos", 835 | "Epsilontonos", 836 | "Etatonos", 837 | "Iotatonos", 838 | "Iotadieresis", 839 | "Omicrontonos", 840 | "Upsilontonos", 841 | "Upsilondieresis", 842 | "Omegatonos", 843 | "beta", 844 | "eta", 845 | "kappa", 846 | "mu", 847 | "omicron", 848 | "rho", 849 | "sigma", 850 | "psi", 851 | "alphatonos", 852 | "epsilontonos", 853 | "etatonos", 854 | "iotadieresis", 855 | "omicrontonos", 856 | "upsilontonos", 857 | "upsilondieresistonos", 858 | "upsilondieresis", 859 | "omegatonos", 860 | ### End Greek 861 | ] 862 | 863 | DefaultKeys = { 864 | "A": ["A","A"], 865 | "B": ["H","B"], 866 | "C": ["O","C"], 867 | "D": ["H","O"], 868 | "E": ["H","E"], 869 | "F": ["H","F"], 870 | "G": ["O","C"], 871 | "H": ["H","H"], 872 | "H": ["H","H"], 873 | "J": ["J","U"], 874 | "K": ["H","K"], 875 | "L": ["H","L"], 876 | "M": ["H","H"], 877 | "N": ["H","H"], 878 | "O": ["O","O"], 879 | "P": ["H","P"], 880 | "Q": ["O","O"], 881 | "R": ["H","R"], 882 | "S": ["S","S"], 883 | "T": ["T","T"], 884 | "U": ["U","U"], 885 | "V": ["V","V"], 886 | "W": ["V","V"], 887 | "X": ["X","X"], 888 | "Y": ["Y","Y"], 889 | "Z": ["Z","Z"], 890 | "Agrave": ["A","A"], 891 | "Aacute": ["A","A"], 892 | "Acircumflex": ["A","A"], 893 | "Atilde": ["A","A"], 894 | "Adieresis": ["A","A"], 895 | "Amacron": ["A","A"], 896 | "Abreve": ["A","A"], 897 | "Aring": ["A","A"], 898 | "Aringacute": ["A","A"], 899 | "Adotbelow": ["A","A"], 900 | "Aogonek": ["A","A"], 901 | "AE": ["A","E"], 902 | "AEacute": ["A","E"], 903 | "Cacute": ["O","C"], 904 | "Ccircumflex": ["O","C"], 905 | "Ccaron": ["O","C"], 906 | "Cdotaccent": ["O","C"], 907 | "Ccedilla": ["O","C"], 908 | "Dcaron": ["H","O"], 909 | "Dcroat": ["Hbar","O"], 910 | "Eth": ["Hbar","E"], 911 | "Egrave": ["H","E"], 912 | "Eacute": ["H","E"], 913 | "Ecircumflex": ["H","E"], 914 | "Etilde": ["H","E"], 915 | "Ecaron": ["H","E"], 916 | "Edieresis": ["H","E"], 917 | "Emacron": ["H","E"], 918 | "Ebreve": ["H","E"], 919 | "Edotaccent": ["H","E"], 920 | "Edotbelow": ["H","E"], 921 | "Eogonek": ["H","E"], 922 | "Gcircumflex": ["O","C"], 923 | "Gcaron": ["O","C"], 924 | "Gbreve": ["O","C"], 925 | "Gdotaccent": ["O","C"], 926 | "Gcommaaccent": ["O","C"], 927 | "Hcircumflex": ["H","H"], 928 | "Hbar": ["Hbar","Hbar"], 929 | "Igrave": ["H","H"], 930 | "Iacute": ["H","H"], 931 | "Icircumflex": ["H","H"], 932 | "Itilde": ["H","H"], 933 | "Idieresis": ["H","H"], 934 | "Imacron": ["H","H"], 935 | "Ibreve": ["H","H"], 936 | "Idotaccent": ["H","H"], 937 | "Idotbelow": ["H","H"], 938 | "Iogonek": ["H","H"], 939 | "Jcircumflex": ["J","U"], 940 | "Kcommaaccent": ["H","K"], 941 | "Lacute": ["H","L"], 942 | "Lcaron": ["H","L"], 943 | "Lcommaaccent": ["H","L"], 944 | "Lslash": ["Hbar","L"], 945 | "Ldot": ["H","L"], 946 | "Nacute": ["H","H"], 947 | "Ntilde": ["H","H"], 948 | "Ncaron": ["H","H"], 949 | "Ncommaaccent": ["H","H"], 950 | "Eng": ["H","H"], 951 | "Ograve": ["O","O"], 952 | "Oacute": ["O","O"], 953 | "Ocircumflex": ["O","O"], 954 | "Otilde": ["O","O"], 955 | "Odieresis": ["O","O"], 956 | "Omacron": ["O","O"], 957 | "Obreve": ["O","O"], 958 | "Ohungarumlaut": ["O","O"], 959 | "Odotbelow": ["O","O"], 960 | "Oogonek": ["O","O"], 961 | "Oslash": ["O","O"], 962 | "Oslashacute": ["O","O"], 963 | "OE": ["O","E"], 964 | "Racute": ["H","R"], 965 | "Rcaron": ["H","R"], 966 | "Rcommaaccent": ["H","R"], 967 | "Sacute": ["S","S"], 968 | "Scircumflex": ["S","S"], 969 | "Scaron": ["S","S"], 970 | "Scedilla": ["S","S"], 971 | "Scommaaccent": ["S","S"], 972 | "Germandbls": ["H","Germandbls"], 973 | "Tcaron": ["T","T"], 974 | "Tcedilla": ["T","T"], 975 | "Tcommaaccent": ["T","T"], 976 | "Tbar": ["T","T"], 977 | "Thorn": ["H","P"], 978 | "Ugrave": ["U","U"], 979 | "Uacute": ["U","U"], 980 | "Ucircumflex": ["U","U"], 981 | "Utilde": ["U","U"], 982 | "Udieresis": ["U","U"], 983 | "Umacron": ["U","U"], 984 | "Ubreve": ["U","U"], 985 | "Uring": ["U","U"], 986 | "Uhungarumlaut": ["U","U"], 987 | "Udotbelow": ["U","U"], 988 | "Uogonek": ["U","U"], 989 | "Wgrave": ["V","V"], 990 | "Wacute": ["V","V"], 991 | "Wcircumflex": ["V","V"], 992 | "Wdieresis": ["V","V"], 993 | "Ygrave": ["Y","Y"], 994 | "Yacute": ["Y","Y"], 995 | "Ycircumflex": ["Y","Y"], 996 | "Ytilde": ["Y","Y"], 997 | "Ydieresis": ["Y","Y"], 998 | "Ymacron": ["Y","Y"], 999 | "Zacute": ["Z","Z"], 1000 | "Zcaron": ["Z","Z"], 1001 | "Zdotaccent": ["Z","Z"], 1002 | "Schwa": ["O","O"], 1003 | "DZcaron": ["H","Z"], 1004 | "Dzcaron": ["H","Z"], 1005 | "LJ": ["H","U"], 1006 | "Lj": ["H","j"], 1007 | "NJ": ["H","U"], 1008 | "Nj": ["N","j"], 1009 | "Adblgrave": ["A","A"], 1010 | "Ainvertedbreve": ["A","A"], 1011 | "Edblgrave": ["H","E"], 1012 | "Einvertedbreve": ["H","E"], 1013 | "Idblgrave": ["H","H"], 1014 | "Iinvertedbreve": ["H","H"], 1015 | "Odblgrave": ["O","O"], 1016 | "Oinvertedbreve": ["O","O"], 1017 | "Rdblgrave": ["H","R"], 1018 | "Rinvertedbreve": ["H","R"], 1019 | "Udblgrave": ["U","U"], 1020 | "Uinvertedbreve": ["U","U"], 1021 | "Odieresismacron": ["O","O"], 1022 | "Otildemacron": ["O","O"], 1023 | "Odotaccentmacron": ["O","O"], 1024 | "Abreveacute": ["A","A"], 1025 | "Abrevedotbelow": ["A","A"], 1026 | "Abrevegrave": ["A","A"], 1027 | "Abrevehookabove": ["A","A"], 1028 | "Abrevetilde": ["A","A"], 1029 | "Acircumflexacute": ["A","A"], 1030 | "Acircumflexdotbelow": ["A","A"], 1031 | "Acircumflexgrave": ["A","A"], 1032 | "Acircumflexhookabove": ["A","A"], 1033 | "Acircumflextilde": ["A","A"], 1034 | "Ahookabove": ["A","A"], 1035 | "Ecircumflexacute": ["H","E"], 1036 | "Ecircumflexdotbelow": ["H","E"], 1037 | "Ecircumflexgrave": ["H","E"], 1038 | "Ecircumflexhookabove": ["H","E"], 1039 | "Ecircumflextilde": ["H","E"], 1040 | "Ehookabove": ["H","E"], 1041 | "Ocircumflexacute": ["O","O"], 1042 | "Ocircumflexdotbelow": ["O","O"], 1043 | "Ocircumflexgrave": ["O","O"], 1044 | "Ocircumflexhookabove": ["O","O"], 1045 | "Ocircumflextilde": ["O","O"], 1046 | "Ohookabove": ["O","O"], 1047 | "Ohorn": ["O","O"], 1048 | "Ohornacute": ["O","O"], 1049 | "Ohorndotbelow": ["O","O"], 1050 | "Ohorngrave": ["O","O"], 1051 | "Ohornhookabove": ["O","O"], 1052 | "Ohorntilde": ["O","O"], 1053 | "Uhookabove": ["U","U"], 1054 | "Uhorn": ["U","Uhorn"], 1055 | "Uhornacute": ["U","Uhorn"], 1056 | "Uhorndotbelow": ["U","Uhorn"], 1057 | "Uhorngrave": ["U","Uhorn"], 1058 | "Uhornhookabove": ["U",""], 1059 | "Uhorntilde": ["U","U"], 1060 | "Ydotbelow": ["Y","Y"], 1061 | "Yhookabove": ["Y","Y"], 1062 | "Ihookabove": ["H","H"], 1063 | "I_J.loclNLD" : ["H", "U"], 1064 | "Iacute_J.loclNLD" : ["H", "U"], 1065 | "a": ["a","n"], 1066 | "aacute": ["a","n"], 1067 | "abreve": ["a","n"], 1068 | "abreveacute": ["a","n"], 1069 | "abrevedotbelow": ["a","n"], 1070 | "abrevegrave": ["a","n"], 1071 | "abrevehookabove": ["a","n"], 1072 | "abrevetilde": ["a","n"], 1073 | "acircumflex": ["a","n"], 1074 | "acircumflexacute": ["a","n"], 1075 | "acircumflexdotbelow": ["a","n"], 1076 | "acircumflexgrave": ["a","n"], 1077 | "acircumflexhookabove": ["a","n"], 1078 | "acircumflextilde": ["a","n"], 1079 | "adblgrave": ["a","n"], 1080 | "adieresis": ["a","n"], 1081 | "adotbelow": ["a","n"], 1082 | "agrave": ["a","n"], 1083 | "ahookabove": ["a","n"], 1084 | "ainvertedbreve": ["a","n"], 1085 | "amacron": ["a","n"], 1086 | "aogonek": ["a","n"], 1087 | "aring": ["a","n"], 1088 | "aringacute": ["a","n"], 1089 | "atilde": ["a","n"], 1090 | "ae": ["a","e"], 1091 | "aeacute": ["a","e"], 1092 | "b": ["H","o"], 1093 | "c": ["o","c"], 1094 | "cacute": ["o","c"], 1095 | "ccaron": ["o","c"], 1096 | "ccedilla": ["o","c"], 1097 | "ccircumflex": ["o","c"], 1098 | "cdotaccent": ["o","c"], 1099 | "d": ["o","d"], 1100 | "eth": ["o","o"], 1101 | "dcaron": ["o","d"], 1102 | "dcroat": ["o","hbar"], 1103 | "dz": ["o","z"], 1104 | "dzcaron": ["o","z"], 1105 | "e": ["o","e"], 1106 | "eacute": ["o","e"], 1107 | "ebreve": ["o","e"], 1108 | "ecaron": ["o","e"], 1109 | "ecircumflex": ["o","e"], 1110 | "ecircumflexacute": ["o","e"], 1111 | "ecircumflexdotbelow": ["o","e"], 1112 | "ecircumflexgrave": ["o","e"], 1113 | "ecircumflexhookabove": ["o","e"], 1114 | "ecircumflextilde": ["o","e"], 1115 | "edblgrave": ["o","e"], 1116 | "edieresis": ["o","e"], 1117 | "edotaccent": ["o","e"], 1118 | "edotbelow": ["o","e"], 1119 | "egrave": ["o","e"], 1120 | "ehookabove": ["o","e"], 1121 | "einvertedbreve": ["o","e"], 1122 | "emacron": ["o","e"], 1123 | "eogonek": ["o","e"], 1124 | "etilde": ["o","e"], 1125 | "f": ["f","f"], 1126 | "g": ["g","g"], 1127 | "gbreve": ["g","g"], 1128 | "gcaron": ["g","g"], 1129 | "gcircumflex": ["g","g"], 1130 | "gcommaaccent": ["g","g"], 1131 | "gdotaccent": ["g","g"], 1132 | "h": ["H","n"], 1133 | "hbar": ["hbar","hbar"], 1134 | "hcircumflex": ["H","n"], 1135 | "i": ["idotless","idotless"], 1136 | "idotless": ["idotless","idotless"], 1137 | "iacute": ["idotless","idotless"], 1138 | "ibreve": ["idotless","idotless"], 1139 | "icircumflex": ["idotless","idotless"], 1140 | "idblgrave": ["idotless","idotless"], 1141 | "idieresis": ["idotless","idotless"], 1142 | "idotaccent": ["idotless","idotless"], 1143 | "idotbelow": ["idotless","idotless"], 1144 | "igrave": ["idotless","idotless"], 1145 | "ihookabove": ["idotless","idotless"], 1146 | "iinvertedbreve": ["idotless","idotless"], 1147 | "imacron": ["idotless","idotless"], 1148 | "iogonek": ["idotless","idotless"], 1149 | "itilde": ["idotless","idotless"], 1150 | "j": ["jdotless","jdotless"], 1151 | "jdotless": ["jdotless","jdotless"], 1152 | "jcircumflex": ["jdotless","jdotless"], 1153 | "k": ["H","k"], 1154 | "kcommaaccent": ["H","k"], 1155 | "kgreenlandic": ["n","k"], 1156 | "l": ["H","l"], 1157 | "lacute": ["H","l"], 1158 | "lcaron": ["H","l"], 1159 | "lcommaaccent": ["H","l"], 1160 | "ldot": ["H","l"], 1161 | "lj": ["H","l"], 1162 | "lslash": ["hbar","l"], 1163 | "m": ["n","n"], 1164 | "n": ["n","n"], 1165 | "nacute": ["n","n"], 1166 | "ncaron": ["n","n"], 1167 | "ncommaaccent": ["n","n"], 1168 | "eng": ["n","j"], 1169 | "nj": ["n","j"], 1170 | "ntilde": ["n","n"], 1171 | "o": ["o","o"], 1172 | "oacute": ["o","o"], 1173 | "obreve": ["o","o"], 1174 | "ocircumflex": ["o","o"], 1175 | "ocircumflexacute": ["o","o"], 1176 | "ocircumflexdotbelow": ["o","o"], 1177 | "ocircumflexgrave": ["o","o"], 1178 | "ocircumflexhookabove": ["o","o"], 1179 | "ocircumflextilde": ["o","o"], 1180 | "odblgrave": ["o","o"], 1181 | "odieresis": ["o","o"], 1182 | "odieresismacron": ["o","o"], 1183 | "odotaccentmacron": ["o","o"], 1184 | "odotbelow": ["o","o"], 1185 | "ograve": ["o","o"], 1186 | "ohookabove": ["o","o"], 1187 | "ohorn": ["o","o"], 1188 | "ohornacute": ["o","o"], 1189 | "ohorndotbelow": ["o","o"], 1190 | "ohorngrave": ["o","o"], 1191 | "ohornhookabove": ["o","o"], 1192 | "ohorntilde": ["o","o"], 1193 | "ohungarumlaut": ["o","o"], 1194 | "oinvertedbreve": ["o","o"], 1195 | "omacron": ["o","o"], 1196 | "oogonek": ["o","o"], 1197 | "oslash": ["o","o"], 1198 | "oslashacute": ["o","o"], 1199 | "otilde": ["o","o"], 1200 | "otildemacron": ["o","o"], 1201 | "oe": ["o","e"], 1202 | "p": ["n","o"], 1203 | "thorn": ["H","o"], 1204 | "q": ["o","q"], 1205 | "r": ["n","r"], 1206 | "racute": ["n","r"], 1207 | "rcaron": ["n","r"], 1208 | "rcommaaccent": ["n","r"], 1209 | "rdblgrave": ["n","r"], 1210 | "rinvertedbreve": ["n","r"], 1211 | "s": ["s","s"], 1212 | "sacute": ["s","s"], 1213 | "scaron": ["s","s"], 1214 | "scedilla": ["s","s"], 1215 | "scircumflex": ["s","s"], 1216 | "scommaaccent": ["s","s"], 1217 | "germandbls": ["H","germandbls"], 1218 | "schwa": ["o","o"], 1219 | "t": ["t","t"], 1220 | "tbar": ["t","t"], 1221 | "tcaron": ["t","t"], 1222 | "tcedilla": ["t","t"], 1223 | "tcommaaccent": ["t","t"], 1224 | "u": ["u","u"], 1225 | "uacute": ["u","u"], 1226 | "ubreve": ["u","u"], 1227 | "ucircumflex": ["u","u"], 1228 | "udblgrave": ["u","u"], 1229 | "udieresis": ["u","u"], 1230 | "udotbelow": ["u","u"], 1231 | "ugrave": ["u","u"], 1232 | "uhookabove": ["u","u"], 1233 | "uhorn": ["u","uhorn"], 1234 | "uhornacute": ["u","uhorn"], 1235 | "uhorndotbelow": ["u","uhorn"], 1236 | "uhorngrave": ["u","uhorn"], 1237 | "uhornhookabove": ["u","u"], 1238 | "uhorntilde": ["u","u"], 1239 | "uhungarumlaut": ["u","u"], 1240 | "uinvertedbreve": ["u","u"], 1241 | "umacron": ["u","u"], 1242 | "uogonek": ["u","u"], 1243 | "uring": ["u","u"], 1244 | "utilde": ["u","u"], 1245 | "v": ["v","v"], 1246 | "w": ["v","v"], 1247 | "wacute": ["v","v"], 1248 | "wcircumflex": ["v","v"], 1249 | "wdieresis": ["v","v"], 1250 | "wgrave": ["v","v"], 1251 | "x": ["x","x"], 1252 | "y": ["y","y"], 1253 | "yacute": ["y","y"], 1254 | "ycircumflex": ["y","y"], 1255 | "ydieresis": ["y","y"], 1256 | "ydotbelow": ["y","y"], 1257 | "ygrave": ["y","y"], 1258 | "yhookabove": ["y","y"], 1259 | "ymacron": ["y","y"], 1260 | "ytilde": ["y","y"], 1261 | "z": ["z","z"], 1262 | "zacute": ["z","z"], 1263 | "zcaron": ["z","z"], 1264 | "zdotaccent": ["z","z"], 1265 | "f_f" : ["f", "f"], 1266 | "f_f_i" : ["f", "i"], 1267 | "f_f_ij" : ["f", "j"], 1268 | "f_f_l" : ["f", "l"], 1269 | "f_ij" : ["f", "j"], 1270 | "fi" : ["f", "i"], 1271 | "fl" : ["f", "l"], 1272 | "i_j.loclNLD" : ["i", "j"], 1273 | "iacute_j.loclNLD" : ["i", "j"], 1274 | "ordfeminine" : ["ordfeminine", "ordfeminine"], 1275 | "ordmasculine" : ["ordfeminine", "ordfeminine"], 1276 | "onehalf" : ["onehalf", "onehalf"], 1277 | "onequarter" : ["onehalf", "onehalf"], 1278 | "threequarters" : ["onehalf", "onehalf"], 1279 | "asterisk" : ["asterisk", "asterisk"], 1280 | "backslash" : ["backslash", "backslash"], 1281 | "periodcentered" : ["hyphen", "hyphen"], 1282 | "bullet" : ["hyphen", "hyphen"], 1283 | "colon" : ["colon", "colon"], 1284 | "comma" : ["period", "period"], 1285 | "ellipsis" : ["period", "period"], 1286 | "exclam" : ["exclam", "exclam"], 1287 | "exclamdown" : ["exclam", "exclam"], 1288 | "numbersign" : ["numbersign", "numbersign"], 1289 | "period" : ["period", "period"], 1290 | "question" : ["quesion", "question"], 1291 | "questiondown" : ["questiondown", "questiondown"], 1292 | "quotedbl" : ["quotesingle", "quotesingle"], 1293 | "quotesingle" : ["quotesingle", "quotesingle"], 1294 | "semicolon" : ["colon", "colon"], 1295 | "slash" : ["slash", "slash"], 1296 | "underscore" : ["period", "period"], 1297 | "periodcentered.loclCAT" : ["period", "period"], 1298 | "braceleft" : ["parenleft", "parenleft"], 1299 | "braceright" : ["parenright", "parenright"], 1300 | "bracketleft" : ["parenleft", "parenleft"], 1301 | "bracketright" : ["parenright", "parenright"], 1302 | "parenleft" : ["parenleft", "parenleft"], 1303 | "parenright" : ["parenright", "parenright"], 1304 | "braceleft.case" : ["parenleft", "parenleft"], 1305 | "braceright.case" : ["parenright", "parenright"], 1306 | "bracketleft.case" : ["parenleft", "parenleft"], 1307 | "bracketright.case" : ["parenright", "parenright"], 1308 | "parenleft.case" : ["parenleft", "parenleft"], 1309 | "parenright.case" : ["parenright", "parenright"], 1310 | "emdash" : ["hyphen", "hyphen"], 1311 | "endash" : ["hyphen", "hyphen"], 1312 | "hyphen" : ["hyphen", "hyphen"], 1313 | "guillemetleft" : ["guilsinglleft", "guilsinglleft"], 1314 | "guillemetright" : ["guilsinglright", "guilsinglright"], 1315 | "guilsinglleft" : ["guilsinglleft", "guilsinglleft"], 1316 | "guilsinglright" : ["guilsinglright", "guilsinglright"], 1317 | "quotedblbase" : ["period", "period"], 1318 | "quotedblleft" : ["quoteleft", "quoteleft"], 1319 | "quotedblright" : ["quoteright", "quoteright"], 1320 | "quoteleft" : ["quoteleft", "quoteleft"], 1321 | "quoteright" : ["quoteright", "quoteright"], 1322 | "quotesinglbase" : ["period", "period"], 1323 | "space" : ["space", "space"], 1324 | "nbspace" : ["space", "space"], 1325 | "cedi" : ["O", "C"], 1326 | "cent" : ["o", "c"], 1327 | "colonsign" : ["O", "C"], 1328 | "currency" : ["currency", "currency"], 1329 | "dollar" : ["S", "S"], 1330 | "dong" : ["o", "d"], 1331 | "euro" : ["O", "C"], 1332 | "florin" : ["florin", "florin"], 1333 | "franc" : ["Hbar", "F"], 1334 | "guarani" : ["O", "C"], 1335 | "kip" : ["Hbar", "K"], 1336 | "lira" : ["sterling", "sterling"], 1337 | "liraTurkish" : ["Hbar", "L"], 1338 | "manat" : ["U", "U"], 1339 | "naira" : ["Hbar", "Hbar"], 1340 | "peseta" : ["P", "s"], 1341 | "peso" : ["Hbar", "P"], 1342 | "ruble" : ["Hbar", "P"], 1343 | "rupeeIndian" : ["H", "rupeeIndian"], 1344 | "sterling" : ["sterling", "sterling"], 1345 | "won" : ["V", "V"], 1346 | "yen" : ["Y", "Y"], 1347 | "bulletoperator" : ["hyphen", "hyphen"], 1348 | "divisionslash" : ["slash", "slash"], 1349 | "plus" : ["plus", "plus"], 1350 | "minus" : ["plus", "plus"], 1351 | "multiply" : ["plus", "plus"], 1352 | "divide" : ["plus", "plus"], 1353 | "equal" : ["plus", "plus"], 1354 | "notequal" : ["plus", "plus"], 1355 | "greater" : ["plus", "plus"], 1356 | "less" : ["plus", "plus"], 1357 | "greaterequal" : ["plus", "plus"], 1358 | "lessequal" : ["plus", "plus"], 1359 | "plusminus" : ["plus", "plus"], 1360 | "approxequal" : ["plus", "plus"], 1361 | "asciitilde" : ["plus", "plus"], 1362 | "logicalnot" : ["plus", "plus"], 1363 | "micro" : ["u", "micro"], 1364 | "percent" : ["percent", "percent"], 1365 | "perthousand" : ["percent", "percent"], 1366 | "at" : ["at", "at"], 1367 | "ampersand" : ["ampersand", "ampersand"], 1368 | "paragraph" : ["paragraph", "H"], 1369 | "section" : ["section", "section"], 1370 | "copyright" : ["O", "O"], 1371 | "registered" : ["O", "O"], 1372 | "trademark" : ["ordfeminine", "ordfeminine"], 1373 | "degree" : ["ordfeminine", "ordfeminine"], 1374 | "bar" : ["H", "H"], 1375 | "brokenbar" : ["H", "H"], 1376 | "dagger" : ["Hbar", "Hbar"], 1377 | "daggerdbl" : ["Hbar", "Hbar"], 1378 | "numero" : ["H", "ordfeminine"], 1379 | "asciicircum" : ["asterisk", "asterisk"], 1380 | "one" : ["one", "one"], 1381 | "two" : ["two", "two"], 1382 | "three" : ["three", "three"], 1383 | "four" : ["four", "four"], 1384 | "five" : ["five", "five"], 1385 | "six" : ["six", "six"], 1386 | "seven" : ["seven", "seven"], 1387 | "eight" : ["eight", "eight"], 1388 | "nine" : ["nine", "nine"], 1389 | "ten" : ["ten", "ten"], 1390 | "one.lf" : ["one", "one"], 1391 | "two.lf" : ["two", "two"], 1392 | "three.lf" : ["three", "three"], 1393 | "four.lf" : ["four", "four"], 1394 | "five.lf" : ["five", "five"], 1395 | "six.lf" : ["six", "six"], 1396 | "seven.lf" : ["seven", "seven"], 1397 | "eight.lf" : ["eight", "eight"], 1398 | "nine.lf" : ["nine", "nine"], 1399 | "ten.lf" : ["ten", "ten"], 1400 | "one.osf" : ["one", "one"], 1401 | "two.osf" : ["two", "two"], 1402 | "three.osf" : ["three", "three"], 1403 | "four.osf" : ["four", "four"], 1404 | "five.osf" : ["five", "five"], 1405 | "six.osf" : ["six", "six"], 1406 | "seven.osf" : ["seven", "seven"], 1407 | "eight.osf" : ["eight", "eight"], 1408 | "nine.osf" : ["nine", "nine"], 1409 | "ten.osf" : ["ten", "ten"], 1410 | ### Cyrillic 1411 | "A-cy" : ["A", "A"], 1412 | "Be-cy" : ["H", "Be-cy"], 1413 | "Ve-cy" : ["H", "B"], 1414 | "Ge-cy" : ["H", "Ge-cy"], 1415 | "Gje-cy" : ["H", "Ge-cy"], 1416 | "Gheupturn-cy" : ["H", "Ge-cy"], 1417 | "De-cy" : ["De-cy", "Tse-cy"], 1418 | "Ie-cy" : ["H", "E"], 1419 | "Iegrave-cy" : ["H", "E"], 1420 | "Io-cy" : ["H", "E"], 1421 | "Zhe-cy" : ["X", "K"], 1422 | "Ze-cy" : ["Ze-cy", "B"], 1423 | "Ii-cy" : ["H", "H"], 1424 | "Iishort-cy" : ["H", "H"], 1425 | "Iigrave-cy" : ["H", "H"], 1426 | "Ka-cy" : ["H", "K"], 1427 | "Kje-cy" : ["H", "K"], 1428 | "El-cy" : ["El-cy", "H"], 1429 | "Em-cy" : ["H", "H"], 1430 | "En-cy" : ["H", "H"], 1431 | "O-cy" : ["O", "O"], 1432 | "Pe-cy" : ["H", "H"], 1433 | "Er-cy" : ["H", "P"], 1434 | "Es-cy" : ["O", "C"], 1435 | "Te-cy" : ["T", "T"], 1436 | "U-cy" : ["U-cy", "U-cy"], 1437 | "Ushort-cy" : ["U-cy", "U-cy"], 1438 | "Ef-cy" : ["O", "O"], 1439 | "Ha-cy" : ["X", "X"], 1440 | "Che-cy" : ["Che-cy", "H"], 1441 | "Tse-cy" : ["H", "Tse-cy"], 1442 | "Sha-cy" : ["H", "H"], 1443 | "Shcha-cy" : ["H", "Tse-cy"], 1444 | "Dzhe-cy" : ["H", "H"], 1445 | "Softsign-cy" : ["H", "Softsign-cy"], 1446 | "Hardsign-cy" : ["T", "Softsign-cy"], 1447 | "Yeru-cy" : ["H", "H"], 1448 | "Lje-cy" : ["El-cy", "Softsign-cy"], 1449 | "Nje-cy" : ["H", "Softsign-cy"], 1450 | "Dze-cy" : ["S", "S"], 1451 | "E-cy" : ["O", "C"], 1452 | "Ereversed-cy" : ["Ereversed-cy", "O"], 1453 | "I-cy" : ["H", "H"], 1454 | "Yi-cy" : ["H", "H"], 1455 | "Je-cy" : ["J", "J"], 1456 | "Tshe-cy" : ["T", "Tshe-cy"], 1457 | "Yu-cy" : ["H", "O"], 1458 | "Ia-cy" : ["Ia-cy", "H"], 1459 | "Dje-cy" : ["T", "Tshe-cy"], 1460 | "Yat-cy" : ["H", "Softsign-cy"], 1461 | "Yusbig-cy" : ["X", "X"], 1462 | "Fita-cy" : ["O", "O"], 1463 | "Izhitsa-cy" : ["V", "V"], 1464 | "Ghestroke-cy" : ["H", "Ge-cy"], 1465 | "Gemiddlehook-cy" : ["H", "Tshe-cy"], 1466 | "Zhedescender-cy" : ["X", "Kadescender-cy"], 1467 | "Zedescender-cy" : ["Ze-cy", "B"], 1468 | "Kadescender-cy" : ["H", "Kadescender-cy"], 1469 | "Kaverticalstroke-cy" : ["H", "K"], 1470 | "Kastroke-cy" : ["H", "K"], 1471 | "Kabashkir-cy" : ["T", "K"], 1472 | "Endescender-cy" : ["H", "Tse-cy"], 1473 | "Pemiddlehook-cy" : ["H", "Tshe-cy"], 1474 | "Pedescender-cy" : ["H", "Tse-cy"], 1475 | "Haabkhasian-cy" : ["O", "O"], 1476 | "Esdescender-cy" : ["O", "C"], 1477 | "Tedescender-cy" : ["T", "T"], 1478 | "Ustrait-cy" : ["Y", "Y"], 1479 | "Ustraitstroke-cy" : ["Y", "Y"], 1480 | "Hadescender-cy" : ["X", "Kadescender-cy"], 1481 | "Chedescender-cy" : ["Che-cy", "Tse-cy"], 1482 | "Cheverticalstroke-cy" : ["Che-cy", "H"], 1483 | "Shha-cy" : ["H", "Tshe-cy"], 1484 | "Cheabkhasian-cy" : ["Cheabkhasian-cy", "C"], 1485 | "Chedescenderabkhasian-cy" : ["Cheabkhasian-cy", "Cheabkhasian-cy"], 1486 | "Palochka-cy" : ["H", "H"], 1487 | "Zhebreve-cy" : ["X", "X"], 1488 | "Chekhakassian-cy" : ["Che-cy", "H"], 1489 | "Abreve-cy" : ["A", "A"], 1490 | "Adieresis-cy" : ["A", "A"], 1491 | "Iebreve-cy" : ["H", "E"], 1492 | "Schwa-cy" : ["Ereversed-cy", "O"], 1493 | "Zhedieresis-cy" : ["X", "K"], 1494 | "Zedieresis-cy" : ["Ze-cy", "B"], 1495 | "Dzeabkhasian-cy" : ["Ze-cy", "B"], 1496 | "Imacron-cy" : ["H", "H"], 1497 | "Idieresis-cy" : ["H", "H"], 1498 | "Odieresis-cy" : ["O", "O"], 1499 | "Obarred-cy" : ["O", "O"], 1500 | "Umacron-cy" : ["v", "v"], 1501 | "Udieresis-cy" : ["U-cy", "U-cy"], 1502 | "Uhungarumlaut-cy" : ["U-cy", "U-cy"], 1503 | "Chedieresis-cy" : ["Che-cy", "H"], 1504 | "Gedescender-cy" : ["H", "Ge-cy"], 1505 | "Yerudieresis-cy" : ["H", "H"], 1506 | "Qa-cy" : ["O", "O"], 1507 | "We-cy" : ["V", "V"], 1508 | "Ef-cy.loclBGR" : ["O", "O"], 1509 | "Ghestroke-cy.loclBSH" : ["H", "F"], 1510 | "Zedescender-cy.loclBSH" : ["Ze-cy", "B"], 1511 | "Esdescender-cy.loclBSH" : ["O", "C"], 1512 | "Esdescender-cy.loclCHU" : ["O", "C"], 1513 | "De-cy.loclBGR" : ["De-cy", "Tse-cy"], 1514 | "Ii-cy.loclBGR" : ["H", "H"], 1515 | "Iishort-cy.loclBGR" : ["H", "H"], 1516 | "Iigrave-cy.loclBGR" : ["H", "H"], 1517 | "El-cy.loclBGR" : ["El-cy", "H"], 1518 | "a-cy" : ["a", "n"], 1519 | "be-cy" : ["be-cy", "o"], 1520 | "ve-cy" : ["n", "ve-cy"], 1521 | "ge-cy" : ["n", "ge-cy"], 1522 | "gje-cy" : ["n", "ge-cy"], 1523 | "geupturn-cy" : ["n", "ge-cy"], 1524 | "de-cy" : ["de-cy", "tse-cy"], 1525 | "ie-cy" : ["o", "e"], 1526 | "iegrave-cy" : ["o", "e"], 1527 | "io-cy" : ["o", "e"], 1528 | "zhe-cy" : ["x", "x"], 1529 | "ze-cy" : ["ze-cy", "ve-cy"], 1530 | "ii-cy" : ["n", "u"], 1531 | "iishort-cy" : ["n", "u"], 1532 | "iigrave-cy" : ["n", "u"], 1533 | "ka-cy" : ["n", "k"], 1534 | "kje-cy" : ["n", "k"], 1535 | "el-cy" : ["el-cy", "u"], 1536 | "em-cy" : ["n", "u"], 1537 | "en-cy" : ["n", "n"], 1538 | "o-cy" : ["o", "o"], 1539 | "pe-cy" : ["n", "u"], 1540 | "er-cy" : ["p", "o"], 1541 | "es-cy" : ["o", "c"], 1542 | "te-cy" : ["te-cy", "te-cy"], 1543 | "u-cy" : ["v", "v"], 1544 | "ushort-cy" : ["v", "v"], 1545 | "ef-cy" : ["o", "o"], 1546 | "ha-cy" : ["x", "x"], 1547 | "che-cy" : ["che-cy", "u"], 1548 | "tse-cy" : ["n", "tse-cy"], 1549 | "sha-cy" : ["n", "u"], 1550 | "shcha-cy" : ["n", "tse-cy"], 1551 | "dzhe-cy" : ["n", "u"], 1552 | "softsign-cy" : ["n", "softsign-cy"], 1553 | "hardsign-cy" : ["te-cy", "softsign-cy"], 1554 | "yeru-cy" : ["n", "u"], 1555 | "lje-cy" : ["el-cy", "softsign-cy"], 1556 | "nje-cy" : ["n", "softsign-cy"], 1557 | "dze-cy" : ["s", "s"], 1558 | "e-cy" : ["o", "c"], 1559 | "ereversed-cy" : ["ereversed-cy", "o"], 1560 | "i-cy" : ["i", "i"], 1561 | "yi-cy" : ["i", "i"], 1562 | "je-cy" : ["j", "i"], 1563 | "tshe-cy" : ["h", "n"], 1564 | "yu-cy" : ["n", "o"], 1565 | "ia-cy" : ["ia-cy", "u"], 1566 | "dje-cy" : ["h", "n"], 1567 | "yat-cy" : ["H", "softsign-cy"], 1568 | "yusbig-cy" : ["x", "x"], 1569 | "fita-cy" : ["o", "o"], 1570 | "izhitsa-cy" : ["v", "v"], 1571 | "gestroke-cy" : ["n", "ge-cy"], 1572 | "gemiddlehook-cy" : ["n", "midddehook-cy"], 1573 | "zhedescender-cy" : ["x", "kadescender-cy"], 1574 | "zedescender-cy" : ["ze-cy", "ve-cy"], 1575 | "kadescender-cy" : ["n", "kadescender-cy"], 1576 | "kaverticalstroke-cy" : ["n", "k"], 1577 | "kastroke-cy" : ["H", "k"], 1578 | "kabashkir-cy" : ["te-cy", "k"], 1579 | "endescender-cy" : ["n", "tse-cy"], 1580 | "pedescender-cy" : ["n", "tse-cy"], 1581 | "pemiddlehook-cy" : ["n", "midddehook-cy"], 1582 | "haabkhasian-cy" : ["o", "o"], 1583 | "esdescender-cy" : ["o", "c"], 1584 | "tedescender-cy" : ["te-cy", "te-cy"], 1585 | "ustrait-cy" : ["v", "v"], 1586 | "ustraitstroke-cy" : ["v", "v"], 1587 | "hadescender-cy" : ["x", "kadescender-cy"], 1588 | "chedescender-cy" : ["che-cy", "tse-cy"], 1589 | "cheverticalstroke-cy" : ["che-cy", "u"], 1590 | "shha-cy" : ["H", "n"], 1591 | "cheabkhasian-cy" : ["cheabkhasian-cy", "e"], 1592 | "chedescenderabkhasian-cy" : ["cheabkhasian-cy", "e"], 1593 | "palochka-cy" : ["i", "i"], 1594 | "zhebreve-cy" : ["x", "x"], 1595 | "chekhakassian-cy" : ["che-cy", "u"], 1596 | "abreve-cy" : ["a", "n"], 1597 | "adieresis-cy" : ["a", "n"], 1598 | "iebreve-cy" : ["o", "e"], 1599 | "schwa-cy" : ["o", "o"], 1600 | "zhedieresis-cy" : ["x", "x"], 1601 | "zedieresis-cy" : ["ze-cy", "ve-cy"], 1602 | "dzeabkhasian-cy" : ["ze-cy", "ve-cy"], 1603 | "imacron-cy" : ["n", "u"], 1604 | "idieresis-cy" : ["n", "u"], 1605 | "odieresis-cy" : ["o", "o"], 1606 | "obarred-cy" : ["o", "o"], 1607 | "umacron-cy" : ["v", "v"], 1608 | "udieresis-cy" : ["v", "v"], 1609 | "uhungarumlaut-cy" : ["v", "v"], 1610 | "chedieresis-cy" : ["che-cy", "u"], 1611 | "gedescender-cy" : ["n", "ge-cy"], 1612 | "yerudieresis-cy" : ["n", "u"], 1613 | "qa-cy" : ["o", "q"], 1614 | "we-cy" : ["v", "v"], 1615 | "ve-cy.loclBGR" : ["n", "ve-cy"], 1616 | "ge-cy.loclBGR" : ["s", "s"], 1617 | "de-cy.loclBGR" : ["o", "g"], 1618 | "zhe-cy.loclBGR" : ["x", "x"], 1619 | "ze-cy.loclBGR" : ["ze-cy", "ve-cy"], 1620 | "ii-cy.loclBGR" : ["u", "u"], 1621 | "iishort-cy.loclBGR" : ["u", "u"], 1622 | "iigrave-cy.loclBGR" : ["u", "u"], 1623 | "ka-cy.loclBGR" : ["H", "k"], 1624 | "pe-cy.loclBGR" : ["n", "n"], 1625 | "te-cy.loclBGR" : ["n", "n"], 1626 | "che-cy.loclBGR" : ["che-cy", "u"], 1627 | "tse-cy.loclBGR" : ["u", "tse-cy"], 1628 | "sha-cy.loclBGR" : ["u", "u"], 1629 | "shcha-cy.loclBGR" : ["u", "tse-cy"], 1630 | "softsign-cy.loclBGR" : ["u", "softsign-cy"], 1631 | "hardsign-cy.loclBGR" : ["te-cy", "softsign-cy"], 1632 | "yu-cy.loclBGR" : ["H", "o"], 1633 | "gestroke-cy.loclBSH" : ["n", "ge-cy"], 1634 | "zedescender-cy.loclBSH" : ["ze-cy", "ze-cy"], 1635 | "esdescender-cy.loclBSH" : ["o", "c"], 1636 | "esdescender-cy.loclCHU" : ["o", "c"], 1637 | "be-cy.loclSRB" : ["o", "o"], 1638 | "el-cy.ss01" : ["el-cy.ss01", "u"], 1639 | "lje-cy.ss01" : ["el-cy.ss01", "softsign-cy"], 1640 | "el-cy.loclBGR" : ["el-cy", "u"], 1641 | "en-cy.loclBGR" : ["u", "n"], 1642 | "gje-cy.loclMKD" : ["ge-cy", "n"], 1643 | "ge-cy.loclSRB" : ["n", "ge-cy"], 1644 | "de-cy.loclSRB" : ["de-cy", "tse-cy"], 1645 | "pe-cy.loclSRB" : ["u", "n"], 1646 | "te-cy.loclSRB" : ["te-cy", "te-cy"], 1647 | "EnGe-cy" : ["H", "Ge-cy"], 1648 | "enge-cy" : ["n", "ge-cy"], 1649 | "Tetse-cy" : ["T", "Tse-cy"], 1650 | "tetse-cy" : ["te-cy", "tse-cy"], 1651 | ### Greek 1652 | "Alpha" : ["A", "A"], 1653 | "Beta" : ["H", "B"], 1654 | "Gamma" : ["", "H"], 1655 | "Delta" : ["A", "A"], 1656 | "Epsilon" : ["H", "E"], 1657 | "Zeta" : ["Z", "Z"], 1658 | "Eta" : ["H", "H"], 1659 | "Theta" : ["O", "O"], 1660 | "Iota" : ["H", "H"], 1661 | "Kappa" : ["H", "K"], 1662 | "Lambda" : ["A", "A"], 1663 | "Mu" : ["M", "M"], 1664 | "Nu" : ["H", "H"], 1665 | "Omicron" : ["O", "O"], 1666 | "Pi" : ["H", "H"], 1667 | "Rho" : ["H", "P"], 1668 | "Tau" : ["T", "T"], 1669 | "Upsilon" : ["Y", "Y"], 1670 | "Chi" : ["X", "X"], 1671 | "Alphatonos" : ["A", "A"], 1672 | "Epsilontonos" : ["E", "E"], 1673 | "Etatonos" : ["H", "H"], 1674 | "Iotatonos" : ["H", "H"], 1675 | "Iotadieresis" : ["H", "H"], 1676 | "Omicrontonos" : ["O", "O"], 1677 | "Upsilontonos" : ["Y", "Y"], 1678 | "Upsilondieresis" : ["Y", "Y"], 1679 | "Omegatonos" : ["Omega", "Omega"], 1680 | "beta" : ["H", ""], 1681 | "eta" : ["n", "n"], 1682 | "kappa" : ["n", "k"], 1683 | "mu" : ["p", "u"], 1684 | "omicron" : ["o", "o"], 1685 | "rho" : ["rho", "o"], 1686 | "sigma" : ["o", ""], 1687 | "psi" : ["upsilon", "upsilon"], 1688 | "alphatonos" : ["alpha", "alpha"], 1689 | "epsilontonos" : ["epsilon", "epsilon"], 1690 | "etatonos" : ["n", "n"], 1691 | "iotadieresis" : ["i", "i"], 1692 | "omicrontonos" : ["o", "o"], 1693 | "upsilontonos" : ["upsilon", "upsilon"], 1694 | "upsilondieresistonos" : ["upsilon", "upsilon"], 1695 | "upsilondieresis" : ["upsilon", "upsilon"], 1696 | "omegatonos" : ["omega", "omega"], 1697 | } 1698 | 1699 | def KeysForGlyph(Glyph): 1700 | if Glyph == None: 1701 | return [] 1702 | global DefaultKeys 1703 | LeftKey = False 1704 | RightKey = False 1705 | try: 1706 | LeftKey = Glyph.leftKerningGroup 1707 | except: 1708 | print(traceback.format_exc()) 1709 | try: 1710 | RightKey = Glyph.rightKerningGroup 1711 | except: 1712 | print(traceback.format_exc()) 1713 | try: 1714 | if len(LeftKey < 1): 1715 | LeftKey = False 1716 | except TypeError: 1717 | pass 1718 | except: 1719 | print(traceback.format_exc()) 1720 | try: 1721 | if len(RightKey < 1): 1722 | RightKey = False 1723 | except TypeError: 1724 | pass 1725 | except: 1726 | print(traceback.format_exc()) 1727 | return (LeftKey, RightKey) 1728 | 1729 | def updateKeyGlyphsForSelected(): 1730 | Doc = Glyphs.currentDocument 1731 | Font = Doc.font 1732 | SelectedLayers = Doc.selectedLayers() 1733 | for Layer in SelectedLayers: 1734 | Glyph = Layer.parent 1735 | LeftKey = "" 1736 | RightKey = "" 1737 | LigatureComponents = Glyph.name.split("_") 1738 | if len(Layer.components) > 0 and len(Layer.paths) == 0 and Layer.components[0].transformStruct()[0] == 1: 1739 | componentGlyph = Layer.components[0].component 1740 | if not componentGlyph: 1741 | raise Exception("Something is wrong with a Component in Glyphs %s" % Layer.parent.name) 1742 | if componentGlyph.category == "Letter": 1743 | LeftKey = KeysForGlyph(componentGlyph)[0] 1744 | if not LeftKey: 1745 | LeftKey = componentGlyph.name 1746 | 1747 | for Component in Layer.components: 1748 | try: 1749 | if Component.component.category == "Letter": 1750 | if Component.transform[0] == 1: 1751 | componentGlyph = Component.component 1752 | elif Component.component.category != "Mark": 1753 | #componentGlyph = None 1754 | pass 1755 | except: 1756 | pass 1757 | if componentGlyph: 1758 | RightKey = KeysForGlyph(componentGlyph)[1] 1759 | if not RightKey: 1760 | RightKey = componentGlyph.name 1761 | 1762 | elif len(LigatureComponents) > 1: 1763 | LeftGlyph = Font.glyphs[LigatureComponents[0]] 1764 | if LeftGlyph != None: 1765 | LeftKey = KeysForGlyph(LeftGlyph)[0] 1766 | RightGlyph = Font.glyphs[LigatureComponents[-1]] 1767 | if RightGlyph != None: 1768 | RightKey = KeysForGlyph(RightGlyph)[1] 1769 | if LeftKey: 1770 | try: 1771 | if LeftKey not in Font.glyphs and not Font.glyphs[LeftKey].export: 1772 | LeftKey = False 1773 | except: 1774 | LeftKey = False 1775 | if RightKey: 1776 | try: 1777 | if RightKey not in Font.glyphs and not Font.glyphs[RightKey].export: 1778 | RightKey = False 1779 | except: 1780 | pass 1781 | if not LeftKey: 1782 | try: 1783 | LeftKey = DefaultKeys[Glyph.name][0] 1784 | except KeyError: 1785 | pass 1786 | except: 1787 | print(traceback.format_exc()) 1788 | if not RightKey: 1789 | try: 1790 | RightKey = DefaultKeys[Glyph.name][1] 1791 | except KeyError: 1792 | pass 1793 | except: 1794 | print(traceback.format_exc()) 1795 | if not LeftKey and Glyph.name[-3:] == ".sc": 1796 | try: 1797 | Glyph 1798 | LeftKey = DefaultKeys[Glyph.name[:-3].title()][0] 1799 | if (len(LeftKey) > 0): 1800 | LeftKey = LeftKey.lower()+".sc" 1801 | except: 1802 | print(traceback.format_exc()) 1803 | if not RightKey and Glyph.name[-3:] == ".sc": 1804 | try: 1805 | RightKey = DefaultKeys[Glyph.name[:-3].title()][1] 1806 | if (len(RightKey) > 0): 1807 | RightKey = RightKey.lower()+".sc" 1808 | except: 1809 | print(traceback.format_exc()) 1810 | if not LeftKey: 1811 | LeftKey = Glyph.name 1812 | if not RightKey: 1813 | RightKey = Glyph.name 1814 | 1815 | print(Glyph.name, ">", LeftKey, RightKey) 1816 | if Glyph.leftKerningGroup is None or len(Glyph.leftKerningGroup) == 0: 1817 | Glyph.setLeftKerningGroup_(LeftKey) 1818 | if Glyph.rightKerningGroup is None or len(Glyph.rightKerningGroup) == 0: 1819 | Glyph.setRightKerningGroup_(RightKey) 1820 | 1821 | def main(): 1822 | print("*** Start Update Key Glyphs ***\n") 1823 | updateKeyGlyphsForSelected() 1824 | print("*** End ****") 1825 | 1826 | def test(): 1827 | NewDefaultKeys = {} 1828 | for key in Keys: 1829 | key = niceName(key) 1830 | values = DefaultKeys[key] 1831 | newValues = [] 1832 | for value in values: 1833 | newValues.append( niceName(value) ) 1834 | print(" \"%s\" : [\"%s\", \"%s\"]," % (key, newValues[1], newValues[0])) 1835 | NewDefaultKeys[key] = newValues 1836 | #print NewDefaultKeys 1837 | main() 1838 | 1839 | #test() -------------------------------------------------------------------------------- /Metrics/set Metrics Keys.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Set Metrics Keys Auto 2 | # encoding: utf-8 3 | # Based on script by Georg Seifert 4 | # Copyright: Georg Seifert, 2010, www.schriftgestaltung.de Version 1.0 5 | import sys 6 | import os 7 | from GlyphsApp import * 8 | import objc 9 | from AppKit import * 10 | from Foundation import * 11 | import traceback 12 | 13 | 14 | def KeysForGlyph(Glyph): 15 | if Glyph == None: 16 | return [] 17 | global DefaultKeys 18 | LeftKey = False 19 | RightKey = False 20 | try: 21 | LeftKey = Glyph.leftMetricsKey 22 | except: 23 | print traceback.format_exc() 24 | try: 25 | RightKey = Glyph.rightMetricsKey 26 | except: 27 | print traceback.format_exc() 28 | try: 29 | if len(LeftKey < 1): 30 | LeftKey = False 31 | except TypeError: 32 | pass 33 | except: 34 | print traceback.format_exc() 35 | try: 36 | if len(RightKey < 1): 37 | RightKey = False 38 | except TypeError: 39 | pass 40 | except: 41 | print traceback.format_exc() 42 | return (LeftKey, RightKey) 43 | 44 | def updateKeyGlyphsForSelected(): 45 | Doc = Glyphs.currentDocument 46 | Font = Doc.font 47 | SelectedLayers = Doc.selectedLayers() 48 | for Layer in SelectedLayers: 49 | Glyph = Layer.parent 50 | LeftKey = "" 51 | RightKey = "" 52 | LigatureComponents = Glyph.name.split("_") 53 | if len(Layer.components) > 0 and len(Layer.paths) == 0 and Layer.components[0].transformStruct()[0] == 1: 54 | componentGlyph = Layer.components[0].component 55 | if not componentGlyph: 56 | raise Exception("Something is wrong with a Component in Glyphs %s" % Layer.parent.name) 57 | if componentGlyph.category == "Letter": 58 | LeftKey = KeysForGlyph(componentGlyph)[0] 59 | if not LeftKey: 60 | LeftKey = componentGlyph.name 61 | 62 | for Component in Layer.components: 63 | try: 64 | if Component.component.category == "Letter": 65 | if Component.transform[0] == 1: 66 | componentGlyph = Component.component 67 | elif Component.component.category != "Mark": 68 | #componentGlyph = None 69 | pass 70 | except: 71 | pass 72 | if componentGlyph: 73 | RightKey = KeysForGlyph(componentGlyph)[1] 74 | if not RightKey: 75 | RightKey = componentGlyph.name 76 | 77 | elif len(LigatureComponents) > 1: 78 | LeftGlyph = Font.glyphs[LigatureComponents[0]] 79 | if LeftGlyph != None: 80 | LeftKey = KeysForGlyph(LeftGlyph)[0] 81 | RightGlyph = Font.glyphs[LigatureComponents[-1]] 82 | if RightGlyph != None: 83 | RightKey = KeysForGlyph(RightGlyph)[1] 84 | if LeftKey: 85 | try: 86 | if LeftKey not in Font.glyphs and not Font.glyphs[LeftKey].export: 87 | LeftKey = False 88 | except: 89 | LeftKey = False 90 | if RightKey: 91 | try: 92 | if RightKey not in Font.glyphs and not Font.glyphs[RightKey].export: 93 | RightKey = False 94 | except: 95 | pass 96 | if not LeftKey: 97 | try: 98 | LeftKey = DefaultKeys[Glyph.name][0] 99 | except KeyError: 100 | pass 101 | except: 102 | print traceback.format_exc() 103 | if not RightKey: 104 | try: 105 | RightKey = DefaultKeys[Glyph.name][1] 106 | except KeyError: 107 | pass 108 | except: 109 | print traceback.format_exc() 110 | if not LeftKey and Glyph.name[-3:] == ".sc": 111 | try: 112 | Glyph 113 | LeftKey = DefaultKeys[Glyph.name[:-3].title()][0] 114 | if (len(LeftKey) > 0): 115 | LeftKey = LeftKey.lower()+".sc" 116 | except: 117 | print traceback.format_exc() 118 | if not RightKey and Glyph.name[-3:] == ".sc": 119 | try: 120 | RightKey = DefaultKeys[Glyph.name[:-3].title()][1] 121 | if (len(RightKey) > 0): 122 | RightKey = RightKey.lower()+".sc" 123 | except: 124 | print traceback.format_exc() 125 | if not LeftKey: 126 | LeftKey = Glyph.name 127 | if not RightKey: 128 | RightKey = Glyph.name 129 | 130 | print Glyph.name, ">", LeftKey, RightKey 131 | if Glyph.leftMetricsKey is None or len(Glyph.leftMetricsKey) == 0: 132 | Glyph.setLeftMetricsKey_(LeftKey) 133 | if Glyph.rightMetricsKey is None or len(Glyph.rightMetricsKey) == 0: 134 | Glyph.setRightMetricsKey_(RightKey) 135 | 136 | def main(): 137 | print "Starting Metrics Keys update\n" 138 | updateKeyGlyphsForSelected() 139 | Doc = Glyphs.currentDocument 140 | Font = Doc.font 141 | SelectedLayers = Doc.selectedLayers() 142 | for Layer in SelectedLayers: 143 | Layer.syncMetrics() 144 | print "End" 145 | 146 | def test(): 147 | NewDefaultKeys = {} 148 | for key in Keys: 149 | key = niceName(key) 150 | values = DefaultKeys[key] 151 | newValues = [] 152 | for value in values: 153 | newValues.append( niceName(value) ) 154 | print " \"%s\" : [\"%s\", \"%s\"]," % (key, newValues[1], newValues[0]) 155 | NewDefaultKeys[key] = newValues 156 | #print NewDefaultKeys 157 | main() 158 | -------------------------------------------------------------------------------- /Paths/SlantRounds-py2.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Slant Rounds 2 | # -*- coding: utf-8 -*- 3 | # The slanting algorithm is based on the 4 | # method by Jacques Le Bailly 5 | # Copyright 2017 Alexei Vanyashin 6 | __doc__=""" 7 | Slants round glyphs with vertical compensation. Based on method by Jacques Le Bailly 8 | """ 9 | 10 | from math import radians 11 | import GlyphsApp 12 | 13 | thisFont = Glyphs.font # frontmost font 14 | selectedLayers = thisFont.selectedLayers # active layers of selected glyphs 15 | 16 | def process( thisLayer ): 17 | thisMasterAngle = thisLayer.associatedFontMaster().italicAngle 18 | myX = radians(thisMasterAngle) # horizontal skew = italic angle 19 | myY = -radians(thisMasterAngle) # vertical skew = -0.5 * italic angle 20 | 21 | thisLayer.beginChanges() 22 | 23 | # shear: 24 | oldPos = thisLayer.bounds.origin 25 | thisLayer.applyTransform([1, myY/2, myX, 1, 0, 0]) 26 | thisLayer.addNodesAtExtremes() 27 | 28 | # move back: 29 | newPos = thisLayer.bounds.origin 30 | xShiftBack = oldPos.x-newPos.x 31 | yShiftBack = oldPos.y-newPos.y 32 | thisLayer.applyTransform([1, 0, 0, 1, xShiftBack, yShiftBack]) 33 | 34 | thisLayer.endChanges() 35 | 36 | print "y-shift: %s, x-shift: %s" % (yShiftBack, xShiftBack) 37 | 38 | 39 | thisFont.disableUpdateInterface() # suppresses UI updates in Font View 40 | print "*** Start Rounding Glyphs\n" 41 | 42 | try: 43 | for thisLayer in selectedLayers: 44 | if not (thisLayer.glyphMetrics()[5] > 0): 45 | print "Italic Angle should be greater than zero. Set Italic Angle in Font Master" 46 | break 47 | print "Rounding glyph '%s' -> " % (thisLayer.parent.name), 48 | process( thisLayer ) 49 | thisLayer.syncMetrics() 50 | 51 | for thisLayer in selectedLayers[:-1]: # Last layer 52 | print "Done. Clean up nodes if necessary." 53 | except TypeError: 54 | print "No glyphs were selected. Select glyphs and re-run script." 55 | print "\n***" 56 | 57 | thisFont.enableUpdateInterface() # re-enables UI updates in Font View 58 | -------------------------------------------------------------------------------- /Paths/SlantRounds.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Slant Rounds G3 2 | # -*- coding: utf-8 -*- 3 | # The slanting algorithm is based on the 4 | # method by Jacques Le Bailly 5 | # Copyright 2017 Alexei Vanyashin 6 | __doc__=""" 7 | Slants round glyphs with vertical compensation. Based on method by Jacques Le Bailly 8 | """ 9 | 10 | from math import radians 11 | import GlyphsApp 12 | 13 | thisFont = Glyphs.font # frontmost font 14 | selectedLayers = thisFont.selectedLayers # active layers of selected glyphs 15 | 16 | def process( thisLayer ): 17 | thisMasterAngle = thisLayer.associatedFontMaster().italicAngle 18 | myX = radians(thisMasterAngle) # horizontal skew = italic angle 19 | myY = -radians(thisMasterAngle) # vertical skew = -0.5 * italic angle 20 | 21 | thisLayer.beginChanges() 22 | 23 | # shear: 24 | oldPos = thisLayer.bounds.origin 25 | thisLayer.applyTransform([1, myY/2, myX, 1, 0, 0]) 26 | thisLayer.addNodesAtExtremes() 27 | 28 | # move back: 29 | newPos = thisLayer.bounds.origin 30 | xShiftBack = oldPos.x-newPos.x 31 | yShiftBack = oldPos.y-newPos.y 32 | thisLayer.applyTransform([1, 0, 0, 1, xShiftBack, yShiftBack]) 33 | 34 | thisLayer.endChanges() 35 | 36 | print("y-shift: %s, x-shift: %s" % (yShiftBack, xShiftBack)) 37 | 38 | 39 | thisFont.disableUpdateInterface() # suppresses UI updates in Font View 40 | print("*** Start Rounding Glyphs\n") 41 | 42 | try: 43 | for thisLayer in selectedLayers: 44 | if not (thisLayer.glyphMetrics()[5] > 0): 45 | print("Italic Angle should be greater than zero. Set Italic Angle in Font Master") 46 | break 47 | print("Rounding glyph '%s' -> " % (thisLayer.parent.name),) 48 | process( thisLayer ) 49 | thisLayer.syncMetrics() 50 | 51 | for thisLayer in selectedLayers[:-1]: # Last layer 52 | print("Done. Clean up nodes if necessary.") 53 | except TypeError: 54 | print("No glyphs were selected. Select glyphs and re-run script.") 55 | print("\n***") 56 | 57 | thisFont.enableUpdateInterface() # re-enables UI updates in Font View 58 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### Alexei's scripts for Glyphs App for G2 2 | 3 | --- 4 | 5 | #### Metrics: 6 | 7 | * **Set Kerning Groups for GF Latin Plus** 8 | → Derived from @schriftgestalt's [set Kerning Groups][1]. Kerning class declarations have been fully reworked to support [GF Latin Plus][2] and [GF Cyrillic Plus][6] Glyphs Sets. 9 | 10 | * **Fix Vertical Metrics** 11 | → Creates custom parameters in all masters for vertical metrics according to the 125% rule. 12 | 13 | * **Update WinMetrics** 14 | → Updates `winAscent` and `winDescent` values. Useful for mastering fonts after adding tall glyphs such as Vietnamese. 15 | 16 | * **Inherit Kerning Groups** 17 | → Inherits Kerning Group to suffixed glyphs (.ssXX) from parent 18 | 19 | * **Inherit Metrics Keys** 20 | → Inherits Metrics Keys to suffixed glyphs (.ssXX) from parent 21 | 22 | * **Set Metrics Keys Auto** 23 | → Sets default Metrics Keys. Derived from `Set Kerning Groups` by @shriftgestalt 24 | 25 | * **Steal Metrics Keys** 26 | → Copies Metrics Keys from other font. Stolen from `Steal kerning groups from font` by @mekkablue 27 | 28 | * **Gridster** 29 | → Opens a new tab with Latin and Cyrillic grid tests. 30 | 31 | 32 | #### Paths: 33 | 34 | * **Slant Rounds** 35 | → Slants round glyphs with vertical compensation. Based on method by Jacques Le Bailly @fonthausen. Need to specify Italic angle in font master. Use selectively on round glyphs `o c e`, etc, 36 | 37 | ![SlantRounds](SlantRounds.gif) 38 | 39 | #### Custom GlyphsData.xml 40 | [GlyphsDataCYR.xml][5] should be placed inside an `Info` folder in the same directory as your .glyphs file: 41 | 42 | ``` 43 | Font Project 44 | |-- Source.glyphs 45 | |-- Info 46 | |-- GlyphsDataCYR.xml 47 | ``` 48 | 49 | #### Acknowlegements 50 | Mark Foley [@m4rc1e][3], Georg Seifert [@schriftgestalt][4], Rainer Erich Scheichelbauer [@mekkablue][mekkablue] 51 | 52 | 53 | #### License 54 | 55 | Copyright 2016, Alexei Vanyashin @alexeiva 56 | 57 | Licensed under the Apache License, Version 2.0 (the "License"); 58 | you may not use this file except in compliance with the License. 59 | You may obtain a copy of the License at 60 | 61 | http://www.apache.org/licenses/LICENSE-2.0 62 | 63 | Unless required by applicable law or agreed to in writing, software 64 | distributed under the License is distributed on an "AS IS" BASIS, 65 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 66 | See the License for the specific language governing permissions and 67 | limitations under the License. 68 | 69 | [1]: https://github.com/schriftgestalt/Glyphs-Scripts/blob/master/Metrics%20%26%20Classes/set%20Kerning%20Groups.py 70 | 71 | [2]: https://github.com/googlefonts/tools/blob/master/encodings/GF%20Glyph%20Sets/GF-latin-plus_unique-glyphs.nam 72 | 73 | [3]: https://github.com/m4rc1e/mf-glyphs-scripts 74 | 75 | [4]: https://github.com/schriftgestalt/Glyphs-Scripts 76 | 77 | [5]: /Info/GlyphDataCYR.xml 78 | 79 | [6]: https://github.com/googlefonts/tools/blob/master/encodings/GF%20Glyph%20Sets/Cyrillic/GF-cyrillic-plus_unique-glyphs.nam 80 | 81 | [mekkablue]: https://github.com/mekkablue/Glyphs-Scripts -------------------------------------------------------------------------------- /SlantRounds.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeiva/alexei-scripts/5172542f4eb770a43785037f7d373007690412a2/SlantRounds.gif -------------------------------------------------------------------------------- /Test-Modules.py: -------------------------------------------------------------------------------- 1 | #MenuTitle: Test modules import 2 | ''' 3 | Tests importing modules 4 | ''' 5 | # 6 | # based code by @mekkablue 7 | # 8 | 9 | from AppKit import * 10 | import GlyphsApp, sys, os, math 11 | print "-- System: %s" % sys.version 12 | print "-- OS: %s; %s" % ( os.name, os.uname() ) 13 | for infoKey in ("CFBundleShortVersionString", "CFBundleVersion"): 14 | print "-- App %s: %s" % ( infoKey, NSBundle.bundleForClass_(GSMenu).infoDictionary().objectForKey_(infoKey) ) 15 | import vanilla 16 | import fontTools 17 | #import dialogKit 18 | import robofab 19 | print "-- Vanilla: %s" % vanilla 20 | print "-- fontTools: %s" % fontTools 21 | #print "-- dialogKit: %s" % dialogKit 22 | print "-- robofab: %s" % robofab -------------------------------------------------------------------------------- /kerning-texts/GF Plus kern strings.txt: -------------------------------------------------------------------------------- 1 | OOAЧOOHHAЧHH 2 | OOAOOOHHAOHH 3 | OOATOOHHATHH 4 | OOAUOOHHAUHH 5 | OOAУOOHHAУHH 6 | OOAVOOHHAVHH 7 | OOAYOOHHAYHH 8 | OOAЗOOHHAЗHH 9 | OOAaooHHAann 10 | OOA*OOHHA*HH 11 | OOAбooHHAбnn 12 | OOAчooHHAчnn 13 | OOAgooHHAgnn 14 | OOA-OOHHA-HH 15 | OOAoooHHAonn 16 | OOA‘OOHHA‘HH 17 | OOA'OOHHA'HH 18 | OOAtooHHAtnn 19 | OOAтooHHAтnn 20 | OOAuooHHAunn 21 | OOAvooHHAvnn 22 | OOAyooHHAynn 23 | OOBAOOHHBAHH 24 | OOBЧOOHHBЧHH 25 | OOBДOOHHBДHH 26 | OOBЛOOHHBЛHH 27 | OOBУOOHHBУHH 28 | OOBVOOHHBVHH 29 | OOBXOOHHBXHH 30 | OOBYOOHHBYHH 31 | OOBчooHHBчnn 32 | OOBдooHHBдnn 33 | OOBлooHHBлnn 34 | OOBяooHHBяnn 35 | OOB'OOHHB'HH 36 | OOBxooHHBxnn 37 | OOByooHHBynn 38 | OOБЧOOHHБЧHH 39 | OOБДOOHHБДHH 40 | OOБXOOHHБXHH 41 | OOБдooHHБдnn 42 | OOБлooHHБлnn 43 | OOБxooHHБxnn 44 | OOБyooHHБynn 45 | OOCYOOHHCYHH 46 | OOCчooHHCчnn 47 | OOCлooHHCлnn 48 | OOCoooHHConn 49 | OOCuooHHCunn 50 | OOCvooHHCvnn 51 | OOCyooHHCynn 52 | OODAOOHHDAHH 53 | OODJOOHHDJHH 54 | OODVOOHHDVHH 55 | OODXOOHHDXHH 56 | OODYOOHHDYHH 57 | OOD.OOHHD.HH 58 | OOEлooHHEлnn 59 | OOEтooHHEтnn 60 | OOEvooHHEvnn 61 | OOEyooHHEynn 62 | OOFAOOHHFAHH 63 | OOFJOOHHFJHH 64 | OOFaooHHFann 65 | OOF.OOHHF.HH 66 | OOГAOOHHГAHH 67 | OOГДOOHHГДHH 68 | OOГЛOOHHГЛHH 69 | OOГЯOOHHГЯHH 70 | OOГЗOOHHГЗHH 71 | OOГaooHHГann 72 | OOГбooHHГбnn 73 | OOГчooHHГчnn 74 | OOГ:OOHHГ:HH 75 | OOГдooHHГдnn 76 | OOГлooHHГлnn 77 | OOГэooHHГэnn 78 | OOГ›OOHHГ›HH 79 | OOГ-OOHHГ-HH 80 | OOГяooHHГяnn 81 | OOГnooHHГnnn 82 | OOГoooHHГonn 83 | OOГ.OOHHГ.HH 84 | OOГsooHHГsnn 85 | OOГтooHHГтnn 86 | OOГvooHHГvnn 87 | OOГxooHHГxnn 88 | OOГзooHHГзnn 89 | OOГжooHHГжnn 90 | OOHчooHHHчnn 91 | OOHoooHHHonn 92 | OOHтooHHHтnn 93 | OOHvooHHHvnn 94 | OOKЧOOHHKЧHH 95 | OOKOOOHHKOHH 96 | OOKUOOHHKUHH 97 | OOKaooHHKann 98 | OOKбooHHKбnn 99 | OOKчooHHKчnn 100 | OOKgooHHKgnn 101 | OOK-OOHHK-HH 102 | OOKoooHHKonn 103 | OOK'OOHHK'HH 104 | OOKsooHHKsnn 105 | OOKtooHHKtnn 106 | OOKтooHHKтnn 107 | OOKuooHHKunn 108 | OOKvooHHKvnn 109 | OOKyooHHKynn 110 | OOКбooHHКбnn 111 | OOКчooHHКчnn 112 | OOКлooHHКлnn 113 | OOКoooHHКonn 114 | OOКтooHHКтnn 115 | OOКyooHHКynn 116 | OOLOOOHHLOHH 117 | OOLTOOHHLTHH 118 | OOLVOOHHLVHH 119 | OOLYOOHHLYHH 120 | OOL‘OOHHL‘HH 121 | OOL'OOHHL'HH 122 | OOLvooHHLvnn 123 | OOLyooHHLynn 124 | OOOAOOHHOAHH 125 | OOOДOOHHOДHH 126 | OOOЛOOHHOЛHH 127 | OOOJOOHHOJHH 128 | OOOOOOHHOOHH 129 | OOOTOOHHOTHH 130 | OOOУOOHHOУHH 131 | OOOVOOHHOVHH 132 | OOOXOOHHOXHH 133 | OOOYOOHHOYHH 134 | OOOЗOOHHOЗHH 135 | OOOдooHHOдnn 136 | OOOлooHHOлnn 137 | OOOяooHHOяnn 138 | OOO.OOHHO.HH 139 | OOO'OOHHO'HH 140 | OOPAOOHHPAHH 141 | OOPДOOHHPДHH 142 | OOPЛOOHHPЛHH 143 | OOPJOOHHPJHH 144 | OOPXOOHHPXHH 145 | OOPaooHHPann 146 | OOPдooHHPдnn 147 | OOPлooHHPлnn 148 | OOPgooHHPgnn 149 | OOPяooHHPяnn 150 | OOPoooHHPonn 151 | OOP.OOHHP.HH 152 | OOPsooHHPsnn 153 | OOPzooHHPznn 154 | OOROOOHHROHH 155 | OORUOOHHRUHH 156 | OORVOOHHRVHH 157 | OORYOOHHRYHH 158 | OORvooHHRvnn 159 | OORyooHHRynn 160 | OOSVOOHHSVHH 161 | OOSYOOHHSYHH 162 | OOSчooHHSчnn 163 | OOSлooHHSлnn 164 | OOSvooHHSvnn 165 | OOSyooHHSynn 166 | OOЬЧOOHHЬЧHH 167 | OOЬДOOHHЬДHH 168 | OOЬTOOHHЬTHH 169 | OOЬУOOHHЬУHH 170 | OOЬXOOHHЬXHH 171 | OOЬ'OOHHЬ'HH 172 | OOTAOOHHTAHH 173 | OOTДOOHHTДHH 174 | OOTЛOOHHTЛHH 175 | OOTJOOHHTJHH 176 | OOTOOOHHTOHH 177 | OOTaooHHTann 178 | OOTбooHHTбnn 179 | OOTчooHHTчnn 180 | OOT:OOHHT:HH 181 | OOTдooHHTдnn 182 | OOTлooHHTлnn 183 | OOTэooHHTэnn 184 | OOTfooHHTfnn 185 | OOTgooHHTgnn 186 | OOT›OOHHT›HH 187 | OOT-OOHHT-HH 188 | OOTяooHHTяnn 189 | OOTnooHHTnnn 190 | OOToooHHTonn 191 | OOT.OOHHT.HH 192 | OOTsooHHTsnn 193 | OOTtooHHTtnn 194 | OOTтooHHTтnn 195 | OOTuooHHTunn 196 | OOTvooHHTvnn 197 | OOTxooHHTxnn 198 | OOTyooHHTynn 199 | OOTzooHHTznn 200 | OOTзooHHTзnn 201 | OOTжooHHTжnn 202 | OOЦчooHHЦчnn 203 | OOЦ-OOHHЦ-HH 204 | OOЦoooHHЦonn 205 | OOЦтooHHЦтnn 206 | OOЦvooHHЦvnn 207 | OOUAOOHHUAHH 208 | OOUJOOHHUJHH 209 | OOUOOOHHUOHH 210 | OOUaooHHUann 211 | OOUfooHHUfnn 212 | OOUgooHHUgnn 213 | OOUhooHHUhnn 214 | OOUnooHHUnnn 215 | OOUoooHHUonn 216 | OOU.OOHHU.HH 217 | OOUsooHHUsnn 218 | OOUtooHHUtnn 219 | OOUuooHHUunn 220 | OOUvooHHUvnn 221 | OOUyooHHUynn 222 | OOUzooHHUznn 223 | OOУAOOHHУAHH 224 | OOУДOOHHУДHH 225 | OOУЛOOHHУЛHH 226 | OOУЯOOHHУЯHH 227 | OOУOOOHHУOHH 228 | OOУaooHHУann 229 | OOУбooHHУбnn 230 | OOУчooHHУчnn 231 | OOУ:OOHHУ:HH 232 | OOУдooHHУдnn 233 | OOУлooHHУлnn 234 | OOУэooHHУэnn 235 | OOУ›OOHHУ›HH 236 | OOУ-OOHHУ-HH 237 | OOУяooHHУяnn 238 | OOУnooHHУnnn 239 | OOУoooHHУonn 240 | OOУ.OOHHУ.HH 241 | OOУsooHHУsnn 242 | OOУтooHHУтnn 243 | OOУuooHHУunn 244 | OOУxooHHУxnn 245 | OOУyooHHУynn 246 | OOУзooHHУзnn 247 | OOУжooHHУжnn 248 | OOVAOOHHVAHH 249 | OOVДOOHHVДHH 250 | OOVЛOOHHVЛHH 251 | OOVJOOHHVJHH 252 | OOVOOOHHVOHH 253 | OOVЗOOHHVЗHH 254 | OOVaooHHVann 255 | OOVбooHHVбnn 256 | OOVчooHHVчnn 257 | OOV:OOHHV:HH 258 | OOVдooHHVдnn 259 | OOVлooHHVлnn 260 | OOVэooHHVэnn 261 | OOVfooHHVfnn 262 | OOVgooHHVgnn 263 | OOV-OOHHV-HH 264 | OOVяooHHVяnn 265 | OOVnooHHVnnn 266 | OOVoooHHVonn 267 | OOV.OOHHV.HH 268 | OOVsooHHVsnn 269 | OOVтooHHVтnn 270 | OOVuooHHVunn 271 | OOVvooHHVvnn 272 | OOVxooHHVxnn 273 | OOVyooHHVynn 274 | OOVzooHHVznn 275 | OOVзooHHVзnn 276 | OOXOOOHHXOHH 277 | OOXaooHHXann 278 | OOXбooHHXбnn 279 | OOXчooHHXчnn 280 | OOXgooHHXgnn 281 | OOX-OOHHX-HH 282 | OOXoooHHXonn 283 | OOXsooHHXsnn 284 | OOXtooHHXtnn 285 | OOXтooHHXтnn 286 | OOXuooHHXunn 287 | OOXvooHHXvnn 288 | OOXyooHHXynn 289 | OOYAOOHHYAHH 290 | OOYJOOHHYJHH 291 | OOYOOOHHYOHH 292 | OOYaooHHYann 293 | OOY:OOHHY:HH 294 | OOYfooHHYfnn 295 | OOY4OOHHY4HH 296 | OOYgooHHYgnn 297 | OOY-OOHHY-HH 298 | OOYnooHHYnnn 299 | OOYoooHHYonn 300 | OOY.OOHHY.HH 301 | OOYsooHHYsnn 302 | OOYtooHHYtnn 303 | OOYuooHHYunn 304 | OOYvooHHYvnn 305 | OOYxooHHYxnn 306 | OOYyooHHYynn 307 | OOYzooHHYznn 308 | OOZ-OOHHZ-HH 309 | OOZvooHHZvnn 310 | OOZyooHHZynn 311 | ooaчoonnaчnn 312 | ooavoonnavnn 313 | ooayoonnaynn 314 | OO*AOOHH*AHH 315 | oocУOOnncУHH 316 | oocaoonncann 317 | oocдoonncдnn 318 | oocлoonncлnn 319 | ooeTOOnneTHH 320 | ooeУOOnneУHH 321 | ooeдoonneдnn 322 | ooeлoonneлnn 323 | ooe‘OOnne‘HH 324 | ooe'OOnne'HH 325 | ooevoonnevnn 326 | ooexoonnexnn 327 | ooeyoonneynn 328 | oofgoonnfgnn 329 | oofooonnfonn 330 | oof.OOnnf.HH 331 | oofsoonnfsnn 332 | oogooonngonn 333 | ooгДOOnnгДHH 334 | ooгTOOnnгTHH 335 | ooгУOOnnгУHH 336 | ooгXOOnnгXHH 337 | ooгдoonnгдnn 338 | ooглoonnглnn 339 | ooгяoonnгяnn 340 | ooг.OOnnг.HH 341 | OO‹TOOHH‹THH 342 | OO‹УOOHH‹УHH 343 | OO-AOOHH-AHH 344 | OO-ЧOOHH-ЧHH 345 | OO-ДOOHH-ДHH 346 | OO-ЛOOHH-ЛHH 347 | OO-TOOHH-THH 348 | OO-УOOHH-УHH 349 | OO-VOOHH-VHH 350 | OO-XOOHH-XHH 351 | OO-ZOOHH-ZHH 352 | OO-дooHH-дnn 353 | OO-лooHH-лnn 354 | OO-7OOHH-7HH 355 | OO-2OOHH-2HH 356 | OO-xooHH-xnn 357 | ookTOOnnkTHH 358 | ookУOOnnkУHH 359 | ookaoonnkann 360 | ookбoonnkбnn 361 | ookчoonnkчnn 362 | ookooonnkonn 363 | ookvoonnkvnn 364 | ooклoonnклnn 365 | oonTOOnnnTHH 366 | oonУOOnnnУHH 367 | oon‘OOnnn‘HH 368 | oon'OOnnn'HH 369 | oonvoonnnvnn 370 | oonyoonnnynn 371 | OO9.OOHH9.HH 372 | OO9'OOHH9'HH 373 | oooДOOnnoДHH 374 | oooTOOnnoTHH 375 | oooУOOnnoУHH 376 | oooXOOnnoXHH 377 | oooчoonnoчnn 378 | oooдoonnoдnn 379 | oooлoonnoлnn 380 | oooяoonnoяnn 381 | ooo‘OOnno‘HH 382 | ooo'OOnno'HH 383 | ooo7OOnno7HH 384 | ooovoonnovnn 385 | oooxoonnoxnn 386 | oooyoonnoynn 387 | ooozoonnoznn 388 | oopчoonnpчnn 389 | oopдoonnpдnn 390 | oopлoonnpлnn 391 | oopяoonnpяnn 392 | oopxoonnpxnn 393 | oopyoonnpynn 394 | OO.OOOHH.OHH 395 | OO.TOOHH.THH 396 | OO.чooHH.чnn 397 | OO.9OOHH.9HH 398 | OO.0OOHH.0HH 399 | OO¿JOOHH¿JHH 400 | OO‘AOOHH‘AHH 401 | OO‘ДOOHH‘ДHH 402 | OO‘ЛOOHH‘ЛHH 403 | OO‘sooHH‘snn 404 | OO'AOOHH'AHH 405 | OO'ДOOHH'ДHH 406 | OO'ЛOOHH'ЛHH 407 | OO'OOOHH'OHH 408 | OO'aooHH'ann 409 | OO'чooHH'чnn 410 | OO'дooHH'дnn 411 | OO'лooHH'лnn 412 | OO'эooHH'эnn 413 | OO'яooHH'яnn 414 | OO'nooHH'nnn 415 | OO'oooHH'onn 416 | OO'sooHH'snn 417 | OO'0OOHH'0HH 418 | oorooonnronn 419 | oor.OOnnr.HH 420 | oosTOOnnsTHH 421 | oosУOOnnsУHH 422 | OO74OOHH74HH 423 | OO7-OOHH7-HH 424 | OO7oooHH7onn 425 | OO7.OOHH7.HH 426 | ooьЛOOnnьЛHH 427 | ooьOOOnnьOHH 428 | ooьTOOnnьTHH 429 | ooьУOOnnьУHH 430 | ooьчoonnьчnn 431 | ooь‘OOnnь‘HH 432 | ooь'OOnnь'HH 433 | ooьтoonnьтnn 434 | ooьvoonnьvnn 435 | ooьxoonnьxnn 436 | ooьyoonnьynn 437 | ootgoonntgnn 438 | ootooonntonn 439 | oot'OOnnt'HH 440 | ootsoonntsnn 441 | ooтAOOnnтAHH 442 | ooтУOOnnтУHH 443 | ooтXOOnnтXHH 444 | ooтдoonnтдnn 445 | ooтлoonnтлnn 446 | ooтяoonnтяnn 447 | ooт.OOnnт.HH 448 | ooцTOOnnцTHH 449 | ooцУOOnnцУHH 450 | oouTOOnnuTHH 451 | oouУOOnnuУHH 452 | oou'OOnnu'HH 453 | oovДOOnnvДHH 454 | oovTOOnnvTHH 455 | oovУOOnnvУHH 456 | oovXOOnnvXHH 457 | oovaoonnvann 458 | oovдoonnvдnn 459 | oovлoonnvлnn 460 | oovgoonnvgnn 461 | oovooonnvonn 462 | oov.OOnnv.HH 463 | oov'OOnnv'HH 464 | oovsoonnvsnn 465 | ooвTOOnnвTHH 466 | ooвУOOnnвУHH 467 | ooвчoonnвчnn 468 | ooвдoonnвдnn 469 | ooвлoonnвлnn 470 | ooв'OOnnв'HH 471 | ooвvoonnвvnn 472 | ooвxoonnвxnn 473 | ooвyoonnвynn 474 | ooxTOOnnxTHH 475 | ooxУOOnnxУHH 476 | ooxaoonnxann 477 | ooxбoonnxбnn 478 | ooxчoonnxчnn 479 | ooxэoonnxэnn 480 | ooxgoonnxgnn 481 | oox-OOnnx-HH 482 | ooxooonnxonn 483 | ooxsoonnxsnn 484 | ooxзoonnxзnn 485 | ooyTOOnnyTHH 486 | ooyУOOnnyУHH 487 | ooyXOOnnyXHH 488 | ooyaoonnyann 489 | ooyдoonnyдnn 490 | ooyлoonnyлnn 491 | ooygoonnygnn 492 | ooyяoonnyяnn 493 | ooyooonnyonn 494 | ooy.OOnny.HH 495 | ooysoonnysnn 496 | oozooonnzonn 497 | OO0.OOHH0.HH 498 | OO0'OOHH0'HH 499 | OO07OOHH07HH 500 | OO})OOHH})HH 501 | OO)]OOHH)]HH 502 | OO)}OOHH)}HH 503 | OO))OOHH))HH 504 | OO))OOHH))HH -------------------------------------------------------------------------------- /kerning-texts/GF_Plus_LATCYR_kern_strings.txt: -------------------------------------------------------------------------------- 1 | % Before kerning these pairs, it's best to run 'set Kerning Groups for GF Lat+Cyr Plus' script . 2 | % 3 | OOAЧOOHHAЧHH 4 | OOAOOOHHAOHH 5 | OOATOOHHATHH 6 | OOAUOOHHAUHH 7 | OOAУOOHHAУHH 8 | OOAVOOHHAVHH 9 | OOAYOOHHAYHH 10 | OOAЗOOHHAЗHH 11 | OOAaooHHAann 12 | OOA*OOHHA*HH 13 | OOAбooHHAбnn 14 | OOAчooHHAчnn 15 | OOA-OOHHA-HH 16 | OOA"OOHHA"HH 17 | OOA“OOHHA“HH 18 | OOA'OOHHA'HH 19 | OOAтooHHAтnn 20 | OOAvooHHAvnn 21 | OOAwooHHAwnn 22 | OOBAOOHHBAHH 23 | OOBДOOHHBДHH 24 | OOBЛOOHHBЛHH 25 | OOBЯOOHHBЯHH 26 | OOBOOOHHBOHH 27 | OOBTOOHHBTHH 28 | OOBУOOHHBУHH 29 | OOBXOOHHBXHH 30 | OOBYOOHHBYHH 31 | OOBчooHHBчnn 32 | OOBдooHHBдnn 33 | OOBяooHHBяnn 34 | OOB?OOHHB?HH 35 | OOB"OOHHB"HH 36 | OOБДOOHHБДHH 37 | OOБЯOOHHБЯHH 38 | OOБXOOHHБXHH 39 | OOC-OOHHC-HH 40 | OOCoooHHConn 41 | OOCvooHHCvnn 42 | OODAOOHHDAHH 43 | OODVOOHHDVHH 44 | OODWOOHHDWHH 45 | OODYOOHHDYHH 46 | OOD.OOHHD.HH 47 | OOДЧOOHHДЧHH 48 | OOДHOOHHДHHH 49 | OOДOOOHHДOHH 50 | OOДTOOHHДTHH 51 | OOДУOOHHДУHH 52 | OOДЗOOHHДЗHH 53 | OOД-OOHHД-HH 54 | OOДoooHHДonn 55 | OOД"OOHHД"HH 56 | OOД OOHHД HH 57 | OOДтooHHДтnn 58 | OOДvooHHДvnn 59 | OOExooHHExnn 60 | OOЛЧOOHHЛЧHH 61 | OOЛЯOOHHЛЯHH 62 | OOЛOOOHHЛOHH 63 | OOЛTOOHHЛTHH 64 | OOЛУOOHHЛУHH 65 | OOЛчooHHЛчnn 66 | OOЛoooHHЛonn 67 | OOЛ"OOHHЛ"HH 68 | OOЛтooHHЛтnn 69 | OOЛvooHHЛvnn 70 | OOFAOOHHFAHH 71 | OOF.OOHHF.HH 72 | OOGYOOHHGYHH 73 | OOГAOOHHГAHH 74 | OOГДOOHHГДHH 75 | OOГЛOOHHГЛHH 76 | OOГЯOOHHГЯHH 77 | OOГOOOHHГOHH 78 | OOГTOOHHГTHH 79 | OOГУOOHHГУHH 80 | OOГXOOHHГXHH 81 | OOГЗOOHHГЗHH 82 | OOГaooHHГann 83 | OOГбooHHГбnn 84 | OOГчooHHГчnn 85 | OOГдooHHГдnn 86 | OOГлooHHГлnn 87 | OOГэooHHГэnn 88 | OOГяooHHГяnn 89 | OOГnooHHГnnn 90 | OOГoooHHГonn 91 | OOГpooHHГpnn 92 | OOГsooHHГsnn 93 | OOГтooHHГтnn 94 | OOГvooHHГvnn 95 | OOГxooHHГxnn 96 | OOГзooHHГзnn 97 | OOГйooHHГйnn 98 | OOH“OOHHH“HH 99 | OOJAOOHHJAHH 100 | OOJ.OOHHJ.HH 101 | OOKЧOOHHKЧHH 102 | OOKЭOOHHKЭHH 103 | OOKOOOHHKOHH 104 | OOKSOOHHKSHH 105 | OOKTOOHHKTHH 106 | OOKUOOHHKUHH 107 | OOKУOOHHKУHH 108 | OOKVOOHHKVHH 109 | OOKYOOHHKYHH 110 | OOKЗOOHHKЗHH 111 | OOKaooHHKann 112 | OOKбooHHKбnn 113 | OOKчooHHKчnn 114 | OOKлooHHKлnn 115 | OOK-OOHHK-HH 116 | OOKoooHHKonn 117 | OOK"OOHHK"HH 118 | OOKтooHHKтnn 119 | OOKuooHHKunn 120 | OOKvooHHKvnn 121 | OOLOOOHHLOHH 122 | OOLTOOHHLTHH 123 | OOLVOOHHLVHH 124 | OOLWOOHHLWHH 125 | OOLYOOHHLYHH 126 | OOL"OOHHL"HH 127 | OOL“OOHHL“HH 128 | OOL'OOHHL'HH 129 | OOOAOOHHOAHH 130 | OOOДOOHHOДHH 131 | OOOЛOOHHOЛHH 132 | OOOHOOHHOHHH 133 | OOOTOOHHOTHH 134 | OOOУOOHHOУHH 135 | OOOVOOHHOVHH 136 | OOOWOOHHOWHH 137 | OOOXOOHHOXHH 138 | OOOYOOHHOYHH 139 | OOOЗOOHHOЗHH 140 | OOOдooHHOдnn 141 | OOOлooHHOлnn 142 | OOO.OOHHO.HH 143 | OOOvooHHOvnn 144 | OOOxooHHOxnn 145 | OOOЖOOHHOЖHH 146 | OOPAOOHHPAHH 147 | OOPДOOHHPДHH 148 | OOPЛOOHHPЛHH 149 | OOPTOOHHPTHH 150 | OOPXOOHHPXHH 151 | OOPaooHHPann 152 | OOPoooHHPonn 153 | OOP.OOHHP.HH 154 | OORvooHHRvnn 155 | OOSTOOHHSTHH 156 | OOSVOOHHSVHH 157 | OOSYOOHHSYHH 158 | OOSiooHHSinn 159 | OOЬAOOHHЬAHH 160 | OOЬДOOHHЬДHH 161 | OOЬTOOHHЬTHH 162 | OOЬУOOHHЬУHH 163 | OOЬXOOHHЬXHH 164 | OOЬЗOOHHЬЗHH 165 | OOЬ OOHHЬ HH 166 | OOTAOOHHTAHH 167 | OOTДOOHHTДHH 168 | OOTЛOOHHTЛHH 169 | OOTJOOHHTJHH 170 | OOTOOOHHTOHH 171 | OOTSOOHHTSHH 172 | OOTXOOHHTXHH 173 | OOTЗOOHHTЗHH 174 | OOTaooHHTann 175 | OOTбooHHTбnn 176 | OOTчooHHTчnn 177 | OOT:OOHHT:HH 178 | OOTдooHHTдnn 179 | OOTлooHHTлnn 180 | OOTэooHHTэnn 181 | OOTfooHHTfnn 182 | OOTgooHHTgnn 183 | OOT-OOHHT-HH 184 | OOTiooHHTinn 185 | OOTяooHHTяnn 186 | OOTjooHHTjnn 187 | OOTnooHHTnnn 188 | OOToooHHTonn 189 | OOTpooHHTpnn 190 | OOT.OOHHT.HH 191 | OOTsooHHTsnn 192 | OOTtooHHTtnn 193 | OOTтooHHTтnn 194 | OOTuooHHTunn 195 | OOTvooHHTvnn 196 | OOTxooHHTxnn 197 | OOTyooHHTynn 198 | OOTzooHHTznn 199 | OOTзooHHTзnn 200 | OOTйooHHTйnn 201 | OOTёooHHTёnn 202 | OOTўooHHTўnn 203 | OOЦTOOHHЦTHH 204 | OOЦУOOHHЦУHH 205 | OOЦ-OOHHЦ-HH 206 | OOЦяooHHЦяnn 207 | OOUAOOHHUAHH 208 | OOU.OOHHU.HH 209 | OOVAOOHHVAHH 210 | OOVДOOHHVДHH 211 | OOVЛOOHHVЛHH 212 | OOVJOOHHVJHH 213 | OOVOOOHHVOHH 214 | OOVTOOHHVTHH 215 | OOVУOOHHVУHH 216 | OOVVOOHHVVHH 217 | OOVXOOHHVXHH 218 | OOVЗOOHHVЗHH 219 | OOVaooHHVann 220 | OOVбooHHVбnn 221 | OOVчooHHVчnn 222 | OOV:OOHHV:HH 223 | OOVдooHHVдnn 224 | OOVлooHHVлnn 225 | OOVэooHHVэnn 226 | OOVfooHHVfnn 227 | OOVgooHHVgnn 228 | OOV-OOHHV-HH 229 | OOViooHHVinn 230 | OOVяooHHVяnn 231 | OOVnooHHVnnn 232 | OOVoooHHVonn 233 | OOVpooHHVpnn 234 | OOV.OOHHV.HH 235 | OOVsooHHVsnn 236 | OOVтooHHVтnn 237 | OOVuooHHVunn 238 | OOVvooHHVvnn 239 | OOVxooHHVxnn 240 | OOVyooHHVynn 241 | OOVzooHHVznn 242 | OOVзooHHVзnn 243 | OOVъooHHVъnn 244 | OOVйooHHVйnn 245 | OOVřooHHVřnn 246 | OOVŗooHHVŗnn 247 | OOVšooHHVšnn 248 | OOVуooHHVуnn 249 | OOXOOOHHXOHH 250 | OOXУOOHHXУHH 251 | OOXVOOHHXVHH 252 | OOXaooHHXann 253 | OOXбooHHXбnn 254 | OOX-OOHHX-HH 255 | OOXoooHHXonn 256 | OOXvooHHXvnn 257 | OOYAOOHHYAHH 258 | OOYHOOHHYHHH 259 | OOYJOOHHYJHH 260 | OOYOOOHHYOHH 261 | OOYVOOHHYVHH 262 | OOYaooHHYann 263 | OOY:OOHHY:HH 264 | OOYfooHHYfnn 265 | OOY4OOHHY4HH 266 | OOYgooHHYgnn 267 | OOY-OOHHY-HH 268 | OOYnooHHYnnn 269 | OOYoooHHYonn 270 | OOYpooHHYpnn 271 | OOY.OOHHY.HH 272 | OOY“OOHHY“HH 273 | OOYsooHHYsnn 274 | OOYuooHHYunn 275 | OOYvooHHYvnn 276 | OOYxooHHYxnn 277 | OOYyooHHYynn 278 | OOYzooHHYznn 279 | OOYěooHHYěnn 280 | OOYêooHHYênn 281 | OOYèooHHYènn 282 | OOYšooHHYšnn 283 | OOZ-OOHHZ-HH 284 | OOZoooHHZonn 285 | OO*AOOHH*AHH 286 | oocOOOnncOHH 287 | oocTOOnncTHH 288 | oocУOOnncУHH 289 | oocлoonncлnn 290 | oocjoonncjnn 291 | oocooonnconn 292 | OO:TOOHH:THH 293 | ooдOOOnnдOHH 294 | ooдTOOnnдTHH 295 | ooдУOOnnдУHH 296 | ooдaoonnдann 297 | ooдбoonnдбnn 298 | ooдчoonnдчnn 299 | ooд-OOnnд-HH 300 | ooдnoonnдnnn 301 | ooдooonnдonn 302 | ooд.OOnnд.HH 303 | ooд"OOnnд"HH 304 | ooд“OOnnд“HH 305 | ooд OOnnд HH 306 | ooдтoonnдтnn 307 | ooд™OOnnд™HH 308 | ooдvoonnдvnn 309 | ooдxoonnдxnn 310 | ooдзoonnдзnn 311 | ooeTOOnneTHH 312 | ooeдoonneдnn 313 | ooeлoonneлnn 314 | ooejoonnejnn 315 | ooe"OOnne"HH 316 | ooe“OOnne“HH 317 | ooe'OOnne'HH 318 | ooeтoonneтnn 319 | ooevoonnevnn 320 | ooexoonnexnn 321 | ooeУOOnneУHH 322 | OO89OOHH89HH 323 | OO87OOHH87HH 324 | ooлOOOnnлOHH 325 | ooлTOOnnлTHH 326 | ooлУOOnnлУHH 327 | ooлaoonnлann 328 | ooлбoonnлбnn 329 | ooлчoonnлчnn 330 | ooл-OOnnл-HH 331 | ooлooonnлonn 332 | ooл"OOnnл"HH 333 | ooлтoonnлтnn 334 | ooлvoonnлvnn 335 | oofjoonnfjnn 336 | oof.OOnnf.HH 337 | OO45OOHH45HH 338 | oogУOOnngУHH 339 | oogjoonngjnn 340 | ooгДOOnnгДHH 341 | ooгOOOnnгOHH 342 | ooгTOOnnгTHH 343 | ooгУOOnnгУHH 344 | ooгXOOnnгXHH 345 | ooгaoonnгann 346 | ooгчoonnгчnn 347 | ooгдoonnгдnn 348 | ooглoonnглnn 349 | ooгяoonnгяnn 350 | ooгooonnгonn 351 | ooгpoonnгpnn 352 | ooг.OOnnг.HH 353 | ooгтoonnгтnn 354 | ooгvoonnгvnn 355 | ooгxoonnгxnn 356 | ooгзoonnгзnn 357 | ooгХOOnnгХHH 358 | OO-AOOHH-AHH 359 | OO-ЧOOHH-ЧHH 360 | OO-ДOOHH-ДHH 361 | OO-ЛOOHH-ЛHH 362 | OO-TOOHH-THH 363 | OO-УOOHH-УHH 364 | OO-VOOHH-VHH 365 | OO-XOOHH-XHH 366 | OO-ZOOHH-ZHH 367 | OO-дooHH-дnn 368 | OO-лooHH-лnn 369 | OO-7OOHH-7HH 370 | OO-2OOHH-2HH 371 | OO-xooHH-xnn 372 | ooijoonnijnn 373 | ookTOOnnkTHH 374 | ookУOOnnkУHH 375 | ookaoonnkann 376 | ookбoonnkбnn 377 | ookчoonnkчnn 378 | ookjoonnkjnn 379 | ookooonnkonn 380 | ookvoonnkvnn 381 | oolaoonnlann 382 | ooljoonnljnn 383 | oolooonnlonn 384 | ool“OOnnl“HH 385 | oolvoonnlvnn 386 | oonTOOnnnTHH 387 | oonУOOnnnУHH 388 | oonjoonnnjnn 389 | oon"OOnnn"HH 390 | oon“OOnnn“HH 391 | oon'OOnnn'HH 392 | oonvoonnnvnn 393 | OO94OOHH94HH 394 | OO9.OOHH9.HH 395 | OO9'OOHH9'HH 396 | oooДOOnnoДHH 397 | oooTOOnnoTHH 398 | oooУOOnnoУHH 399 | oooXOOnnoXHH 400 | oooдoonnoдnn 401 | oooлoonnoлnn 402 | oooяoonnoяnn 403 | ooojoonnojnn 404 | ooonoonnonnn 405 | ooo"OOnno"HH 406 | ooo“OOnno“HH 407 | ooo'OOnno'HH 408 | ooo7OOnno7HH 409 | ooo OOnno HH 410 | oooтoonnoтnn 411 | ooovoonnovnn 412 | oooxoonnoxnn 413 | oooзoonnoзnn 414 | OO.чooHH.чnn 415 | OO.9OOHH.9HH 416 | OO.0OOHH.0HH 417 | OO¿JOOHH¿JHH 418 | OO¿jooHH¿jnn 419 | OO"AOOHH"AHH 420 | OO"ДOOHH"ДHH 421 | OO"ЛOOHH"ЛHH 422 | OO"OOOHH"OHH 423 | OO"ЗOOHH"ЗHH 424 | OO"aooHH"ann 425 | OO"чooHH"чnn 426 | OO"дooHH"дnn 427 | OO"лooHH"лnn 428 | OO"эooHH"эnn 429 | OO"яooHH"яnn 430 | OO"nooHH"nnn 431 | OO"oooHH"onn 432 | OO" OOHH" HH 433 | OO"тooHH"тnn 434 | OO"vooHH"vnn 435 | OO"xooHH"xnn 436 | OO"зooHH"зnn 437 | OO“AOOHH“AHH 438 | OO“nooHH“nnn 439 | OO“sooHH“snn 440 | OO“ OOHH“ HH 441 | OO“vooHH“vnn 442 | OO'AOOHH'AHH 443 | OO'oooHH'onn 444 | OO'"OOHH'"HH 445 | OO''OOHH''HH 446 | OO'sooHH'snn 447 | OO'vooHH'vnn 448 | OO'0OOHH'0HH 449 | oor:OOnnr:HH 450 | oorjoonnrjnn 451 | oorooonnronn 452 | oor.OOnnr.HH 453 | oorxoonnrxnn 454 | oosTOOnnsTHH 455 | oosУOOnnsУHH 456 | oosjoonnsjnn 457 | OO78OOHH78HH 458 | OO74OOHH74HH 459 | OO7-OOHH7-HH 460 | OO7oooHH7onn 461 | OO7.OOHH7.HH 462 | OO77OOHH77HH 463 | OO76OOHH76HH 464 | OO73OOHH73HH 465 | OO70OOHH70HH 466 | OO6'OOHH6'HH 467 | OO67OOHH67HH 468 | ooьЛOOnnьЛHH 469 | ooьOOOnnьOHH 470 | ooьTOOnnьTHH 471 | ooьУOOnnьУHH 472 | ooьдoonnьдnn 473 | ooь"OOnnь"HH 474 | ooь“OOnnь“HH 475 | ooьтoonnьтnn 476 | ooь™OOnnь™HH 477 | ooьvoonnьvnn 478 | ooьxoonnьxnn 479 | OO HOOHH HHH 480 | OO hooHH hnn 481 | OO£4OOHH£4HH 482 | oot'OOnnt'HH 483 | ooтAOOnnтAHH 484 | ooтOOOnnтOHH 485 | ooтTOOnnтTHH 486 | ooтУOOnnтУHH 487 | ooтXOOnnтXHH 488 | ooтдoonnтдnn 489 | ooтлoonnтлnn 490 | ooтooonnтonn 491 | ooт"OOnnт"HH 492 | ooтvoonnтvnn 493 | ooтxoonnтxnn 494 | ooтзoonnтзnn 495 | OO37OOHH37HH 496 | OO™ OOHH™ HH 497 | ooцOOOnnцOHH 498 | ooцTOOnnцTHH 499 | ooцУOOnnцУHH 500 | ooцooonnцonn 501 | ooц"OOnnц"HH 502 | ooц“OOnnц“HH 503 | ooц™OOnnц™HH 504 | ooцvoonnцvnn 505 | OO2oooHH2onn 506 | oouTOOnnuTHH 507 | oouУOOnnuУHH 508 | ooujoonnujnn 509 | oou"OOnnu"HH 510 | oou'OOnnu'HH 511 | oou OOnnu HH 512 | oovДOOnnvДHH 513 | oovOOOnnvOHH 514 | oovTOOnnvTHH 515 | oovУOOnnvУHH 516 | oovXOOnnvXHH 517 | oovaoonnvann 518 | oovчoonnvчnn 519 | oovдoonnvдnn 520 | oovлoonnvлnn 521 | oovjoonnvjnn 522 | oovooonnvonn 523 | oov.OOnnv.HH 524 | oov"OOnnv"HH 525 | oovxoonnvxnn 526 | oovзoonnvзnn 527 | ooвTOOnnвTHH 528 | ooвУOOnnвУHH 529 | ooвбoonnвбnn 530 | ooвчoonnвчnn 531 | ooвдoonnвдnn 532 | ooвлoonnвлnn 533 | ooвяoonnвяnn 534 | ooвooonnвonn 535 | ooв"OOnnв"HH 536 | ooвтoonnвтnn 537 | ooвvoonnвvnn 538 | ooвxoonnвxnn 539 | ooвзoonnвзnn 540 | oow.OOnnw.HH 541 | ooxOOOnnxOHH 542 | ooxTOOnnxTHH 543 | ooxУOOnnxУHH 544 | ooxaoonnxann 545 | ooxбoonnxбnn 546 | ooxчoonnxчnn 547 | ooxдoonnxдnn 548 | ooxэoonnxэnn 549 | ooxħoonnxħnn 550 | oox-OOnnx-HH 551 | ooxjoonnxjnn 552 | ooxnoonnxnnn 553 | ooxooonnxonn 554 | oox"OOnnx"HH 555 | ooxтoonnxтnn 556 | ooxvoonnxvnn 557 | ooxзoonnxзnn 558 | ooyOOOnnyOHH 559 | ooyTOOnnyTHH 560 | ooyУOOnnyУHH 561 | ooyXOOnnyXHH 562 | ooztoonnztnn 563 | OO01OOHH01HH 564 | OO0.OOHH0.HH 565 | OO0'OOHH0'HH 566 | OO07OOHH07HH 567 | OOD.OOHHD.HH 568 | OOQ.OOHHQ.HH 569 | OOУnooHHУnnn 570 | OOУsooHHУsnn 571 | OOУuooHHУunn 572 | OOЖЧOOHHЖЧHH 573 | ooбУOOnnбУHH 574 | ooѓOOOnnѓOHH 575 | ooѓTOOnnѓTHH 576 | ooѓУOOnnѓУHH 577 | ooйУOOnnйУHH -------------------------------------------------------------------------------- /kerning-texts/Metrics-GF-CyrillicPro.txt: -------------------------------------------------------------------------------- 1 | ННЂННОЂО 2 | ННЄННОЄО 3 | ННЅННОЅО 4 | ННІННОІО 5 | ННЈННОЈО 6 | ННЉННОЉО 7 | ННЊННОЊО 8 | ННЋННОЋО 9 | ННЏННОЏО 10 | ННАННОАО 11 | ННБННОБО 12 | ННВННОВО 13 | ННГННОГО 14 | ННДННОДО 15 | ННЕННОЕО 16 | ННЖННОЖО 17 | ННЗННОЗО 18 | ННИННОИО 19 | ННКННОКО 20 | ННЛННОЛО 21 | ННМННОМО 22 | НННННОНО 23 | ННОННООО 24 | ННПННОПО 25 | ННРННОРО 26 | ННСННОСО 27 | ННТННОТО 28 | ННУННОУО 29 | ННФННОФО 30 | ННХННОХО 31 | ННЦННОЦО 32 | ННЧННОЧО 33 | ННШННОШО 34 | ННЩННОЩО 35 | ННЪННОЪО 36 | ННЫННОЫО 37 | ННЬННОЬО 38 | ННЭННОЭО 39 | ННЮННОЮО 40 | ННЯННОЯО 41 | ННѢННОѢО 42 | ННѪННОѪО 43 | ННѲННОѲО 44 | ННѴННОѴО 45 | ННҐННОҐО 46 | ННҒННОҒО 47 | ННҔННОҔО 48 | ННҖННОҖО 49 | ННҘННОҘО 50 | ННҚННОҚО 51 | ННҜННОҜО 52 | ННҠННОҠО 53 | ННҢННОҢО 54 | ННҪННОҪО 55 | ННҮННОҮО 56 | ННҰННОҰО 57 | ННҶННОҶО 58 | ННҸННОҸО 59 | ННҺННОҺО 60 | ННӀННОӀО 61 | ННӁННОӁО 62 | ННӋННОӋО 63 | ННӘННОӘО 64 | ННӨННОӨО 65 | ННӶННОӶО 66 | ННԚННОԚО 67 | ННԜННОԜО 68 | ННԤННОԤО 69 | 70 | ннђннођо 71 | ннєнноєо 72 | ннѕнноѕо 73 | ннінноіо 74 | ннїнноїо 75 | ннјннојо 76 | ннљннољо 77 | ннњнноњо 78 | ннћнноћо 79 | ннџнноџо 80 | ннанноао 81 | ннбннобо 82 | ннвнново 83 | ннгнного 84 | нндннодо 85 | нненноео 86 | ннжнножо 87 | ннзннозо 88 | ннинноио 89 | ннкнноко 90 | ннлнноло 91 | ннмнномо 92 | ннннноно 93 | нноннооо 94 | ннпннопо 95 | ннрнноро 96 | ннснносо 97 | ннтнното 98 | ннунноуо 99 | ннфннофо 100 | ннхннохо 101 | ннцнноцо 102 | ннчнночо 103 | нншнношо 104 | ннщннощо 105 | ннънноъо 106 | ннынноыо 107 | нньнноьо 108 | ннэнноэо 109 | ннюнноюо 110 | нняннояо 111 | ннѣнноѣо 112 | ннѫнноѫо 113 | ннѳнноѳо 114 | ннѵнноѵо 115 | ннґнноґо 116 | ннғнноғо 117 | ннҕнноҕо 118 | ннҗнноҗо 119 | ннҙнноҙо 120 | ннқнноқо 121 | ннҝнноҝо 122 | ннҡнноҡо 123 | ннңнноңо 124 | ннҫнноҫо 125 | ннүнноүо 126 | ннҷнноҷо 127 | ннҹнноҹо 128 | ннһнноһо 129 | ннӏнноӏо 130 | ннӌнноӌо 131 | ннәнноәо 132 | ннөнноөо 133 | ннӷнноӷо 134 | ннԛнноԛо 135 | ннԝнноԝо 136 | 137 | ННҊННОҊО 138 | ННҌННОҌО 139 | ННҎННОҎО 140 | ННҞННОҞО 141 | ННҨННОҨО 142 | ННҬННОҬО 143 | ННҼННОҼО 144 | ННҾННОҾО 145 | ННӃННОӃО 146 | ННӅННОӅО 147 | ННӇННОӇО 148 | ННӉННОӉО 149 | ННӍННОӍО 150 | ННӠННОӠО 151 | ННӺННОӺО 152 | ННӼННОӼО 153 | ННӾННОӾО 154 | ННԐННОԐО 155 | ННԒННОԒО 156 | ННԦННОԦО 157 | ННԨННОԨО 158 | ННԮННОԮО 159 | ННԤННОԤО 160 | 161 | ннҋнноҋо 162 | ннҍнноҍо 163 | ннҏнноҏо 164 | ннҟнноҟо 165 | ннҩнноҩо 166 | ннҭнноҭо 167 | ннҽнноҽо 168 | ннҿнноҿо 169 | ннӄнноӄо 170 | ннӆнноӆо 171 | ннӈнноӈо 172 | ннӊнноӊо 173 | ннӎнноӎо 174 | ннӡнноӡо 175 | ннӻнноӻо 176 | ннӽнноӽо 177 | ннӿнноӿо 178 | ннԑнноԑо 179 | ннԓнноԓо 180 | ннԧнноԧо 181 | ннԩнноԩо 182 | ннԯнноԯо 183 | ннԥнноԥо -------------------------------------------------------------------------------- /kerning-texts/Prata_Regular.glyphs_kern_strings.txt: -------------------------------------------------------------------------------- 1 | 2 | Regular 3 | OOAЧOOHHAЧHH 4 | OOAOOOHHAOHH 5 | OOATOOHHATHH 6 | OOAUOOHHAUHH 7 | OOAУOOHHAУHH 8 | OOAVOOHHAVHH 9 | OOAYOOHHAYHH 10 | OOAЗOOHHAЗHH 11 | OOAaooHHAann 12 | OOA*OOHHA*HH 13 | OOAбooHHAбnn 14 | OOAчooHHAчnn 15 | OOAgooHHAgnn 16 | OOA-OOHHA-HH 17 | OOAoooHHAonn 18 | OOA‘OOHHA‘HH 19 | OOA'OOHHA'HH 20 | OOAtooHHAtnn 21 | OOAтooHHAтnn 22 | OOAuooHHAunn 23 | OOAvooHHAvnn 24 | OOAyooHHAynn 25 | OOBAOOHHBAHH 26 | OOBЧOOHHBЧHH 27 | OOBДOOHHBДHH 28 | OOBЛOOHHBЛHH 29 | OOBУOOHHBУHH 30 | OOBVOOHHBVHH 31 | OOBXOOHHBXHH 32 | OOBYOOHHBYHH 33 | OOBчooHHBчnn 34 | OOBдooHHBдnn 35 | OOBлooHHBлnn 36 | OOBяooHHBяnn 37 | OOB'OOHHB'HH 38 | OOBxooHHBxnn 39 | OOByooHHBynn 40 | OOБЧOOHHБЧHH 41 | OOБДOOHHБДHH 42 | OOБXOOHHБXHH 43 | OOБдooHHБдnn 44 | OOБлooHHБлnn 45 | OOБxooHHБxnn 46 | OOБyooHHБynn 47 | OOCYOOHHCYHH 48 | OOCчooHHCчnn 49 | OOCлooHHCлnn 50 | OOCoooHHConn 51 | OOCuooHHCunn 52 | OOCvooHHCvnn 53 | OOCyooHHCynn 54 | OODAOOHHDAHH 55 | OODJOOHHDJHH 56 | OODVOOHHDVHH 57 | OODXOOHHDXHH 58 | OODYOOHHDYHH 59 | OOD.OOHHD.HH 60 | OOEлooHHEлnn 61 | OOEтooHHEтnn 62 | OOEvooHHEvnn 63 | OOEyooHHEynn 64 | OOFAOOHHFAHH 65 | OOFJOOHHFJHH 66 | OOFaooHHFann 67 | OOF.OOHHF.HH 68 | OOГAOOHHГAHH 69 | OOГДOOHHГДHH 70 | OOГЛOOHHГЛHH 71 | OOГЯOOHHГЯHH 72 | OOГЗOOHHГЗHH 73 | OOГaooHHГann 74 | OOГбooHHГбnn 75 | OOГчooHHГчnn 76 | OOГ:OOHHГ:HH 77 | OOГдooHHГдnn 78 | OOГлooHHГлnn 79 | OOГэooHHГэnn 80 | OOГ›OOHHГ›HH 81 | OOГ-OOHHГ-HH 82 | OOГяooHHГяnn 83 | OOГnooHHГnnn 84 | OOГoooHHГonn 85 | OOГ.OOHHГ.HH 86 | OOГsooHHГsnn 87 | OOГтooHHГтnn 88 | OOГvooHHГvnn 89 | OOГxooHHГxnn 90 | OOГзooHHГзnn 91 | OOГжooHHГжnn 92 | OOHчooHHHчnn 93 | OOHoooHHHonn 94 | OOHтooHHHтnn 95 | OOHvooHHHvnn 96 | OOKЧOOHHKЧHH 97 | OOKOOOHHKOHH 98 | OOKUOOHHKUHH 99 | OOKaooHHKann 100 | OOKбooHHKбnn 101 | OOKчooHHKчnn 102 | OOKgooHHKgnn 103 | OOK-OOHHK-HH 104 | OOKoooHHKonn 105 | OOK'OOHHK'HH 106 | OOKsooHHKsnn 107 | OOKtooHHKtnn 108 | OOKтooHHKтnn 109 | OOKuooHHKunn 110 | OOKvooHHKvnn 111 | OOKyooHHKynn 112 | OOКбooHHКбnn 113 | OOКчooHHКчnn 114 | OOКлooHHКлnn 115 | OOКoooHHКonn 116 | OOКтooHHКтnn 117 | OOКyooHHКynn 118 | OOLOOOHHLOHH 119 | OOLTOOHHLTHH 120 | OOLVOOHHLVHH 121 | OOLYOOHHLYHH 122 | OOL‘OOHHL‘HH 123 | OOL'OOHHL'HH 124 | OOLvooHHLvnn 125 | OOLyooHHLynn 126 | OOOAOOHHOAHH 127 | OOOДOOHHOДHH 128 | OOOЛOOHHOЛHH 129 | OOOJOOHHOJHH 130 | OOOOOOHHOOHH 131 | OOOTOOHHOTHH 132 | OOOУOOHHOУHH 133 | OOOVOOHHOVHH 134 | OOOXOOHHOXHH 135 | OOOYOOHHOYHH 136 | OOOЗOOHHOЗHH 137 | OOOдooHHOдnn 138 | OOOлooHHOлnn 139 | OOOяooHHOяnn 140 | OOO.OOHHO.HH 141 | OOO'OOHHO'HH 142 | OOPAOOHHPAHH 143 | OOPДOOHHPДHH 144 | OOPЛOOHHPЛHH 145 | OOPJOOHHPJHH 146 | OOPXOOHHPXHH 147 | OOPaooHHPann 148 | OOPдooHHPдnn 149 | OOPлooHHPлnn 150 | OOPgooHHPgnn 151 | OOPяooHHPяnn 152 | OOPoooHHPonn 153 | OOP.OOHHP.HH 154 | OOPsooHHPsnn 155 | OOPzooHHPznn 156 | OOROOOHHROHH 157 | OORUOOHHRUHH 158 | OORVOOHHRVHH 159 | OORYOOHHRYHH 160 | OORvooHHRvnn 161 | OORyooHHRynn 162 | OOSVOOHHSVHH 163 | OOSYOOHHSYHH 164 | OOSчooHHSчnn 165 | OOSлooHHSлnn 166 | OOSvooHHSvnn 167 | OOSyooHHSynn 168 | OOЬЧOOHHЬЧHH 169 | OOЬДOOHHЬДHH 170 | OOЬTOOHHЬTHH 171 | OOЬУOOHHЬУHH 172 | OOЬXOOHHЬXHH 173 | OOЬ'OOHHЬ'HH 174 | OOTAOOHHTAHH 175 | OOTДOOHHTДHH 176 | OOTЛOOHHTЛHH 177 | OOTJOOHHTJHH 178 | OOTOOOHHTOHH 179 | OOTaooHHTann 180 | OOTбooHHTбnn 181 | OOTчooHHTчnn 182 | OOT:OOHHT:HH 183 | OOTдooHHTдnn 184 | OOTлooHHTлnn 185 | OOTэooHHTэnn 186 | OOTfooHHTfnn 187 | OOTgooHHTgnn 188 | OOT›OOHHT›HH 189 | OOT-OOHHT-HH 190 | OOTяooHHTяnn 191 | OOTnooHHTnnn 192 | OOToooHHTonn 193 | OOT.OOHHT.HH 194 | OOTsooHHTsnn 195 | OOTtooHHTtnn 196 | OOTтooHHTтnn 197 | OOTuooHHTunn 198 | OOTvooHHTvnn 199 | OOTxooHHTxnn 200 | OOTyooHHTynn 201 | OOTzooHHTznn 202 | OOTзooHHTзnn 203 | OOTжooHHTжnn 204 | OOЦчooHHЦчnn 205 | OOЦ-OOHHЦ-HH 206 | OOЦoooHHЦonn 207 | OOЦтooHHЦтnn 208 | OOЦvooHHЦvnn 209 | OOUAOOHHUAHH 210 | OOUJOOHHUJHH 211 | OOUOOOHHUOHH 212 | OOUaooHHUann 213 | OOUfooHHUfnn 214 | OOUgooHHUgnn 215 | OOUhooHHUhnn 216 | OOUnooHHUnnn 217 | OOUoooHHUonn 218 | OOU.OOHHU.HH 219 | OOUsooHHUsnn 220 | OOUtooHHUtnn 221 | OOUuooHHUunn 222 | OOUvooHHUvnn 223 | OOUyooHHUynn 224 | OOUzooHHUznn 225 | OOУAOOHHУAHH 226 | OOУДOOHHУДHH 227 | OOУЛOOHHУЛHH 228 | OOУЯOOHHУЯHH 229 | OOУOOOHHУOHH 230 | OOУaooHHУann 231 | OOУбooHHУбnn 232 | OOУчooHHУчnn 233 | OOУ:OOHHУ:HH 234 | OOУдooHHУдnn 235 | OOУлooHHУлnn 236 | OOУэooHHУэnn 237 | OOУ›OOHHУ›HH 238 | OOУ-OOHHУ-HH 239 | OOУяooHHУяnn 240 | OOУnooHHУnnn 241 | OOУoooHHУonn 242 | OOУ.OOHHУ.HH 243 | OOУsooHHУsnn 244 | OOУтooHHУтnn 245 | OOУuooHHУunn 246 | OOУxooHHУxnn 247 | OOУyooHHУynn 248 | OOУзooHHУзnn 249 | OOУжooHHУжnn 250 | OOVAOOHHVAHH 251 | OOVДOOHHVДHH 252 | OOVЛOOHHVЛHH 253 | OOVJOOHHVJHH 254 | OOVOOOHHVOHH 255 | OOVЗOOHHVЗHH 256 | OOVaooHHVann 257 | OOVбooHHVбnn 258 | OOVчooHHVчnn 259 | OOV:OOHHV:HH 260 | OOVдooHHVдnn 261 | OOVлooHHVлnn 262 | OOVэooHHVэnn 263 | OOVfooHHVfnn 264 | OOVgooHHVgnn 265 | OOV-OOHHV-HH 266 | OOVяooHHVяnn 267 | OOVnooHHVnnn 268 | OOVoooHHVonn 269 | OOV.OOHHV.HH 270 | OOVsooHHVsnn 271 | OOVтooHHVтnn 272 | OOVuooHHVunn 273 | OOVvooHHVvnn 274 | OOVxooHHVxnn 275 | OOVyooHHVynn 276 | OOVzooHHVznn 277 | OOVзooHHVзnn 278 | OOXOOOHHXOHH 279 | OOXaooHHXann 280 | OOXбooHHXбnn 281 | OOXчooHHXчnn 282 | OOXgooHHXgnn 283 | OOX-OOHHX-HH 284 | OOXoooHHXonn 285 | OOXsooHHXsnn 286 | OOXtooHHXtnn 287 | OOXтooHHXтnn 288 | OOXuooHHXunn 289 | OOXvooHHXvnn 290 | OOXyooHHXynn 291 | OOYAOOHHYAHH 292 | OOYJOOHHYJHH 293 | OOYOOOHHYOHH 294 | OOYaooHHYann 295 | OOY:OOHHY:HH 296 | OOYfooHHYfnn 297 | OOY4OOHHY4HH 298 | OOYgooHHYgnn 299 | OOY-OOHHY-HH 300 | OOYnooHHYnnn 301 | OOYoooHHYonn 302 | OOY.OOHHY.HH 303 | OOYsooHHYsnn 304 | OOYtooHHYtnn 305 | OOYuooHHYunn 306 | OOYvooHHYvnn 307 | OOYxooHHYxnn 308 | OOYyooHHYynn 309 | OOYzooHHYznn 310 | OOZ-OOHHZ-HH 311 | OOZvooHHZvnn 312 | OOZyooHHZynn 313 | ooaчoonnaчnn 314 | ooavoonnavnn 315 | ooayoonnaynn 316 | OO*AOOHH*AHH 317 | oocУOOnncУHH 318 | oocaoonncann 319 | oocдoonncдnn 320 | oocлoonncлnn 321 | ooeTOOnneTHH 322 | ooeУOOnneУHH 323 | ooeдoonneдnn 324 | ooeлoonneлnn 325 | ooe‘OOnne‘HH 326 | ooe'OOnne'HH 327 | ooevoonnevnn 328 | ooexoonnexnn 329 | ooeyoonneynn 330 | oofgoonnfgnn 331 | oofooonnfonn 332 | oof.OOnnf.HH 333 | oofsoonnfsnn 334 | oogooonngonn 335 | ooгДOOnnгДHH 336 | ooгTOOnnгTHH 337 | ooгУOOnnгУHH 338 | ooгXOOnnгXHH 339 | ooгдoonnгдnn 340 | ooглoonnглnn 341 | ooгяoonnгяnn 342 | ooг.OOnnг.HH 343 | OO‹TOOHH‹THH 344 | OO‹УOOHH‹УHH 345 | OO-AOOHH-AHH 346 | OO-ЧOOHH-ЧHH 347 | OO-ДOOHH-ДHH 348 | OO-ЛOOHH-ЛHH 349 | OO-TOOHH-THH 350 | OO-УOOHH-УHH 351 | OO-VOOHH-VHH 352 | OO-XOOHH-XHH 353 | OO-ZOOHH-ZHH 354 | OO-дooHH-дnn 355 | OO-лooHH-лnn 356 | OO-7OOHH-7HH 357 | OO-2OOHH-2HH 358 | OO-xooHH-xnn 359 | ookTOOnnkTHH 360 | ookУOOnnkУHH 361 | ookaoonnkann 362 | ookбoonnkбnn 363 | ookчoonnkчnn 364 | ookooonnkonn 365 | ookvoonnkvnn 366 | ooклoonnклnn 367 | oonTOOnnnTHH 368 | oonУOOnnnУHH 369 | oon‘OOnnn‘HH 370 | oon'OOnnn'HH 371 | oonvoonnnvnn 372 | oonyoonnnynn 373 | OO9.OOHH9.HH 374 | OO9'OOHH9'HH 375 | oooДOOnnoДHH 376 | oooTOOnnoTHH 377 | oooУOOnnoУHH 378 | oooXOOnnoXHH 379 | oooчoonnoчnn 380 | oooдoonnoдnn 381 | oooлoonnoлnn 382 | oooяoonnoяnn 383 | ooo‘OOnno‘HH 384 | ooo'OOnno'HH 385 | ooo7OOnno7HH 386 | ooovoonnovnn 387 | oooxoonnoxnn 388 | oooyoonnoynn 389 | ooozoonnoznn 390 | oopчoonnpчnn 391 | oopдoonnpдnn 392 | oopлoonnpлnn 393 | oopяoonnpяnn 394 | oopxoonnpxnn 395 | oopyoonnpynn 396 | OO.OOOHH.OHH 397 | OO.TOOHH.THH 398 | OO.чooHH.чnn 399 | OO.9OOHH.9HH 400 | OO.0OOHH.0HH 401 | OO¿JOOHH¿JHH 402 | OO‘AOOHH‘AHH 403 | OO‘ДOOHH‘ДHH 404 | OO‘ЛOOHH‘ЛHH 405 | OO‘sooHH‘snn 406 | OO'AOOHH'AHH 407 | OO'ДOOHH'ДHH 408 | OO'ЛOOHH'ЛHH 409 | OO'OOOHH'OHH 410 | OO'aooHH'ann 411 | OO'чooHH'чnn 412 | OO'дooHH'дnn 413 | OO'лooHH'лnn 414 | OO'эooHH'эnn 415 | OO'яooHH'яnn 416 | OO'nooHH'nnn 417 | OO'oooHH'onn 418 | OO'sooHH'snn 419 | OO'0OOHH'0HH 420 | oorooonnronn 421 | oor.OOnnr.HH 422 | oosTOOnnsTHH 423 | oosУOOnnsУHH 424 | OO74OOHH74HH 425 | OO7-OOHH7-HH 426 | OO7oooHH7onn 427 | OO7.OOHH7.HH 428 | ooьЛOOnnьЛHH 429 | ooьOOOnnьOHH 430 | ooьTOOnnьTHH 431 | ooьУOOnnьУHH 432 | ooьчoonnьчnn 433 | ooь‘OOnnь‘HH 434 | ooь'OOnnь'HH 435 | ooьтoonnьтnn 436 | ooьvoonnьvnn 437 | ooьxoonnьxnn 438 | ooьyoonnьynn 439 | ootgoonntgnn 440 | ootooonntonn 441 | oot'OOnnt'HH 442 | ootsoonntsnn 443 | ooтAOOnnтAHH 444 | ooтУOOnnтУHH 445 | ooтXOOnnтXHH 446 | ooтдoonnтдnn 447 | ooтлoonnтлnn 448 | ooтяoonnтяnn 449 | ooт.OOnnт.HH 450 | ooцTOOnnцTHH 451 | ooцУOOnnцУHH 452 | oouTOOnnuTHH 453 | oouУOOnnuУHH 454 | oou'OOnnu'HH 455 | oovДOOnnvДHH 456 | oovTOOnnvTHH 457 | oovУOOnnvУHH 458 | oovXOOnnvXHH 459 | oovaoonnvann 460 | oovдoonnvдnn 461 | oovлoonnvлnn 462 | oovgoonnvgnn 463 | oovooonnvonn 464 | oov.OOnnv.HH 465 | oov'OOnnv'HH 466 | oovsoonnvsnn 467 | ooвTOOnnвTHH 468 | ooвУOOnnвУHH 469 | ooвчoonnвчnn 470 | ooвдoonnвдnn 471 | ooвлoonnвлnn 472 | ooв'OOnnв'HH 473 | ooвvoonnвvnn 474 | ooвxoonnвxnn 475 | ooвyoonnвynn 476 | ooxTOOnnxTHH 477 | ooxУOOnnxУHH 478 | ooxaoonnxann 479 | ooxбoonnxбnn 480 | ooxчoonnxчnn 481 | ooxэoonnxэnn 482 | ooxgoonnxgnn 483 | oox-OOnnx-HH 484 | ooxooonnxonn 485 | ooxsoonnxsnn 486 | ooxзoonnxзnn 487 | ooyTOOnnyTHH 488 | ooyУOOnnyУHH 489 | ooyXOOnnyXHH 490 | ooyaoonnyann 491 | ooyдoonnyдnn 492 | ooyлoonnyлnn 493 | ooygoonnygnn 494 | ooyяoonnyяnn 495 | ooyooonnyonn 496 | ooy.OOnny.HH 497 | ooysoonnysnn 498 | oozooonnzonn 499 | OO0.OOHH0.HH 500 | OO0'OOHH0'HH 501 | OO07OOHH07HH 502 | OO})OOHH})HH 503 | OO)]OOHH)]HH 504 | OO)}OOHH)}HH 505 | OO))OOHH))HH 506 | OO))OOHH))HH 507 | -------------------------------------------------------------------------------- /kerning-texts/Raleway-CYR kern.glyphs_kern_strings.txt: -------------------------------------------------------------------------------- 1 | OOAЧOOHHAЧHH 2 | OOAOOOHHAOHH 3 | OOAУOOHHAУHH 4 | OOAЗOOHHAЗHH 5 | OOAбooHHAбnn 6 | OOAчooHHAчnn 7 | OOAhooHHAhnn 8 | OOAsooHHAsnn 9 | OOAтooHHAтnn 10 | OOAuooHHAunn 11 | OOAзooHHAзnn 12 | OOBOOOHHBOHH 13 | OOBhooHHBhnn 14 | OOБДOOHHБДHH 15 | OOБЯOOHHБЯHH 16 | OOГAOOHHГAHH 17 | OOГДOOHHГДHH 18 | OOГЛOOHHГЛHH 19 | OOГЯOOHHГЯHH 20 | OOГOOOHHГOHH 21 | OOГaooHHГann 22 | OOГбooHHГбnn 23 | OOГчooHHГчnn 24 | OOГдooHHГдnn 25 | OOГлooHHГлnn 26 | OOГэooHHГэnn 27 | OOГhooHHГhnn 28 | OOГяooHHГяnn 29 | OOГnooHHГnnn 30 | OOГoooHHГonn 31 | OOГsooHHГsnn 32 | OOГтooHHГтnn 33 | OOГuooHHГunn 34 | OOГзooHHГзnn 35 | OOГvooHHГvnn 36 | OOГxooHHГxnn 37 | OOГӟooHHГӟnn 38 | OOHOOOHHHOHH 39 | OOHhooHHHhnn 40 | OOHsooHHHsnn 41 | OOКЧOOHHКЧHH 42 | OOКЭOOHHКЭHH 43 | OOКOOOHHКOHH 44 | OOКSOOHHКSHH 45 | OOКЗOOHHКЗHH 46 | OOКaooHHКann 47 | OOКбooHHКбnn 48 | OOКчooHHКчnn 49 | OOКлooHHКлnn 50 | OOКhooHHКhnn 51 | OOК-OOHHК-HH 52 | OOКnooHHКnnn 53 | OOКoooHHКonn 54 | OOК'OOHHК'HH 55 | OOКsooHHКsnn 56 | OOКтooHHКтnn 57 | OOКuooHHКunn 58 | OOКзooHHКзnn 59 | OOКvooHHКvnn 60 | OOOДOOHHOДHH 61 | OOOЛOOHHOЛHH 62 | OOOУOOHHOУHH 63 | OOOXOOHHOXHH 64 | OOOЗOOHHOЗHH 65 | OOOдooHHOдnn 66 | OOOлooHHOлnn 67 | OOOhooHHOhnn 68 | OOOsooHHOsnn 69 | OOOзooHHOзnn 70 | OOЬAOOHHЬAHH 71 | OOЬДOOHHЬДHH 72 | OOЬTOOHHЬTHH 73 | OOЬУOOHHЬУHH 74 | OOЬhooHHЬhnn 75 | OOЬXOOHHЬXHH 76 | OOTДOOHHTДHH 77 | OOTЛOOHHTЛHH 78 | OOTOOOHHTOHH 79 | OOTбooHHTбnn 80 | OOTчooHHTчnn 81 | OOTдooHHTдnn 82 | OOTлooHHTлnn 83 | OOTэooHHTэnn 84 | OOThooHHThnn 85 | OOTяooHHTяnn 86 | OOTnooHHTnnn 87 | OOToooHHTonn 88 | OOTsooHHTsnn 89 | OOTтooHHTтnn 90 | OOTuooHHTunn 91 | OOTзooHHTзnn 92 | OOЦЧOOHHЦЧHH 93 | OOЦOOOHHЦOHH 94 | OOЦTOOHHЦTHH 95 | OOЦУOOHHЦУHH 96 | OOЦЗOOHHЦЗHH 97 | OOЦлooHHЦлnn 98 | OOЦhooHHЦhnn 99 | OOЦ-OOHHЦ-HH 100 | OOЦoooHHЦonn 101 | OOЦ'OOHHЦ'HH 102 | OOЦтooHHЦтnn 103 | OOЦvooHHЦvnn 104 | OOЋДOOHHЋДHH 105 | OOУДOOHHУДHH 106 | OOУOOOHHУOHH 107 | OOУлooHHУлnn 108 | OOУhooHHУhnn 109 | OOУnooHHУnnn 110 | OOУoooHHУonn 111 | OOУsooHHУsnn 112 | OOУтooHHУтnn 113 | OOУuooHHУunn 114 | OOУзooHHУзnn 115 | OOXOOOHHXOHH 116 | OOXhooHHXhnn 117 | OOXoooHHXonn 118 | OOXsooHHXsnn 119 | OOXтooHHXтnn 120 | oobДOOnnbДHH 121 | ooeTOOnneTHH 122 | ooeУOOnneУHH 123 | ooeдoonneдnn 124 | ooeтoonneтnn 125 | ooгДOOnnгДHH 126 | ooгTOOnnгTHH 127 | ooгУOOnnгУHH 128 | ooгдoonnгдnn 129 | ooглoonnглnn 130 | ooгяoonnгяnn 131 | ooг.OOnnг.HH 132 | ooгтoonnгтnn 133 | ooгзoonnгзnn 134 | ooгXOOnnгXHH 135 | OO-ЧOOHH-ЧHH 136 | OO-ДOOHH-ДHH 137 | OO-ЛOOHH-ЛHH 138 | OO-УOOHH-УHH 139 | OO-дooHH-дnn 140 | OO-лooHH-лnn 141 | ooКУOOnnКУHH 142 | oonTOOnnnTHH 143 | oonУOOnnnУHH 144 | oooAOOnnoAHH 145 | oooЧOOnnoЧHH 146 | oooДOOnnoДHH 147 | oooHOOnnoHHH 148 | oooTOOnnoTHH 149 | oooУOOnnoУHH 150 | oooXOOnnoXHH 151 | oooЗOOnnoЗHH 152 | oooбoonnoбnn 153 | oooдoonnoдnn 154 | oooлoonnoлnn 155 | oooяoonnoяnn 156 | oooтoonnoтnn 157 | oooxoonnoxnn 158 | oooyoonnoynn 159 | oooзoonnoзnn 160 | OO.OOOHH.OHH 161 | OO.чooHH.чnn 162 | OO.тooHH.тnn 163 | OO'ДOOHH'ДHH 164 | OO'ЛOOHH'ЛHH 165 | OO'ЗOOHH'ЗHH 166 | OO'чooHH'чnn 167 | OO'дooHH'дnn 168 | OO'лooHH'лnn 169 | OO'эooHH'эnn 170 | OO'яooHH'яnn 171 | OO'зooHH'зnn 172 | oosЧOOnnsЧHH 173 | oosTOOnnsTHH 174 | oosУOOnnsУHH 175 | oosXOOnnsXHH 176 | oosЗOOnnsЗHH 177 | oosбoonnsбnn 178 | ooьЧOOnnьЧHH 179 | ooьOOOnnьOHH 180 | ooьTOOnnьTHH 181 | ooьУOOnnьУHH 182 | ooьЗOOnnьЗHH 183 | ooьбoonnьбnn 184 | ooьяoonnьяnn 185 | ooь‘OOnnь‘HH 186 | ooь'OOnnь'HH 187 | ooьтoonnьтnn 188 | ooьxoonnьxnn 189 | ooьyoonnьynn 190 | ooьзoonnьзnn 191 | ooь™OOnnь™HH 192 | ooьvoonnьvnn 193 | ooьxoonnьxnn 194 | ooтAOOnnтAHH 195 | ooтTOOnnтTHH 196 | ooтУOOnnтУHH 197 | ooтдoonnтдnn 198 | ooтлoonnтлnn 199 | ooт.OOnnт.HH 200 | ooтѣoonnтѣnn 201 | ooтXOOnnтXHH 202 | ooцTOOnnцTHH 203 | ooцУOOnnцУHH 204 | ooцбoonnцбnn 205 | ooцчoonnцчnn 206 | ooц-OOnnц-HH 207 | ooц‘OOnnц‘HH 208 | ooц'OOnnц'HH 209 | ooц™OOnnц™HH 210 | ooцvoonnцvnn 211 | oouAOOnnuAHH 212 | oouЧOOnnuЧHH 213 | oouHOOnnuHHH 214 | oouOOOnnuOHH 215 | oouTOOnnuTHH 216 | oouУOOnnuУHH 217 | oouЗOOnnuЗHH 218 | oouбoonnuбnn 219 | oouooonnuonn 220 | ooвЧOOnnвЧHH 221 | ooвHOOnnвHHH 222 | ooвTOOnnвTHH 223 | ooвУOOnnвУHH 224 | ooвXOOnnвXHH 225 | ooвЗOOnnвЗHH 226 | ooвбoonnвбnn 227 | ooвчoonnвчnn 228 | ooвдoonnвдnn 229 | ooвлoonnвлnn 230 | ooвтoonnвтnn 231 | ooвxoonnвxnn 232 | ooвyoonnвynn 233 | ooвзoonnвзnn 234 | ooвvoonnвvnn 235 | ooвxoonnвxnn 236 | ooxhoonnxhnn 237 | ooxooonnxonn 238 | ooxзoonnxзnn 239 | ooyOOOnnyOHH 240 | ooyTOOnnyTHH 241 | ooyУOOnnyУHH 242 | ooyhoonnyhnn 243 | ooyѣoonnyѣnn 244 | ooyзoonnyзnn 245 | ooyXOOnnyXHH 246 | OOBДOOHHBДHH 247 | OOBЛOOHHBЛHH 248 | OOBЯOOHHBЯHH 249 | OOBУOOHHBУHH 250 | OOBдooHHBдnn 251 | OOBяooHHBяnn 252 | OOГnooHHГnnn 253 | OOГoooHHГonn 254 | OOPДOOHHPДHH 255 | OOPЛOOHHPЛHH 256 | OOVДOOHHVДHH 257 | OOVЛOOHHVЛHH 258 | OOVЗOOHHVЗHH 259 | OOVбooHHVбnn 260 | OOVчooHHVчnn 261 | OOVдooHHVдnn 262 | OOVлooHHVлnn 263 | OOVэooHHVэnn 264 | OOVяooHHVяnn 265 | OOVnooHHVnnn 266 | OOVтooHHVтnn 267 | OOVзooHHVзnn 268 | OOXбooHHXбnn 269 | oovДOOnnvДHH 270 | oovTOOnnvTHH 271 | oovУOOnnvУHH 272 | oovдoonnvдnn 273 | oovлoonnvлnn 274 | oovзoonnvзnn 275 | ooxOOOnnxOHH 276 | ooxTOOnnxTHH 277 | ooxУOOnnxУHH 278 | ooxбoonnxбnn 279 | ooxчoonnxчnn 280 | ooxдoonnxдnn 281 | ooxэoonnxэnn 282 | ooxhoonnxhnn 283 | ooxзoonnxзnn -------------------------------------------------------------------------------- /kerning-texts/check-metrics-GF-Plus-unique.txt: -------------------------------------------------------------------------------- 1 | ННѢНОѢО 2 | ННѪНОѪО 3 | ННѴНОѴО 4 | ННҒНОҒО 5 | ННҔНОҔО 6 | ННҖНОҖО 7 | ННҚНОҚО 8 | ННҜНОҜО 9 | ННҠНОҠО 10 | ННҢНОҢО 11 | ННԤНОԤО 12 | ННҰНОҰО 13 | ННҶНОҶО 14 | 15 | ннѣноѣо 16 | ннѫноѫо 17 | ннѵноѵо 18 | ннғноғо 19 | ннҕноҕо 20 | ннҗноҗо 21 | ннқноқо 22 | ннҝноҝо 23 | ннҡноҡо 24 | ннңноңо 25 | ннԥноԥо 26 | ннұноұо 27 | ннҷноҷо -------------------------------------------------------------------------------- /kerning-texts/currencies.txt: -------------------------------------------------------------------------------- 1 | ₵12 ₵23 ₵34 ₵45 ₵56 ₵67 ₵78 ₵89 ₵90 ₵01 2 | ¢12 ¢23 ¢34 ¢45 ¢56 ¢67 ¢78 ¢89 ¢90 ¢01 3 | ₡12 ₡23 ₡34 ₡45 ₡56 ₡67 ₡78 ₡89 ₡90 ₡01 4 | ¤12 ¤23 ¤34 ¤45 ¤56 ¤67 ¤78 ¤89 ¤90 ¤01 5 | ₫12 ₫23 ₫34 ₫45 ₫56 ₫67 ₫78 ₫89 ₫90 ₫01 6 | ƒ12 ƒ23 ƒ34 ƒ45 ƒ56 ƒ67 ƒ78 ƒ89 ƒ90 ƒ01 7 | ₣12 ₣23 ₣34 ₣45 ₣56 ₣67 ₣78 ₣89 ₣90 ₣01 8 | ₲12 ₲23 ₲34 ₲45 ₲56 ₲67 ₲78 ₲89 ₲90 ₲01 9 | ₭12 ₭23 ₭34 ₭45 ₭56 ₭67 ₭78 ₭89 ₭90 ₭01 10 | ₤12 ₤23 ₤34 ₤45 ₤56 ₤67 ₤78 ₤89 ₤90 ₤01 11 | ₺12 ₺23 ₺34 ₺45 ₺56 ₺67 ₺78 ₺89 ₺90 ₺01 12 | ₼12 ₼23 ₼34 ₼45 ₼56 ₼67 ₼78 ₼89 ₼90 ₼01 13 | ₦12 ₦23 ₦34 ₦45 ₦56 ₦67 ₦78 ₦89 ₦90 ₦01 14 | ₧12 ₧23 ₧34 ₧45 ₧56 ₧67 ₧78 ₧89 ₧90 ₧01 15 | ₱12 ₱23 ₱34 ₱45 ₱56 ₱67 ₱78 ₱89 ₱90 ₱01 16 | ₽12 ₽23 ₽34 ₽45 ₽56 ₽67 ₽78 ₽89 ₽90 ₽01 17 | ₹12 ₹23 ₹34 ₹45 ₹56 ₹67 ₹78 ₹89 ₹90 ₹01 18 | ₩12 ₩23 ₩34 ₩45 ₩56 ₩67 ₩78 ₩89 ₩90 ₩01 19 | ¥12 ¥23 ¥34 ¥45 ¥56 ¥67 ¥78 ¥89 ¥90 ¥01 -------------------------------------------------------------------------------- /kerning-texts/cyrgrid.txt: -------------------------------------------------------------------------------- 1 | абвгдеёжзийклмнопрстуфхчцшщьъыэюя 2 | бвгдеёжзийклмнопрстуфхчцшщьъыэюяа 3 | вгдеёжзийклмнопрстуфхчцшщьъыэюяаб 4 | гдеёжзийклмнопрстуфхчцшщьъыэюяабв 5 | деёжзийклмнопрстуфхчцшщьъыэюяабвг 6 | еёжзийклмнопрстуфхчцшщьъыэюяабвгд 7 | ёжзийклмнопрстуфхчцшщьъыэюяабвгде 8 | жзийклмнопрстуфхчцшщьъыэюяабвгдеё 9 | ийклмнопрстуфхчцшщьъыэюяабвгдеёжз 10 | йклмнопрстуфхчцшщьъыэюяабвгдеёжзи 11 | клмнопрстуфхчцшщьъыэюяабвгдеёжзий 12 | лмнопрстуфхчцшщьъыэюяабвгдеёжзийк 13 | мнопрстуфхчцшщьъыэюяабвгдеёжзийкл 14 | нопрстуфхчцшщьъыэюяабвгдеёжзийклм 15 | опрстуфхчцшщьъыэюяабвгдеёжзийклмн 16 | прстуфхчцшщьъыэюяабвгдеёжзийклмно 17 | рстуфхчцшщьъыэюяабвгдеёжзийклмноп 18 | стуфхчцшщьъыэюяабвгдеёжзийклмнопр 19 | туфхчцшщьъыэюяабвгдеёжзийклмнопрс 20 | уфхчцшщьъыэюяабвгдеёжзийклмнопрст 21 | фхчцшщьъыэюяабвгдеёжзийклмнопрсту 22 | хчцшщьъыэюяабвгдеёжзийклмнопрстуф 23 | чцшщьъыэюяабвгдеёжзийклмнопрстуфх 24 | цшщьъыэюяабвгдеёжзийклмнопрстуфхч 25 | шщьъыэюяабвгдеёжзийклмнопрстуфхчц 26 | шщьъыэюяабвгдеёжзийклмнопрстуфхчц 27 | щьъыэюяабвгдеёжзийклмнопрстуфхчцш 28 | ьъыэюяабвгдеёжзийклмнопрстуфхчцшщ 29 | ъыэюяабвгдеёжзийклмнопрстуфхчцшщь 30 | ыэюяабвгдеёжзийклмнопрстуфхчцшщьъ 31 | эюяабвгдеёжзийклмнопрстуфхчцшщьъы 32 | юяабвгдеёжзийклмнопрстуфхчцшщьъыэ 33 | яабвгдеёжзийклмнопрстуфхчцшщьъыэю -------------------------------------------------------------------------------- /kerning-texts/frac-feature.txt: -------------------------------------------------------------------------------- 1 | zerosuperior=zero.numr 2 | onesuperior=one.numr 3 | twosuperior=two.numr 4 | threesuperior=three.numr 5 | foursuperior=four.numr 6 | fivesuperior=five.numr 7 | sixsuperior=six.numr 8 | sevensuperior=seven.numr 9 | eightsuperior=eight.numr 10 | ninesuperior=nine.numr 11 | 12 | zeroinferior=zero.dnom 13 | oneinferior=one.dnom 14 | twoinferior=two.dnom 15 | threeinferior=three.dnom 16 | fourinferior=four.dnom 17 | fiveinferior=five.dnom 18 | sixinferior=six.dnom 19 | seveninferior=seven.dnom 20 | eightinferior=eight.dnom 21 | nineinferior=nine.dnom -------------------------------------------------------------------------------- /kerning-texts/list.txt: -------------------------------------------------------------------------------- 1 | Anchors list 2 | descender-cy descender-cy.case Ge-cy ge-cy Zhe-cy zhe-cy Ze-cy ze-cy Ka-cy ka-cy En-cy en-cy Es-cy es-cy Che-cy che-cy A-cy a-cy Ie-cy ie-cy 3 | Ii-cy ii-cy O-cy o-cy U-cy u-cy Yeru-cy yeru-cy Pe-cy pe-cy 4 | 5 | Cyr components list 6 | Zhedescender-cy zhedescender-cy Zedescender-cy zedescender-cy Kadescender-cy kadescender-cy Endescender-cy endescender-cy Esdescender-cy esdescender-cy Chedescender-cy chedescender-cy Cheverticalstroke-cy cheverticalstroke-cy Chekhakassian-cy chekhakassian-cy Abreve-cy abreve-cy Adieresis-cy adieresis-cy Iebreve-cy iebreve-cy Zhedieresis-cy zhedieresis-cy Zedieresis-cy zedieresis-cy Imacron-cy imacron-cy Idieresis-cy idieresis-cy Odieresis-cy odieresis-cy Obarred-cy obarred-cy Umacron-cy umacron-cy Udieresis-cy udieresis-cy Uhungarumlaut-cy uhungarumlaut-cy Chedieresis-cy chedieresis-cy Gedescender-cy gedescender-cy Yerudieresis-cy yerudieresis-cy Pedescender-cy pedescender-cy -------------------------------------------------------------------------------- /kerning-texts/loclBGR-kern.txt: -------------------------------------------------------------------------------- 1 | /ve-cy.loclBGR аноно 2 | /ve-cy.loclBGR бноно 3 | /ve-cy.loclBGR дноно 4 | /ve-cy.loclBGR /ka-cy.loclBGR ноно 5 | /ve-cy.loclBGR /ze-cy.loclBGR ноно 6 | /ve-cy.loclBGR ононо 7 | /ve-cy.loclBGR тноно 8 | /ve-cy.loclBGR уноно 9 | /ve-cy.loclBGR хноно 10 | /ve-cy.loclBGR ьноно 11 | /ve-cy.loclBGR нноно 12 | ноно/ve-cy.loclBGR б 13 | ноно/ve-cy.loclBGR д 14 | ноно/ve-cy.loclBGR ж 15 | ноно/ve-cy.loclBGR о 16 | ноно/ve-cy.loclBGR /ze-cy.loclBGR 17 | ноно/ve-cy.loclBGR н 18 | ноно/ve-cy.loclBGR т 19 | ноно/ve-cy.loclBGR у 20 | ноно/ve-cy.loclBGR х 21 | ноно/ve-cy.loclBGR я 22 | /ge-cy.loclBGR аноно 23 | /ge-cy.loclBGR бноно 24 | /ge-cy.loclBGR дноно 25 | /ge-cy.loclBGR кноно 26 | /ge-cy.loclBGR /ze-cy.loclBGR ноно 27 | /ge-cy.loclBGR ононо 28 | /ge-cy.loclBGR тноно 29 | /ge-cy.loclBGR уноно 30 | /ge-cy.loclBGR хноно 31 | /ge-cy.loclBGR ьноно 32 | /ge-cy.loclBGR нноно 33 | ноно/ge-cy.loclBGR б 34 | ноно/ge-cy.loclBGR д 35 | ноно/ge-cy.loclBGR ж 36 | ноно/ge-cy.loclBGR о 37 | ноно/ge-cy.loclBGR /ze-cy.loclBGR 38 | ноно/ge-cy.loclBGR н 39 | ноно/ge-cy.loclBGR т 40 | ноно/ge-cy.loclBGR у 41 | ноно/ge-cy.loclBGR х 42 | ноно/ge-cy.loclBGR я 43 | /ze-cy.loclBGR аноно 44 | /ze-cy.loclBGR бноно 45 | /ze-cy.loclBGR дноно 46 | /ze-cy.loclBGR кноно 47 | /ze-cy.loclBGR /ze-cy.loclBGR ноно 48 | /ze-cy.loclBGR ононо 49 | /ze-cy.loclBGR тноно 50 | /ze-cy.loclBGR уноно 51 | /ze-cy.loclBGR хноно 52 | /ze-cy.loclBGR ьноно 53 | /ze-cy.loclBGR нноно 54 | ноно/ze-cy.loclBGR б 55 | ноно/ze-cy.loclBGR д 56 | ноно/ze-cy.loclBGR ж 57 | ноно/ze-cy.loclBGR о 58 | ноно/ze-cy.loclBGR /ze-cy.loclBGR 59 | ноно/ze-cy.loclBGR н 60 | ноно/ze-cy.loclBGR т 61 | ноно/ze-cy.loclBGR у 62 | ноно/ze-cy.loclBGR х 63 | ноно/ze-cy.loclBGR я 64 | /el-cy.loclBGR аноно 65 | /el-cy.loclBGR бноно 66 | /el-cy.loclBGR дноно 67 | /el-cy.loclBGR кноно 68 | /el-cy.loclBGR /ze-cy.loclBGR ноно 69 | /el-cy.loclBGR ононо 70 | /el-cy.loclBGR тноно 71 | /el-cy.loclBGR уноно 72 | /el-cy.loclBGR хноно 73 | /el-cy.loclBGR ьноно 74 | /el-cy.loclBGR нноно 75 | ноно/el-cy.loclBGR б 76 | ноно/el-cy.loclBGR д 77 | ноно/el-cy.loclBGR ж 78 | ноно/el-cy.loclBGR о 79 | ноно/el-cy.loclBGR /ze-cy.loclBGR 80 | ноно/el-cy.loclBGR н 81 | ноно/el-cy.loclBGR т 82 | ноно/el-cy.loclBGR у 83 | ноно/el-cy.loclBGR х 84 | ноно/el-cy.loclBGR я 85 | /softsign-cy.loclBGR аноно 86 | /softsign-cy.loclBGR бноно 87 | /softsign-cy.loclBGR дноно 88 | /softsign-cy.loclBGR кноно 89 | /softsign-cy.loclBGR /ze-cy.loclBGR ноно 90 | /softsign-cy.loclBGR ононо 91 | /softsign-cy.loclBGR тноно 92 | /softsign-cy.loclBGR уноно 93 | /softsign-cy.loclBGR хноно 94 | /softsign-cy.loclBGR ьноно 95 | /softsign-cy.loclBGR нноно 96 | ноно/softsign-cy.loclBGR б 97 | ноно/softsign-cy.loclBGR д 98 | ноно/softsign-cy.loclBGR ж 99 | ноно/softsign-cy.loclBGR о 100 | ноно/softsign-cy.loclBGR /ze-cy.loclBGR 101 | ноно/softsign-cy.loclBGR н 102 | ноно/softsign-cy.loclBGR т 103 | ноно/softsign-cy.loclBGR у 104 | ноно/softsign-cy.loclBGR х 105 | ноно/softsign-cy.loclBGR я 106 | /hardsign-cy.loclBGR аноно 107 | /hardsign-cy.loclBGR бноно 108 | /hardsign-cy.loclBGR дноно 109 | /hardsign-cy.loclBGR кноно 110 | /hardsign-cy.loclBGR /ze-cy.loclBGR ноно 111 | /hardsign-cy.loclBGR ононо 112 | /hardsign-cy.loclBGR тноно 113 | /hardsign-cy.loclBGR уноно 114 | /hardsign-cy.loclBGR хноно 115 | /hardsign-cy.loclBGR ьноно 116 | /hardsign-cy.loclBGR нноно 117 | ноно/hardsign-cy.loclBGR б 118 | ноно/hardsign-cy.loclBGR д 119 | ноно/hardsign-cy.loclBGR ж 120 | ноно/hardsign-cy.loclBGR о 121 | ноно/hardsign-cy.loclBGR /ze-cy.loclBGR 122 | ноно/hardsign-cy.loclBGR н 123 | ноно/hardsign-cy.loclBGR т 124 | ноно/hardsign-cy.loclBGR у 125 | ноно/hardsign-cy.loclBGR х 126 | ноно/hardsign-cy.loclBGR я 127 | /be-cy.loclSRB аноно 128 | /be-cy.loclSRB /be-cy.loclSRB ноно 129 | /be-cy.loclSRB дноно 130 | /be-cy.loclSRB кноно 131 | /be-cy.loclSRB зноно 132 | /be-cy.loclSRB ононо 133 | /be-cy.loclSRB тноно 134 | /be-cy.loclSRB уноно 135 | /be-cy.loclSRB хноно 136 | /be-cy.loclSRB ьноно 137 | /be-cy.loclSRB нноно 138 | ноно/be-cy.loclSRB /be-cy.loclSRB 139 | ноно/be-cy.loclSRB д 140 | ноно/be-cy.loclSRB ж 141 | ноно/be-cy.loclSRB о 142 | ноно/be-cy.loclSRB з 143 | ноно/be-cy.loclSRB н 144 | ноно/be-cy.loclSRB т 145 | ноно/be-cy.loclSRB у 146 | ноно/be-cy.loclSRB х 147 | ноно/be-cy.loclSRB я -------------------------------------------------------------------------------- /kerning-texts/numbers.txt: -------------------------------------------------------------------------------- 1 | 000 2 | 010 3 | 020 4 | 030 5 | 040 6 | 050 7 | 060 8 | 070 9 | 080 10 | 090 11 | 101 12 | 111 13 | 121 14 | 131 15 | 141 16 | 151 17 | 161 18 | 171 19 | 181 20 | 191 21 | 202 22 | 212 23 | 222 24 | 232 25 | 242 26 | 252 27 | 262 28 | 272 29 | 282 30 | 292 31 | 303 32 | 313 33 | 323 34 | 333 35 | 343 36 | 353 37 | 363 38 | 373 39 | 383 40 | 393 41 | 404 42 | 414 43 | 424 44 | 434 45 | 444 46 | 454 47 | 464 48 | 474 49 | 484 50 | 494 51 | 505 52 | 515 53 | 525 54 | 535 55 | 545 56 | 555 57 | 565 58 | 575 59 | 585 60 | 595 61 | 606 62 | 616 63 | 626 64 | 636 65 | 646 66 | 656 67 | 666 68 | 676 69 | 686 70 | 696 71 | 707 72 | 717 73 | 727 74 | 737 75 | 747 76 | 757 77 | 767 78 | 777 79 | 787 80 | 797 81 | 808 82 | 818 83 | 828 84 | 838 85 | 848 86 | 858 87 | 868 88 | 878 89 | 888 90 | 898 91 | 909 92 | 919 93 | 929 94 | 939 95 | 949 96 | 959 97 | 969 98 | 979 99 | 989 100 | 999 101 | -------------------------------------------------------------------------------- /kerning-texts/superior-figures-matrix.txt: -------------------------------------------------------------------------------- 1 | ³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹² 2 | ⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³ 3 | ⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴ 4 | ⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵ 5 | ⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶ 6 | ⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷ 7 | ⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸ 8 | ⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹⁰¹²³⁴⁵⁶⁷⁸⁹ --------------------------------------------------------------------------------