├── .gitignore ├── AUTHORS.txt ├── CONTRIBUTORS.txt ├── DESCRIPTION.en_us.html ├── FONTLOG.txt ├── METADATA.pb ├── OFL.txt ├── README.md ├── documentation ├── font-export.png ├── img │ ├── details.png │ ├── inco-preview.png │ ├── ligature-sample.png │ ├── permille.png │ ├── s.png │ ├── test.png │ ├── v1.png │ ├── v2.png │ └── xi-mac-screenshot.png ├── inconsolata-diagonals.ai ├── inconsolata-features.pdf └── inconsolata-test.txt ├── fonts ├── otf │ ├── Inconsolata-Black.otf │ ├── Inconsolata-Bold.otf │ ├── Inconsolata-CondensedBlack.otf │ ├── Inconsolata-CondensedBold.otf │ ├── Inconsolata-CondensedExtraBold.otf │ ├── Inconsolata-CondensedExtraLight.otf │ ├── Inconsolata-CondensedLight.otf │ ├── Inconsolata-CondensedMedium.otf │ ├── Inconsolata-CondensedRegular.otf │ ├── Inconsolata-CondensedSemiBold.otf │ ├── Inconsolata-CondensedThin.otf │ ├── Inconsolata-ExpandedBlack.otf │ ├── Inconsolata-ExpandedBold.otf │ ├── Inconsolata-ExpandedExtraBold.otf │ ├── Inconsolata-ExpandedExtraLight.otf │ ├── Inconsolata-ExpandedLight.otf │ ├── Inconsolata-ExpandedMedium.otf │ ├── Inconsolata-ExpandedRegular.otf │ ├── Inconsolata-ExpandedSemiBold.otf │ ├── Inconsolata-ExpandedThin.otf │ ├── Inconsolata-ExtraBold.otf │ ├── Inconsolata-ExtraCondensedBlack.otf │ ├── Inconsolata-ExtraCondensedBold.otf │ ├── Inconsolata-ExtraCondensedExtraBold.otf │ ├── Inconsolata-ExtraCondensedExtraLight.otf │ ├── Inconsolata-ExtraCondensedLight.otf │ ├── Inconsolata-ExtraCondensedMedium.otf │ ├── Inconsolata-ExtraCondensedRegular.otf │ ├── Inconsolata-ExtraCondensedSemiBold.otf │ ├── Inconsolata-ExtraCondensedThin.otf │ ├── Inconsolata-ExtraExpandedBlack.otf │ ├── Inconsolata-ExtraExpandedBold.otf │ ├── Inconsolata-ExtraExpandedExtraBold.otf │ ├── Inconsolata-ExtraExpandedExtraLight.otf │ ├── Inconsolata-ExtraExpandedLight.otf │ ├── Inconsolata-ExtraExpandedMedium.otf │ ├── Inconsolata-ExtraExpandedRegular.otf │ ├── Inconsolata-ExtraExpandedSemiBold.otf │ ├── Inconsolata-ExtraExpandedThin.otf │ ├── Inconsolata-ExtraLight.otf │ ├── Inconsolata-Light.otf │ ├── Inconsolata-Medium.otf │ ├── Inconsolata-Regular.otf │ ├── Inconsolata-SemiBold.otf │ ├── Inconsolata-SemiCondensedBlack.otf │ ├── Inconsolata-SemiCondensedBold.otf │ ├── Inconsolata-SemiCondensedExtraBold.otf │ ├── Inconsolata-SemiCondensedExtraLight.otf │ ├── Inconsolata-SemiCondensedLight.otf │ ├── Inconsolata-SemiCondensedMedium.otf │ ├── Inconsolata-SemiCondensedRegular.otf │ ├── Inconsolata-SemiCondensedSemiBold.otf │ ├── Inconsolata-SemiCondensedThin.otf │ ├── Inconsolata-SemiExpandedBlack.otf │ ├── Inconsolata-SemiExpandedBold.otf │ ├── Inconsolata-SemiExpandedExtraBold.otf │ ├── Inconsolata-SemiExpandedExtraLight.otf │ ├── Inconsolata-SemiExpandedLight.otf │ ├── Inconsolata-SemiExpandedMedium.otf │ ├── Inconsolata-SemiExpandedRegular.otf │ ├── Inconsolata-SemiExpandedSemiBold.otf │ ├── Inconsolata-SemiExpandedThin.otf │ ├── Inconsolata-Thin.otf │ ├── Inconsolata-UltraCondensedBlack.otf │ ├── Inconsolata-UltraCondensedBold.otf │ ├── Inconsolata-UltraCondensedExtraBold.otf │ ├── Inconsolata-UltraCondensedExtraLight.otf │ ├── Inconsolata-UltraCondensedLight.otf │ ├── Inconsolata-UltraCondensedMedium.otf │ ├── Inconsolata-UltraCondensedRegular.otf │ ├── Inconsolata-UltraCondensedSemiBold.otf │ ├── Inconsolata-UltraCondensedThin.otf │ ├── Inconsolata-UltraExpandedBlack.otf │ ├── Inconsolata-UltraExpandedBold.otf │ ├── Inconsolata-UltraExpandedExtraBold.otf │ ├── Inconsolata-UltraExpandedExtraLight.otf │ ├── Inconsolata-UltraExpandedLight.otf │ ├── Inconsolata-UltraExpandedMedium.otf │ ├── Inconsolata-UltraExpandedRegular.otf │ ├── Inconsolata-UltraExpandedSemiBold.otf │ └── Inconsolata-UltraExpandedThin.otf ├── ttf │ ├── Inconsolata-Black.ttf │ ├── Inconsolata-Bold.ttf │ ├── Inconsolata-CondensedBlack.ttf │ ├── Inconsolata-CondensedBold.ttf │ ├── Inconsolata-CondensedExtraBold.ttf │ ├── Inconsolata-CondensedExtraLight.ttf │ ├── Inconsolata-CondensedLight.ttf │ ├── Inconsolata-CondensedMedium.ttf │ ├── Inconsolata-CondensedRegular.ttf │ ├── Inconsolata-CondensedSemiBold.ttf │ ├── Inconsolata-CondensedThin.ttf │ ├── Inconsolata-ExpandedBlack.ttf │ ├── Inconsolata-ExpandedBold.ttf │ ├── Inconsolata-ExpandedExtraBold.ttf │ ├── Inconsolata-ExpandedExtraLight.ttf │ ├── Inconsolata-ExpandedLight.ttf │ ├── Inconsolata-ExpandedMedium.ttf │ ├── Inconsolata-ExpandedRegular.ttf │ ├── Inconsolata-ExpandedSemiBold.ttf │ ├── Inconsolata-ExpandedThin.ttf │ ├── Inconsolata-ExtraBold.ttf │ ├── Inconsolata-ExtraCondensedBlack.ttf │ ├── Inconsolata-ExtraCondensedBold.ttf │ ├── Inconsolata-ExtraCondensedExtraBold.ttf │ ├── Inconsolata-ExtraCondensedExtraLight.ttf │ ├── Inconsolata-ExtraCondensedLight.ttf │ ├── Inconsolata-ExtraCondensedMedium.ttf │ ├── Inconsolata-ExtraCondensedRegular.ttf │ ├── Inconsolata-ExtraCondensedSemiBold.ttf │ ├── Inconsolata-ExtraCondensedThin.ttf │ ├── Inconsolata-ExtraExpandedBlack.ttf │ ├── Inconsolata-ExtraExpandedBold.ttf │ ├── Inconsolata-ExtraExpandedExtraBold.ttf │ ├── Inconsolata-ExtraExpandedExtraLight.ttf │ ├── Inconsolata-ExtraExpandedLight.ttf │ ├── Inconsolata-ExtraExpandedMedium.ttf │ ├── Inconsolata-ExtraExpandedRegular.ttf │ ├── Inconsolata-ExtraExpandedSemiBold.ttf │ ├── Inconsolata-ExtraExpandedThin.ttf │ ├── Inconsolata-ExtraLight.ttf │ ├── Inconsolata-Light.ttf │ ├── Inconsolata-Medium.ttf │ ├── Inconsolata-Regular.ttf │ ├── Inconsolata-SemiBold.ttf │ ├── Inconsolata-SemiCondensedBlack.ttf │ ├── Inconsolata-SemiCondensedBold.ttf │ ├── Inconsolata-SemiCondensedExtraBold.ttf │ ├── Inconsolata-SemiCondensedExtraLight.ttf │ ├── Inconsolata-SemiCondensedLight.ttf │ ├── Inconsolata-SemiCondensedMedium.ttf │ ├── Inconsolata-SemiCondensedRegular.ttf │ ├── Inconsolata-SemiCondensedSemiBold.ttf │ ├── Inconsolata-SemiCondensedThin.ttf │ ├── Inconsolata-SemiExpandedBlack.ttf │ ├── Inconsolata-SemiExpandedBold.ttf │ ├── Inconsolata-SemiExpandedExtraBold.ttf │ ├── Inconsolata-SemiExpandedExtraLight.ttf │ ├── Inconsolata-SemiExpandedLight.ttf │ ├── Inconsolata-SemiExpandedMedium.ttf │ ├── Inconsolata-SemiExpandedRegular.ttf │ ├── Inconsolata-SemiExpandedSemiBold.ttf │ ├── Inconsolata-SemiExpandedThin.ttf │ ├── Inconsolata-Thin.ttf │ ├── Inconsolata-UltraCondensedBlack.ttf │ ├── Inconsolata-UltraCondensedBold.ttf │ ├── Inconsolata-UltraCondensedExtraBold.ttf │ ├── Inconsolata-UltraCondensedExtraLight.ttf │ ├── Inconsolata-UltraCondensedLight.ttf │ ├── Inconsolata-UltraCondensedMedium.ttf │ ├── Inconsolata-UltraCondensedRegular.ttf │ ├── Inconsolata-UltraCondensedSemiBold.ttf │ ├── Inconsolata-UltraCondensedThin.ttf │ ├── Inconsolata-UltraExpandedBlack.ttf │ ├── Inconsolata-UltraExpandedBold.ttf │ ├── Inconsolata-UltraExpandedExtraBold.ttf │ ├── Inconsolata-UltraExpandedExtraLight.ttf │ ├── Inconsolata-UltraExpandedLight.ttf │ ├── Inconsolata-UltraExpandedMedium.ttf │ ├── Inconsolata-UltraExpandedRegular.ttf │ ├── Inconsolata-UltraExpandedSemiBold.ttf │ └── Inconsolata-UltraExpandedThin.ttf ├── variable │ └── Inconsolata[wdth,wght].ttf └── webfonts │ ├── Inconsolata-Black.woff2 │ ├── Inconsolata-Bold.woff2 │ ├── Inconsolata-CondensedBlack.woff2 │ ├── Inconsolata-CondensedBold.woff2 │ ├── Inconsolata-CondensedExtraBold.woff2 │ ├── Inconsolata-CondensedExtraLight.woff2 │ ├── Inconsolata-CondensedLight.woff2 │ ├── Inconsolata-CondensedMedium.woff2 │ ├── Inconsolata-CondensedRegular.woff2 │ ├── Inconsolata-CondensedSemiBold.woff2 │ ├── Inconsolata-CondensedThin.woff2 │ ├── Inconsolata-ExpandedBlack.woff2 │ ├── Inconsolata-ExpandedBold.woff2 │ ├── Inconsolata-ExpandedExtraBold.woff2 │ ├── Inconsolata-ExpandedExtraLight.woff2 │ ├── Inconsolata-ExpandedLight.woff2 │ ├── Inconsolata-ExpandedMedium.woff2 │ ├── Inconsolata-ExpandedRegular.woff2 │ ├── Inconsolata-ExpandedSemiBold.woff2 │ ├── Inconsolata-ExpandedThin.woff2 │ ├── Inconsolata-ExtraBold.woff2 │ ├── Inconsolata-ExtraCondensedBlack.woff2 │ ├── Inconsolata-ExtraCondensedBold.woff2 │ ├── Inconsolata-ExtraCondensedExtraBold.woff2 │ ├── Inconsolata-ExtraCondensedExtraLight.woff2 │ ├── Inconsolata-ExtraCondensedLight.woff2 │ ├── Inconsolata-ExtraCondensedMedium.woff2 │ ├── Inconsolata-ExtraCondensedRegular.woff2 │ ├── Inconsolata-ExtraCondensedSemiBold.woff2 │ ├── Inconsolata-ExtraCondensedThin.woff2 │ ├── Inconsolata-ExtraExpandedBlack.woff2 │ ├── Inconsolata-ExtraExpandedBold.woff2 │ ├── Inconsolata-ExtraExpandedExtraBold.woff2 │ ├── Inconsolata-ExtraExpandedExtraLight.woff2 │ ├── Inconsolata-ExtraExpandedLight.woff2 │ ├── Inconsolata-ExtraExpandedMedium.woff2 │ ├── Inconsolata-ExtraExpandedRegular.woff2 │ ├── Inconsolata-ExtraExpandedSemiBold.woff2 │ ├── Inconsolata-ExtraExpandedThin.woff2 │ ├── Inconsolata-ExtraLight.woff2 │ ├── Inconsolata-Light.woff2 │ ├── Inconsolata-Medium.woff2 │ ├── Inconsolata-Regular.woff2 │ ├── Inconsolata-SemiBold.woff2 │ ├── Inconsolata-SemiCondensedBlack.woff2 │ ├── Inconsolata-SemiCondensedBold.woff2 │ ├── Inconsolata-SemiCondensedExtraBold.woff2 │ ├── Inconsolata-SemiCondensedExtraLight.woff2 │ ├── Inconsolata-SemiCondensedLight.woff2 │ ├── Inconsolata-SemiCondensedMedium.woff2 │ ├── Inconsolata-SemiCondensedRegular.woff2 │ ├── Inconsolata-SemiCondensedSemiBold.woff2 │ ├── Inconsolata-SemiCondensedThin.woff2 │ ├── Inconsolata-SemiExpandedBlack.woff2 │ ├── Inconsolata-SemiExpandedBold.woff2 │ ├── Inconsolata-SemiExpandedExtraBold.woff2 │ ├── Inconsolata-SemiExpandedExtraLight.woff2 │ ├── Inconsolata-SemiExpandedLight.woff2 │ ├── Inconsolata-SemiExpandedMedium.woff2 │ ├── Inconsolata-SemiExpandedRegular.woff2 │ ├── Inconsolata-SemiExpandedSemiBold.woff2 │ ├── Inconsolata-SemiExpandedThin.woff2 │ ├── Inconsolata-Thin.woff2 │ ├── Inconsolata-UltraCondensedBlack.woff2 │ ├── Inconsolata-UltraCondensedBold.woff2 │ ├── Inconsolata-UltraCondensedExtraBold.woff2 │ ├── Inconsolata-UltraCondensedExtraLight.woff2 │ ├── Inconsolata-UltraCondensedLight.woff2 │ ├── Inconsolata-UltraCondensedMedium.woff2 │ ├── Inconsolata-UltraCondensedRegular.woff2 │ ├── Inconsolata-UltraCondensedSemiBold.woff2 │ ├── Inconsolata-UltraCondensedThin.woff2 │ ├── Inconsolata-UltraExpandedBlack.woff2 │ ├── Inconsolata-UltraExpandedBold.woff2 │ ├── Inconsolata-UltraExpandedExtraBold.woff2 │ ├── Inconsolata-UltraExpandedExtraLight.woff2 │ ├── Inconsolata-UltraExpandedLight.woff2 │ ├── Inconsolata-UltraExpandedMedium.woff2 │ ├── Inconsolata-UltraExpandedRegular.woff2 │ ├── Inconsolata-UltraExpandedSemiBold.woff2 │ └── Inconsolata-UltraExpandedThin.woff2 ├── glyphstool ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE-APACHE ├── LICENSE-MIT ├── README.md ├── plist_derive │ ├── Cargo.toml │ └── src │ │ └── lib.rs └── src │ ├── font.rs │ ├── from_plist.rs │ ├── inco_fix.rs │ ├── lib.rs │ ├── main.rs │ ├── ops.rs │ ├── plist.rs │ ├── region.rs │ ├── stretch.rs │ └── to_plist.rs ├── requirements.txt └── sources ├── Inconsolata.glyphs ├── charset ├── inconsolata_glyphlist.nam ├── inconsolata_unique.nam └── nigels-list.nam ├── config.yaml ├── legacy ├── Inconsolata-Bold-OTF.vfb ├── Inconsolata-Bold-TTF.vfb └── Inconsolata-Regular.glyphs └── vtt_hinting.ttx /.gitignore: -------------------------------------------------------------------------------- 1 | *(Autosaved)* 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /AUTHORS.txt: -------------------------------------------------------------------------------- 1 | # This is the official list of authors for copyright purposes. 2 | # This file is distinct from the CONTRIBUTORS file. 3 | # See the latter for an explanation. 4 | # 5 | # Names should be added to this file as: 6 | # Name or Organization 7 | # The email address is not required for organizations. 8 | 9 | Cyreal 10 | Google LLC 11 | Raph Levien 12 | -------------------------------------------------------------------------------- /CONTRIBUTORS.txt: -------------------------------------------------------------------------------- 1 | # This is the official list of people who can contribute 2 | # (and typically have contributed) code to this repository. 3 | # The AUTHORS file lists the copyright holders; this file 4 | # lists people. For example, company employees are listed here 5 | # but not in AUTHORS, because their company holds the copyright. 6 | # 7 | # Names should be added to this file like so: 8 | # Name 9 | 10 | Alexei Vanyashin 11 | Brenton Simpson 12 | Kirill Tkachev 13 | Marc Foley 14 | Nhung Nguyen 15 | -------------------------------------------------------------------------------- /DESCRIPTION.en_us.html: -------------------------------------------------------------------------------- 1 |

2 | Inconsolata was Raph Levien's first serious original font release. 3 | It is a monospace font, designed for printed code listings and the like. 4 | There are a great many “programmer fonts,” designed primarily for use on the screen, but in most cases do not have the attention to detail for high resolution rendering. 5 |

6 |

7 | Inconsolata draws from many inspirations and sources. 8 | I was particularly struck by the beauty of Luc(as) de Groot's Consolas, which is his monospaced design for Microsoft's Vista release. 9 | This font, similar to his earlier TheSansMono, demonstrated clearly to me that monospaced fonts do not have to suck. 10 |

11 |

12 | The development of the Regular style by Raph Levien was started in 2006 using his own Spiro-based tools and FontForge. 13 | The Bold style was designed by Kirill Tkachev and the Cyreal foundry in 2012. 14 |

15 |

16 | Updated September 2015: Internal metadata corrected. 17 |

18 | -------------------------------------------------------------------------------- /FONTLOG.txt: -------------------------------------------------------------------------------- 1 | FONTLOG for the Inconsolata font 2 | 3 | This file provides detailed information on the Inconsolata 4 | font Software. 5 | 6 | This information should be distributed along with the 7 | Inconsolata fonts and any derivative works. 8 | 9 | Basic Font Information 10 | 11 | Inconsolata is a Unicode typeface family that supports 12 | languages that use the Latin script and its variants, and 13 | could be expanded to support other scripts. 14 | 15 | It is a variable font that supports widths from 50 to 200 16 | and weights from 200 to 900. 17 | 18 | More specifically, this release supports the following Unicode 19 | ranges: Latin-1 20 | 21 | There is one source file: 22 | 1. sources/Inconsolata-vf.glyphs (latest Glyphs file with 9 masters) 23 | 24 | ChangeLog 25 | 26 | 11 December 2019 (Raph Levien) Inconsolata v 3.000 27 | - Expand width and weight range, create variable font 28 | 29 | 7 April 2017 (Alexei Vanyashin) Inconsolata v 2.002 30 | Restored vertical space to original amount between bars in equal signs(=). Fixes issue #8 https://github.com/cyrealtype/Inconsolata/issues/8 31 | 32 | 10 February 2017 (Alexei Vanyashin) Inconsolata v 2.001 33 | Fixed issue #7 weird shapes on the terminals of s,j,J,G,r 34 | https://github.com/cyrealtype/Inconsolata/issues/7 35 | 36 | 19 August 2016 (Alexei Vanyashin) Inconsolata v 2.000 37 | 38 | — Extended charset to GF Latin Plus, GF Latin Pro 39 | — Added custom characters 40 | — Improved outline quality 41 | 42 | 21 September 2015 (Dave Crossland) Inconsolata bold v. 1.016 43 | - Fixed internal metadata 44 | - Updated ttfautohint to v1.3 45 | 46 | 18 September 2012 (Alexei Vanyashin) Inconsolata bold v. 1.014 47 | - Fixed spacing issue associated with the character "4" and "0" 48 | - Applied ttfautohint (to fix windows rendering problem that occurred in v 1.000) 49 | 50 | 7 December 2011 (Kirill Tkachev) Inconsolata Bold v. 1.000 51 | - Completed Bold version of Inconsolata in VBF format. 52 | 53 | If you make modifications be sure to add your name (N), 54 | email (E), web-address (if you have one) (W) and description (D). 55 | This list is in alphabetical order. 56 | 57 | N: Alexei Vanyashin 58 | W: http://cyreal.org 59 | E: a at cyreal.org 60 | D: Mastering, Expansion to GF Latin Pro 61 | 62 | N: Kirill Tkachev 63 | W: http://cyreal.org 64 | E: contact at cyreal.org 65 | D: Designer of Bold version 66 | 67 | N: Raph Levien 68 | E: firstname.lastname@gmail.com 69 | W: http://levien.com 70 | D: Original Designer -------------------------------------------------------------------------------- /METADATA.pb: -------------------------------------------------------------------------------- 1 | name: "Inconsolata" 2 | designer: "Raph Levien" 3 | license: "OFL" 4 | category: "MONOSPACE" 5 | date_added: "2010-02-19" 6 | fonts { 7 | name: "Inconsolata" 8 | style: "normal" 9 | weight: 200 10 | filename: "Inconsolata-ExtraLight.ttf" 11 | post_script_name: "Inconsolata-ExtraLight" 12 | full_name: "Inconsolata ExtraLight" 13 | copyright: "Copyright 2006 The Inconsolata Project Authors" 14 | } 15 | fonts { 16 | name: "Inconsolata" 17 | style: "normal" 18 | weight: 300 19 | filename: "Inconsolata-Light.ttf" 20 | post_script_name: "Inconsolata-Light" 21 | full_name: "Inconsolata Light" 22 | copyright: "Copyright 2006 The Inconsolata Project Authors" 23 | } 24 | fonts { 25 | name: "Inconsolata" 26 | style: "normal" 27 | weight: 400 28 | filename: "Inconsolata-Regular.ttf" 29 | post_script_name: "Inconsolata" 30 | full_name: "Inconsolata" 31 | copyright: "Copyright 2006 The Inconsolata Project Authors" 32 | } 33 | fonts { 34 | name: "Inconsolata" 35 | style: "normal" 36 | weight: 500 37 | filename: "Inconsolata-Medium.ttf" 38 | post_script_name: "Inconsolata-Medium" 39 | full_name: "Inconsolata Medium" 40 | copyright: "Copyright 2006 The Inconsolata Project Authors" 41 | } 42 | fonts { 43 | name: "Inconsolata" 44 | style: "normal" 45 | weight: 600 46 | filename: "Inconsolata-SemiBold.ttf" 47 | post_script_name: "Inconsolata-SemiBold" 48 | full_name: "Inconsolata SemiBold" 49 | copyright: "Copyright 2006 The Inconsolata Project Authors" 50 | } 51 | fonts { 52 | name: "Inconsolata" 53 | style: "normal" 54 | weight: 700 55 | filename: "Inconsolata-Bold.ttf" 56 | post_script_name: "Inconsolata-Bold" 57 | full_name: "Inconsolata Bold" 58 | copyright: "Copyright 2006 The Inconsolata Project Authors" 59 | } 60 | fonts { 61 | name: "Inconsolata" 62 | style: "normal" 63 | weight: 800 64 | filename: "Inconsolata-ExtraBold.ttf" 65 | post_script_name: "Inconsolata-ExtraBold" 66 | full_name: "Inconsolata ExtraBold" 67 | copyright: "Copyright 2006 The Inconsolata Project Authors" 68 | } 69 | fonts { 70 | name: "Inconsolata" 71 | style: "normal" 72 | weight: 900 73 | filename: "Inconsolata-Black.ttf" 74 | post_script_name: "Inconsolata-Black" 75 | full_name: "Inconsolata Black" 76 | copyright: "Copyright 2006 The Inconsolata Project Authors" 77 | } 78 | subsets: "latin" 79 | subsets: "latin-ext" 80 | subsets: "menu" 81 | -------------------------------------------------------------------------------- /OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2006 The Inconsolata Project Authors (https://github.com/cyrealtype/Inconsolata) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | http://scripts.sil.org/OFL 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Inconsolata 2 | 3 | Open-source monospace font for code listings, originally by [**@raphlinus**](https://github.com/raphlinus/) 4 | 5 | ### Ligatures 6 | 7 | Inconsolata includes ligatures for a few JavaScript operators: 8 | 9 | Ligatures sample 14 | 15 | They are available in two families. 16 | 17 | - **"Inconsolata"** exposes the ligatures as `dlig`. These are disabled by default, and probably won't show up in your editor. You can enable them in CSS with this rule: 18 | ```css 19 | font-variant-ligatures: discretionary-ligatures; 20 | ``` 21 | - **"Ligconsolata"** exposes the ligatures as `liga`. These are enabled by default. This is the family you should use in your text editor. 22 | 23 | Note: the Ligconsolata variant has not yet been upgraded to version 3.000, as we're prioritizing the non-ligature variants. 24 | 25 | ## Building the family 26 | 27 | Family is built using Glyphs, fontmake and gftools post processing script. Tools are all python based. 28 | 29 | To install all the Python tools into a virtualenv, do the following: 30 | 31 | ``` 32 | python3 -m venv venv 33 | source venv/bin/activate 34 | pip install -r requirements.txt 35 | ``` 36 | 37 | To build the fonts we must load sources/Inconsolata-vf.glyphs in Glyphs and do the following: 38 | - Run the decompose-transformed-components.py script 39 | - Run the gen_instances.py script 40 | - Run the inco_fix.py script 41 | - Save the file back in the sources directory with the filename "prod.glyphs" 42 | 43 | We can now run the build script in the terminal: 44 | 45 | ``` 46 | cd sources # script needs to be run from sources dir 47 | sh build.sh 48 | ``` 49 | 50 | Fonts will take approximately 25 minutes to build. 51 | 52 | ## Changelog v.3.000 53 | 54 | Upgrade to 2-axis variable font family, with widths from 50 to 200, and weights from 200 to 900. 55 | 56 | ## Changelog v.2.013 57 | 58 | - Removed ligatures for `fi` and `fl`. 59 | - Operator ligatures moved to `dlig`. 60 | - New variant "Ligconsolata" introduced, which exposes operator ligatures as `liga`. 61 | 62 | ## Changelog v.2.011 63 | 64 | March 2018 glyph set expansion was completed by [**@appsforartists**](https://github.com/appsforartists/), which included: 65 | 66 | - [x] Glyph Set expanded to include ligatures for ===, !==, =>, <=, >=, ->, <- 67 | 68 | ## Changelog v.2.001 69 | 70 | August 2016 glyph set expansion was completed by Alexei Vanyashin ( [Cyreal][5] ), which included: 71 | 72 | - [x] Glyph Set expanded to GF Latin Pro 73 | - [x] Additional glyphs ⊕↑↗→↘↓↙←↖↔↕⇧⇨⇩⇦⬆⮕⬇⬅●○◆◇☹☺☻♠♣♥♦✓✔✕✗✘␣⎋⌂⇪⌧⌫⌦⌥⌘⏎� 74 | - [x] Minor design improvements (trademark corner spurs) 75 | 76 | Further reading: Inconsolata expansion project thread on [Google Fonts Discussions][6] 77 | 78 | #### Supported glyphs sets: 79 | 80 | * GF Latin Pro 81 | 82 | ![Inconsolata Preview](documentation/img/inco-preview.png) 83 | 84 | ## License 85 | 86 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 87 | This license is copied below, and is also available with a FAQ at: 88 | [http://scripts.sil.org/OFL][4] 89 | 90 | ---- 91 | 92 | ## Inconsolata Build Instructions 93 | 94 | Inconsolata fonts can be built using either export from Glyphs or using [fontmake]. The font files committed to this repo are done using fontmake. 95 | 96 | ### Source Files 97 | 98 | Inconsolata source files are available in `.glyphs` format located in the `/sources` directory. 99 | 100 | ### Adding ligatures 101 | 102 | 1. Follow the ["Creating the ligature"](https://glyphsapp.com/tutorials/ligatures) section of the Glyphs ligatures tutorial. 103 | 2. Name your new glyph with the suffix `.dlig`, for instance `bar_greater.dlig`. 104 | 3. Open the _Font Info_ panel. 105 | 1. Switch to the _Features_ tab. 106 | 2. Click _dlig_ in the sidebar. 107 | 3. Click the _Update_ button at the bottom of the panel. 108 | 4. Switch to the _Instances_ tab. 109 | 5. Update the _Rename Glyphs_ value for "Ligconsolata Regular" to include a new line for your new glyph, for instance: 110 | ``` 111 | bar_greater.dlig=bar_greater.liga 112 | ``` 113 | 6. Update the _Rename Glyphs_ value for "Ligconsolata Bold". 114 | 4. Export the font, as explained below. 115 | 116 | ### Exporting a variable font using fontmake 117 | 118 | It's possible to export the project as a single variable font. It's just a bit tricky, because the font uses components with varying 2x2 components, triggering a [bug](https://github.com/googlefonts/fontmake/issues/595) which is present in both [fontmake] and Glyphs export. Thus, there's an inco_fix.py script in the sources directory that detects this case and decomposes just those components. Run that script before exporting. The script also decomposes corner components, which makes the resulting `glyphs` file suitable for fontmake export as well (fontmake currently has no support for corner components). 119 | 120 | You can copy the script into the Scripts folder for Glyphs, which will make it available in the Script menu, or you can just copy it into the Macro Panel. 121 | 122 | After running the script, the following fontmake invocation will generate a variable font: 123 | 124 | ``` 125 | fontmake -g sources/Inconsolata-vf.glyphs -o variable 126 | ``` 127 | 128 | This is the version in the fonts/ directory, as it is slightly smaller than the version generated by Glyphs. 129 | 130 | We do not check the *result* of the inco_fix script into version control, as we want to preserve editability. It's entirely possible that a future version of fontmake (or Glyphs itself) will be able to handle the source file without running a script. 131 | 132 | ### Exporting instances using fontmake 133 | 134 | The source file contains 15 instances, including all weights of the normal (100) width, and also all masters. This is a reasonable complement for working on the font. Run the gen_instances.py script to generate a total of 72 instances; all combinations of the weights from 200 to 900, and widths 50, 70, 80, 90, 110, 120, 150, and 200. 135 | 136 | There are two other instances for Ligconsolata, and fontmake will attempt to generate those, but the "Rename Glyphs" custom parameter doesn't seem to be respected by fontmake, so these won't have ligatures enabled. Use the Glyphs export instead (detailed below). 137 | 138 | Then run this command to generate OTF: 139 | 140 | ``` 141 | fontmake -g sources/Inconsolata-vf.glyphs -i -o otf 142 | ``` 143 | 144 | And this command to generate autohinted TTF: 145 | 146 | ``` 147 | fontmake -g sources/Inconsolata-vf.glyphs -i -o ttf -a 148 | ``` 149 | 150 | These are the versions in the fonts/ directory. 151 | 152 | ### Font Export options (from Glyphs) 153 | 154 | This is the preferred way to generate the Ligconsolata instances, but 155 | 156 | * TTF and OTF files should be exported into `/fonts/ttf` and `/fonts/otf` folders. 157 | 158 | * `TTFs` should be generated from Glyphs App with `Autohint` option checked. At the moment there is no custom build script required to produce font files, since default TTFautohinting options suffice. 159 | 160 | ![Font Export Options](documentation/font-export.png) 161 | 162 | * `OTFs` should be generated with these options: 163 | * [X] Remove Overlap 164 | * [X] Autohint 165 | * [ ] Save as TTF 166 | * [X] Export destination: $REPO_PATH/fonts/otf 167 | 168 | ### Future work 169 | 170 | In addition, we want to export a subset not including Vietnamese script coverage, to avoid over-large line spacing on older applications (such as terminals and text editors) that don't understand the "use typo metrics" flag (see https://github.com/googlefonts/Inconsolata/issues/35). 171 | 172 | ## Glyphstool 173 | 174 | The repository also contains some Rust code to manipulate Glyphs format masters, in the `glyphstool` subdirectory. This was used to apply global transforms (mostly as a starting point for the width work). Perhaps the most valuable aspect is that it contains a fairly complete set of line and box drawing primitives, inspired by [Source Code Pro] but with actually variable weight and width. It's not particularly polished or well documented, but is provided for completeness, and it's possible that it could be adapted to future tools that work with font data in the Glyphs format. The code is licensed under Apache 2.0 or MIT, in keeping with the Rust tradition. 175 | 176 | ---- 177 | 178 | ## Copyright 179 | 180 | Copyright 2006 The Inconsolata Project Authors 181 | 182 | ## Links 183 | 184 | * [Inconsolata on Google Fonts][1] 185 | * [Inconsolata on Levien.com][2] 186 | * [Official Upstream on git][3] 187 | 188 | [1]: https://fonts.google.com/specimen/Inconsolata 189 | [2]: http://levien.com/type/myfonts/inconsolata.html 190 | [3]: https://github.com/google/fonts/tree/master/ofl/inconsolata 191 | [4]: http://scripts.sil.org/OFL 192 | [5]: http://cyreal.org 193 | [6]: https://groups.google.com/forum/#!searchin/googlefonts-discuss/inconsolata%7Csort:relevance/googlefonts-discuss/wgVuOx9yo5k/2QSUQ78CCQAJ 194 | [fontmake]: https://github.com/googlefonts/fontmake 195 | -------------------------------------------------------------------------------- /documentation/font-export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/font-export.png -------------------------------------------------------------------------------- /documentation/img/details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/img/details.png -------------------------------------------------------------------------------- /documentation/img/inco-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/img/inco-preview.png -------------------------------------------------------------------------------- /documentation/img/ligature-sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/img/ligature-sample.png -------------------------------------------------------------------------------- /documentation/img/permille.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/img/permille.png -------------------------------------------------------------------------------- /documentation/img/s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/img/s.png -------------------------------------------------------------------------------- /documentation/img/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/img/test.png -------------------------------------------------------------------------------- /documentation/img/v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/img/v1.png -------------------------------------------------------------------------------- /documentation/img/v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/img/v2.png -------------------------------------------------------------------------------- /documentation/img/xi-mac-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/img/xi-mac-screenshot.png -------------------------------------------------------------------------------- /documentation/inconsolata-diagonals.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/inconsolata-diagonals.ai -------------------------------------------------------------------------------- /documentation/inconsolata-features.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/documentation/inconsolata-features.pdf -------------------------------------------------------------------------------- /documentation/inconsolata-test.txt: -------------------------------------------------------------------------------- 1 | yyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwtttyyywwwttt 2 | -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-Black.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-Bold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-CondensedBlack.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-CondensedBlack.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-CondensedBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-CondensedBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-CondensedExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-CondensedExtraBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-CondensedExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-CondensedExtraLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-CondensedLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-CondensedLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-CondensedMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-CondensedMedium.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-CondensedRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-CondensedRegular.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-CondensedSemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-CondensedSemiBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-CondensedThin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-CondensedThin.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExpandedBlack.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExpandedBlack.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExpandedBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExpandedBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExpandedExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExpandedExtraBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExpandedExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExpandedExtraLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExpandedLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExpandedLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExpandedMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExpandedMedium.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExpandedRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExpandedRegular.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExpandedSemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExpandedSemiBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExpandedThin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExpandedThin.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraCondensedBlack.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraCondensedBlack.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraCondensedBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraCondensedBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraCondensedExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraCondensedExtraBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraCondensedExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraCondensedExtraLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraCondensedLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraCondensedLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraCondensedMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraCondensedMedium.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraCondensedRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraCondensedRegular.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraCondensedSemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraCondensedSemiBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraCondensedThin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraCondensedThin.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraExpandedBlack.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraExpandedBlack.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraExpandedBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraExpandedBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraExpandedExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraExpandedExtraBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraExpandedExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraExpandedExtraLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraExpandedLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraExpandedLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraExpandedMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraExpandedMedium.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraExpandedRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraExpandedRegular.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraExpandedSemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraExpandedSemiBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraExpandedThin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraExpandedThin.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-ExtraLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-Light.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-Medium.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-Regular.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiCondensedBlack.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiCondensedBlack.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiCondensedBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiCondensedBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiCondensedExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiCondensedExtraBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiCondensedExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiCondensedExtraLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiCondensedLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiCondensedLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiCondensedMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiCondensedMedium.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiCondensedRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiCondensedRegular.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiCondensedSemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiCondensedSemiBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiCondensedThin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiCondensedThin.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiExpandedBlack.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiExpandedBlack.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiExpandedBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiExpandedBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiExpandedExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiExpandedExtraBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiExpandedExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiExpandedExtraLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiExpandedLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiExpandedLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiExpandedMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiExpandedMedium.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiExpandedRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiExpandedRegular.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiExpandedSemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiExpandedSemiBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-SemiExpandedThin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-SemiExpandedThin.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-Thin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-Thin.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraCondensedBlack.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraCondensedBlack.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraCondensedBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraCondensedBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraCondensedExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraCondensedExtraBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraCondensedExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraCondensedExtraLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraCondensedLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraCondensedLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraCondensedMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraCondensedMedium.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraCondensedRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraCondensedRegular.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraCondensedSemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraCondensedSemiBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraCondensedThin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraCondensedThin.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraExpandedBlack.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraExpandedBlack.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraExpandedBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraExpandedBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraExpandedExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraExpandedExtraBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraExpandedExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraExpandedExtraLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraExpandedLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraExpandedLight.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraExpandedMedium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraExpandedMedium.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraExpandedRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraExpandedRegular.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraExpandedSemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraExpandedSemiBold.otf -------------------------------------------------------------------------------- /fonts/otf/Inconsolata-UltraExpandedThin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/otf/Inconsolata-UltraExpandedThin.otf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-Black.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-Bold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-CondensedBlack.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-CondensedBlack.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-CondensedBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-CondensedBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-CondensedExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-CondensedExtraBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-CondensedExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-CondensedExtraLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-CondensedLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-CondensedLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-CondensedMedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-CondensedMedium.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-CondensedRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-CondensedRegular.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-CondensedSemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-CondensedSemiBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-CondensedThin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-CondensedThin.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExpandedBlack.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExpandedBlack.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExpandedBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExpandedBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExpandedExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExpandedExtraBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExpandedExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExpandedExtraLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExpandedLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExpandedLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExpandedMedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExpandedMedium.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExpandedRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExpandedRegular.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExpandedSemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExpandedSemiBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExpandedThin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExpandedThin.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraCondensedBlack.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraCondensedBlack.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraCondensedBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraCondensedBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraCondensedExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraCondensedExtraBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraCondensedExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraCondensedExtraLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraCondensedLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraCondensedLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraCondensedMedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraCondensedMedium.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraCondensedRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraCondensedRegular.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraCondensedSemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraCondensedSemiBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraCondensedThin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraCondensedThin.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraExpandedBlack.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraExpandedBlack.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraExpandedBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraExpandedBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraExpandedExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraExpandedExtraBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraExpandedExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraExpandedExtraLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraExpandedLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraExpandedLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraExpandedMedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraExpandedMedium.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraExpandedRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraExpandedRegular.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraExpandedSemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraExpandedSemiBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraExpandedThin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraExpandedThin.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-ExtraLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-Light.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-Medium.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-Regular.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiCondensedBlack.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiCondensedBlack.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiCondensedBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiCondensedBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiCondensedExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiCondensedExtraBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiCondensedExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiCondensedExtraLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiCondensedLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiCondensedLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiCondensedMedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiCondensedMedium.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiCondensedRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiCondensedRegular.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiCondensedSemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiCondensedSemiBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiCondensedThin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiCondensedThin.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiExpandedBlack.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiExpandedBlack.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiExpandedBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiExpandedBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiExpandedExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiExpandedExtraBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiExpandedExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiExpandedExtraLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiExpandedLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiExpandedLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiExpandedMedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiExpandedMedium.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiExpandedRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiExpandedRegular.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiExpandedSemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiExpandedSemiBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-SemiExpandedThin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-SemiExpandedThin.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-Thin.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraCondensedBlack.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraCondensedBlack.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraCondensedBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraCondensedBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraCondensedExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraCondensedExtraBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraCondensedExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraCondensedExtraLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraCondensedLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraCondensedLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraCondensedMedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraCondensedMedium.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraCondensedRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraCondensedRegular.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraCondensedSemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraCondensedSemiBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraCondensedThin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraCondensedThin.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraExpandedBlack.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraExpandedBlack.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraExpandedBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraExpandedBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraExpandedExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraExpandedExtraBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraExpandedExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraExpandedExtraLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraExpandedLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraExpandedLight.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraExpandedMedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraExpandedMedium.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraExpandedRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraExpandedRegular.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraExpandedSemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraExpandedSemiBold.ttf -------------------------------------------------------------------------------- /fonts/ttf/Inconsolata-UltraExpandedThin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/ttf/Inconsolata-UltraExpandedThin.ttf -------------------------------------------------------------------------------- /fonts/variable/Inconsolata[wdth,wght].ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/variable/Inconsolata[wdth,wght].ttf -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-Black.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-Bold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-CondensedBlack.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-CondensedBlack.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-CondensedBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-CondensedBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-CondensedExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-CondensedExtraBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-CondensedExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-CondensedExtraLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-CondensedLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-CondensedLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-CondensedMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-CondensedMedium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-CondensedRegular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-CondensedRegular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-CondensedSemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-CondensedSemiBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-CondensedThin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-CondensedThin.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExpandedBlack.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExpandedBlack.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExpandedBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExpandedBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExpandedExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExpandedExtraBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExpandedExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExpandedExtraLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExpandedLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExpandedLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExpandedMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExpandedMedium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExpandedRegular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExpandedRegular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExpandedSemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExpandedSemiBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExpandedThin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExpandedThin.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraCondensedBlack.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraCondensedBlack.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraCondensedBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraCondensedBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraCondensedExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraCondensedExtraBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraCondensedExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraCondensedExtraLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraCondensedLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraCondensedLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraCondensedMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraCondensedMedium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraCondensedRegular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraCondensedRegular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraCondensedSemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraCondensedSemiBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraCondensedThin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraCondensedThin.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraExpandedBlack.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraExpandedBlack.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraExpandedBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraExpandedBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraExpandedExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraExpandedExtraBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraExpandedExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraExpandedExtraLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraExpandedLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraExpandedLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraExpandedMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraExpandedMedium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraExpandedRegular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraExpandedRegular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraExpandedSemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraExpandedSemiBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraExpandedThin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraExpandedThin.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-ExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-ExtraLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-Light.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-Medium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-Regular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiCondensedBlack.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiCondensedBlack.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiCondensedBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiCondensedBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiCondensedExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiCondensedExtraBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiCondensedExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiCondensedExtraLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiCondensedLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiCondensedLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiCondensedMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiCondensedMedium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiCondensedRegular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiCondensedRegular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiCondensedSemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiCondensedSemiBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiCondensedThin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiCondensedThin.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiExpandedBlack.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiExpandedBlack.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiExpandedBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiExpandedBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiExpandedExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiExpandedExtraBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiExpandedExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiExpandedExtraLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiExpandedLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiExpandedLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiExpandedMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiExpandedMedium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiExpandedRegular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiExpandedRegular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiExpandedSemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiExpandedSemiBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-SemiExpandedThin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-SemiExpandedThin.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-Thin.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraCondensedBlack.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraCondensedBlack.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraCondensedBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraCondensedBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraCondensedExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraCondensedExtraBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraCondensedExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraCondensedExtraLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraCondensedLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraCondensedLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraCondensedMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraCondensedMedium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraCondensedRegular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraCondensedRegular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraCondensedSemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraCondensedSemiBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraCondensedThin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraCondensedThin.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraExpandedBlack.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraExpandedBlack.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraExpandedBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraExpandedBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraExpandedExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraExpandedExtraBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraExpandedExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraExpandedExtraLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraExpandedLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraExpandedLight.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraExpandedMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraExpandedMedium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraExpandedRegular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraExpandedRegular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraExpandedSemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraExpandedSemiBold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/Inconsolata-UltraExpandedThin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/fonts/webfonts/Inconsolata-UltraExpandedThin.woff2 -------------------------------------------------------------------------------- /glyphstool/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | -------------------------------------------------------------------------------- /glyphstool/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "ansi_term" 5 | version = "0.11.0" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 8 | dependencies = [ 9 | "winapi", 10 | ] 11 | 12 | [[package]] 13 | name = "arrayvec" 14 | version = "0.4.11" 15 | source = "registry+https://github.com/rust-lang/crates.io-index" 16 | checksum = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba" 17 | dependencies = [ 18 | "nodrop", 19 | ] 20 | 21 | [[package]] 22 | name = "atty" 23 | version = "0.2.14" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 26 | dependencies = [ 27 | "hermit-abi", 28 | "libc", 29 | "winapi", 30 | ] 31 | 32 | [[package]] 33 | name = "bitflags" 34 | version = "1.2.1" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 37 | 38 | [[package]] 39 | name = "clap" 40 | version = "2.33.3" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" 43 | dependencies = [ 44 | "ansi_term", 45 | "atty", 46 | "bitflags", 47 | "strsim", 48 | "textwrap", 49 | "unicode-width", 50 | "vec_map", 51 | ] 52 | 53 | [[package]] 54 | name = "glyphstool" 55 | version = "0.1.0" 56 | dependencies = [ 57 | "kurbo", 58 | "plist_derive", 59 | "structopt", 60 | ] 61 | 62 | [[package]] 63 | name = "heck" 64 | version = "0.3.1" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" 67 | dependencies = [ 68 | "unicode-segmentation", 69 | ] 70 | 71 | [[package]] 72 | name = "hermit-abi" 73 | version = "0.1.17" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" 76 | dependencies = [ 77 | "libc", 78 | ] 79 | 80 | [[package]] 81 | name = "kurbo" 82 | version = "0.5.1" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | checksum = "2f0caeb26248a62abf92dea93aad4f8244f54668e2f1060ed9cd9fd1d5545723" 85 | dependencies = [ 86 | "arrayvec", 87 | ] 88 | 89 | [[package]] 90 | name = "lazy_static" 91 | version = "1.4.0" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 94 | 95 | [[package]] 96 | name = "libc" 97 | version = "0.2.81" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" 100 | 101 | [[package]] 102 | name = "nodrop" 103 | version = "0.1.13" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" 106 | 107 | [[package]] 108 | name = "plist_derive" 109 | version = "0.1.0" 110 | dependencies = [ 111 | "proc-macro2", 112 | "quote", 113 | "syn", 114 | ] 115 | 116 | [[package]] 117 | name = "proc-macro-error" 118 | version = "1.0.4" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 121 | dependencies = [ 122 | "proc-macro-error-attr", 123 | "proc-macro2", 124 | "quote", 125 | "syn", 126 | "version_check", 127 | ] 128 | 129 | [[package]] 130 | name = "proc-macro-error-attr" 131 | version = "1.0.4" 132 | source = "registry+https://github.com/rust-lang/crates.io-index" 133 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 134 | dependencies = [ 135 | "proc-macro2", 136 | "quote", 137 | "version_check", 138 | ] 139 | 140 | [[package]] 141 | name = "proc-macro2" 142 | version = "1.0.3" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "e98a83a9f9b331f54b924e68a66acb1bb35cb01fb0a23645139967abefb697e8" 145 | dependencies = [ 146 | "unicode-xid", 147 | ] 148 | 149 | [[package]] 150 | name = "quote" 151 | version = "1.0.2" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" 154 | dependencies = [ 155 | "proc-macro2", 156 | ] 157 | 158 | [[package]] 159 | name = "strsim" 160 | version = "0.8.0" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 163 | 164 | [[package]] 165 | name = "structopt" 166 | version = "0.3.21" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c" 169 | dependencies = [ 170 | "clap", 171 | "lazy_static", 172 | "structopt-derive", 173 | ] 174 | 175 | [[package]] 176 | name = "structopt-derive" 177 | version = "0.4.14" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90" 180 | dependencies = [ 181 | "heck", 182 | "proc-macro-error", 183 | "proc-macro2", 184 | "quote", 185 | "syn", 186 | ] 187 | 188 | [[package]] 189 | name = "syn" 190 | version = "1.0.5" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" 193 | dependencies = [ 194 | "proc-macro2", 195 | "quote", 196 | "unicode-xid", 197 | ] 198 | 199 | [[package]] 200 | name = "textwrap" 201 | version = "0.11.0" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 204 | dependencies = [ 205 | "unicode-width", 206 | ] 207 | 208 | [[package]] 209 | name = "unicode-segmentation" 210 | version = "1.7.1" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" 213 | 214 | [[package]] 215 | name = "unicode-width" 216 | version = "0.1.8" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" 219 | 220 | [[package]] 221 | name = "unicode-xid" 222 | version = "0.2.0" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 225 | 226 | [[package]] 227 | name = "vec_map" 228 | version = "0.8.2" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 231 | 232 | [[package]] 233 | name = "version_check" 234 | version = "0.9.2" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" 237 | 238 | [[package]] 239 | name = "winapi" 240 | version = "0.3.9" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 243 | dependencies = [ 244 | "winapi-i686-pc-windows-gnu", 245 | "winapi-x86_64-pc-windows-gnu", 246 | ] 247 | 248 | [[package]] 249 | name = "winapi-i686-pc-windows-gnu" 250 | version = "0.4.0" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 253 | 254 | [[package]] 255 | name = "winapi-x86_64-pc-windows-gnu" 256 | version = "0.4.0" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 259 | -------------------------------------------------------------------------------- /glyphstool/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "glyphstool" 3 | version = "0.1.0" 4 | license = "MIT/Apache-2.0" 5 | authors = ["Raph Levien "] 6 | readme = "README.md" 7 | edition = "2018" 8 | 9 | [[bin]] 10 | name = "glyphstool" 11 | 12 | [dependencies] 13 | kurbo = "0.5.1" 14 | plist_derive = { path = "plist_derive" } 15 | 16 | # This dep is used for the binary, not the lib, but oh well. 17 | structopt = "0.3.2" 18 | -------------------------------------------------------------------------------- /glyphstool/LICENSE-APACHE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /glyphstool/LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 Raph Levien 2 | 3 | Permission is hereby granted, free of charge, to any 4 | person obtaining a copy of this software and associated 5 | documentation files (the "Software"), to deal in the 6 | Software without restriction, including without 7 | limitation the rights to use, copy, modify, merge, 8 | publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software 10 | is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice 14 | shall be included in all copies or substantial portions 15 | of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 18 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 19 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 20 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 24 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 | DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /glyphstool/README.md: -------------------------------------------------------------------------------- 1 | # Glyphstool 2 | 3 | This subdirectory contains some Rust tools for manipulating font files in the Glyphs format. These are special-purpose for doing manipulations on the Inconsolata sources, but could perhaps be adapted into more general purpose tools. 4 | 5 | Perhaps the most valuable going forward is the "info-syms" script, which generates a set of line and box drawing glyphs. This is inspired by the [box-drawing] library that was developed for Source Code Pro, but has its own drawing logic, largely to support a wide range of widths and weights. 6 | 7 | The best source of documentation is "read the source," sadly. If people navigate through it and make notes, those will gladly be accepted as a PR. 8 | 9 | ## License 10 | 11 | Licensed under either of 12 | * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or 13 | http://www.apache.org/licenses/LICENSE-2.0) 14 | * MIT license ([LICENSE-MIT](LICENSE-MIT) or 15 | http://opensource.org/licenses/MIT) at your option. 16 | 17 | [box-drawing]: https://github.com/adobe-type-tools/box-drawing 18 | -------------------------------------------------------------------------------- /glyphstool/plist_derive/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "plist_derive" 3 | version = "0.1.0" 4 | authors = ["Raph Levien "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [lib] 10 | proc-macro = true 11 | 12 | [dependencies] 13 | syn = "1.0.5" 14 | quote = "1.0.2" 15 | proc-macro2 = "1.0" 16 | -------------------------------------------------------------------------------- /glyphstool/plist_derive/src/lib.rs: -------------------------------------------------------------------------------- 1 | extern crate proc_macro; 2 | 3 | use proc_macro2::TokenStream; 4 | use quote::{quote, quote_spanned}; 5 | use syn::spanned::Spanned; 6 | use syn::{parse_macro_input, Attribute, Data, DeriveInput, Fields}; 7 | 8 | #[proc_macro_derive(FromPlist, attributes(rest))] 9 | pub fn derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream { 10 | let input = parse_macro_input!(input as DeriveInput); 11 | let name = input.ident; 12 | 13 | let deser = add_deser(&input.data); 14 | 15 | let expanded = quote! { 16 | impl crate::from_plist::FromPlist for #name { 17 | fn from_plist(plist: crate::plist::Plist) -> Self { 18 | let mut hashmap = plist.into_hashmap(); 19 | #name { 20 | #deser 21 | } 22 | } 23 | } 24 | }; 25 | proc_macro::TokenStream::from(expanded) 26 | } 27 | 28 | #[proc_macro_derive(ToPlist, attributes(rest))] 29 | pub fn derive_to(input: proc_macro::TokenStream) -> proc_macro::TokenStream { 30 | let input = parse_macro_input!(input as DeriveInput); 31 | let name = input.ident; 32 | 33 | let ser_rest = add_ser_rest(&input.data); 34 | let ser = add_ser(&input.data); 35 | 36 | let expanded = quote! { 37 | impl crate::to_plist::ToPlist for #name { 38 | fn to_plist(self) -> crate::plist::Plist { 39 | #ser_rest 40 | #ser 41 | hashmap.into() 42 | } 43 | } 44 | }; 45 | proc_macro::TokenStream::from(expanded) 46 | } 47 | 48 | fn add_deser(data: &Data) -> TokenStream { 49 | match *data { 50 | Data::Struct(ref data) => match data.fields { 51 | Fields::Named(ref fields) => { 52 | let recurse = fields.named.iter().filter_map(|f| { 53 | if !is_rest(&f.attrs) { 54 | let name = &f.ident; 55 | let name_str = name.as_ref().unwrap().to_string(); 56 | let snake_name = snake_to_camel_case(&name_str); 57 | Some(quote_spanned! {f.span() => 58 | #name: crate::from_plist::FromPlistOpt::from_plist( 59 | hashmap.remove(#snake_name) 60 | ), 61 | }) 62 | } else { 63 | None 64 | } 65 | }); 66 | let recurse_rest = fields.named.iter().filter_map(|f| { 67 | if is_rest(&f.attrs) { 68 | let name = &f.ident; 69 | Some(quote_spanned! {f.span() => 70 | #name: hashmap, 71 | }) 72 | } else { 73 | None 74 | } 75 | }); 76 | quote! { 77 | #( #recurse )* 78 | #( #recurse_rest )* 79 | } 80 | } 81 | _ => unimplemented!(), 82 | }, 83 | _ => unimplemented!(), 84 | } 85 | } 86 | 87 | fn add_ser(data: &Data) -> TokenStream { 88 | match *data { 89 | Data::Struct(ref data) => match data.fields { 90 | Fields::Named(ref fields) => { 91 | let recurse = fields.named.iter().filter_map(|f| { 92 | if !is_rest(&f.attrs) { 93 | let name = &f.ident; 94 | let name_str = name.as_ref().unwrap().to_string(); 95 | let snake_name = snake_to_camel_case(&name_str); 96 | Some(quote_spanned! {f.span() => 97 | if let Some(plist) = crate::to_plist::ToPlistOpt::to_plist(self.#name) { 98 | hashmap.insert(#snake_name.to_string(), plist); 99 | } 100 | }) 101 | } else { 102 | None 103 | } 104 | }); 105 | quote! { 106 | #( #recurse )* 107 | } 108 | } 109 | _ => unimplemented!(), 110 | }, 111 | _ => unimplemented!(), 112 | } 113 | } 114 | 115 | fn add_ser_rest(data: &Data) -> TokenStream { 116 | match *data { 117 | Data::Struct(ref data) => match data.fields { 118 | Fields::Named(ref fields) => { 119 | for f in fields.named.iter() { 120 | if is_rest(&f.attrs) { 121 | let name = &f.ident; 122 | return quote_spanned! { f.span() => 123 | let mut hashmap = self.#name; 124 | } 125 | } 126 | } 127 | quote! { let mut hashmap = HashMap::new(); } 128 | } 129 | _ => unimplemented!(), 130 | }, 131 | _ => unimplemented!(), 132 | } 133 | } 134 | 135 | fn is_rest(attrs: &[Attribute]) -> bool { 136 | attrs.iter().any(|attr| { 137 | attr.path 138 | .get_ident() 139 | .map(|ident| ident == "rest") 140 | .unwrap_or(false) 141 | }) 142 | } 143 | 144 | fn snake_to_camel_case(id: &str) -> String { 145 | let mut result = String::new(); 146 | let mut hump = false; 147 | for c in id.chars() { 148 | if c == '_' { 149 | hump = true; 150 | } else { 151 | if hump { 152 | result.push(c.to_ascii_uppercase()); 153 | } else { 154 | result.push(c); 155 | } 156 | hump = false; 157 | } 158 | } 159 | result 160 | } 161 | 162 | /* 163 | fn to_snake_case(id: &str) -> String { 164 | let mut result = String::new(); 165 | for c in id.chars() { 166 | if c.is_ascii_uppercase() { 167 | result.push('_'); 168 | result.push(c.to_ascii_lowercase()); 169 | } else { 170 | result.push(c); 171 | } 172 | } 173 | result 174 | } 175 | */ 176 | -------------------------------------------------------------------------------- /glyphstool/src/font.rs: -------------------------------------------------------------------------------- 1 | //! The general strategy is just to use a plist for storage. Also, lots of 2 | //! unwrapping. 3 | //! 4 | //! There are lots of other ways this could go, including something serde-like 5 | //! where it gets serialized to more Rust-native structures, proc macros, etc. 6 | 7 | use std::collections::HashMap; 8 | 9 | use kurbo::{Affine, Point}; 10 | 11 | use crate::from_plist::FromPlist; 12 | use crate::plist::Plist; 13 | use crate::to_plist::ToPlist; 14 | 15 | #[derive(Debug, FromPlist, ToPlist)] 16 | pub struct Font { 17 | pub glyphs: Vec, 18 | pub font_master: Vec, 19 | #[rest] 20 | pub other_stuff: HashMap, 21 | } 22 | 23 | #[derive(Clone, Debug, FromPlist, ToPlist)] 24 | pub struct Glyph { 25 | pub layers: Vec, 26 | pub glyphname: String, 27 | #[rest] 28 | pub other_stuff: HashMap, 29 | } 30 | 31 | #[derive(Clone, Debug, FromPlist, ToPlist)] 32 | pub struct Layer { 33 | pub layer_id: String, 34 | pub width: f64, 35 | pub paths: Option>, 36 | pub components: Option>, 37 | pub anchors: Option>, 38 | pub guide_lines: Option>, 39 | #[rest] 40 | pub other_stuff: HashMap, 41 | } 42 | 43 | #[derive(Clone, Debug, FromPlist, ToPlist)] 44 | pub struct Path { 45 | pub closed: bool, 46 | pub nodes: Vec, 47 | } 48 | 49 | #[derive(Clone, Debug)] 50 | pub struct Node { 51 | pub pt: Point, 52 | pub node_type: NodeType, 53 | } 54 | 55 | #[derive(Debug, Clone, Copy, PartialEq)] 56 | pub enum NodeType { 57 | Line, 58 | LineSmooth, 59 | OffCurve, 60 | Curve, 61 | CurveSmooth, 62 | } 63 | 64 | #[derive(Clone, Debug, FromPlist, ToPlist)] 65 | pub struct Component { 66 | pub name: String, 67 | pub transform: Option, 68 | #[rest] 69 | pub other_stuff: HashMap, 70 | } 71 | 72 | #[derive(Clone, Debug, FromPlist, ToPlist)] 73 | pub struct Anchor { 74 | pub name: String, 75 | pub position: Point, 76 | } 77 | 78 | #[derive(Clone, Debug, FromPlist, ToPlist)] 79 | pub struct GuideLine { 80 | pub angle: Option, 81 | pub position: Point, 82 | } 83 | 84 | #[derive(Debug, FromPlist, ToPlist)] 85 | pub struct FontMaster { 86 | pub id: String, 87 | pub weight_value: i64, 88 | pub width_value: Option, 89 | #[rest] 90 | pub other_stuff: HashMap, 91 | } 92 | 93 | impl Font { 94 | pub fn load(path: &std::path::Path) -> Result { 95 | let contents = std::fs::read_to_string(path).map_err(|e| format!("{:?}", e))?; 96 | let plist = Plist::parse(&contents).map_err(|e| format!("{:?}", e))?; 97 | Ok(FromPlist::from_plist(plist)) 98 | } 99 | 100 | pub fn get_glyph(&self, glyphname: &str) -> Option<&Glyph> { 101 | self.glyphs.iter().find(|g| g.glyphname == glyphname) 102 | } 103 | 104 | pub fn get_glyph_mut(&mut self, glyphname: &str) -> Option<&mut Glyph> { 105 | self.glyphs.iter_mut().find(|g| g.glyphname == glyphname) 106 | } 107 | } 108 | 109 | impl Glyph { 110 | pub fn get_layer(&self, layer_id: &str) -> Option<&Layer> { 111 | self.layers.iter().find(|l| l.layer_id == layer_id) 112 | } 113 | } 114 | 115 | impl FromPlist for Node { 116 | fn from_plist(plist: Plist) -> Self { 117 | let mut spl = plist.as_str().unwrap().splitn(3, ' '); 118 | let x = spl.next().unwrap().parse().unwrap(); 119 | let y = spl.next().unwrap().parse().unwrap(); 120 | let pt = Point::new(x, y); 121 | let node_type = spl.next().unwrap().parse().unwrap(); 122 | Node { pt, node_type } 123 | } 124 | } 125 | 126 | impl std::str::FromStr for NodeType { 127 | type Err = String; 128 | fn from_str(s: &str) -> Result { 129 | match s { 130 | "LINE" => Ok(NodeType::Line), 131 | "LINE SMOOTH" => Ok(NodeType::LineSmooth), 132 | "OFFCURVE" => Ok(NodeType::OffCurve), 133 | "CURVE" => Ok(NodeType::Curve), 134 | "CURVE SMOOTH" => Ok(NodeType::CurveSmooth), 135 | _ => Err(format!("unknown node type {}", s)), 136 | } 137 | } 138 | } 139 | 140 | impl NodeType { 141 | fn glyphs_str(&self) -> &'static str { 142 | match self { 143 | NodeType::Line => "LINE", 144 | NodeType::LineSmooth => "LINE SMOOTH", 145 | NodeType::OffCurve => "OFFCURVE", 146 | NodeType::Curve => "CURVE", 147 | NodeType::CurveSmooth => "CURVE SMOOTH", 148 | } 149 | } 150 | } 151 | 152 | impl ToPlist for Node { 153 | fn to_plist(self) -> Plist { 154 | format!( 155 | "{} {} {}", 156 | self.pt.x, 157 | self.pt.y, 158 | self.node_type.glyphs_str() 159 | ) 160 | .into() 161 | } 162 | } 163 | 164 | impl FromPlist for Affine { 165 | fn from_plist(plist: Plist) -> Self { 166 | let raw = plist.as_str().unwrap(); 167 | let raw = &raw[1..raw.len() - 1]; 168 | let coords: Vec = raw.split(", ").map(|c| c.parse().unwrap()).collect(); 169 | Affine::new([ 170 | coords[0], coords[1], coords[2], coords[3], coords[4], coords[5], 171 | ]) 172 | } 173 | } 174 | 175 | impl ToPlist for Affine { 176 | fn to_plist(self) -> Plist { 177 | let c = self.as_coeffs(); 178 | format!( 179 | "{{{}, {}, {}, {}, {}, {}}}", 180 | c[0], c[1], c[2], c[3], c[4], c[5] 181 | ) 182 | .into() 183 | } 184 | } 185 | 186 | impl FromPlist for Point { 187 | fn from_plist(plist: Plist) -> Self { 188 | let raw = plist.as_str().unwrap(); 189 | let raw = &raw[1..raw.len() - 1]; 190 | let coords: Vec = raw.split(", ").map(|c| c.parse().unwrap()).collect(); 191 | Point::new(coords[0], coords[1]) 192 | } 193 | } 194 | 195 | impl ToPlist for Point { 196 | fn to_plist(self) -> Plist { 197 | format!("{{{}, {}}}", self.x, self.y).into() 198 | } 199 | } 200 | 201 | impl Path { 202 | pub fn new(closed: bool) -> Path { 203 | Path { 204 | nodes: Vec::new(), 205 | closed, 206 | } 207 | } 208 | 209 | pub fn add(&mut self, pt: impl Into, node_type: NodeType) { 210 | let pt = pt.into(); 211 | self.nodes.push(Node { pt, node_type }); 212 | } 213 | 214 | /// Rotate left by one, placing the first point at the end. This is because 215 | /// it's what glyphs seems to expect. 216 | pub fn rotate_left(&mut self, delta: usize) { 217 | self.nodes.rotate_left(delta); 218 | } 219 | 220 | pub fn reverse(&mut self) { 221 | self.nodes.reverse(); 222 | } 223 | } 224 | -------------------------------------------------------------------------------- /glyphstool/src/from_plist.rs: -------------------------------------------------------------------------------- 1 | pub use plist_derive::FromPlist; 2 | 3 | use crate::plist::Plist; 4 | 5 | pub trait FromPlist { 6 | // Consider using result type; just unwrap for now. 7 | fn from_plist(plist: Plist) -> Self; 8 | } 9 | 10 | pub trait FromPlistOpt { 11 | // Consider using result type; just unwrap for now. 12 | fn from_plist(plist: Option) -> Self; 13 | } 14 | 15 | impl FromPlist for String { 16 | fn from_plist(plist: Plist) -> Self { 17 | plist.into_string() 18 | } 19 | } 20 | 21 | impl FromPlist for bool { 22 | fn from_plist(plist: Plist) -> Self { 23 | // TODO: maybe error or warn on values other than 0, 1 24 | plist.as_i64().expect("expected integer") != 0 25 | } 26 | } 27 | 28 | impl FromPlist for i64 { 29 | fn from_plist(plist: Plist) -> Self { 30 | plist.as_i64().expect("expected integer") 31 | } 32 | } 33 | 34 | impl FromPlist for f64 { 35 | fn from_plist(plist: Plist) -> Self { 36 | plist.as_f64().expect("expected float") 37 | } 38 | } 39 | 40 | impl FromPlist for Vec { 41 | fn from_plist(plist: Plist) -> Self { 42 | let mut result = Vec::new(); 43 | for element in plist.into_vec() { 44 | result.push(FromPlist::from_plist(element)); 45 | } 46 | result 47 | } 48 | } 49 | 50 | impl FromPlistOpt for T { 51 | fn from_plist(plist: Option) -> Self { 52 | FromPlist::from_plist(plist.unwrap()) 53 | } 54 | } 55 | 56 | impl FromPlistOpt for Option { 57 | fn from_plist(plist: Option) -> Self { 58 | plist.map(FromPlist::from_plist) 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /glyphstool/src/lib.rs: -------------------------------------------------------------------------------- 1 | //! Lightweight library for reading and writing Glyphs font files. 2 | 3 | mod font; 4 | mod from_plist; 5 | pub mod ops; 6 | mod plist; 7 | mod region; 8 | mod stretch; 9 | mod to_plist; 10 | 11 | pub use font::{Component, Font, Glyph, Layer, Node, NodeType, Path}; 12 | pub use from_plist::FromPlist; 13 | pub use plist::Plist; 14 | pub use region::Region; 15 | pub use stretch::stretch; 16 | pub use to_plist::ToPlist; 17 | -------------------------------------------------------------------------------- /glyphstool/src/main.rs: -------------------------------------------------------------------------------- 1 | use std::fs; 2 | use std::path::{Path, PathBuf}; 3 | 4 | use structopt::StructOpt; 5 | 6 | mod inco_fix; 7 | 8 | #[derive(StructOpt, Debug)] 9 | enum Cmd { 10 | Merge(MergeCmd), 11 | IncoFix(IncoFixCmd), 12 | IncoScale(IncoScaleCmd), 13 | IncoSyms(IncoSymsCmd), 14 | } 15 | 16 | #[derive(StructOpt, Debug)] 17 | struct MergeCmd { 18 | /// The font file to merge in. 19 | #[structopt(parse(from_os_str))] 20 | font: PathBuf, 21 | 22 | /// The other font file, to use as a source. 23 | #[structopt(parse(from_os_str))] 24 | other: PathBuf, 25 | 26 | /// The layer to merge (UUID). 27 | layer: String, 28 | } 29 | 30 | #[derive(StructOpt, Debug)] 31 | struct IncoFixCmd { 32 | /// The font file to operate on. 33 | #[structopt(parse(from_os_str))] 34 | font: PathBuf, 35 | } 36 | 37 | #[derive(StructOpt, Debug)] 38 | struct IncoScaleCmd { 39 | /// The font file to operate on. 40 | #[structopt(parse(from_os_str))] 41 | font: PathBuf, 42 | 43 | /// Subcommand. 0: numerics. 1: ord. 44 | /// 45 | /// This should be an enum, but int is easier. 46 | subcmd: i32, 47 | } 48 | 49 | #[derive(StructOpt, Debug)] 50 | struct IncoSymsCmd { 51 | /// The font file to operate on. 52 | #[structopt(parse(from_os_str))] 53 | font: PathBuf, 54 | } 55 | 56 | use glyphstool::{ops, Font, FromPlist, Plist, ToPlist}; 57 | 58 | fn read_font(path: &Path) -> Font { 59 | let contents = fs::read_to_string(path).expect("error reading font file"); 60 | let plist = Plist::parse(&contents).expect("error parsing font file"); 61 | FromPlist::from_plist(plist) 62 | } 63 | 64 | fn write_font(path: &Path, font: Font) { 65 | let plist = font.to_plist(); 66 | fs::write(path, &plist.to_string()).unwrap(); 67 | } 68 | 69 | fn main() { 70 | let cmd = Cmd::from_args(); 71 | 72 | match cmd { 73 | Cmd::Merge(m) => { 74 | println!("merge {:?}", m); 75 | let mut font = read_font(&m.font); 76 | let other = read_font(&m.other); 77 | ops::merge(&mut font, &other, &m.layer); 78 | write_font(&m.font, font); 79 | } 80 | Cmd::IncoFix(m) => { 81 | let mut font = read_font(&m.font); 82 | inco_fix::inco_fix(&mut font); 83 | write_font(&m.font, font); 84 | } 85 | Cmd::IncoScale(m) => { 86 | let mut font = read_font(&m.font); 87 | inco_fix::inco_scale(&mut font, m.subcmd); 88 | write_font(&m.font, font); 89 | } 90 | Cmd::IncoSyms(m) => { 91 | let mut font = read_font(&m.font); 92 | inco_fix::inco_syms(&mut font); 93 | write_font(&m.font, font); 94 | } 95 | } 96 | /* 97 | let mut filename = None; 98 | for arg in env::args().skip(1) { 99 | if filename.is_none() { 100 | filename = Some(arg); 101 | } 102 | } 103 | if filename.is_none() { 104 | usage(); 105 | return; 106 | } 107 | let filename = filename.unwrap(); 108 | let contents = fs::read_to_string(filename).expect("error reading font"); 109 | let plist = Plist::parse(&contents).expect("parse error"); 110 | //println!("Plist: {:?}", plist); 111 | /* 112 | let font = Font::from_plist(plist); 113 | for glyph in font.glyphs() { 114 | println!("glyphname: {}", glyph.glyphname()); 115 | for layer in glyph.layers() { 116 | println!(" layer: {}, width = {}", layer.layer_id(), layer.width()); 117 | } 118 | } 119 | */ 120 | let mut font: Font = FromPlist::from_plist(plist); 121 | //println!("{:?}", font); 122 | stretch(&mut font, 0.5, "051EFAE4-8BBE-4FBB-A016-4335C3E52F59"); 123 | let plist = font.to_plist(); 124 | println!("{}", plist.to_string()); 125 | */ 126 | } 127 | -------------------------------------------------------------------------------- /glyphstool/src/ops.rs: -------------------------------------------------------------------------------- 1 | //! Operations for manipulating fonts. 2 | 3 | use std::collections::HashMap; 4 | 5 | use crate::font::Font; 6 | 7 | pub fn merge(font: &mut Font, other: &Font, layer_id: &str) { 8 | let mut map = HashMap::new(); 9 | for glyph in &other.glyphs { 10 | for layer in &glyph.layers { 11 | if layer.layer_id == layer_id { 12 | map.insert(glyph.glyphname.to_owned(), layer); 13 | } 14 | } 15 | } 16 | 17 | for glyph in &mut font.glyphs { 18 | for layer in &mut glyph.layers { 19 | if layer.layer_id == layer_id { 20 | *layer = (*map[&glyph.glyphname]).clone(); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /glyphstool/src/plist.rs: -------------------------------------------------------------------------------- 1 | use std::borrow::Cow; 2 | use std::collections::HashMap; 3 | 4 | /// An enum representing a property list. 5 | #[derive(Clone, Debug)] 6 | pub enum Plist { 7 | Dictionary(HashMap), 8 | Array(Vec), 9 | String(String), 10 | Integer(i64), 11 | Float(f64), 12 | } 13 | 14 | #[derive(Debug)] 15 | pub enum Error { 16 | UnexpectedChar(char), 17 | UnclosedString, 18 | UnknownEscape, 19 | NotAString, 20 | ExpectedEquals, 21 | ExpectedComma, 22 | ExpectedSemicolon, 23 | SomethingWentWrong, 24 | } 25 | 26 | enum Token<'a> { 27 | Eof, 28 | OpenBrace, 29 | OpenParen, 30 | String(Cow<'a, str>), 31 | Atom(&'a str), 32 | } 33 | 34 | fn is_numeric(b: u8) -> bool { 35 | (b >= b'0' && b <= b'9') || b == b'.' || b == b'-' 36 | } 37 | 38 | fn is_alnum(b: u8) -> bool { 39 | is_numeric(b) || (b >= b'A' && b <= b'Z') || (b >= b'a' && b <= b'z') || b == b'_' 40 | } 41 | 42 | // Used for serialization; make sure UUID's get quoted 43 | fn is_alnum_strict(b: u8) -> bool { 44 | is_alnum(b) && b != b'-' 45 | } 46 | 47 | fn is_ascii_digit(b: u8) -> bool { 48 | b >= b'0' && b <= b'9' 49 | } 50 | 51 | fn is_hex_upper(b: u8) -> bool { 52 | (b >= b'0' && b <= b'9') || (b >= b'A' && b <= b'F') 53 | } 54 | 55 | fn is_ascii_whitespace(b: u8) -> bool { 56 | b == b' ' || b == b'\t' || b == b'\r' || b == b'\n' 57 | } 58 | 59 | fn numeric_ok(s: &str) -> bool { 60 | let s = s.as_bytes(); 61 | if s.is_empty() { 62 | return false; 63 | } 64 | if s.iter().all(|&b| is_hex_upper(b)) && !s.iter().all(|&b| is_ascii_digit(b)) { 65 | return false; 66 | } 67 | if s.len() > 1 && s[0] == b'0' { 68 | return !s.iter().all(|&b| is_ascii_digit(b)); 69 | } 70 | true 71 | } 72 | 73 | fn skip_ws(s: &str, mut ix: usize) -> usize { 74 | while ix < s.len() && is_ascii_whitespace(s.as_bytes()[ix]) { 75 | ix += 1; 76 | } 77 | ix 78 | } 79 | 80 | fn escape_string(buf: &mut String, s: &str) { 81 | if !s.is_empty() && s.as_bytes().iter().all(|&b| is_alnum_strict(b)) { 82 | buf.push_str(s); 83 | } else { 84 | buf.push('"'); 85 | let mut start = 0; 86 | let mut ix = start; 87 | while ix < s.len() { 88 | let b = s.as_bytes()[ix]; 89 | match b { 90 | b'"' | b'\\' => { 91 | buf.push_str(&s[start..ix]); 92 | buf.push('\\'); 93 | start = ix; 94 | } 95 | _ => (), 96 | } 97 | ix += 1; 98 | } 99 | buf.push_str(&s[start..]); 100 | buf.push('"'); 101 | } 102 | } 103 | 104 | impl Plist { 105 | pub fn parse(s: &str) -> Result { 106 | let (plist, _ix) = Plist::parse_rec(s, 0)?; 107 | // TODO: check that we're actually at eof 108 | Ok(plist) 109 | } 110 | 111 | #[allow(unused)] 112 | pub fn as_dict(&self) -> Option<&HashMap> { 113 | match self { 114 | Plist::Dictionary(d) => Some(d), 115 | _ => None, 116 | } 117 | } 118 | 119 | #[allow(unused)] 120 | pub fn get(&self, key: &str) -> Option<&Plist> { 121 | match self { 122 | Plist::Dictionary(d) => d.get(key), 123 | _ => None, 124 | } 125 | } 126 | 127 | #[allow(unused)] 128 | pub fn as_array(&self) -> Option<&[Plist]> { 129 | match self { 130 | Plist::Array(a) => Some(a), 131 | _ => None, 132 | } 133 | } 134 | 135 | #[allow(unused)] 136 | pub fn as_str(&self) -> Option<&str> { 137 | match self { 138 | Plist::String(s) => Some(s), 139 | _ => None, 140 | } 141 | } 142 | 143 | pub fn as_i64(&self) -> Option { 144 | match self { 145 | Plist::Integer(i) => Some(*i), 146 | _ => None, 147 | } 148 | } 149 | 150 | pub fn as_f64(&self) -> Option { 151 | match self { 152 | Plist::Integer(i) => Some(*i as f64), 153 | Plist::Float(f) => Some(*f), 154 | _ => None, 155 | } 156 | } 157 | 158 | pub fn into_string(self) -> String { 159 | match self { 160 | Plist::String(s) => s, 161 | _ => panic!("expected string"), 162 | } 163 | } 164 | 165 | pub fn into_vec(self) -> Vec { 166 | match self { 167 | Plist::Array(a) => a, 168 | _ => panic!("expected array"), 169 | } 170 | } 171 | 172 | pub fn into_hashmap(self) -> HashMap { 173 | match self { 174 | Plist::Dictionary(d) => d, 175 | _ => panic!("expected dictionary"), 176 | } 177 | } 178 | 179 | fn parse_rec(s: &str, ix: usize) -> Result<(Plist, usize), Error> { 180 | let (tok, mut ix) = Token::lex(s, ix)?; 181 | match tok { 182 | Token::Atom(s) => Ok((Plist::parse_atom(s), ix)), 183 | Token::String(s) => Ok((Plist::String(s.into()), ix)), 184 | Token::OpenBrace => { 185 | let mut dict = HashMap::new(); 186 | loop { 187 | if let Some(ix) = Token::expect(s, ix, b'}') { 188 | return Ok((Plist::Dictionary(dict), ix)); 189 | } 190 | let (key, next) = Token::lex(s, ix)?; 191 | let key_str = Token::try_into_string(key)?; 192 | let next = Token::expect(s, next, b'='); 193 | if next.is_none() { 194 | return Err(Error::ExpectedEquals); 195 | } 196 | let (val, next) = Self::parse_rec(s, next.unwrap())?; 197 | dict.insert(key_str, val); 198 | if let Some(next) = Token::expect(s, next, b';') { 199 | ix = next; 200 | } else { 201 | return Err(Error::ExpectedSemicolon); 202 | } 203 | } 204 | } 205 | Token::OpenParen => { 206 | let mut list = Vec::new(); 207 | if let Some(ix) = Token::expect(s, ix, b')') { 208 | return Ok((Plist::Array(list), ix)); 209 | } 210 | loop { 211 | let (val, next) = Self::parse_rec(s, ix)?; 212 | list.push(val); 213 | if let Some(ix) = Token::expect(s, next, b')') { 214 | return Ok((Plist::Array(list), ix)); 215 | } 216 | if let Some(next) = Token::expect(s, next, b',') { 217 | ix = next; 218 | } else { 219 | return Err(Error::ExpectedComma); 220 | } 221 | } 222 | } 223 | _ => Err(Error::SomethingWentWrong), 224 | } 225 | } 226 | 227 | fn parse_atom(s: &str) -> Plist { 228 | if numeric_ok(s) { 229 | if let Ok(num) = s.parse() { 230 | return Plist::Integer(num); 231 | } 232 | if let Ok(num) = s.parse() { 233 | return Plist::Float(num); 234 | } 235 | } 236 | Plist::String(s.into()) 237 | } 238 | 239 | pub fn to_string(&self) -> String { 240 | let mut s = String::new(); 241 | self.push_to_string(&mut s); 242 | s 243 | } 244 | 245 | fn push_to_string(&self, s: &mut String) { 246 | match self { 247 | Plist::Array(a) => { 248 | s.push_str("("); 249 | let mut delim = "\n"; 250 | for el in a { 251 | s.push_str(delim); 252 | el.push_to_string(s); 253 | delim = ",\n"; 254 | } 255 | s.push_str("\n)"); 256 | } 257 | Plist::Dictionary(a) => { 258 | s.push_str("{\n"); 259 | let mut keys: Vec<_> = a.keys().collect(); 260 | keys.sort(); 261 | for k in keys { 262 | let el = &a[k]; 263 | // TODO: quote if needed? 264 | escape_string(s, k); 265 | s.push_str(" = "); 266 | el.push_to_string(s); 267 | s.push_str(";\n"); 268 | } 269 | s.push_str("}"); 270 | } 271 | Plist::String(st) => escape_string(s, st), 272 | Plist::Integer(i) => { 273 | s.push_str(&format!("{}", i)); 274 | } 275 | Plist::Float(f) => { 276 | s.push_str(&format!("{}", f)); 277 | } 278 | } 279 | } 280 | } 281 | 282 | impl<'a> Token<'a> { 283 | fn lex(s: &'a str, ix: usize) -> Result<(Token<'a>, usize), Error> { 284 | let start = skip_ws(s, ix); 285 | if start == s.len() { 286 | return Ok((Token::Eof, start)); 287 | } 288 | let b = s.as_bytes()[start]; 289 | match b { 290 | b'{' => Ok((Token::OpenBrace, start + 1)), 291 | b'(' => Ok((Token::OpenParen, start + 1)), 292 | b'"' => { 293 | let mut ix = start + 1; 294 | let mut cow_start = ix; 295 | let mut buf = String::new(); 296 | while ix < s.len() { 297 | let b = s.as_bytes()[ix]; 298 | match b { 299 | b'"' => { 300 | // End of string 301 | let string = if buf.is_empty() { 302 | s[cow_start..ix].into() 303 | } else { 304 | buf.push_str(&s[cow_start..ix]); 305 | buf.into() 306 | }; 307 | return Ok((Token::String(string), ix + 1)); 308 | } 309 | b'\\' => { 310 | buf.push_str(&s[cow_start..ix]); 311 | ix += 1; 312 | if ix == s.len() { 313 | return Err(Error::UnclosedString); 314 | } 315 | let b = s.as_bytes()[ix]; 316 | match b { 317 | b'"' | b'\\' => cow_start = ix, 318 | b'n' => { 319 | buf.push('\n'); 320 | cow_start = ix + 1; 321 | } 322 | b'r' => { 323 | buf.push('\r'); 324 | cow_start = ix + 1; 325 | } 326 | _ => { 327 | if b >= b'0' && b <= b'3' && ix + 2 < s.len() { 328 | // octal escape 329 | let b1 = s.as_bytes()[ix + 1]; 330 | let b2 = s.as_bytes()[ix + 2]; 331 | if b1 >= b'0' && b1 <= b'7' && b2 >= b'0' && b2 <= b'7' { 332 | let oct = 333 | (b - b'0') * 64 + (b1 - b'0') * 8 + (b2 - b'0'); 334 | buf.push(oct as char); 335 | ix += 2; 336 | cow_start = ix + 1; 337 | } else { 338 | return Err(Error::UnknownEscape); 339 | } 340 | } else { 341 | return Err(Error::UnknownEscape); 342 | } 343 | } 344 | } 345 | ix += 1; 346 | } 347 | _ => ix += 1, 348 | } 349 | } 350 | Err(Error::UnclosedString) 351 | } 352 | _ => { 353 | if is_alnum(b) { 354 | let mut ix = start + 1; 355 | while ix < s.len() { 356 | if !is_alnum(s.as_bytes()[ix]) { 357 | break; 358 | } 359 | ix += 1; 360 | } 361 | Ok((Token::Atom(&s[start..ix]), ix)) 362 | } else { 363 | Err(Error::UnexpectedChar(s[start..].chars().next().unwrap())) 364 | } 365 | } 366 | } 367 | } 368 | 369 | fn try_into_string(self) -> Result { 370 | match self { 371 | Token::Atom(s) => Ok(s.into()), 372 | Token::String(s) => Ok(s.into()), 373 | _ => Err(Error::NotAString), 374 | } 375 | } 376 | 377 | fn expect(s: &str, ix: usize, delim: u8) -> Option { 378 | let ix = skip_ws(s, ix); 379 | if ix < s.len() { 380 | let b = s.as_bytes()[ix]; 381 | if b == delim { 382 | return Some(ix + 1); 383 | } 384 | } 385 | None 386 | } 387 | } 388 | 389 | impl From for Plist { 390 | fn from(x: String) -> Plist { 391 | Plist::String(x) 392 | } 393 | } 394 | 395 | impl From for Plist { 396 | fn from(x: i64) -> Plist { 397 | Plist::Integer(x) 398 | } 399 | } 400 | 401 | impl From for Plist { 402 | fn from(x: f64) -> Plist { 403 | Plist::Float(x) 404 | } 405 | } 406 | 407 | impl From> for Plist { 408 | fn from(x: Vec) -> Plist { 409 | Plist::Array(x) 410 | } 411 | } 412 | 413 | impl From> for Plist { 414 | fn from(x: HashMap) -> Plist { 415 | Plist::Dictionary(x) 416 | } 417 | } 418 | -------------------------------------------------------------------------------- /glyphstool/src/region.rs: -------------------------------------------------------------------------------- 1 | //! A data structure representing the union of rectangles. 2 | 3 | use std::collections::BTreeSet; 4 | 5 | use kurbo::{Point, Rect}; 6 | 7 | use crate::font::{NodeType, Path}; 8 | 9 | #[derive(Default, Debug)] 10 | pub struct Region { 11 | slices: Vec, 12 | } 13 | 14 | #[derive(Clone, PartialEq, Debug)] 15 | struct Slice { 16 | y0: f64, 17 | y1: f64, 18 | intervals: Vec, 19 | } 20 | 21 | #[derive(Clone, Copy, PartialEq, Debug)] 22 | struct Interval { 23 | x0: f64, 24 | x1: f64, 25 | } 26 | 27 | impl From<(f64, f64)> for Interval { 28 | fn from(xs: (f64, f64)) -> Interval { 29 | Interval { x0: xs.0, x1: xs.1 } 30 | } 31 | } 32 | 33 | impl Slice { 34 | fn from_rect(rect: Rect) -> Slice { 35 | Slice { 36 | y0: rect.y0, 37 | y1: rect.y1, 38 | intervals: vec![(rect.x0, rect.x1).into()], 39 | } 40 | } 41 | 42 | // Trims the slice to the height of the rect, unions the rect into the intervals. 43 | fn add_rect(&self, rect: impl Into) -> Slice { 44 | let rect = rect.into(); 45 | let mut iv = Interval::from((rect.x0, rect.x1)); 46 | let mut intervals = Vec::new(); 47 | let mut i = 0; 48 | while i < self.intervals.len() && self.intervals[i].x1 < iv.x0 { 49 | intervals.push(self.intervals[i]); 50 | i += 1; 51 | } 52 | while i < self.intervals.len() && self.intervals[i].x0 <= iv.x1 { 53 | iv.x0 = iv.x0.min(self.intervals[i].x0); 54 | iv.x1 = iv.x1.max(self.intervals[i].x1); 55 | i += 1; 56 | } 57 | intervals.push(iv); 58 | intervals.extend_from_slice(&self.intervals[i..]); 59 | 60 | Slice { 61 | y0: rect.y0, 62 | y1: rect.y1, 63 | intervals, 64 | } 65 | } 66 | 67 | fn slice(&self, y0: f64, y1: f64) -> Slice { 68 | Slice { 69 | y0, 70 | y1, 71 | intervals: self.intervals.clone(), 72 | } 73 | } 74 | } 75 | 76 | impl Region { 77 | fn push(&mut self, slice: Slice) { 78 | if let Some(last) = self.slices.last_mut() { 79 | if last.y1 == slice.y0 && last.intervals == slice.intervals { 80 | last.y1 = slice.y1; 81 | return; 82 | } 83 | } 84 | self.slices.push(slice); 85 | } 86 | 87 | pub fn add(&self, rect: impl Into) -> Region { 88 | let rect = rect.into(); 89 | let mut result = Region::default(); 90 | let mut i = 0; 91 | while i < self.slices.len() && self.slices[i].y1 <= rect.y0 { 92 | result.push(self.slices[i].clone()); 93 | i += 1; 94 | } 95 | if i < self.slices.len() && self.slices[i].y0 < rect.y0 { 96 | result.push(self.slices[i].slice(self.slices[i].y0, rect.y0)); 97 | } 98 | let mut y = rect.y0; 99 | while i < self.slices.len() && self.slices[i].y0 < rect.y1 { 100 | if self.slices[i].y0 > y { 101 | let trim_rect = Rect::new(rect.x0, y, rect.x1, self.slices[i].y0); 102 | result.push(Slice::from_rect(trim_rect)); 103 | y = self.slices[i].y0; 104 | } 105 | let y1 = self.slices[i].y1.min(rect.y1); 106 | let trim_rect = Rect::new(rect.x0, y, rect.x1, y1); 107 | result.push(self.slices[i].add_rect(trim_rect)); 108 | y = y1; 109 | if y < self.slices[i].y1 { 110 | result.push(self.slices[i].slice(y, self.slices[i].y1)); 111 | } 112 | i += 1; 113 | } 114 | if y < rect.y1 { 115 | let trim_rect = Rect::new(rect.x0, y, rect.x1, rect.y1); 116 | result.push(Slice::from_rect(trim_rect)); 117 | } 118 | while i < self.slices.len() { 119 | result.push(self.slices[i].clone()); 120 | i += 1; 121 | } 122 | result 123 | } 124 | 125 | /* 126 | // This is the dumb version, for reference 127 | pub fn to_paths(&self) -> Vec { 128 | // TODO: generate more optimized path 129 | let mut result = Vec::new(); 130 | for slice in &self.slices { 131 | for iv in &slice.intervals { 132 | let mut path = Path::new(true); 133 | path.add((iv.x0, slice.y0), NodeType::Line); 134 | path.add((iv.x1, slice.y0), NodeType::Line); 135 | path.add((iv.x1, slice.y1), NodeType::Line); 136 | path.add((iv.x0, slice.y1), NodeType::Line); 137 | result.push(path); 138 | } 139 | } 140 | result 141 | } 142 | */ 143 | 144 | pub fn to_paths(&self) -> Vec { 145 | let mut tracer = PathTracer::default(); 146 | for i in 0..self.slices.len() { 147 | let slice = &self.slices[i]; 148 | let (y0, y1) = (slice.y0, slice.y1); 149 | if i == 0 || self.slices[i - 1].y1 != y0 { 150 | tracer.process_line(&[], &slice.intervals, y0); 151 | } else { 152 | tracer.process_line(&self.slices[i - 1].intervals, &slice.intervals, y0); 153 | } 154 | if i == self.slices.len() - 1 || self.slices[i + 1].y0 != y1 { 155 | tracer.process_line(&slice.intervals, &[], y1); 156 | } 157 | } 158 | tracer.to_paths() 159 | } 160 | } 161 | 162 | type VertexIx = usize; 163 | type EdgeIx = usize; 164 | 165 | #[derive(Default)] 166 | struct PathTracer { 167 | vertices: Vec, 168 | edges: Vec<(VertexIx, VertexIx)>, 169 | prev_verts: Vec, 170 | next_verts: Vec, 171 | 172 | pending_edges: BTreeSet, 173 | } 174 | 175 | struct Vertex { 176 | pt: Point, 177 | pred: EdgeIx, 178 | succ: EdgeIx, 179 | } 180 | 181 | const NIL: usize = !0; 182 | 183 | impl PathTracer { 184 | /// Create a new vertex (no edges) and return its index. 185 | fn new_vertex(&mut self, x: f64, y: f64) -> VertexIx { 186 | let v = self.vertices.len(); 187 | self.vertices.push(Vertex { 188 | pt: Point::new(x, y), 189 | pred: NIL, 190 | succ: NIL, 191 | }); 192 | v 193 | } 194 | 195 | /// Draw an edge from `v0` to `v1`. 196 | fn edge(&mut self, v0: VertexIx, v1: VertexIx) { 197 | let e = self.edges.len(); 198 | self.edges.push((v0, v1)); 199 | self.vertices[v0].succ = e; 200 | self.vertices[v1].pred = e; 201 | } 202 | 203 | fn process_line(&mut self, prev: &[Interval], next: &[Interval], y: f64) { 204 | fn get(ivs: &[Interval], i: usize) -> f64 { 205 | let iv = ivs[i / 2]; 206 | if (i & 1) == 0 { 207 | iv.x0 208 | } else { 209 | iv.x1 210 | } 211 | } 212 | std::mem::swap(&mut self.prev_verts, &mut self.next_verts); 213 | self.next_verts.clear(); 214 | // These are indices to 2x interval + 1 if right edge 215 | let imax = prev.len() * 2; 216 | let jmax = next.len() * 2; 217 | let mut i = 0; 218 | let mut j = 0; 219 | let mut last_v: Option = None; 220 | while i < imax || j < jmax { 221 | if j >= jmax || (i < imax && get(prev, i) <= get(next, j)) { 222 | // Process a point from prev. 223 | let x = get(prev, i); 224 | if let Some(last_v) = last_v.take() { 225 | let last_x = self.vertices[last_v].pt.x; 226 | if x > last_x { 227 | let v = self.new_vertex(x, y); 228 | if (i & 1) == 0 { 229 | self.edge(last_v, v); 230 | self.edge(v, self.prev_verts[i]); 231 | } else { 232 | self.edge(self.prev_verts[i], v); 233 | self.edge(v, last_v); 234 | } 235 | } else { 236 | if (i & 1) == 0 { 237 | self.edge(last_v, self.prev_verts[i]); 238 | } else { 239 | self.edge(self.prev_verts[i], last_v); 240 | } 241 | } 242 | } else { 243 | let v = self.new_vertex(x, y); 244 | if (i & 1) == 0 { 245 | self.edge(v, self.prev_verts[i]); 246 | } else { 247 | self.edge(self.prev_verts[i], v); 248 | } 249 | last_v = Some(v); 250 | } 251 | i += 1; 252 | } else { 253 | // Process a point from next. 254 | let x = get(next, j); 255 | if let Some(last_v) = last_v.take() { 256 | let last_x = self.vertices[last_v].pt.x; 257 | if x > last_x { 258 | let v = self.new_vertex(x, y); 259 | self.next_verts.push(v); 260 | if (i & 1) == 0 { 261 | self.edge(last_v, v); 262 | } else { 263 | self.edge(v, last_v); 264 | } 265 | } else { 266 | self.next_verts.push(last_v); 267 | } 268 | } else { 269 | let v = self.new_vertex(x, y); 270 | self.next_verts.push(v); 271 | last_v = Some(v); 272 | } 273 | j += 1; 274 | } 275 | } 276 | } 277 | 278 | fn trace_path(&mut self) -> Option { 279 | if let Some(e) = self.pending_edges.iter().next() { 280 | let mut e = *e; 281 | let mut path = Path::new(true); 282 | let mut last_pt: Option = None; 283 | while self.pending_edges.remove(&e) { 284 | let edge = self.edges[e]; 285 | let pt = self.vertices[edge.0].pt; 286 | if let Some(last_pt) = last_pt { 287 | if last_pt.x != pt.x { 288 | path.add(last_pt, NodeType::Line); 289 | path.add(pt, NodeType::Line); 290 | } 291 | } 292 | last_pt = Some(pt); 293 | e = self.vertices[edge.1].succ; 294 | } 295 | // Note: should probably rotate by two for clockwise, to make 296 | // it match what glyphs does for "correct path direction". 297 | path.rotate_left(1); 298 | Some(path) 299 | } else { 300 | None 301 | } 302 | } 303 | 304 | fn to_paths(&mut self) -> Vec { 305 | self.pending_edges = (0..self.edges.len()).collect(); 306 | let mut result = Vec::new(); 307 | while let Some(path) = self.trace_path() { 308 | result.push(path); 309 | } 310 | result 311 | } 312 | } 313 | -------------------------------------------------------------------------------- /glyphstool/src/stretch.rs: -------------------------------------------------------------------------------- 1 | //! A little logic to apply horizontal stretching to a font. 2 | 3 | use kurbo::Affine; 4 | 5 | use crate::font::{Font, Glyph, Layer}; 6 | 7 | fn affine_stretch(stretch: f64) -> Affine { 8 | Affine::new([stretch, 0., 0., 1., 0., 0.]) 9 | } 10 | 11 | fn stretch_layer(layer: &mut Layer, stretch: f64) { 12 | let a = affine_stretch(stretch); 13 | let a_inv = affine_stretch(stretch.recip()); 14 | layer.width = (layer.width * stretch).round(); 15 | if let Some(ref mut paths) = layer.paths { 16 | for path in paths { 17 | for node in &mut path.nodes { 18 | node.pt = (a * node.pt).round(); 19 | } 20 | } 21 | } 22 | if let Some(ref mut anchors) = layer.anchors { 23 | for anchor in anchors { 24 | anchor.position = (a * anchor.position).round(); 25 | } 26 | } 27 | if let Some(ref mut guide_lines) = layer.guide_lines { 28 | for guide_line in guide_lines { 29 | guide_line.position = (a * guide_line.position).round(); 30 | } 31 | } 32 | if let Some(ref mut components) = layer.components { 33 | for component in components { 34 | if let Some(ref mut transform) = component.transform { 35 | // TODO: round the translation component 36 | *transform = a * *transform * a_inv; 37 | } 38 | } 39 | } 40 | } 41 | 42 | fn stretch_glyph(glyph: &mut Glyph, stretch: f64, layer_id: &str) { 43 | for layer in &mut glyph.layers { 44 | if layer.layer_id == layer_id { 45 | stretch_layer(layer, stretch); 46 | } 47 | } 48 | } 49 | 50 | pub fn stretch(font: &mut Font, stretch: f64, layer_id: &str) { 51 | for glyph in &mut font.glyphs { 52 | stretch_glyph(glyph, stretch, layer_id); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /glyphstool/src/to_plist.rs: -------------------------------------------------------------------------------- 1 | pub use plist_derive::ToPlist; 2 | 3 | use crate::plist::Plist; 4 | 5 | pub trait ToPlist { 6 | fn to_plist(self) -> Plist; 7 | } 8 | 9 | pub trait ToPlistOpt { 10 | fn to_plist(self) -> Option; 11 | } 12 | 13 | impl ToPlist for String { 14 | fn to_plist(self) -> Plist { 15 | self.into() 16 | } 17 | } 18 | 19 | impl ToPlist for bool { 20 | fn to_plist(self) -> Plist { 21 | (self as i64).into() 22 | } 23 | } 24 | 25 | impl ToPlist for i64 { 26 | fn to_plist(self) -> Plist { 27 | self.into() 28 | } 29 | } 30 | 31 | impl ToPlist for f64 { 32 | fn to_plist(self) -> Plist { 33 | self.into() 34 | } 35 | } 36 | 37 | impl ToPlist for Vec { 38 | fn to_plist(self) -> Plist { 39 | let mut result = Vec::new(); 40 | for element in self { 41 | result.push(ToPlist::to_plist(element)); 42 | } 43 | result.into() 44 | } 45 | } 46 | 47 | impl ToPlistOpt for T { 48 | fn to_plist(self) -> Option { 49 | Some(ToPlist::to_plist(self)) 50 | } 51 | } 52 | 53 | impl ToPlistOpt for Option { 54 | fn to_plist(self) -> Option { 55 | self.map(ToPlist::to_plist) 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | absl-py==1.0.0 2 | appdirs==1.4.4 3 | attrs==21.4.0 4 | axisregistry==0.2.0 5 | babelfont==2.0.2 6 | beziers==0.4.0 7 | booleanOperations==0.9.0 8 | Brotli==1.0.9 9 | browserstack-local==1.2.2 10 | cattrs==1.10.0 11 | certifi==2021.10.8 12 | cffi==1.15.0 13 | cffsubr==0.2.9.post1 14 | charset-normalizer==2.0.12 15 | click==8.0.4 16 | colorlog==6.6.0 17 | compreffor==0.5.1.post1 18 | cu2qu==1.6.7.post1 19 | defcon==0.10.0 20 | Deprecated==1.2.13 21 | fontFeatures==1.6.4 22 | fontmake==3.2.0 23 | fontMath==0.9.1 24 | fontParts==0.10.4 25 | fontPens==0.2.4 26 | fonttools==4.31.2 27 | fs==2.4.15 28 | gflanguages==0.4.0 29 | gftools==0.9.4 30 | glyphsets==0.2.1 31 | glyphsLib==6.0.4 32 | glyphtools==0.8.0 33 | hyperglot==0.3.8 34 | idna==3.3 35 | Jinja2==3.1.0 36 | lxml==4.8.0 37 | MarkupSafe==2.1.1 38 | numpy==1.22.3 39 | openstep-plist==0.3.0 40 | opentype-sanitizer==8.2.1 41 | Pillow==9.0.1 42 | protobuf==3.19.4 43 | psutil==5.9.0 44 | pybrowserstack-screenshots==0.1 45 | pyclipper==1.3.0.post2 46 | pycparser==2.21 47 | pygit2==1.9.1 48 | PyGithub==1.55 49 | PyJWT==2.3.0 50 | PyNaCl==1.5.0 51 | pyparsing==3.0.7 52 | python-dateutil==2.8.2 53 | pytz==2022.1 54 | PyYAML==6.0 55 | requests==2.27.1 56 | simplejson==3.17.6 57 | six==1.16.0 58 | skia-pathops==0.7.2 59 | statmake==0.4.1 60 | strictyaml==1.6.1 61 | tabulate==0.8.9 62 | ttfautohint-py==0.5.1 63 | ufo2ft==2.26.0 64 | ufoLib2==0.13.1 65 | unicodedata2==14.0.0 66 | Unidecode==1.3.4 67 | urllib3==1.26.9 68 | vttLib==0.11.0 69 | wrapt==1.14.0 70 | -------------------------------------------------------------------------------- /sources/charset/inconsolata_glyphlist.nam: -------------------------------------------------------------------------------- 1 | caroncomb.alt 2 | eight.dnom 3 | eight.lf 4 | eight.numr 5 | eight.subs 6 | five.dnom 7 | five.lf 8 | five.numr 9 | five.subs 10 | four.dnom 11 | four.lf 12 | four.numr 13 | four.subs 14 | idotaccent 15 | nine.dnom 16 | nine.lf 17 | nine.numr 18 | nine.subs 19 | one.dnom 20 | one.lf 21 | one.numr 22 | one.subs 23 | periodcentered.loclCAT 24 | seven.dnom 25 | seven.lf 26 | seven.numr 27 | seven.subs 28 | six.dnom 29 | six.lf 30 | six.numr 31 | six.subs 32 | three.dnom 33 | three.lf 34 | three.numr 35 | three.subs 36 | two.dnom 37 | two.lf 38 | two.numr 39 | two.subs 40 | zero.dnom 41 | zero.lf 42 | zero.numr 43 | zero.subs 44 | 0x0020 space 45 | 0x0021 ! exclam 46 | 0x0022 " quotedbl 47 | 0x0023 # numbersign 48 | 0x0024 $ dollar 49 | 0x0025 % percent 50 | 0x0026 & ampersand 51 | 0x0027 ' quotesingle 52 | 0x0028 ( parenleft 53 | 0x0029 ) parenright 54 | 0x002A * asterisk 55 | 0x002B + plus 56 | 0x002C , comma 57 | 0x002D - hyphen 58 | 0x002E . period 59 | 0x002F / slash 60 | 0x0030 0 zero 61 | 0x0031 1 one 62 | 0x0032 2 two 63 | 0x0033 3 three 64 | 0x0034 4 four 65 | 0x0035 5 five 66 | 0x0036 6 six 67 | 0x0037 7 seven 68 | 0x0038 8 eight 69 | 0x0039 9 nine 70 | 0x003A : colon 71 | 0x003B ; semicolon 72 | 0x003C < less 73 | 0x003D = equal 74 | 0x003E > greater 75 | 0x003F ? question 76 | 0x0040 @ at 77 | 0x0041 A A 78 | 0x0042 B B 79 | 0x0043 C C 80 | 0x0044 D D 81 | 0x0045 E E 82 | 0x0046 F F 83 | 0x0047 G G 84 | 0x0048 H H 85 | 0x0049 I I 86 | 0x004A J J 87 | 0x004B K K 88 | 0x004C L L 89 | 0x004D M M 90 | 0x004E N N 91 | 0x004F O O 92 | 0x0050 P P 93 | 0x0051 Q Q 94 | 0x0052 R R 95 | 0x0053 S S 96 | 0x0054 T T 97 | 0x0055 U U 98 | 0x0056 V V 99 | 0x0057 W W 100 | 0x0058 X X 101 | 0x0059 Y Y 102 | 0x005A Z Z 103 | 0x005B [ bracketleft 104 | 0x005C \ backslash 105 | 0x005D ] bracketright 106 | 0x005E ^ asciicircum 107 | 0x005F _ underscore 108 | 0x0060 ` grave 109 | 0x0061 a a 110 | 0x0062 b b 111 | 0x0063 c c 112 | 0x0064 d d 113 | 0x0065 e e 114 | 0x0066 f f 115 | 0x0067 g g 116 | 0x0068 h h 117 | 0x0069 i i 118 | 0x006A j j 119 | 0x006B k k 120 | 0x006C l l 121 | 0x006D m m 122 | 0x006E n n 123 | 0x006F o o 124 | 0x0070 p p 125 | 0x0071 q q 126 | 0x0072 r r 127 | 0x0073 s s 128 | 0x0074 t t 129 | 0x0075 u u 130 | 0x0076 v v 131 | 0x0077 w w 132 | 0x0078 x x 133 | 0x0079 y y 134 | 0x007A z z 135 | 0x007B { braceleft 136 | 0x007C | bar 137 | 0x007D } braceright 138 | 0x007E ~ asciitilde 139 | 0x00A0 nbspace 140 | 0x00A1 ¡ exclamdown 141 | 0x00A2 ¢ cent 142 | 0x00A3 £ sterling 143 | 0x00A4 ¤ currency 144 | 0x00A5 ¥ yen 145 | 0x00A6 ¦ brokenbar 146 | 0x00A7 § section 147 | 0x00A8 ¨ dieresis 148 | 0x00A9 © copyright 149 | 0x00AA ª ordfeminine 150 | 0x00AB « guillemetleft 151 | 0x00AC ¬ logicalnot 152 | 0x00AD ­ softhyphen 153 | 0x00AE ® registered 154 | 0x00AF ¯ macron 155 | 0x00B0 ° degree 156 | 0x00B1 ± plusminus 157 | 0x00B2 ² twosuperior 158 | 0x00B3 ³ threesuperior 159 | 0x00B4 ´ acute 160 | 0x00B5 µ micro 161 | 0x00B6 ¶ paragraph 162 | 0x00B7 · periodcentered 163 | 0x00B8 ¸ cedilla 164 | 0x00B9 ¹ onesuperior 165 | 0x00BA º ordmasculine 166 | 0x00BB » guillemetright 167 | 0x00BC ¼ onequarter 168 | 0x00BD ½ onehalf 169 | 0x00BE ¾ threequarters 170 | 0x00BF ¿ questiondown 171 | 0x00C0 À Agrave 172 | 0x00C1 Á Aacute 173 | 0x00C2  Acircumflex 174 | 0x00C3 à Atilde 175 | 0x00C4 Ä Adieresis 176 | 0x00C5 Å Aring 177 | 0x00C6 Æ AE 178 | 0x00C7 Ç Ccedilla 179 | 0x00C8 È Egrave 180 | 0x00C9 É Eacute 181 | 0x00CA Ê Ecircumflex 182 | 0x00CB Ë Edieresis 183 | 0x00CC Ì Igrave 184 | 0x00CD Í Iacute 185 | 0x00CE Î Icircumflex 186 | 0x00CF Ï Idieresis 187 | 0x00D0 Ð Eth 188 | 0x00D1 Ñ Ntilde 189 | 0x00D2 Ò Ograve 190 | 0x00D3 Ó Oacute 191 | 0x00D4 Ô Ocircumflex 192 | 0x00D5 Õ Otilde 193 | 0x00D6 Ö Odieresis 194 | 0x00D7 × multiply 195 | 0x00D8 Ø Oslash 196 | 0x00D9 Ù Ugrave 197 | 0x00DA Ú Uacute 198 | 0x00DB Û Ucircumflex 199 | 0x00DC Ü Udieresis 200 | 0x00DD Ý Yacute 201 | 0x00DE Þ Thorn 202 | 0x00DF ß germandbls 203 | 0x00E0 à agrave 204 | 0x00E1 á aacute 205 | 0x00E2 â acircumflex 206 | 0x00E3 ã atilde 207 | 0x00E4 ä adieresis 208 | 0x00E5 å aring 209 | 0x00E6 æ ae 210 | 0x00E7 ç ccedilla 211 | 0x00E8 è egrave 212 | 0x00E9 é eacute 213 | 0x00EA ê ecircumflex 214 | 0x00EB ë edieresis 215 | 0x00EC ì igrave 216 | 0x00ED í iacute 217 | 0x00EE î icircumflex 218 | 0x00EF ï idieresis 219 | 0x00F0 ð eth 220 | 0x00F1 ñ ntilde 221 | 0x00F2 ò ograve 222 | 0x00F3 ó oacute 223 | 0x00F4 ô ocircumflex 224 | 0x00F5 õ otilde 225 | 0x00F6 ö odieresis 226 | 0x00F7 ÷ divide 227 | 0x00F8 ø oslash 228 | 0x00F9 ù ugrave 229 | 0x00FA ú uacute 230 | 0x00FB û ucircumflex 231 | 0x00FC ü udieresis 232 | 0x00FD ý yacute 233 | 0x00FE þ thorn 234 | 0x00FF ÿ ydieresis 235 | 0x0100 Ā Amacron 236 | 0x0101 ā amacron 237 | 0x0102 Ă Abreve 238 | 0x0103 ă abreve 239 | 0x0104 Ą Aogonek 240 | 0x0105 ą aogonek 241 | 0x0106 Ć Cacute 242 | 0x0107 ć cacute 243 | 0x0108 Ĉ Ccircumflex 244 | 0x0109 ĉ ccircumflex 245 | 0x010A Ċ Cdotaccent 246 | 0x010B ċ cdotaccent 247 | 0x010C Č Ccaron 248 | 0x010D č ccaron 249 | 0x010E Ď Dcaron 250 | 0x010F ď dcaron 251 | 0x0110 Đ Dcroat 252 | 0x0111 đ dcroat 253 | 0x0112 Ē Emacron 254 | 0x0113 ē emacron 255 | 0x0114 Ĕ Ebreve 256 | 0x0115 ĕ ebreve 257 | 0x0116 Ė Edotaccent 258 | 0x0117 ė edotaccent 259 | 0x0118 Ę Eogonek 260 | 0x0119 ę eogonek 261 | 0x011A Ě Ecaron 262 | 0x011B ě ecaron 263 | 0x011C Ĝ Gcircumflex 264 | 0x011D ĝ gcircumflex 265 | 0x011E Ğ Gbreve 266 | 0x011F ğ gbreve 267 | 0x0120 Ġ Gdotaccent 268 | 0x0121 ġ gdotaccent 269 | 0x0122 Ģ Gcommaaccent 270 | 0x0123 ģ gcommaaccent 271 | 0x0124 Ĥ Hcircumflex 272 | 0x0125 ĥ hcircumflex 273 | 0x0126 Ħ Hbar 274 | 0x0127 ħ hbar 275 | 0x0128 Ĩ Itilde 276 | 0x0129 ĩ itilde 277 | 0x012A Ī Imacron 278 | 0x012B ī imacron 279 | 0x012C Ĭ Ibreve 280 | 0x012D ĭ ibreve 281 | 0x012E Į Iogonek 282 | 0x012F į iogonek 283 | 0x0130 İ Idotaccent 284 | 0x0131 ı idotless 285 | 0x0134 Ĵ Jcircumflex 286 | 0x0135 ĵ jcircumflex 287 | 0x0136 Ķ Kcommaaccent 288 | 0x0137 ķ kcommaaccent 289 | 0x0138 ĸ kgreenlandic 290 | 0x0139 Ĺ Lacute 291 | 0x013A ĺ lacute 292 | 0x013B Ļ Lcommaaccent 293 | 0x013C ļ lcommaaccent 294 | 0x013D Ľ Lcaron 295 | 0x013E ľ lcaron 296 | 0x013F Ŀ Ldot 297 | 0x0140 ŀ ldot 298 | 0x0141 Ł Lslash 299 | 0x0142 ł lslash 300 | 0x0143 Ń Nacute 301 | 0x0144 ń nacute 302 | 0x0145 Ņ Ncommaaccent 303 | 0x0146 ņ ncommaaccent 304 | 0x0147 Ň Ncaron 305 | 0x0148 ň ncaron 306 | 0x014A Ŋ Eng 307 | 0x014B ŋ eng 308 | 0x014C Ō Omacron 309 | 0x014D ō omacron 310 | 0x014E Ŏ Obreve 311 | 0x014F ŏ obreve 312 | 0x0150 Ő Ohungarumlaut 313 | 0x0151 ő ohungarumlaut 314 | 0x0152 Œ OE 315 | 0x0153 œ oe 316 | 0x0154 Ŕ Racute 317 | 0x0155 ŕ racute 318 | 0x0156 Ŗ Rcommaaccent 319 | 0x0157 ŗ rcommaaccent 320 | 0x0158 Ř Rcaron 321 | 0x0159 ř rcaron 322 | 0x015A Ś Sacute 323 | 0x015B ś sacute 324 | 0x015C Ŝ Scircumflex 325 | 0x015D ŝ scircumflex 326 | 0x015E Ş Scedilla 327 | 0x015F ş scedilla 328 | 0x0160 Š Scaron 329 | 0x0161 š scaron 330 | 0x0162 Ţ Tcedilla 331 | 0x0163 ţ tcedilla 332 | 0x0164 Ť Tcaron 333 | 0x0165 ť tcaron 334 | 0x0166 Ŧ Tbar 335 | 0x0167 ŧ tbar 336 | 0x0168 Ũ Utilde 337 | 0x0169 ũ utilde 338 | 0x016A Ū Umacron 339 | 0x016B ū umacron 340 | 0x016C Ŭ Ubreve 341 | 0x016D ŭ ubreve 342 | 0x016E Ů Uring 343 | 0x016F ů uring 344 | 0x0170 Ű Uhungarumlaut 345 | 0x0171 ű uhungarumlaut 346 | 0x0172 Ų Uogonek 347 | 0x0173 ų uogonek 348 | 0x0174 Ŵ Wcircumflex 349 | 0x0175 ŵ wcircumflex 350 | 0x0176 Ŷ Ycircumflex 351 | 0x0177 ŷ ycircumflex 352 | 0x0178 Ÿ Ydieresis 353 | 0x0179 Ź Zacute 354 | 0x017A ź zacute 355 | 0x017B Ż Zdotaccent 356 | 0x017C ż zdotaccent 357 | 0x017D Ž Zcaron 358 | 0x017E ž zcaron 359 | 0x018F Ə Schwa 360 | 0x0192 ƒ florin 361 | 0x01A0 Ơ Ohorn 362 | 0x01A1 ơ ohorn 363 | 0x01AF Ư Uhorn 364 | 0x01B0 ư uhorn 365 | 0x01b8 Ƹ 366 | 0x01b9 ƹ 367 | 0x01C4 DŽ DZcaron 368 | 0x01C5 Dž Dzcaron 369 | 0x01C6 dž dzcaron 370 | 0x01C7 LJ LJ 371 | 0x01C8 Lj Lj 372 | 0x01C9 lj lj 373 | 0x01CA NJ NJ 374 | 0x01CB Nj Nj 375 | 0x01CC nj nj 376 | 0x01E6 Ǧ Gcaron 377 | 0x01E7 ǧ gcaron 378 | 0x01EA Ǫ Oogonek 379 | 0x01EB ǫ oogonek 380 | 0x01FA Ǻ Aringacute 381 | 0x01FB ǻ aringacute 382 | 0x01FC Ǽ AEacute 383 | 0x01FD ǽ aeacute 384 | 0x01FE Ǿ Oslashacute 385 | 0x01FF ǿ oslashacute 386 | 0x0198 Ƙ 387 | 0x0200 Ȁ Adblgrave 388 | 0x0201 ȁ adblgrave 389 | 0x0202 Ȃ Ainvertedbreve 390 | 0x0203 ȃ ainvertedbreve 391 | 0x0204 Ȅ Edblgrave 392 | 0x0205 ȅ edblgrave 393 | 0x0206 Ȇ Einvertedbreve 394 | 0x0207 ȇ einvertedbreve 395 | 0x0208 Ȉ Idblgrave 396 | 0x0209 ȉ idblgrave 397 | 0x020A Ȋ Iinvertedbreve 398 | 0x020B ȋ iinvertedbreve 399 | 0x020C Ȍ Odblgrave 400 | 0x020D ȍ odblgrave 401 | 0x020E Ȏ Oinvertedbreve 402 | 0x020F ȏ oinvertedbreve 403 | 0x0210 Ȑ Rdblgrave 404 | 0x0211 ȑ rdblgrave 405 | 0x0212 Ȓ Rinvertedbreve 406 | 0x0213 ȓ rinvertedbreve 407 | 0x0214 Ȕ Udblgrave 408 | 0x0215 ȕ udblgrave 409 | 0x0216 Ȗ Uinvertedbreve 410 | 0x0217 ȗ uinvertedbreve 411 | 0x0218 Ș Scommaaccent 412 | 0x0219 ș scommaaccent 413 | 0x021A Ț Tcommaaccent 414 | 0x021B ț tcommaaccent 415 | 0x022A Ȫ Odieresismacron 416 | 0x022B ȫ odieresismacron 417 | 0x022C Ȭ Otildemacron 418 | 0x022D ȭ otildemacron 419 | 0x0230 Ȱ Odotaccentmacron 420 | 0x0231 ȱ odotaccentmacron 421 | 0x0232 Ȳ Ymacron 422 | 0x0233 ȳ ymacron 423 | 0x0237 ȷ jdotless 424 | 0x024d ɍ 425 | 0x0259 ə schwa 426 | 0x0263 ɣ 427 | 0x027b ɻ 428 | 0x0298 ʘ 429 | 0x029a ʚ 430 | 0x02BB ʻ commaturnedmod 431 | 0x02BC ʼ apostrophemod 432 | 0x02BE ʾ ringhalfright 433 | 0x02BF ʿ ringhalfleft 434 | 0x02C6 ˆ circumflex 435 | 0x02C7 ˇ caron 436 | 0x02C8 ˈ verticallinemod 437 | 0x02C9 ˉ firsttonechinese 438 | 0x02CA ˊ secondtonechinese 439 | 0x02CB ˋ fourthtonechinese 440 | 0x02CC ˌ verticallinelowmod 441 | 0x02D8 ˘ breve 442 | 0x02D9 ˙ dotaccent 443 | 0x02DA ˚ ring 444 | 0x02DB ˛ ogonek 445 | 0x02DC ˜ tilde 446 | 0x02DD ˝ hungarumlaut 447 | 0x0300 ̀ gravecomb 448 | 0x0301 ́ acutecomb 449 | 0x0302 ̂ circumflexcomb 450 | 0x0303 ̃ tildecomb 451 | 0x0304 ̄ macroncomb 452 | 0x0306 ̆ brevecomb 453 | 0x0307 ̇ dotaccentcomb 454 | 0x0308 ̈ dieresiscomb 455 | 0x0309 ̉ hookabovecomb 456 | 0x030A ̊ ringcomb 457 | 0x030B ̋ hungarumlautcomb 458 | 0x030C ̌ caroncomb 459 | 0x030F ̏ breveinvertedcomb 460 | 0x0311 ̑ dblgravecomb 461 | 0x0312 ̒ commaturnedabovecomb 462 | 0x031B ̛ horncomb 463 | 0x0323 ̣ dotbelowcomb 464 | 0x0324 ̤ dieresisbelowcomb 465 | 0x0326 ̦ commaaccentcomb 466 | 0x0327 ̧ cedillacomb 467 | 0x0328 ̨ ogonekcomb 468 | 0x032E ̮ brevebelowcomb 469 | 0x0331 ̱ macronbelowcomba 470 | 0x0375 ͵ 471 | 0x03C0 π pi 472 | 0x1E08 Ḉ Ccedillaacute 473 | 0x1E09 ḉ ccedillaacute 474 | 0x1E0C Ḍ Ddotbelow 475 | 0x1E0D ḍ ddotbelow 476 | 0x1E0E Ḏ Dlinebelow 477 | 0x1E0F ḏ dlinebelow 478 | 0x1E14 Ḕ Emacrongrave 479 | 0x1E15 ḕ emacrongrave 480 | 0x1E16 Ḗ Emacronacute 481 | 0x1E17 ḗ emacronacute 482 | 0x1E1C Ḝ Ecedillabreve 483 | 0x1E1D ḝ ecedillabreve 484 | 0x1E20 Ḡ Gmacron 485 | 0x1E21 ḡ gmacron 486 | 0x1E24 Ḥ Hdotbelow 487 | 0x1E25 ḥ hdotbelow 488 | 0x1E2A Ḫ Hbrevebelow 489 | 0x1E2B ḫ hbrevebelow 490 | 0x1E2E Ḯ Idieresisacute 491 | 0x1E2F ḯ idieresisacute 492 | 0x1E36 Ḷ Ldotbelow 493 | 0x1E37 ḷ ldotbelow 494 | 0x1E3A Ḻ Llinebelow 495 | 0x1E3B ḻ llinebelow 496 | 0x1E42 Ṃ Mdotbelow 497 | 0x1E43 ṃ mdotbelow 498 | 0x1E44 Ṅ Ndotaccent 499 | 0x1E45 ṅ ndotaccent 500 | 0x1E46 Ṇ Ndotbelow 501 | 0x1E47 ṇ ndotbelow 502 | 0x1E48 Ṉ Nlinebelow 503 | 0x1E49 ṉ nlinebelow 504 | 0x1E4C Ṍ Otildeacute 505 | 0x1E4D ṍ otildeacute 506 | 0x1E4E Ṏ Otildedieresis 507 | 0x1E4F ṏ otildedieresis 508 | 0x1E50 Ṑ Omacrongrave 509 | 0x1E51 ṑ omacrongrave 510 | 0x1E52 Ṓ Omacronacute 511 | 0x1E53 ṓ omacronacute 512 | 0x1E5A Ṛ Rdotbelow 513 | 0x1E5B ṛ rdotbelow 514 | 0x1E5E Ṟ Rlinebelow 515 | 0x1E5F ṟ rlinebelow 516 | 0x1E60 Ṡ Sdotaccent 517 | 0x1E61 ṡ sdotaccent 518 | 0x1E62 Ṣ Sdotbelow 519 | 0x1E63 ṣ sdotbelow 520 | 0x1E64 Ṥ Sacutedotaccent 521 | 0x1E65 ṥ sacutedotaccent 522 | 0x1E66 Ṧ Scarondotaccent 523 | 0x1E67 ṧ scarondotaccent 524 | 0x1E68 Ṩ Sdotbelowdotaccent 525 | 0x1E69 ṩ sdotbelowdotaccent 526 | 0x1E6C Ṭ Tdotbelow 527 | 0x1E6D ṭ tdotbelow 528 | 0x1E6E Ṯ Tlinebelow 529 | 0x1E6F ṯ tlinebelow 530 | 0x1E78 Ṹ Utildeacute 531 | 0x1E79 ṹ utildeacute 532 | 0x1E7A Ṻ Umacrondieresis 533 | 0x1E7B ṻ umacrondieresis 534 | 0x1E80 Ẁ Wgrave 535 | 0x1E81 ẁ wgrave 536 | 0x1E82 Ẃ Wacute 537 | 0x1E83 ẃ wacute 538 | 0x1E84 Ẅ Wdieresis 539 | 0x1E85 ẅ wdieresis 540 | 0x1E8E Ẏ Ydotaccent 541 | 0x1E8F ẏ ydotaccent 542 | 0x1E92 Ẓ Zdotbelow 543 | 0x1E93 ẓ zdotbelow 544 | 0x1E97 ẗ tdieresis 545 | 0x1E9E ẞ Germandbls 546 | 0x1EA0 Ạ Adotbelow 547 | 0x1EA1 ạ adotbelow 548 | 0x1EA2 Ả Ahookabove 549 | 0x1EA3 ả ahookabove 550 | 0x1EA4 Ấ Acircumflexacute 551 | 0x1EA5 ấ acircumflexacute 552 | 0x1EA6 Ầ Acircumflexgrave 553 | 0x1EA7 ầ acircumflexgrave 554 | 0x1EA8 Ẩ Acircumflexhookabove 555 | 0x1EA9 ẩ acircumflexhookabove 556 | 0x1EAA Ẫ Acircumflextilde 557 | 0x1EAB ẫ acircumflextilde 558 | 0x1EAC Ậ Acircumflexdotbelow 559 | 0x1EAD ậ acircumflexdotbelow 560 | 0x1EAE Ắ Abreveacute 561 | 0x1EAF ắ abreveacute 562 | 0x1EB0 Ằ Abrevegrave 563 | 0x1EB1 ằ abrevegrave 564 | 0x1EB2 Ẳ Abrevehookabove 565 | 0x1EB3 ẳ abrevehookabove 566 | 0x1EB4 Ẵ Abrevetilde 567 | 0x1EB5 ẵ abrevetilde 568 | 0x1EB6 Ặ Abrevedotbelow 569 | 0x1EB7 ặ abrevedotbelow 570 | 0x1EB8 Ẹ Edotbelow 571 | 0x1EB9 ẹ edotbelow 572 | 0x1EBA Ẻ Ehookabove 573 | 0x1EBB ẻ ehookabove 574 | 0x1EBC Ẽ Etilde 575 | 0x1EBD ẽ etilde 576 | 0x1EBE Ế Ecircumflexacute 577 | 0x1EBF ế ecircumflexacute 578 | 0x1EC0 Ề Ecircumflexgrave 579 | 0x1EC1 ề ecircumflexgrave 580 | 0x1EC2 Ể Ecircumflexhookabove 581 | 0x1EC3 ể ecircumflexhookabove 582 | 0x1EC4 Ễ Ecircumflextilde 583 | 0x1EC5 ễ ecircumflextilde 584 | 0x1EC6 Ệ Ecircumflexdotbelow 585 | 0x1EC7 ệ ecircumflexdotbelow 586 | 0x1EC8 Ỉ Ihookabove 587 | 0x1EC9 ỉ ihookabove 588 | 0x1ECA Ị Idotbelow 589 | 0x1ECB ị idotbelow 590 | 0x1ECC Ọ Odotbelow 591 | 0x1ECD ọ odotbelow 592 | 0x1ECE Ỏ Ohookabove 593 | 0x1ECF ỏ ohookabove 594 | 0x1ED0 Ố Ocircumflexacute 595 | 0x1ED1 ố ocircumflexacute 596 | 0x1ED2 Ồ Ocircumflexgrave 597 | 0x1ED3 ồ ocircumflexgrave 598 | 0x1ED4 Ổ Ocircumflexhookabove 599 | 0x1ED5 ổ ocircumflexhookabove 600 | 0x1ED6 Ỗ Ocircumflextilde 601 | 0x1ED7 ỗ ocircumflextilde 602 | 0x1ED8 Ộ Ocircumflexdotbelow 603 | 0x1ED9 ộ ocircumflexdotbelow 604 | 0x1EDA Ớ Ohornacute 605 | 0x1EDB ớ ohornacute 606 | 0x1EDC Ờ Ohorngrave 607 | 0x1EDD ờ ohorngrave 608 | 0x1EDE Ở Ohornhookabove 609 | 0x1EDF ở ohornhookabove 610 | 0x1EE0 Ỡ Ohorntilde 611 | 0x1EE1 ỡ ohorntilde 612 | 0x1EE2 Ợ Ohorndotbelow 613 | 0x1EE3 ợ ohorndotbelow 614 | 0x1EE4 Ụ Udotbelow 615 | 0x1EE5 ụ udotbelow 616 | 0x1EE6 Ủ Uhookabove 617 | 0x1EE7 ủ uhookabove 618 | 0x1EE8 Ứ Uhornacute 619 | 0x1EE9 ứ uhornacute 620 | 0x1EEA Ừ Uhorngrave 621 | 0x1EEB ừ uhorngrave 622 | 0x1EEC Ử Uhornhookabove 623 | 0x1EED ử uhornhookabove 624 | 0x1EEE Ữ Uhorntilde 625 | 0x1EEF ữ uhorntilde 626 | 0x1EF0 Ự Uhorndotbelow 627 | 0x1EF1 ự uhorndotbelow 628 | 0x1EF2 Ỳ Ygrave 629 | 0x1EF3 ỳ ygrave 630 | 0x1EF4 Ỵ Ydotbelow 631 | 0x1EF5 ỵ ydotbelow 632 | 0x1EF6 Ỷ Yhookabove 633 | 0x1EF7 ỷ yhookabove 634 | 0x1EF8 Ỹ Ytilde 635 | 0x1EF9 ỹ ytilde 636 | 0x2007   figurespace 637 | 0x2008   punctuationspace 638 | 0x2009   thinspace 639 | 0x200A   hairspace 640 | 0x200B ​ zerowidthspace 641 | 0x2010 ‐ hyphentwo 642 | 0x2012 ‒ figuredash 643 | 0x2013 – endash 644 | 0x2014 — emdash 645 | 0x2015 ― horizontalbar 646 | 0x2018 ‘ quoteleft 647 | 0x2019 ’ quoteright 648 | 0x201A ‚ quotesinglbase 649 | 0x201C “ quotedblleft 650 | 0x201D ” quotedblright 651 | 0x201E „ quotedblbase 652 | 0x2020 † dagger 653 | 0x2021 ‡ daggerdbl 654 | 0x2022 • bullet 655 | 0x2026 … ellipsis 656 | 0x2030 ‰ perthousand 657 | 0x2032 ′ prime 658 | 0x2033 ″ second 659 | 0x2039 ‹ guilsinglleft 660 | 0x203A › guilsinglright 661 | 0x2044 ⁄ fraction 662 | 0x2070 ⁰ zerosuperior 663 | 0x2074 ⁴ foursuperior 664 | 0x2075 ⁵ fivesuperior 665 | 0x2076 ⁶ sixsuperior 666 | 0x2077 ⁷ sevensuperior 667 | 0x2078 ⁸ eightsuperior 668 | 0x2079 ⁹ ninesuperior 669 | 0x207b ⁻ 670 | 0x207f ⁿ 671 | 0x2080 ₀ zeroinferior 672 | 0x2081 ₁ oneinferior 673 | 0x2082 ₂ twoinferior 674 | 0x2083 ₃ threeinferior 675 | 0x2084 ₄ fourinferior 676 | 0x2085 ₅ fiveinferior 677 | 0x2086 ₆ sixinferior 678 | 0x2087 ₇ seveninferior 679 | 0x2088 ₈ eightinferior 680 | 0x2089 ₉ nineinferior 681 | 0x20A1 ₡ colonsign 682 | 0x20A3 ₣ franc 683 | 0x20A4 ₤ lira 684 | 0x20A6 ₦ naira 685 | 0x20A7 ₧ peseta 686 | 0x20A9 ₩ won 687 | 0x20AB ₫ dong 688 | 0x20AC € euro 689 | 0x20AD ₭ kip 690 | 0x20B1 ₱ peso 691 | 0x20B2 ₲ guarani 692 | 0x20B5 ₵ cedi 693 | 0x20B9 ₹ rupeeIndian 694 | 0x20BA ₺ liraTurkish 695 | 0x20BC ₼ manat 696 | 0x20BD ₽ ruble 697 | 0x2113 ℓ literSign 698 | 0x2116 № numero 699 | 0x2122 ™ trademark 700 | 0x2124 ℤ 701 | 0x2126 Ω Ohm 702 | 0x212E ℮ estimated 703 | 0x21e7 ⇧ 704 | 0x21ea ⇪ 705 | 0x2202 ∂ partialdiff 706 | 0x2205 ∅ emptyset 707 | 0x2206 ∆ increment 708 | 0x2208 ∈ 709 | 0x220F ∏ product 710 | 0x2211 ∑ summation 711 | 0x2212 − minus 712 | 0x2215 ∕ divisionslash 713 | 0x2219 ∙ bulletoperator 714 | 0x221A √ radical 715 | 0x221E ∞ infinity 716 | 0x222B ∫ integral 717 | 0x2248 ≈ approxequal 718 | 0x2260 ≠ notequal 719 | 0x2264 ≤ lessequal 720 | 0x2265 ≥ greaterequal 721 | 0x2295 ⊕ 722 | 0x2318 ⌘ 723 | 0x2325 ⌥ 724 | 0x232b ⌫ 725 | 0x237e ⍾ 726 | 0x238b ⎋ 727 | 0x23ce ⏎ 728 | 0x25CA ◊ lozenge 729 | 0x25cb ○ 730 | 0x2620 ☠ 731 | 0x2639 ☹ 732 | 0x263a ☺ 733 | 0x2660 ♠ 734 | 0x2714 ✔ 735 | 0x2e12 ⸒ 736 | 0xFB00 ff f_f 737 | 0xFB01 fi fi 738 | 0xFB02 fl fl 739 | 0xFB03 ffi f_f_i 740 | 0xFB04 ffl f_f_l 741 | -------------------------------------------------------------------------------- /sources/charset/inconsolata_unique.nam: -------------------------------------------------------------------------------- 1 | 0x0198 Ƙ 2 | 0x01b8 Ƹ 3 | 0x01b9 ƹ 4 | 0x024d ɍ 5 | 0x0263 ɣ 6 | 0x027b ɻ 7 | 0x0298 ʘ 8 | 0x029a ʚ 9 | 0x0375 ͵ 10 | 0x207b ⁻ 11 | 0x207f ⁿ 12 | 0x2124 ℤ 13 | 0x21e7 ⇧ 14 | 0x21ea ⇪ 15 | 0x2208 ∈ 16 | 0x2295 ⊕ 17 | 0x2318 ⌘ 18 | 0x2325 ⌥ 19 | 0x232b ⌫ 20 | 0x237e ⍾ 21 | 0x238b ⎋ 22 | 0x23ce ⏎ 23 | 0x25cb ○ 24 | 0x2620 ☠ 25 | 0x2639 ☹ 26 | 0x263a ☺ 27 | 0x2660 ♠ 28 | 0x2714 ✔ 29 | 0x2e12 ⸒ -------------------------------------------------------------------------------- /sources/charset/nigels-list.nam: -------------------------------------------------------------------------------- 1 | U+00000100 Ā 2 | U+00000122 Ģ 3 | U+00000135 ĵ 4 | U+0000013b Ļ 5 | U+0000013f Ŀ 6 | U+00000156 Ŗ 7 | U+0000015d ŝ 8 | U+0000018f Ə 9 | U+00000198 Ƙ 10 | U+000001b8 Ƹ 11 | U+000001b9 ƹ 12 | U+000001e7 ǧ 13 | U+000001fd ǽ 14 | U+00000231 ȱ 15 | U+0000024d ɍ 16 | U+00000263 ɣ 17 | U+0000027b ɻ 18 | U+00000298 ʘ 19 | U+0000029a ʚ 20 | U+00000375 ͵ 21 | U+0000039e Ξ 22 | U+0000039f Ο 23 | U+000003a0 Π 24 | U+000003a3 Σ 25 | U+000003a6 Φ 26 | U+000003b1 α 27 | U+000003b2 β 28 | U+000003b3 γ 29 | U+000003b4 δ 30 | U+000003b5 ε 31 | U+000003b6 ζ 32 | U+000003b8 θ 33 | U+000003b9 ι 34 | U+000003ba κ 35 | U+000003bb λ 36 | U+000003bc μ 37 | U+000003be ξ 38 | U+000003c0 π 39 | U+000003c3 σ 40 | U+000003c6 φ 41 | U+000003c9 ω 42 | U+000003cc ό 43 | U+0000042c Ь 44 | U+00000430 а 45 | U+00000445 х 46 | U+00000447 ч 47 | U+00000449 щ 48 | U+0000044e ю 49 | U+00000460 Ѡ 50 | U+0000047f ѿ 51 | U+00000497 җ 52 | U+000004a4 Ҥ 53 | U+00000505 ԅ 54 | U+00000533 Գ 55 | U+00000535 Ե 56 | U+00000537 Է 57 | U+00001ebc Ẽ 58 | U+00001ef9 ỹ 59 | U+00002013 – 60 | U+00002014 — 61 | U+00002032 ′ 62 | U+00002033 ″ 63 | U+00002070 ⁰ 64 | U+00002075 ⁵ 65 | U+00002076 ⁶ 66 | U+00002077 ⁷ 67 | U+00002078 ⁸ 68 | U+0000207b ⁻ 69 | U+0000207f ⁿ 70 | U+00002124 ℤ 71 | U+000021e7 ⇧ 72 | U+000021ea ⇪ 73 | U+00002208 ∈ 74 | U+0000221a √ 75 | U+0000221e ∞ 76 | U+00002264 ≤ 77 | U+00002265 ≥ 78 | U+00002295 ⊕ 79 | U+00002318 ⌘ 80 | U+00002325 ⌥ 81 | U+0000232b ⌫ 82 | U+0000237e ⍾ 83 | U+0000238b ⎋ 84 | U+000023ce ⏎ 85 | U+000025cb ○ 86 | U+00002620 ☠ 87 | U+00002639 ☹ 88 | U+0000263a ☺ 89 | U+00002660 ♠ 90 | U+00002714 ✔ 91 | U+00002e12 ⸒ 92 | U+0000fb02 fl -------------------------------------------------------------------------------- /sources/config.yaml: -------------------------------------------------------------------------------- 1 | sources: 2 | - Inconsolata.glyphs 3 | axisOrder: 4 | - wdth 5 | - wght 6 | familyName: Inconsolata 7 | buildStatic: true 8 | flattenComponents: false 9 | decomposeTransformedComponents: true 10 | vttSources: 11 | Inconsolata[wdth,wght].ttf: vtt_hinting.ttx 12 | includeSourceFixes: true -------------------------------------------------------------------------------- /sources/legacy/Inconsolata-Bold-OTF.vfb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/sources/legacy/Inconsolata-Bold-OTF.vfb -------------------------------------------------------------------------------- /sources/legacy/Inconsolata-Bold-TTF.vfb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlefonts/Inconsolata/fc1fc21081558b39a2db43bfd9b65bf9acb50701/sources/legacy/Inconsolata-Bold-TTF.vfb --------------------------------------------------------------------------------