[
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2016 scribbletone\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# I Can Variable Font (Notes on generating variable fonts)\n\nNotes and tips for generating a simple variable font on a Mac. These assume you’re already familiar with the UFO format, creating masters that can be interpolated, and have some comfort using Terminal.\n\nThere are probably better ways of doing this. If anyone has better sources, corrections, or the process changes, please send a pull request or [open an issue](https://github.com/scribbletone/i-can-variable-font/issues). Hopefully this is just an interim document until the process becomes streamlined.\n\n## Example Files\nIn the `example` directory, you can find a sample DesignSpace file and interpolatable UFO’s. You can use those files for your first attempt, to simplify the process, and make sure everything works. It only contains one glyph, an `A`, which is just a rectangle that should get taller and shorter.\n\n## How To \n1. Install `pip`\n  - Check to see if you have it installed already.\n    - In Terminal type `pip` and hit enter. \n      - If it says `command not found`, follow the [instructions here](https://pip.pypa.io/en/latest/installing/#install-or-upgrade-pip). Otherwise skip to step 2.\n2. Install `fontmake`\n  - `pip install fontmake`\n    - More detailed notes in their [readme](https://github.com/googlei18n/fontmake).\n3. Create a DesignSpace file\n  - create a new text file called `yourfont.designspace`\n  - Populate the file using the following examples as a guide. Most importantly, make sure the paths to the UFOs are correct. https://github.com/scribbletone/i-can-variable-font/blob/master/example/varibox.designspace and https://github.com/LettError/MutatorMath/blob/master/Docs/designSpaceFileFormat.md\n  - Add at least one instance\n4. Generate the final variable font\n  - In Terminal, [navigate](https://github.com/scribbletone/i-can-variable-font#terminal-tips) to the `fontmake` directory.\n    - If you’ve closed the Terminal window since installing, you’ll also need to run `source env/bin/activate`.\n  - run `fontmake -o variable -m path-to-your-designspace-file`. \n    - Make sure to substitute your path to the DesignSpace file.\n  - Cross your fingers :)\n  - If everything goes well, you should end up with a new TTF file with `-VF` in the name, located in a `variable_ttf` subfolder.\n  \n## Upgrading\nThe instructions above assume you’re using the latest version of `fontmake`. If you’ve already installed `fontmake` in the past, you may need to upgrade by running `pip install --upgrade fontmake`.\n\n## Weird Things\n- Your sources seem to need a `GPOS` or kerning table. In the example file, I got around that by just creating a single kerning pair with a value of 0.\n- If you don’t have groups in your UFO, don’t include `<groups copy=\"1\"/>` in your DesignSpace file. It’ll throw an error.\n- In RoboFont, using relative paths when including external feature files can throw a `No such file or directory` error, as [seen here](https://github.com/googlei18n/fontmake/issues/157)\n  - To fix, change your relative paths from something like: `include(../features.fea);` to `include(../../features.fea);`\n- Superpolator instances that are based on extrapolations are clamped in the generated v-fonts. For example, if your boldest master has a weight value of 800, an instance with an extrapolated weight value of 1000 will appear the same as 800 in the generated font.\n- Superpolator substitution rules (http://new.superpolator.com/documentation/rules/) get lost somewhere between the designspace file and the generated v-font. Support for this is expected in the future.\n- Apps that currently support v-fonts only seem to support one family name per font (Still could be tested more thoroughly.)\n- If you’re utilizing any custom axes that aren’t among the handful of [registered](https://www.microsoft.com/typography/otspec180/fvar.htm#VAT) axis tags, you need to write them into the `standard_axis_map` dictionary in the `/fontTools/varLib/__init__.py` file.\n\n## ‘Using’ the fonts\n- [Mac previewer](https://github.com/googlei18n/fontview/releases), by Google\n- [Adobe Illustrator CC](https://helpx.adobe.com/illustrator/using/whats-new.html#Variablefonts)\n- [Adobe Photoshop CC](https://helpx.adobe.com/photoshop/how-to/make-font-variation-photoshop.html)\n- [Axis Praxis](http://www.axis-praxis.org/), by Laurence Penney. An easy browser interface for previewing and testing\n  - Requires a [browser that supports Variable Fonts](http://www.axis-praxis.org/blog/2017-04-05/17/how-to-get-variable-fonts-working-in-safari-chrome-and-firefox-macos)\n\n## Helpful Resources and Articles\n- [Fontmake](https://github.com/googlei18n/fontmake), by Google\n- [FontTools](https://github.com/fonttools), a community project with contributions by [@justvanrossum](https://github.com/justvanrossum), [@behdad](https://github.com/behdad), [@anthrotype](https://github.com/anthrotype), [@brawer](https://github.com/brawer), and many more. \n  - In particular [varLib](https://github.com/fonttools/fonttools/blob/master/Lib/fontTools/varLib/__init__.py#L13-L17)\n- [MutatorMath](https://github.com/LettError/MutatorMath) by [LettError](http://letterror.com/)\n- [OpenType Font Variations Overview](https://www.microsoft.com/typography/otspec180/otvaroverview.htm), by Microsoft\n- [Introducing OpenType Variable Fonts](https://medium.com/@tiro/https-medium-com-tiro-introducing-opentype-variable-fonts-12ba6cd2369#.imv0hzmro) by [John Hudson](http://www.tiro.com/)\n- [Variable Fonts](http://typographica.org/on-typography/variable-fonts/), by [CJ Dunn](http://thecjdunn.com/)\n\n## Examples/Demos\n- http://cjtype.com/dunbar/variablefonts/index.html\n- http://stuff.djr.com/variable-demo/\n\n## Terminal Tips\n- To quickly get the path to a directory/folder or file, drag it into terminal.\n- To navigate to a directory in Terminal, type `cd ` then drag the folder into terminal and hit enter.\n- To see the contents of the current directory enter `ls`. To see hidden files as well, enter `ls -a`.\n- To navigate relative to your current location `cd some_folder/another_folder`\n- To cycle through recently used commands, hit the up arrow key.\n- To clear the window of noise from previous output, hit the `command k` keys.\n\n## Outside Contributors\nThanks to [@nicksherman](https://github.com/nicksherman) for feedback and revisions, and [@cjdunn](https://github.com/cjdunn) for pointing the way.\n\nHelp us make this guide better! Open a pull request or [issue](https://github.com/scribbletone/i-can-variable-font/issues) with any suggestions or corrections.\n"
  },
  {
    "path": "example/sources/Varibox-one.ufo/fontinfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>ascender</key>\n\t<integer>750</integer>\n\t<key>capHeight</key>\n\t<integer>750</integer>\n\t<key>descender</key>\n\t<integer>-250</integer>\n\t<key>familyName</key>\n\t<string>Varibox</string>\n\t<key>postscriptBlueValues</key>\n\t<array>\n\t</array>\n\t<key>postscriptFamilyBlues</key>\n\t<array>\n\t</array>\n\t<key>postscriptFamilyOtherBlues</key>\n\t<array>\n\t</array>\n\t<key>postscriptOtherBlues</key>\n\t<array>\n\t</array>\n\t<key>postscriptStemSnapH</key>\n\t<array>\n\t</array>\n\t<key>postscriptStemSnapV</key>\n\t<array>\n\t</array>\n\t<key>styleName</key>\n\t<string>one</string>\n\t<key>unitsPerEm</key>\n\t<integer>1000</integer>\n\t<key>xHeight</key>\n\t<integer>500</integer>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/sources/Varibox-one.ufo/glyphs/A_.glif",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<glyph name=\"A\" format=\"1\">\n  <advance width=\"500\"/>\n  <unicode hex=\"0041\"/>\n  <outline>\n    <contour>\n      <point x=\"83\" y=\"27\" type=\"line\"/>\n      <point x=\"422\" y=\"27\" type=\"line\"/>\n      <point x=\"422\" y=\"72\" type=\"line\"/>\n      <point x=\"83\" y=\"72\" type=\"line\"/>\n    </contour>\n  </outline>\n</glyph>\n"
  },
  {
    "path": "example/sources/Varibox-one.ufo/glyphs/contents.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>A</key>\n\t<string>A_.glif</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/sources/Varibox-one.ufo/kerning.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>A</key>\n\t<dict>\n\t\t<key>A</key>\n\t\t<integer>0</integer>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/sources/Varibox-one.ufo/lib.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.typemytype.robofont.background.layerStrokeColor</key>\n\t<array>\n\t\t<real>0.7544410342261905</real>\n\t\t<real>0.6332543478652821</real>\n\t\t<real>0.15589464181292753</real>\n\t\t<real>0.30050317796610165</real>\n\t</array>\n\t<key>com.typemytype.robofont.compileSettings.autohint</key>\n\t<true/>\n\t<key>com.typemytype.robofont.compileSettings.checkOutlines</key>\n\t<false/>\n\t<key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>\n\t<true/>\n\t<key>com.typemytype.robofont.compileSettings.decompose</key>\n\t<false/>\n\t<key>com.typemytype.robofont.compileSettings.generateFormat</key>\n\t<integer>0</integer>\n\t<key>com.typemytype.robofont.compileSettings.releaseMode</key>\n\t<false/>\n\t<key>com.typemytype.robofont.foreground.layerStrokeColor</key>\n\t<array>\n\t\t<real>0.5</real>\n\t\t<real>0.0</real>\n\t\t<real>0.5</real>\n\t\t<real>0.7</real>\n\t</array>\n\t<key>com.typemytype.robofont.italicSlantOffset</key>\n\t<integer>0</integer>\n\t<key>com.typemytype.robofont.layerOrder</key>\n\t<array>\n\t\t<string>background</string>\n\t</array>\n\t<key>com.typemytype.robofont.segmentType</key>\n\t<string>curve</string>\n\t<key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>\n\t<integer>1</integer>\n\t<key>com.typemytype.robofont.sort</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>ascending</key>\n\t\t\t<array>\n\t\t\t\t<string>A</string>\n\t\t\t</array>\n\t\t\t<key>type</key>\n\t\t\t<string>glyphList</string>\n\t\t</dict>\n\t</array>\n\t<key>public.glyphOrder</key>\n\t<array>\n\t\t<string>A</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/sources/Varibox-one.ufo/metainfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>creator</key>\n\t<string>org.robofab.ufoLib</string>\n\t<key>formatVersion</key>\n\t<integer>2</integer>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/sources/Varibox-two.ufo/fontinfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>ascender</key>\n\t<integer>750</integer>\n\t<key>capHeight</key>\n\t<integer>750</integer>\n\t<key>descender</key>\n\t<integer>-250</integer>\n\t<key>familyName</key>\n\t<string>Varibox</string>\n\t<key>postscriptBlueValues</key>\n\t<array>\n\t</array>\n\t<key>postscriptFamilyBlues</key>\n\t<array>\n\t</array>\n\t<key>postscriptFamilyOtherBlues</key>\n\t<array>\n\t</array>\n\t<key>postscriptOtherBlues</key>\n\t<array>\n\t</array>\n\t<key>postscriptStemSnapH</key>\n\t<array>\n\t</array>\n\t<key>postscriptStemSnapV</key>\n\t<array>\n\t</array>\n\t<key>styleName</key>\n\t<string>two</string>\n\t<key>unitsPerEm</key>\n\t<integer>1000</integer>\n\t<key>xHeight</key>\n\t<integer>500</integer>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/sources/Varibox-two.ufo/glyphs/A_.glif",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<glyph name=\"A\" format=\"1\">\n  <advance width=\"500\"/>\n  <unicode hex=\"0041\"/>\n  <outline>\n    <contour>\n      <point x=\"83\" y=\"27\" type=\"line\"/>\n      <point x=\"422\" y=\"27\" type=\"line\"/>\n      <point x=\"422\" y=\"556\" type=\"line\"/>\n      <point x=\"83\" y=\"556\" type=\"line\"/>\n    </contour>\n  </outline>\n</glyph>\n"
  },
  {
    "path": "example/sources/Varibox-two.ufo/glyphs/contents.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>A</key>\n\t<string>A_.glif</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/sources/Varibox-two.ufo/kerning.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>A</key>\n\t<dict>\n\t\t<key>A</key>\n\t\t<integer>0</integer>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/sources/Varibox-two.ufo/lib.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.typemytype.robofont.background.layerStrokeColor</key>\n\t<array>\n\t\t<real>0.7544410342261905</real>\n\t\t<real>0.6332543478652821</real>\n\t\t<real>0.15589464181292753</real>\n\t\t<real>0.30050317796610165</real>\n\t</array>\n\t<key>com.typemytype.robofont.compileSettings.autohint</key>\n\t<true/>\n\t<key>com.typemytype.robofont.compileSettings.checkOutlines</key>\n\t<false/>\n\t<key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>\n\t<true/>\n\t<key>com.typemytype.robofont.compileSettings.decompose</key>\n\t<false/>\n\t<key>com.typemytype.robofont.compileSettings.generateFormat</key>\n\t<integer>0</integer>\n\t<key>com.typemytype.robofont.compileSettings.releaseMode</key>\n\t<false/>\n\t<key>com.typemytype.robofont.foreground.layerStrokeColor</key>\n\t<array>\n\t\t<real>0.5</real>\n\t\t<real>0.0</real>\n\t\t<real>0.5</real>\n\t\t<real>0.7</real>\n\t</array>\n\t<key>com.typemytype.robofont.italicSlantOffset</key>\n\t<integer>0</integer>\n\t<key>com.typemytype.robofont.layerOrder</key>\n\t<array>\n\t\t<string>background</string>\n\t</array>\n\t<key>com.typemytype.robofont.segmentType</key>\n\t<string>curve</string>\n\t<key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>\n\t<integer>1</integer>\n\t<key>com.typemytype.robofont.sort</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>ascending</key>\n\t\t\t<array>\n\t\t\t\t<string>A</string>\n\t\t\t</array>\n\t\t\t<key>type</key>\n\t\t\t<string>glyphList</string>\n\t\t</dict>\n\t</array>\n\t<key>public.glyphOrder</key>\n\t<array>\n\t\t<string>A</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/sources/Varibox-two.ufo/metainfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>creator</key>\n\t<string>org.robofab.ufoLib</string>\n\t<key>formatVersion</key>\n\t<integer>2</integer>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/varibox.designspace",
    "content": "<?xml version=\"1.0\" ?>\n<designspace format=\"3\">\n  <axes>\n    <axis name=\"weight\" tag=\"wght\" minimum=\"1\" maximum=\"1000\" default=\"1000\">\n      <labelname xml:lang=\"en\">Weight</labelname>\n    </axis>\n  </axes>\n  <sources>\n    <source familyname=\"Varibox\" filename=\"./sources/Varibox-one.ufo\" name=\"master_1\">\n      <lib copy=\"1\"/>\n      <info copy=\"1\"/>\n      <kerning copy=\"1\"/>\n      <location>\n        <dimension name=\"weight\" xvalue=\"1\"/>\n      </location>\n    </source>\n    <source familyname=\"Varibox\" filename=\"./sources/Varibox-two.ufo\" name=\"master_2\">\n      <location>\n        <dimension name=\"weight\" xvalue=\"1000\"/>\n      </location>\n    </source>\n  </sources>\n  <instances>\n    <instance familyname=\"Varibox\" filename=\"./instances/varibox-medium.ufo\" stylename=\"Medium\">\n      <info />\n      <kerning />\n      <location>\n        <dimension name=\"weight\" xvalue=\"500\"/>\n      </location>\n    </instance>\n  </instances>\n</designspace>\n"
  }
]