├── .gitignore ├── LICENSE ├── README.md ├── build.sh ├── config_sample.py ├── fira.fea ├── fira.glyphs ├── fira ├── FiraCode-Bold.otf ├── FiraCode-Bold.ttf ├── FiraCode-Light.otf ├── FiraCode-Light.ttf ├── FiraCode-Medium.otf ├── FiraCode-Medium.ttf ├── FiraCode-Regular.otf ├── FiraCode-Regular.ttf ├── FiraCode-Retina.otf ├── FiraCode-Retina.ttf ├── FiraCode-SemiBold.otf └── FiraCode-SemiBold.ttf ├── fonts ├── Anonymous Pro │ ├── build.sh │ └── config.py ├── DejaVu Sans Mono │ ├── build.sh │ └── config.py ├── Fantasque Sans Mono │ ├── build.sh │ └── config.py ├── Hack │ ├── build.sh │ └── config.py ├── Hermit │ ├── build.sh │ └── config.py ├── IBM Plex Mono │ ├── build.sh │ └── config.py ├── Roboto Mono │ ├── build.sh │ └── config.py ├── Source Code Pro │ ├── build.sh │ └── config.py ├── Space Mono │ ├── build.sh │ └── config.py └── Ubuntu Mono │ ├── build.sh │ └── config.py ├── index.html ├── input ├── Anonymous Pro │ ├── AnonymousPro-Bold.ttf │ ├── AnonymousPro-BoldItalic.ttf │ ├── AnonymousPro-Italic.ttf │ ├── AnonymousPro-Regular.ttf │ └── OFL.txt ├── DejaVu Sans Mono │ ├── DejaVuSansMono-Bold.ttf │ ├── DejaVuSansMono-BoldOblique.ttf │ ├── DejaVuSansMono-Oblique.ttf │ ├── DejaVuSansMono.ttf │ └── LICENSE ├── Fantasque Sans Mono │ ├── FantasqueSansMono-Bold.otf │ ├── FantasqueSansMono-Bold.ttf │ ├── FantasqueSansMono-BoldItalic.otf │ ├── FantasqueSansMono-BoldItalic.ttf │ ├── FantasqueSansMono-Italic.otf │ ├── FantasqueSansMono-Italic.ttf │ ├── FantasqueSansMono-Regular.otf │ ├── FantasqueSansMono-Regular.ttf │ └── LICENSE.txt ├── Hack │ ├── Hack-Bold.ttf │ ├── Hack-BoldItalic.ttf │ ├── Hack-Italic.ttf │ └── Hack-Regular.ttf ├── Hermit │ ├── Hermit-Bold.otf │ ├── Hermit-BoldItalic.otf │ ├── Hermit-Light.otf │ ├── Hermit-LightItalic.otf │ ├── Hermit-Regular.otf │ ├── Hermit-RegularItalic.otf │ └── LICENSE ├── IBM Plex Mono │ ├── IBMPlexMono-Bold.otf │ ├── IBMPlexMono-BoldItalic.otf │ ├── IBMPlexMono-ExtraLight.otf │ ├── IBMPlexMono-ExtraLightItalic.otf │ ├── IBMPlexMono-Italic.otf │ ├── IBMPlexMono-Light.otf │ ├── IBMPlexMono-LightItalic.otf │ ├── IBMPlexMono-Medium.otf │ ├── IBMPlexMono-MediumItalic.otf │ ├── IBMPlexMono-Regular.otf │ ├── IBMPlexMono-SemiBold.otf │ ├── IBMPlexMono-SemiBoldItalic.otf │ ├── IBMPlexMono-Text.otf │ ├── IBMPlexMono-TextItalic.otf │ ├── IBMPlexMono-Thin.otf │ ├── IBMPlexMono-ThinItalic.otf │ └── LICENSE.txt ├── Roboto Mono │ ├── LICENSE.txt │ ├── RobotoMono-Bold.ttf │ ├── RobotoMono-BoldItalic.ttf │ ├── RobotoMono-ExtraLight.ttf │ ├── RobotoMono-ExtraLightItalic.ttf │ ├── RobotoMono-Italic.ttf │ ├── RobotoMono-Light.ttf │ ├── RobotoMono-LightItalic.ttf │ ├── RobotoMono-Medium.ttf │ ├── RobotoMono-MediumItalic.ttf │ ├── RobotoMono-Regular.ttf │ ├── RobotoMono-SemiBold.ttf │ ├── RobotoMono-SemiBoldItalic.ttf │ ├── RobotoMono-Thin.ttf │ └── RobotoMono-ThinItalic.ttf ├── Source Code Pro │ ├── OFL.txt │ ├── SourceCodePro-Black.ttf │ ├── SourceCodePro-BlackItalic.ttf │ ├── SourceCodePro-Bold.ttf │ ├── SourceCodePro-BoldItalic.ttf │ ├── SourceCodePro-ExtraBold.ttf │ ├── SourceCodePro-ExtraBoldItalic.ttf │ ├── SourceCodePro-ExtraLight.ttf │ ├── SourceCodePro-ExtraLightItalic.ttf │ ├── SourceCodePro-Italic.ttf │ ├── SourceCodePro-Light.ttf │ ├── SourceCodePro-LightItalic.ttf │ ├── SourceCodePro-Medium.ttf │ ├── SourceCodePro-MediumItalic.ttf │ ├── SourceCodePro-Regular.ttf │ ├── SourceCodePro-SemiBold.ttf │ └── SourceCodePro-SemiBoldItalic.ttf ├── Space Mono │ ├── OFL.txt │ ├── SpaceMono-Bold.ttf │ ├── SpaceMono-BoldItalic.ttf │ ├── SpaceMono-Italic.ttf │ └── SpaceMono-Regular.ttf └── Ubuntu Mono │ ├── UFL.txt │ ├── UbuntuMono-Bold.ttf │ ├── UbuntuMono-BoldItalic.ttf │ ├── UbuntuMono-Italic.ttf │ └── UbuntuMono-Regular.ttf ├── ligate.py ├── py ├── extract_fira_data.py ├── fontname.py └── utils.py ├── scripts ├── build_family.sh ├── clean.sh ├── fetch_fira.sh ├── generate_build.sh ├── list_fonts.sh ├── progress_bar.sh ├── release.sh ├── showcases.sh └── update_builds.sh ├── server.sh ├── showcase.gif ├── ssi-server ├── LICENSE ├── README.md ├── about.html ├── index.html ├── ssi.py ├── ssi_expander.py └── ssi_server.py └── test ├── UnicodeBMPFallback.ttf ├── fira.css └── showcases.txt /.gitignore: -------------------------------------------------------------------------------- 1 | ignore 2 | output 3 | logs 4 | __pycache__ 5 | tmp.fea 6 | fonts.css 7 | fonts.html 8 | .vscode -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Ezequiel Leonel Ramis Folberg 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Liga 2 | 3 | **Add ligatures to any programming font!** 4 | 5 | ![Ligated fonts showcase](./showcase.gif) 6 | 7 | This script copies the ligatures (glyphs and rendering information) from [FiraCode](https://github.com/tonsky/FiraCode) into any other TrueType or OpenType font. 8 | 9 | This repo contains a [Fontforge python script](ligate.py) that you can use to add the FiraCode ligatures to any font, as well as submodules for some popular programming fonts and [another script](build.sh) for ligating all of them at once. 10 | 11 | Pre-ligated versions are available under [releases](https://github.com/EzequielRamis/liga/releases). 12 | 13 | ## Requirements 14 | 15 | **Using the Fonts**: See the [FiraCode README](https://github.com/tonsky/FiraCode) for a list of supported editors. 16 | 17 | **Script**: This script requires FontForge python bindings. For Debian/Ubuntu they are available in `python-fontforge` package. For Arch, OpenSUSE and NixOS, they are included in the `fontforge` package. For macOS, they are available via brew (`brew install fontforge`). 18 | 19 | It also requires a python library called `glyphsLib`. 20 | 21 | ## Using the Script 22 | 23 | ### Automatic 24 | 25 | Use automatic mode to easily convert a font family. 26 | 27 | 1. Generate a script and configuration template with: 28 | 29 | ``` 30 | $ scripts/generate_build.sh "FONT_FAMILY_NAME" 31 | ``` 32 | 33 | For example: 34 | 35 | ``` 36 | $ scripts/generate_build.sh "Space Mono" 37 | ``` 38 | 39 | 2. Put the family font(s) into `input/FONT_FAMILY_NAME` 40 | 3. Go to `fonts/FONT_FAMILY_NAME` 41 | 4. Edit `config.py` to disable ligatures you don't want, change glyphs scale factor, and/or enable any (non-ligature) characters you want from FiraCode in addition to the ligatures. 42 | 5. Edit `build.sh` to edit the output family font name, the output directory, the ligatures' weight and many more settings. 43 | 6. Return to the git root directory 44 | 7. Run 45 | ``` 46 | $ fonts/FONT_FAMILY_NAME/build.sh 47 | ``` 48 | The ligated fonts will be located in the `output` directory. 49 | 50 | ### Manual 51 | 52 | 1. Move/copy the font you want to ligate into `input` (or somewhere else convenient). 53 | 2. Edit `config_sample.py` to disable any ligatures you don't want, etc. 54 | 3. Run the script: 55 | 56 | ``` 57 | $ python ligate.py path/to/input/font.ttf 58 | --output-dir=path/to/output/dir/ \ 59 | --output-name='Name of Ligated Font' 60 | ``` 61 | 62 | For exmaple: 63 | 64 | ``` 65 | $ python ligate.py input/Hack/Hack-Regular.ttf 66 | --output-dir='output/Ligated Hack' \ 67 | --output-name='Liga Hack' 68 | ``` 69 | 70 | Which will produce `output/Ligated Hack/LigaHack-Regular.ttf`. 71 | 72 | The font weight will be inherited from the original file; the font name will be replaced with whatever you specified in `--output-name`. You can also use `--prefix` instead, in which case the original name will be preserved and whatever you put in `--prefix` will be prepended to it. 73 | 74 | `ligate.py` supports some additional command line options to, for example, change which font ligatures are copied from or enable copying of individual character glyphs; run `python ligate.py --help` to list them. 75 | 76 | ## FAQ 77 | 78 | **I don't know what do the `features`' values from a `config.py` mean? Where are they from?** 79 | 80 | In a `config.py` you have a dictionary called `"features"` with keys and values. Each key is the name of some feature defined in `fira.fea`, a file that specifies font properties, and each value is a list of strings, that may be empty. 81 | 82 | In this file. each feature contains rules that makes certain ligatures work. The majority of these rules are grouped into named blocks called `lookups`. I say "named" because these are the strings that are contained in the corresponding value's list. 83 | 84 | If you don't know how to read that `fira.fea` file, I recommend you to [visit this page](https://adobe-type-tools.github.io/afdko/OpenTypeFeatureFileSpecification.html). 85 | 86 | ## Credit 87 | 88 | This repo is a redesign of the [ToxicFrog/Ligaturizer](https://github.com/ToxicFrog/Ligaturizer) implementation because, principally, it does not work with the Firacode's ligatures above v3.1, missing incredible features like infinite arrow combinations. 89 | 90 | ## Contributions 91 | 92 | Contributions always welcome! Please submit a Pull Request, or create an Issue if you have an idea for a feature/enhancement (or bug). 93 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | shopt -s globstar 4 | 5 | pushd $(dirname "$0") || exit 6 | 7 | builds=(fonts/**/build.sh) 8 | 9 | printf "Building %d font families\n" ${#builds[@]} 10 | scripts/clean.sh 11 | for b in "${builds[@]}"; do 12 | "$b" 13 | done 14 | 15 | popd || exit 16 | -------------------------------------------------------------------------------- /config_sample.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | "colon", 31 | "equal", 32 | "exclam", 33 | "greater", 34 | "hyphen", 35 | "less", 36 | "numbersign", 37 | "percent", 38 | "period", 39 | "plus", 40 | "question", 41 | "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | "percent_percent", 128 | "period_period", 129 | "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | "question_period", 134 | "question_question", 135 | "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fira/FiraCode-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Bold.otf -------------------------------------------------------------------------------- /fira/FiraCode-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Bold.ttf -------------------------------------------------------------------------------- /fira/FiraCode-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Light.otf -------------------------------------------------------------------------------- /fira/FiraCode-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Light.ttf -------------------------------------------------------------------------------- /fira/FiraCode-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Medium.otf -------------------------------------------------------------------------------- /fira/FiraCode-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Medium.ttf -------------------------------------------------------------------------------- /fira/FiraCode-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Regular.otf -------------------------------------------------------------------------------- /fira/FiraCode-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Regular.ttf -------------------------------------------------------------------------------- /fira/FiraCode-Retina.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Retina.otf -------------------------------------------------------------------------------- /fira/FiraCode-Retina.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-Retina.ttf -------------------------------------------------------------------------------- /fira/FiraCode-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-SemiBold.otf -------------------------------------------------------------------------------- /fira/FiraCode-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/fira/FiraCode-SemiBold.ttf -------------------------------------------------------------------------------- /fonts/Anonymous Pro/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | # PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | OUTPUT_NAME="Liganon" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$OUTPUT_NAME" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/Anonymous Pro" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | cp "$INPUT_DIR/OFL.txt" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/Anonymous Pro/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | # "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | "colon", 31 | "equal", 32 | "exclam", 33 | "greater", 34 | "hyphen", 35 | "less", 36 | "numbersign", 37 | # "percent", 38 | "period", 39 | "plus", 40 | "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | # "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | "period_period", 129 | "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | "question_period", 134 | "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fonts/DejaVu Sans Mono/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | # OUTPUT_NAME="" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$PREFIX""DejaVu Sans Mono" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/DejaVu Sans Mono" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | cp "$INPUT_DIR/LICENSE" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/DejaVu Sans Mono/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | # "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | "colon", 31 | "equal", 32 | "exclam", 33 | "greater", 34 | "hyphen", 35 | "less", 36 | "numbersign", 37 | # "percent", 38 | "period", 39 | "plus", 40 | "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | # "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | "period_period", 129 | "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | "question_period", 134 | "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fonts/Fantasque Sans Mono/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | # OUTPUT_NAME="" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$PREFIX""Fantasque Sans Mono" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/Fantasque Sans Mono" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | cp "$INPUT_DIR/LICENSE.txt" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/Fantasque Sans Mono/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | # "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | "colon", 31 | "equal", 32 | "exclam", 33 | "greater", 34 | "hyphen", 35 | "less", 36 | "numbersign", 37 | # "percent", 38 | "period", 39 | "plus", 40 | # "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | # "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | "period_period", 129 | # "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | # "question_period", 134 | # "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fonts/Hack/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | # OUTPUT_NAME="" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$PREFIX""Hack" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/Hack" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | # cp "$INPUT_DIR/LICENSE.txt" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/Hack/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | # "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | "colon", 31 | "equal", 32 | "exclam", 33 | "greater", 34 | "hyphen", 35 | "less", 36 | "numbersign", 37 | # "percent", 38 | "period", 39 | "plus", 40 | "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | # "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | "period_period", 129 | "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | "question_period", 134 | "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fonts/Hermit/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | # PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | OUTPUT_NAME="Liga Kermit" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$OUTPUT_NAME" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/Hermit" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | cp "$INPUT_DIR/LICENSE" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/Hermit/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | # "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | "colon", 31 | # "equal", 32 | "exclam", 33 | "greater", 34 | "hyphen", 35 | "less", 36 | # "numbersign", 37 | # "percent", 38 | "period", 39 | "plus", 40 | # "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | # "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | # "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | "period_period", 129 | # "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | # "question_equal", 133 | # "question_period", 134 | # "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | # "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fonts/IBM Plex Mono/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | # PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | OUTPUT_NAME="Liga Flex Mono" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$OUTPUT_NAME" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/IBM Plex Mono" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | cp "$INPUT_DIR/LICENSE.txt" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/IBM Plex Mono/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | # "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | "colon", 31 | "equal", 32 | "exclam", 33 | "greater", 34 | "hyphen", 35 | "less", 36 | # "numbersign", 37 | # "percent", 38 | "period", 39 | "plus", 40 | # "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | # "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | "period_period", 129 | "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | "question_period", 134 | "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | # "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fonts/Roboto Mono/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | # OUTPUT_NAME="" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$PREFIX""Roboto Mono" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/Roboto Mono" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | cp "$INPUT_DIR/LICENSE.txt" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/Roboto Mono/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | # "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | "colon", 31 | "equal", 32 | "exclam", 33 | "greater", 34 | "hyphen", 35 | "less", 36 | "numbersign", 37 | # "percent", 38 | "period", 39 | "plus", 40 | "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | # "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | "period_period", 129 | "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | "question_period", 134 | "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fonts/Source Code Pro/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | # PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | OUTPUT_NAME="Liga Src" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$OUTPUT_NAME" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/Source Code Pro" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | cp "$INPUT_DIR/OFL.txt" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/Source Code Pro/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 0.95, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | # "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | # "colon", 31 | # "equal", 32 | "exclam", 33 | "greater", 34 | # "hyphen", 35 | "less", 36 | "numbersign", 37 | # "percent", 38 | "period", 39 | "plus", 40 | "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | # "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | "period_period", 129 | "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | "question_period", 134 | "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | # "lowercase_hyphen", 146 | # "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | # "uppercase_colon", 150 | "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fonts/Space Mono/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | # OUTPUT_NAME="" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$PREFIX""Space Mono" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/Space Mono" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | cp "$INPUT_DIR/OFL.txt" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/Space Mono/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | "ampersand", 24 | "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | "colon", 31 | "equal", 32 | "exclam", 33 | "greater", 34 | "hyphen", 35 | "less", 36 | "numbersign", 37 | # "percent", 38 | "period", 39 | "plus", 40 | # "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | "period_period", 129 | # "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | # "question_period", 134 | # "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /fonts/Ubuntu Mono/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 4 | 5 | # Project root path relative to this .sh file 6 | LIGA_DIR=$SRC/../.. 7 | SCRIPTS_DIR=$LIGA_DIR/scripts 8 | source "$SCRIPTS_DIR"/build_family.sh 9 | declare -A FONT_WEIGHT 10 | 11 | # String to prefix the name of the generated font with. 12 | # PREFIX="Liga " 13 | 14 | # Name of the generated font. Completely replaces the original and prefix 15 | # variable will be ignored. 16 | OUTPUT_NAME="Ubuntu Mono Ligated" 17 | 18 | # Where the generated font files will be located 19 | OUTPUT_DIR="$LIGA_DIR/output/$OUTPUT_NAME" 20 | 21 | # Where the input font files are located 22 | INPUT_DIR="$LIGA_DIR/input/Ubuntu Mono" 23 | 24 | # The python file to copy the configuration from. 25 | CONFIG="$SRC/config.py" 26 | 27 | # The variable below is a associative array in which keys must be the basename 28 | # of each font file (without extensions), and values the following options: 29 | # - Light 30 | # - Regular 31 | # - Retina 32 | # - Medium 33 | # - SemiBold 34 | # - Bold 35 | # This serves the purpose of handwrite the weight of the FiraCode file in case 36 | # the automatic weight detection doesn't fit well. 37 | 38 | FONT_WEIGHT=( 39 | # Example 40 | # ["IBMPlexMono-Thin"]="Light" 41 | # ["IBMPlexMono-Regular"]="Regular" 42 | # ["IBMPlexMono-Text"]="Retina" 43 | # ["IBMPlexMono-Bold"]="Bold" 44 | ) 45 | 46 | # If this variable is set to true, only the files specified in $FONT_WEIGHT 47 | # will be ligated. Otherwise, all the font files will also be. 48 | FILTER_BY_FONT_WEIGHT=false 49 | 50 | # Copy glyphs for (some) individual characters from the ligature font as well. 51 | # This will result in punctuation that matches the ligatures more closely, but 52 | # may not fit in as well with the rest of the font. 53 | COPY_GLYPHS=true 54 | 55 | # Remove the currently existing ligatures from the input font file. It is 56 | # recommended in case of glitches presented in the resulting font. 57 | REMOVE_ORIGINAL_LIGATURES=true 58 | 59 | pushd "$LIGA_DIR" || exit 60 | build_family 61 | popd || exit 62 | 63 | # Finally you could copy the font license to the output 64 | # directory, like: 65 | cp "$INPUT_DIR/UFL.txt" "$OUTPUT_DIR" 66 | -------------------------------------------------------------------------------- /fonts/Ubuntu Mono/config.py: -------------------------------------------------------------------------------- 1 | # This is an autogenerated configuration that includes, principally, a set of 2 | # curated features that ligate.py will attempt to copy from Fira Code to your 3 | # output font. Each feature may have a list of lookups (it can also have an 4 | # empty list). Features/lookups that aren't present in the version of Fira Code 5 | # you're using will be skipped. To disable features/lookups, simply comment 6 | # them out in this file. 7 | # 8 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 9 | 10 | config = { 11 | # When copying character glyphs from FiraCode, sometimes it is necessary to 12 | # adjust manually the glyph size by a scale factor. It will be ignored if 13 | # it's less than or equal to 0. 14 | "scale": 1.0, 15 | # Like above, sometimes it is necessary to translate it vertically by a 16 | # factor and direction. It can be any float, including zero and negatives. 17 | "yTranslate": 0.0, 18 | # Copy glyphs for individual characters from the ligature font as well. 19 | # Each item value is a postscript name from the FiraCode family, that can 20 | # be queried from the FontForge's GUI. It's also useful for characters 21 | # outside ligature contexts. 22 | "glyphs": [ 23 | # "ampersand", 24 | # "asciicircum", 25 | "asciitilde", 26 | "asterisk", 27 | "asteriskmath", 28 | "backslash", 29 | "bar", 30 | # "colon", 31 | # "equal", 32 | # "exclam", 33 | # "greater", 34 | "hyphen", 35 | # "less", 36 | # "numbersign", 37 | # "percent", 38 | # "period", 39 | # "plus", 40 | # "question", 41 | # "semicolon", 42 | "slash", 43 | "underscore", 44 | # "at", 45 | # "braceleft", 46 | # "braceright", 47 | # "bracketleft", 48 | # "bracketright", 49 | # "dollar", 50 | # "parenleft", 51 | # "parenright", 52 | ], 53 | "features": { 54 | "calt": [ 55 | "less_bar_greater", 56 | "bar_bar_bar_greater", 57 | "less_bar_bar_bar", 58 | "bar_bar_greater", 59 | "less_bar_bar", 60 | "bar_greater", 61 | "less_bar", 62 | "bar_bar_bar", 63 | "greater_greater_greater", 64 | "less_less_less", 65 | "bar_bar", 66 | "greater_greater", 67 | "less_less", 68 | "less_exclam_hyphen_hyphen", 69 | "asciitilde_asciitilde_greater", 70 | "asterisk_asterisk_asterisk", 71 | "colon_colon_colon", 72 | "colon_colon_equal", 73 | "equal_equal_equal", 74 | "exclam_equal_equal", 75 | "exclam_exclam_period", 76 | "less_asciitilde_asciitilde", 77 | "less_asciitilde_greater", 78 | "less_asterisk_greater", 79 | "less_dollar_greater", 80 | "less_plus_greater", 81 | "less_slash_greater", 82 | "numbersign_underscore_parenleft", 83 | "period_period_equal", 84 | "period_period_less", 85 | # "period_period_period", 86 | "plus_plus_plus", 87 | "slash_slash_slash", 88 | "w_w_w", 89 | # "ampersand_ampersand", 90 | "asciicircum_equal", 91 | "asciitilde_asciitilde", 92 | "asciitilde_at", 93 | "asciitilde_greater", 94 | "asciitilde_hyphen", 95 | "asterisk_asterisk", 96 | "asterisk_greater", 97 | "asterisk_slash", 98 | "bar_braceright", 99 | "bar_bracketright", 100 | "braceleft_bar", 101 | "bracketleft_bar", 102 | "bracketright_numbersign", 103 | "colon_colon", 104 | "colon_equal", 105 | "dollar_greater", 106 | "equal_equal", 107 | "exclam_equal", 108 | "exclam_exclam", 109 | "greater_equal", 110 | "hyphen_asciitilde", 111 | "hyphen_hyphen", 112 | "less_asciitilde", 113 | "less_asterisk", 114 | "less_dollar", 115 | "less_equal", 116 | "less_greater", 117 | "less_plus", 118 | "less_slash", 119 | "numbersign_braceleft", 120 | "numbersign_bracketleft", 121 | "numbersign_colon", 122 | "numbersign_equal", 123 | "numbersign_exclam", 124 | "numbersign_parenleft", 125 | "numbersign_question", 126 | "numbersign_underscore", 127 | # "percent_percent", 128 | # "period_period", 129 | "period_question", 130 | "plus_greater", 131 | "plus_plus", 132 | "question_equal", 133 | "question_period", 134 | "question_question", 135 | # "semicolon_semicolon", 136 | "slash_asterisk", 137 | "slash_greater", 138 | "slash_slash", 139 | "center", 140 | "slash_backslash", 141 | "backslash_slash", 142 | "hexadecimal_x", 143 | "equal_arrows", 144 | "hyphen_arrows", 145 | "lowercase_hyphen", 146 | "lowercase_plus", 147 | "lowercase_asterisk", 148 | "lowercase_asteriskmath", 149 | "uppercase_colon", 150 | # "numbersigns", 151 | "underscores", 152 | ], 153 | "ss02": [], 154 | "ss03": [], 155 | "ss04": [], 156 | "ss05": [], 157 | "ss06": [ 158 | "backslash_thin", 159 | ], 160 | "ss07": [ 161 | "equal_asciitilde", 162 | "exclam_asciitilde", 163 | ], 164 | "ss08": [], 165 | "ss09": [ 166 | "restore_greater_greater_equal", 167 | "restore_less_less_equal", 168 | "restore_bar_bar_equal", 169 | "restore_bar_equal", 170 | ], 171 | "cv15": [], 172 | "cv16": [], 173 | "cv17": [], 174 | "cv18": [], 175 | "cv19": [], 176 | "cv20": [ 177 | "less_equal_cv20", 178 | ], 179 | "cv21": [ 180 | "equal_less_cv21", 181 | ], 182 | "cv22": [ 183 | "equal_less_cv22", 184 | ], 185 | "cv23": [], 186 | "cv24": [ 187 | "slash_equal_as_not_equal", 188 | ], 189 | "cv25": [ 190 | "period_hyphen", 191 | ], 192 | "cv26": [ 193 | "colon_hyphen", 194 | ], 195 | "cv27": [ 196 | "bracketleft_bracketright", 197 | ], 198 | "cv28": [], 199 | "cv29": [], 200 | "cv30": [], 201 | "cv31": [], 202 | "cv32": [ 203 | "period_equal", 204 | ], 205 | }, 206 | } 207 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Font Tester 7 | 8 | 9 | 10 | 42 | 43 | 44 |
45 | 46 |
47 | 48 | 51 | 54 | 57 | 58 | 61 | 62 | 65 | 70 |
71 | 72 |
73 | 74 | 107 | -------------------------------------------------------------------------------- /input/Anonymous Pro/AnonymousPro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Anonymous Pro/AnonymousPro-Bold.ttf -------------------------------------------------------------------------------- /input/Anonymous Pro/AnonymousPro-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Anonymous Pro/AnonymousPro-BoldItalic.ttf -------------------------------------------------------------------------------- /input/Anonymous Pro/AnonymousPro-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Anonymous Pro/AnonymousPro-Italic.ttf -------------------------------------------------------------------------------- /input/Anonymous Pro/AnonymousPro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Anonymous Pro/AnonymousPro-Regular.ttf -------------------------------------------------------------------------------- /input/Anonymous Pro/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009, Mark Simonson (http://www.ms-studio.com, mark@marksimonson.com), 2 | with Reserved Font Name Anonymous Pro. 3 | 4 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 5 | This license is copied below, and is also available with a FAQ at: 6 | http://scripts.sil.org/OFL 7 | 8 | 9 | ----------------------------------------------------------- 10 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 11 | ----------------------------------------------------------- 12 | 13 | PREAMBLE 14 | The goals of the Open Font License (OFL) are to stimulate worldwide 15 | development of collaborative font projects, to support the font creation 16 | efforts of academic and linguistic communities, and to provide a free and 17 | open framework in which fonts may be shared and improved in partnership 18 | with others. 19 | 20 | The OFL allows the licensed fonts to be used, studied, modified and 21 | redistributed freely as long as they are not sold by themselves. The 22 | fonts, including any derivative works, can be bundled, embedded, 23 | redistributed and/or sold with any software provided that any reserved 24 | names are not used by derivative works. The fonts and derivatives, 25 | however, cannot be released under any other type of license. The 26 | requirement for fonts to remain under this license does not apply 27 | to any document created using the fonts or their derivatives. 28 | 29 | DEFINITIONS 30 | "Font Software" refers to the set of files released by the Copyright 31 | Holder(s) under this license and clearly marked as such. This may 32 | include source files, build scripts and documentation. 33 | 34 | "Reserved Font Name" refers to any names specified as such after the 35 | copyright statement(s). 36 | 37 | "Original Version" refers to the collection of Font Software components as 38 | distributed by the Copyright Holder(s). 39 | 40 | "Modified Version" refers to any derivative made by adding to, deleting, 41 | or substituting -- in part or in whole -- any of the components of the 42 | Original Version, by changing formats or by porting the Font Software to a 43 | new environment. 44 | 45 | "Author" refers to any designer, engineer, programmer, technical 46 | writer or other person who contributed to the Font Software. 47 | 48 | PERMISSION & CONDITIONS 49 | Permission is hereby granted, free of charge, to any person obtaining 50 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 51 | redistribute, and sell modified and unmodified copies of the Font 52 | Software, subject to the following conditions: 53 | 54 | 1) Neither the Font Software nor any of its individual components, 55 | in Original or Modified Versions, may be sold by itself. 56 | 57 | 2) Original or Modified Versions of the Font Software may be bundled, 58 | redistributed and/or sold with any software, provided that each copy 59 | contains the above copyright notice and this license. These can be 60 | included either as stand-alone text files, human-readable headers or 61 | in the appropriate machine-readable metadata fields within text or 62 | binary files as long as those fields can be easily viewed by the user. 63 | 64 | 3) No Modified Version of the Font Software may use the Reserved Font 65 | Name(s) unless explicit written permission is granted by the corresponding 66 | Copyright Holder. This restriction only applies to the primary font name as 67 | presented to the users. 68 | 69 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 70 | Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except to acknowledge the contribution(s) of the 72 | Copyright Holder(s) and the Author(s) or with their explicit written 73 | permission. 74 | 75 | 5) The Font Software, modified or unmodified, in part or in whole, 76 | must be distributed entirely under this license, and must not be 77 | distributed under any other license. The requirement for fonts to 78 | remain under this license does not apply to any document created 79 | using the Font Software. 80 | 81 | TERMINATION 82 | This license becomes null and void if any of the above conditions are 83 | not met. 84 | 85 | DISCLAIMER 86 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 87 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 88 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 89 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 90 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 91 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 92 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 94 | OTHER DEALINGS IN THE FONT SOFTWARE. 95 | -------------------------------------------------------------------------------- /input/DejaVu Sans Mono/DejaVuSansMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/DejaVu Sans Mono/DejaVuSansMono-Bold.ttf -------------------------------------------------------------------------------- /input/DejaVu Sans Mono/DejaVuSansMono-BoldOblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/DejaVu Sans Mono/DejaVuSansMono-BoldOblique.ttf -------------------------------------------------------------------------------- /input/DejaVu Sans Mono/DejaVuSansMono-Oblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/DejaVu Sans Mono/DejaVuSansMono-Oblique.ttf -------------------------------------------------------------------------------- /input/DejaVu Sans Mono/DejaVuSansMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/DejaVu Sans Mono/DejaVuSansMono.ttf -------------------------------------------------------------------------------- /input/DejaVu Sans Mono/LICENSE: -------------------------------------------------------------------------------- 1 | Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. 2 | Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) 3 | 4 | 5 | Bitstream Vera Fonts Copyright 6 | ------------------------------ 7 | 8 | Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is 9 | a trademark of Bitstream, Inc. 10 | 11 | Permission is hereby granted, free of charge, to any person obtaining a copy 12 | of the fonts accompanying this license ("Fonts") and associated 13 | documentation files (the "Font Software"), to reproduce and distribute the 14 | Font Software, including without limitation the rights to use, copy, merge, 15 | publish, distribute, and/or sell copies of the Font Software, and to permit 16 | persons to whom the Font Software is furnished to do so, subject to the 17 | following conditions: 18 | 19 | The above copyright and trademark notices and this permission notice shall 20 | be included in all copies of one or more of the Font Software typefaces. 21 | 22 | The Font Software may be modified, altered, or added to, and in particular 23 | the designs of glyphs or characters in the Fonts may be modified and 24 | additional glyphs or characters may be added to the Fonts, only if the fonts 25 | are renamed to names not containing either the words "Bitstream" or the word 26 | "Vera". 27 | 28 | This License becomes null and void to the extent applicable to Fonts or Font 29 | Software that has been modified and is distributed under the "Bitstream 30 | Vera" names. 31 | 32 | The Font Software may be sold as part of a larger software package but no 33 | copy of one or more of the Font Software typefaces may be sold by itself. 34 | 35 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 36 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, 37 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, 38 | TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME 39 | FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING 40 | ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, 41 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 42 | THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE 43 | FONT SOFTWARE. 44 | 45 | Except as contained in this notice, the names of Gnome, the Gnome 46 | Foundation, and Bitstream Inc., shall not be used in advertising or 47 | otherwise to promote the sale, use or other dealings in this Font Software 48 | without prior written authorization from the Gnome Foundation or Bitstream 49 | Inc., respectively. For further information, contact: fonts at gnome dot 50 | org. 51 | 52 | Arev Fonts Copyright 53 | ------------------------------ 54 | 55 | Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. 56 | 57 | Permission is hereby granted, free of charge, to any person obtaining 58 | a copy of the fonts accompanying this license ("Fonts") and 59 | associated documentation files (the "Font Software"), to reproduce 60 | and distribute the modifications to the Bitstream Vera Font Software, 61 | including without limitation the rights to use, copy, merge, publish, 62 | distribute, and/or sell copies of the Font Software, and to permit 63 | persons to whom the Font Software is furnished to do so, subject to 64 | the following conditions: 65 | 66 | The above copyright and trademark notices and this permission notice 67 | shall be included in all copies of one or more of the Font Software 68 | typefaces. 69 | 70 | The Font Software may be modified, altered, or added to, and in 71 | particular the designs of glyphs or characters in the Fonts may be 72 | modified and additional glyphs or characters may be added to the 73 | Fonts, only if the fonts are renamed to names not containing either 74 | the words "Tavmjong Bah" or the word "Arev". 75 | 76 | This License becomes null and void to the extent applicable to Fonts 77 | or Font Software that has been modified and is distributed under the 78 | "Tavmjong Bah Arev" names. 79 | 80 | The Font Software may be sold as part of a larger software package but 81 | no copy of one or more of the Font Software typefaces may be sold by 82 | itself. 83 | 84 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 85 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 86 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 87 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL 88 | TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 89 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 90 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 91 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 92 | OTHER DEALINGS IN THE FONT SOFTWARE. 93 | 94 | Except as contained in this notice, the name of Tavmjong Bah shall not 95 | be used in advertising or otherwise to promote the sale, use or other 96 | dealings in this Font Software without prior written authorization 97 | from Tavmjong Bah. For further information, contact: tavmjong @ free 98 | . fr. 99 | 100 | TeX Gyre DJV Math 101 | ----------------- 102 | Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. 103 | 104 | Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski 105 | (on behalf of TeX users groups) are in public domain. 106 | 107 | Letters imported from Euler Fraktur from AMSfonts are (c) American 108 | Mathematical Society (see below). 109 | Bitstream Vera Fonts Copyright 110 | Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera 111 | is a trademark of Bitstream, Inc. 112 | 113 | Permission is hereby granted, free of charge, to any person obtaining a copy 114 | of the fonts accompanying this license (“Fonts”) and associated 115 | documentation 116 | files (the “Font Software”), to reproduce and distribute the Font Software, 117 | including without limitation the rights to use, copy, merge, publish, 118 | distribute, 119 | and/or sell copies of the Font Software, and to permit persons to whom 120 | the Font Software is furnished to do so, subject to the following 121 | conditions: 122 | 123 | The above copyright and trademark notices and this permission notice 124 | shall be 125 | included in all copies of one or more of the Font Software typefaces. 126 | 127 | The Font Software may be modified, altered, or added to, and in particular 128 | the designs of glyphs or characters in the Fonts may be modified and 129 | additional 130 | glyphs or characters may be added to the Fonts, only if the fonts are 131 | renamed 132 | to names not containing either the words “Bitstream” or the word “Vera”. 133 | 134 | This License becomes null and void to the extent applicable to Fonts or 135 | Font Software 136 | that has been modified and is distributed under the “Bitstream Vera” 137 | names. 138 | 139 | The Font Software may be sold as part of a larger software package but 140 | no copy 141 | of one or more of the Font Software typefaces may be sold by itself. 142 | 143 | THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS 144 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, 145 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, 146 | TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME 147 | FOUNDATION 148 | BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, 149 | SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN 150 | ACTION 151 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR 152 | INABILITY TO USE 153 | THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. 154 | Except as contained in this notice, the names of GNOME, the GNOME 155 | Foundation, 156 | and Bitstream Inc., shall not be used in advertising or otherwise to promote 157 | the sale, use or other dealings in this Font Software without prior written 158 | authorization from the GNOME Foundation or Bitstream Inc., respectively. 159 | For further information, contact: fonts at gnome dot org. 160 | 161 | AMSFonts (v. 2.2) copyright 162 | 163 | The PostScript Type 1 implementation of the AMSFonts produced by and 164 | previously distributed by Blue Sky Research and Y&Y, Inc. are now freely 165 | available for general use. This has been accomplished through the 166 | cooperation 167 | of a consortium of scientific publishers with Blue Sky Research and Y&Y. 168 | Members of this consortium include: 169 | 170 | Elsevier Science IBM Corporation Society for Industrial and Applied 171 | Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS) 172 | 173 | In order to assure the authenticity of these fonts, copyright will be 174 | held by 175 | the American Mathematical Society. This is not meant to restrict in any way 176 | the legitimate use of the fonts, such as (but not limited to) electronic 177 | distribution of documents containing these fonts, inclusion of these fonts 178 | into other public domain or commercial font collections or computer 179 | applications, use of the outline data to create derivative fonts and/or 180 | faces, etc. However, the AMS does require that the AMS copyright notice be 181 | removed from any derivative versions of the fonts which have been altered in 182 | any way. In addition, to ensure the fidelity of TeX documents using Computer 183 | Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces, 184 | has requested that any alterations which yield different font metrics be 185 | given a different name. 186 | 187 | $Id$ 188 | -------------------------------------------------------------------------------- /input/Fantasque Sans Mono/FantasqueSansMono-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Fantasque Sans Mono/FantasqueSansMono-Bold.otf -------------------------------------------------------------------------------- /input/Fantasque Sans Mono/FantasqueSansMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Fantasque Sans Mono/FantasqueSansMono-Bold.ttf -------------------------------------------------------------------------------- /input/Fantasque Sans Mono/FantasqueSansMono-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Fantasque Sans Mono/FantasqueSansMono-BoldItalic.otf -------------------------------------------------------------------------------- /input/Fantasque Sans Mono/FantasqueSansMono-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Fantasque Sans Mono/FantasqueSansMono-BoldItalic.ttf -------------------------------------------------------------------------------- /input/Fantasque Sans Mono/FantasqueSansMono-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Fantasque Sans Mono/FantasqueSansMono-Italic.otf -------------------------------------------------------------------------------- /input/Fantasque Sans Mono/FantasqueSansMono-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Fantasque Sans Mono/FantasqueSansMono-Italic.ttf -------------------------------------------------------------------------------- /input/Fantasque Sans Mono/FantasqueSansMono-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Fantasque Sans Mono/FantasqueSansMono-Regular.otf -------------------------------------------------------------------------------- /input/Fantasque Sans Mono/FantasqueSansMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Fantasque Sans Mono/FantasqueSansMono-Regular.ttf -------------------------------------------------------------------------------- /input/Fantasque Sans Mono/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2017, Jany Belluz (jany.belluz@hotmail.fr) 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 | -------------------------------------------------------------------------------- /input/Hack/Hack-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hack/Hack-Bold.ttf -------------------------------------------------------------------------------- /input/Hack/Hack-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hack/Hack-BoldItalic.ttf -------------------------------------------------------------------------------- /input/Hack/Hack-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hack/Hack-Italic.ttf -------------------------------------------------------------------------------- /input/Hack/Hack-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hack/Hack-Regular.ttf -------------------------------------------------------------------------------- /input/Hermit/Hermit-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hermit/Hermit-Bold.otf -------------------------------------------------------------------------------- /input/Hermit/Hermit-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hermit/Hermit-BoldItalic.otf -------------------------------------------------------------------------------- /input/Hermit/Hermit-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hermit/Hermit-Light.otf -------------------------------------------------------------------------------- /input/Hermit/Hermit-LightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hermit/Hermit-LightItalic.otf -------------------------------------------------------------------------------- /input/Hermit/Hermit-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hermit/Hermit-Regular.otf -------------------------------------------------------------------------------- /input/Hermit/Hermit-RegularItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Hermit/Hermit-RegularItalic.otf -------------------------------------------------------------------------------- /input/Hermit/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013, Pablo Caro - http://pcaro.es/ 2 | with Reserved Font Name Hermit. 3 | 4 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 5 | This license is copied below, and is also available with a FAQ at: 6 | http://scripts.sil.org/OFL 7 | 8 | 9 | ----------------------------------------------------------- 10 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 11 | ----------------------------------------------------------- 12 | 13 | PREAMBLE 14 | The goals of the Open Font License (OFL) are to stimulate worldwide 15 | development of collaborative font projects, to support the font creation 16 | efforts of academic and linguistic communities, and to provide a free and 17 | open framework in which fonts may be shared and improved in partnership 18 | with others. 19 | 20 | The OFL allows the licensed fonts to be used, studied, modified and 21 | redistributed freely as long as they are not sold by themselves. The 22 | fonts, including any derivative works, can be bundled, embedded, 23 | redistributed and/or sold with any software provided that any reserved 24 | names are not used by derivative works. The fonts and derivatives, 25 | however, cannot be released under any other type of license. The 26 | requirement for fonts to remain under this license does not apply 27 | to any document created using the fonts or their derivatives. 28 | 29 | DEFINITIONS 30 | "Font Software" refers to the set of files released by the Copyright 31 | Holder(s) under this license and clearly marked as such. This may 32 | include source files, build scripts and documentation. 33 | 34 | "Reserved Font Name" refers to any names specified as such after the 35 | copyright statement(s). 36 | 37 | "Original Version" refers to the collection of Font Software components as 38 | distributed by the Copyright Holder(s). 39 | 40 | "Modified Version" refers to any derivative made by adding to, deleting, 41 | or substituting -- in part or in whole -- any of the components of the 42 | Original Version, by changing formats or by porting the Font Software to a 43 | new environment. 44 | 45 | "Author" refers to any designer, engineer, programmer, technical 46 | writer or other person who contributed to the Font Software. 47 | 48 | PERMISSION & CONDITIONS 49 | Permission is hereby granted, free of charge, to any person obtaining 50 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 51 | redistribute, and sell modified and unmodified copies of the Font 52 | Software, subject to the following conditions: 53 | 54 | 1) Neither the Font Software nor any of its individual components, 55 | in Original or Modified Versions, may be sold by itself. 56 | 57 | 2) Original or Modified Versions of the Font Software may be bundled, 58 | redistributed and/or sold with any software, provided that each copy 59 | contains the above copyright notice and this license. These can be 60 | included either as stand-alone text files, human-readable headers or 61 | in the appropriate machine-readable metadata fields within text or 62 | binary files as long as those fields can be easily viewed by the user. 63 | 64 | 3) No Modified Version of the Font Software may use the Reserved Font 65 | Name(s) unless explicit written permission is granted by the corresponding 66 | Copyright Holder. This restriction only applies to the primary font name as 67 | presented to the users. 68 | 69 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 70 | Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except to acknowledge the contribution(s) of the 72 | Copyright Holder(s) and the Author(s) or with their explicit written 73 | permission. 74 | 75 | 5) The Font Software, modified or unmodified, in part or in whole, 76 | must be distributed entirely under this license, and must not be 77 | distributed under any other license. The requirement for fonts to 78 | remain under this license does not apply to any document created 79 | using the Font Software. 80 | 81 | TERMINATION 82 | This license becomes null and void if any of the above conditions are 83 | not met. 84 | 85 | DISCLAIMER 86 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 87 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 88 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 89 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 90 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 91 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 92 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 94 | OTHER DEALINGS IN THE FONT SOFTWARE. 95 | -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-Bold.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-BoldItalic.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-ExtraLight.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-ExtraLightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-ExtraLightItalic.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-Italic.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-Light.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-LightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-LightItalic.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-Medium.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-MediumItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-MediumItalic.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-Regular.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-SemiBold.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-SemiBoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-SemiBoldItalic.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-Text.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-Text.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-TextItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-TextItalic.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-Thin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-Thin.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/IBMPlexMono-ThinItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/IBM Plex Mono/IBMPlexMono-ThinItalic.otf -------------------------------------------------------------------------------- /input/IBM Plex Mono/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | 5 | This license is copied below, and is also available with a FAQ at: 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 | -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-Bold.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-BoldItalic.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-ExtraLight.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-Italic.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-Light.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-LightItalic.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-Medium.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-MediumItalic.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-Regular.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-SemiBold.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-Thin.ttf -------------------------------------------------------------------------------- /input/Roboto Mono/RobotoMono-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Roboto Mono/RobotoMono-ThinItalic.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. 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 | -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-Black.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-BlackItalic.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-Bold.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-BoldItalic.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-ExtraBold.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-ExtraLight.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-Italic.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-Light.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-LightItalic.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-Medium.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-MediumItalic.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-Regular.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-SemiBold.ttf -------------------------------------------------------------------------------- /input/Source Code Pro/SourceCodePro-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Source Code Pro/SourceCodePro-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /input/Space Mono/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2016 Google Inc. All Rights Reserved. 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 | -------------------------------------------------------------------------------- /input/Space Mono/SpaceMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Space Mono/SpaceMono-Bold.ttf -------------------------------------------------------------------------------- /input/Space Mono/SpaceMono-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Space Mono/SpaceMono-BoldItalic.ttf -------------------------------------------------------------------------------- /input/Space Mono/SpaceMono-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Space Mono/SpaceMono-Italic.ttf -------------------------------------------------------------------------------- /input/Space Mono/SpaceMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Space Mono/SpaceMono-Regular.ttf -------------------------------------------------------------------------------- /input/Ubuntu Mono/UFL.txt: -------------------------------------------------------------------------------- 1 | ------------------------------- 2 | UBUNTU FONT LICENCE Version 1.0 3 | ------------------------------- 4 | 5 | PREAMBLE 6 | This licence allows the licensed fonts to be used, studied, modified and 7 | redistributed freely. The fonts, including any derivative works, can be 8 | bundled, embedded, and redistributed provided the terms of this licence 9 | are met. The fonts and derivatives, however, cannot be released under 10 | any other licence. The requirement for fonts to remain under this 11 | licence does not require any document created using the fonts or their 12 | derivatives to be published under this licence, as long as the primary 13 | purpose of the document is not to be a vehicle for the distribution of 14 | the fonts. 15 | 16 | DEFINITIONS 17 | "Font Software" refers to the set of files released by the Copyright 18 | Holder(s) under this licence and clearly marked as such. This may 19 | include source files, build scripts and documentation. 20 | 21 | "Original Version" refers to the collection of Font Software components 22 | as received under this licence. 23 | 24 | "Modified Version" refers to any derivative made by adding to, deleting, 25 | or substituting -- in part or in whole -- any of the components of the 26 | Original Version, by changing formats or by porting the Font Software to 27 | a new environment. 28 | 29 | "Copyright Holder(s)" refers to all individuals and companies who have a 30 | copyright ownership of the Font Software. 31 | 32 | "Substantially Changed" refers to Modified Versions which can be easily 33 | identified as dissimilar to the Font Software by users of the Font 34 | Software comparing the Original Version with the Modified Version. 35 | 36 | To "Propagate" a work means to do anything with it that, without 37 | permission, would make you directly or secondarily liable for 38 | infringement under applicable copyright law, except executing it on a 39 | computer or modifying a private copy. Propagation includes copying, 40 | distribution (with or without modification and with or without charging 41 | a redistribution fee), making available to the public, and in some 42 | countries other activities as well. 43 | 44 | PERMISSION & CONDITIONS 45 | This licence does not grant any rights under trademark law and all such 46 | rights are reserved. 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining a 49 | copy of the Font Software, to propagate the Font Software, subject to 50 | the below conditions: 51 | 52 | 1) Each copy of the Font Software must contain the above copyright 53 | notice and this licence. These can be included either as stand-alone 54 | text files, human-readable headers or in the appropriate machine- 55 | readable metadata fields within text or binary files as long as those 56 | fields can be easily viewed by the user. 57 | 58 | 2) The font name complies with the following: 59 | (a) The Original Version must retain its name, unmodified. 60 | (b) Modified Versions which are Substantially Changed must be renamed to 61 | avoid use of the name of the Original Version or similar names entirely. 62 | (c) Modified Versions which are not Substantially Changed must be 63 | renamed to both (i) retain the name of the Original Version and (ii) add 64 | additional naming elements to distinguish the Modified Version from the 65 | Original Version. The name of such Modified Versions must be the name of 66 | the Original Version, with "derivative X" where X represents the name of 67 | the new work, appended to that name. 68 | 69 | 3) The name(s) of the Copyright Holder(s) and any contributor to the 70 | Font Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except (i) as required by this licence, (ii) to 72 | acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with 73 | their explicit written permission. 74 | 75 | 4) The Font Software, modified or unmodified, in part or in whole, must 76 | be distributed entirely under this licence, and must not be distributed 77 | under any other licence. The requirement for fonts to remain under this 78 | licence does not affect any document created using the Font Software, 79 | except any version of the Font Software extracted from a document 80 | created using the Font Software may only be distributed under this 81 | licence. 82 | 83 | TERMINATION 84 | This licence becomes null and void if any of the above conditions are 85 | not met. 86 | 87 | DISCLAIMER 88 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 89 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 90 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF 91 | COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 92 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 93 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 94 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 95 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER 96 | DEALINGS IN THE FONT SOFTWARE. 97 | -------------------------------------------------------------------------------- /input/Ubuntu Mono/UbuntuMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Ubuntu Mono/UbuntuMono-Bold.ttf -------------------------------------------------------------------------------- /input/Ubuntu Mono/UbuntuMono-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Ubuntu Mono/UbuntuMono-BoldItalic.ttf -------------------------------------------------------------------------------- /input/Ubuntu Mono/UbuntuMono-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Ubuntu Mono/UbuntuMono-Italic.ttf -------------------------------------------------------------------------------- /input/Ubuntu Mono/UbuntuMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/input/Ubuntu Mono/UbuntuMono-Regular.ttf -------------------------------------------------------------------------------- /py/extract_fira_data.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from glyphsLib import GSFont 4 | import utils as u 5 | 6 | 7 | def extract_features(): 8 | file = open("fira.fea", "w") 9 | font = GSFont("fira.glyphs") 10 | for feature in font.featurePrefixes: 11 | file.write(feature.code + "\n") 12 | for feature in font.features: 13 | code = u.add_backslash_to_glyphs(feature.code) 14 | file.write( 15 | f"feature {feature.name} " 16 | + "{\n\t" 17 | + u.remove_last_newlines(code).replace("\n", "\n\t") 18 | + "\n}" 19 | + f" {feature.name};\n\n" 20 | ) 21 | file.close() 22 | 23 | 24 | def extract_classes(): 25 | font = GSFont("fira.glyphs") 26 | for _class in font.classes: 27 | file = open(f"classes/{_class.name}.fea", "w") 28 | file.write(_class.code) 29 | file.close() 30 | 31 | 32 | FEAT_FILE_COMMENT = """# This is an autogenerated configuration that includes, principally, a set of 33 | # curated features that ligate.py will attempt to copy from Fira Code to your 34 | # output font. Each feature may have a list of lookups (it can also have an 35 | # empty list). Features/lookups that aren't present in the version of Fira Code 36 | # you're using will be skipped. To disable features/lookups, simply comment 37 | # them out in this file. 38 | # 39 | # If you don't know what are these features, take a look at https://github.com/tonsky/FiraCode#readme. 40 | """ 41 | 42 | SCALE_FILE_COMMENT = """# When copying character glyphs from FiraCode, sometimes it is necessary to 43 | # adjust manually the glyph size by a scale factor. It will be ignored if 44 | # it's less than or equal to 0. 45 | """ 46 | 47 | YTRAN_FILE_COMMENT = """# Like above, sometimes it is necessary to translate it vertically by a 48 | # factor and direction. It can be any float, including zero and negatives. 49 | """ 50 | 51 | GLYPH_FILE_COMMENT = """# Copy glyphs for individual characters from the ligature font as well. 52 | # Each item value is a postscript name from the FiraCode family, that can 53 | # be queried from the FontForge's GUI. It's also useful for characters 54 | # outside ligature contexts. 55 | """ 56 | 57 | FEAT_BLACKLIST = { 58 | "aalt", 59 | "subs", 60 | "sups", 61 | "numr", 62 | "dnom", 63 | "frac", 64 | "ordn", 65 | "tnum", 66 | "onum", 67 | "case", 68 | "liga", 69 | "locl", 70 | "zero", 71 | "salt", 72 | "ccmp", 73 | "sinf", 74 | "hwid", 75 | "ss01", 76 | "ss10", 77 | }.union(set([f"cv{str(i).zfill(2)}" for i in range(1, 15)])) 78 | 79 | LOOKUP_BLACKLIST = {"caltGreekUCdiph", "caltGreekUC"} 80 | 81 | GLYPH_WHITELIST = f""" 82 | "ampersand", 83 | "asciicircum", 84 | "asciitilde", 85 | "asterisk", 86 | "asteriskmath", 87 | "backslash", 88 | "bar", 89 | "colon", 90 | "equal", 91 | "exclam", 92 | "greater", 93 | "hyphen", 94 | "less", 95 | "numbersign", 96 | "percent", 97 | "period", 98 | "plus", 99 | "question", 100 | "semicolon", 101 | "slash", 102 | "underscore", 103 | # "at", 104 | # "braceleft", 105 | # "braceright", 106 | # "bracketleft", 107 | # "bracketright", 108 | # "dollar", 109 | # "parenleft", 110 | # "parenright", 111 | """ 112 | 113 | 114 | def create_config_set_file(): 115 | font = GSFont("fira.glyphs") 116 | file = open("config_sample.py", "w") 117 | file.write(f"{FEAT_FILE_COMMENT}" + "\nconfig = {\n") 118 | file.write(f" {SCALE_FILE_COMMENT}" + ' "scale": 1.0,\n') 119 | file.write(f" {YTRAN_FILE_COMMENT}" + ' "yTranslate": 0.0,\n') 120 | file.write(f' {GLYPH_FILE_COMMENT} "glyphs": [{GLYPH_WHITELIST} ],\n') 121 | file.write(' "features": {\n') 122 | for feature in font.features: 123 | if feature.name not in FEAT_BLACKLIST: 124 | ls = u.lookups(feature.code) 125 | if len(ls) > 0: 126 | fls = "[\n" 127 | for i in range(len(ls)): 128 | if ls[i] not in LOOKUP_BLACKLIST: 129 | fls += f' "{ls[i]}",\n' 130 | fls += " ]" 131 | else: 132 | fls = "[]" 133 | file.write(f' "{feature.name}": {fls},\n') 134 | file.write(" },\n") 135 | file.write("}\n") 136 | file.close() 137 | 138 | 139 | def main(): 140 | extract_features() 141 | # extract_classes() 142 | create_config_set_file() 143 | 144 | 145 | if __name__ == "__main__": 146 | main() 147 | -------------------------------------------------------------------------------- /py/fontname.py: -------------------------------------------------------------------------------- 1 | def camelcase(s): 2 | return "".join([ss[0].upper() + ss[1:] for ss in s.split(" ") if len(ss) > 0]) 3 | 4 | 5 | def slice_postscript(s): 6 | sp = s.split("-") 7 | return (sp[:-1], sp[-1]) 8 | 9 | 10 | def slice_fullname(s): 11 | sp = s.split(" ") 12 | return (sp[:-1], sp[-1]) 13 | 14 | 15 | def add_postscript_style(s, w): 16 | if w: 17 | return f"{s}-{w}" 18 | else: 19 | return s 20 | 21 | 22 | def add_fullname_style(s, w): 23 | if w: 24 | return f"{s} {w}" 25 | else: 26 | return s 27 | 28 | 29 | # Assume that a general fullname has this pattern: 30 | # "FAMILY [STYLE]" where STYLE is an optional set of words separated (or not) 31 | # by a space. 32 | # The STYLE set is a permutation whose elements must be: 33 | # - Only a one WEIGHT_WORD 34 | # - Zero or more words defined in STYLE_WORDS 35 | # This would avoid some naming bugs that appear generally in italic fonts. 36 | 37 | STYLE_WORDS = [ 38 | "italic", 39 | "normal", 40 | "oblique", 41 | ] 42 | 43 | WEIGHT_WORDS = [ 44 | "ultralight", 45 | "ultlt", 46 | "extralight", 47 | "extlt", 48 | "thin", 49 | "light", 50 | "regular", 51 | "retina", 52 | "text", 53 | "medium", 54 | "medm", 55 | "semibold", 56 | "semibld", 57 | "smbld", 58 | "demibold", 59 | "demibld", 60 | "dmbld", 61 | "bld", 62 | "bold", 63 | "heavy", 64 | "extrabold", 65 | "extbld", 66 | "ultrabold", 67 | "ultbld", 68 | "black", 69 | ] 70 | 71 | 72 | def split_family_style(old_name, separator): 73 | words = old_name.split(separator) 74 | k = len(words) - 1 75 | while k >= 0 and ( 76 | words[k].lower() in STYLE_WORDS 77 | or words[k].lower() in WEIGHT_WORDS 78 | # Cartesian products 79 | or words[k].lower() in [i + j for i in STYLE_WORDS for j in WEIGHT_WORDS] 80 | or words[k].lower() in [j + i for i in STYLE_WORDS for j in WEIGHT_WORDS] 81 | ): 82 | k -= 1 83 | count = k + 1 84 | return (separator.join(words[:count]), separator.join(words[count:])) 85 | 86 | 87 | def safe_add_fullname_style(old_flname, name): 88 | family, style = split_family_style(old_flname, " ") 89 | if len(family) > 0: 90 | name_styled = add_fullname_style(name, style) 91 | else: 92 | name_styled = name 93 | return name_styled 94 | 95 | 96 | # A postscript has the same pattern but its words are separated by a hypen 97 | 98 | 99 | def safe_add_postname_style(old_psname, name): 100 | name = camelcase(name) 101 | family, style = split_family_style(old_psname, "-") 102 | if len(family) > 0: 103 | name_styled = add_postscript_style(name, style) 104 | else: 105 | name_styled = name 106 | return name_styled 107 | -------------------------------------------------------------------------------- /py/utils.py: -------------------------------------------------------------------------------- 1 | import re 2 | import os 3 | from pathlib import Path 4 | 5 | def relative_from_project(p): 6 | liga = Path(__file__).resolve().parent.parent 7 | return os.path.relpath(p, liga) 8 | 9 | 10 | def lookups(s): 11 | return re.findall("(?<=lookup )([\s\S]*?)(?= \{)", s) 12 | 13 | 14 | def remove_last_newlines(s): 15 | while s[-1:] == "\n" and len(s) > 0: 16 | s = s[:-1] 17 | return s 18 | 19 | 20 | def remove_duplicates(l): 21 | return list(dict.fromkeys(l)) 22 | 23 | 24 | def add_lookups_prefix(code): 25 | return re.sub( 26 | "(?<=\})\s+(?=\w+;)", " fira_", re.sub("lookup ", "lookup fira_", code) 27 | ) 28 | 29 | 30 | def add_backslash_to_glyphs(code): 31 | splitted_code = code.split("\n") 32 | new_code = [] 33 | for line in splitted_code: 34 | if re.search("(sub|by)\s+", line) is not None: 35 | splitted_line = re.split("\s+", re.sub("#.+", "", line)) 36 | line_res = [] 37 | for token in splitted_line: 38 | if token != "": 39 | if token not in ["sub", "ignore", "by", ";"] and ( 40 | (token[0] == "[" and token[1] not in ["@", "\\"]) 41 | or (token[0] not in ["[", "@", "\\"]) 42 | ): 43 | if token[0] != "[": 44 | line_res.append("\\" + token) 45 | else: 46 | line_res.append("[\\" + token[1:]) 47 | else: 48 | line_res.append(token) 49 | else: 50 | line_res.append(" ") 51 | new_line = " ".join(line_res) 52 | else: 53 | new_line = line 54 | new_code.append(new_line) 55 | return "\n".join(new_code) 56 | 57 | 58 | def uni(number): 59 | return hex(number).upper().replace("0X", "uni") 60 | 61 | 62 | def uni_range(start, end): 63 | return "\n".join([f' "{uni(u)}",' for u in range(start, end + 1)]) 64 | -------------------------------------------------------------------------------- /scripts/build_family.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # shellcheck source=/dev/null 4 | source "$SCRIPTS_DIR/progress_bar.sh" 5 | shopt -s extglob 6 | 7 | declare -A CSS_WEIGHTS 8 | 9 | # from fc-scan weight to css font-weight 10 | CSS_WEIGHTS=( 11 | ["0"]="100" # thin 12 | ["40"]="200" # extra light 13 | ["50"]="300" # light 14 | ["80"]="400" # regular 15 | ["90"]="450" # retina 16 | ["100"]="500" # medium 17 | ["180"]="600" # semi bold 18 | ["200"]="700" # bold 19 | ["210"]="900" # black 20 | ) 21 | 22 | insert_top() { 23 | { echo "$1"; cat "$2" 2> /dev/null; } >"$2".new 24 | mv "$2"{.new,} 25 | } 26 | 27 | build_family() { 28 | if [[ -z "$OUTPUT_NAME" ]]; then 29 | ARGS="--prefix '$PREFIX'" 30 | else 31 | ARGS="--output-name '$OUTPUT_NAME'" 32 | fi 33 | 34 | if [[ -z "$OUTPUT_DIR" ]]; then 35 | OUTPUT_DIR="output/$PREFIX$(basename "$INPUT_DIR")" 36 | fi 37 | 38 | if [[ -n "$CONFIG" ]]; then 39 | ARGS="$ARGS --config-file '$CONFIG'" 40 | fi 41 | 42 | if $COPY_GLYPHS; then 43 | ARGS="$ARGS --copy-character-glyphs" 44 | fi 45 | 46 | if $REMOVE_ORIGINAL_LIGATURES; then 47 | ARGS="$ARGS --remove-original-ligatures" 48 | fi 49 | 50 | if [ -d "$INPUT_DIR" ]; then 51 | mkdir -p "$OUTPUT_DIR" 52 | files=("$INPUT_DIR"/*.+(ttf|otf)) 53 | filtered_files=() 54 | if $FILTER_BY_FONT_WEIGHT; then 55 | for file in "${files[@]}"; do 56 | b=$(basename "$file" ".ttf") 57 | b=$(basename "$b" ".otf") 58 | w=${FONT_WEIGHT["$b"]} 59 | if [[ -n "$w" ]]; then 60 | filtered_files+=("$file") 61 | fi 62 | done 63 | else 64 | for file in "${files[@]}"; do 65 | filtered_files+=("$file") 66 | done 67 | fi 68 | total=${#filtered_files[@]} 69 | setup_scroll_area "$total" 70 | F_INPUT_DIR="$(python -c "import py.utils as u; print(u.relative_from_project(\"$INPUT_DIR\"))")" 71 | printf "\nFound %d fonts from %s directory to be ligated ✨\n" "$total" "$F_INPUT_DIR" 72 | for ((k = 0; k < total ; k++)); do 73 | draw_progress_bar "$k" 74 | file=${filtered_files[$k]} 75 | b=$(basename "$file" ".ttf") 76 | b=$(basename "$b" ".otf") 77 | w=${FONT_WEIGHT["$b"]} 78 | EXT="${file##*.}" 79 | if [[ -n "$w" ]]; then 80 | LIGATURE="--ligature-font-file 'fira/FiraCode-$w.$EXT'" 81 | else 82 | LIGATURE="" 83 | fi 84 | local attempt=1 85 | while (( $(find "$OUTPUT_DIR" -regex ".+\.\(otf\|ttf\)" -type f | wc -l) <= k )); do 86 | echo "" 87 | if (( attempt > 1 )); then 88 | echo -e "Fontforge has a bad day... attempt #$attempt\n" 89 | fi 90 | ERROR=$(eval "python ligate.py '$file' \ 91 | --output-dir '$OUTPUT_DIR'" \ 92 | "$LIGATURE" "$ARGS" 3>&1 1>&2 2>&3) 93 | if [[ -n "$ERROR" ]]; then 94 | mkdir -p "logs/$INPUT_DIR" 95 | LOG="logs/$b.$EXT.log" 96 | insert_top "" "$LOG" 97 | insert_top "$ERROR" "$LOG" 98 | insert_top "[$(date -R)]" "$LOG" 99 | fi 100 | # shellcheck disable=SC2126 101 | ERROR_COUNT=$(echo -n "$ERROR" | grep -A1 '====' | wc -l) 102 | if (( ERROR_COUNT > 1)); then 103 | printf "\n \033[0;31m✗\033[0m There are some errors saved at %s\n" "$LOG" 104 | else 105 | echo -e "\n \033[0;32m✓\033[0m Font ligated" 106 | fi 107 | ((attempt=attempt+1)) 108 | done 109 | 110 | # Add font data to the Font Tester .html page 111 | OUTPUT_FILE=$(ls -Art "$OUTPUT_DIR" | tail -n 1) 112 | COMPL_OUT_FILE="$OUTPUT_DIR/$OUTPUT_FILE" 113 | POST=$(fc-scan "$COMPL_OUT_FILE" -f "%{postscriptname}") 114 | FULL=$(fc-scan "$COMPL_OUT_FILE" -f "%{fullname}") 115 | CSS_WEIGHT=${CSS_WEIGHTS[$(fc-scan "$COMPL_OUT_FILE" -f "%{weight}")]} 116 | REL_IFILE="$(python -c "import py.utils as u; print(u.relative_from_project(\"$file\"))")" 117 | REL_OFILE="$(python -c "import py.utils as u; print(u.relative_from_project(\"$COMPL_OUT_FILE\"))")" 118 | echo -e "" \ 119 | >> "test/fonts.html" 120 | 121 | echo "@font-face {font-family:'$POST';src:url('../$REL_OFILE');font-weight:$CSS_WEIGHT;font-style:italic}" \ 122 | >> "test/fonts.css" 123 | 124 | echo "@font-face {font-family:'$POST';src:url('../$REL_IFILE');font-weight:$CSS_WEIGHT;font-style:normal}" \ 125 | >> "test/fonts.css" 126 | 127 | done 128 | destroy_scroll_area 129 | print_bar_text "$total"; echo "" 130 | else 131 | echo "Error: directory $INPUT_DIR does not exist" 132 | exit 1 133 | fi 134 | } 135 | -------------------------------------------------------------------------------- /scripts/clean.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | shopt -s globstar 4 | 5 | rm -rf test/fonts.css test/fonts.html output logs ./**/__pycache__ -------------------------------------------------------------------------------- /scripts/fetch_fira.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | version=6.2 4 | 5 | tmpDir=$(mktemp -d) 6 | 7 | wget "https://github.com/tonsky/FiraCode/releases/download/$version/Fira_Code_v$version.zip" \ 8 | -O "$tmpDir/fira.zip" 9 | 7z x -o"$tmpDir" "$tmpDir/fira.zip" 10 | 11 | rm -rf ./fira/* 12 | mv "$tmpDir"/ttf/* ./fira/ 13 | 14 | rm -rf "$tmpDir" 15 | 16 | wget "https://raw.githubusercontent.com/tonsky/FiraCode/$version/FiraCode.glyphs" \ 17 | -O ./fira.glyphs 18 | 19 | for f in ./fira/*.ttf; do 20 | fo=$(basename "$f" .ttf) 21 | fontforge -quiet -lang=ff -c "Open('$f'); Generate('./fira/$fo.otf'); Close();" 22 | done -------------------------------------------------------------------------------- /scripts/generate_build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SRC=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 4 | LIGA_DIR=$SRC/.. 5 | 6 | DIR=$1 7 | FONTS="$LIGA_DIR/fonts/$DIR" 8 | 9 | mkdir -p "$FONTS" 10 | mkdir -p "$LIGA_DIR/input/$DIR" 11 | 12 | cp "$LIGA_DIR/config_sample.py" "$FONTS/config.py" 13 | 14 | echo -ne "#!/usr/bin/env bash 15 | 16 | SRC=\$(realpath \"\$(dirname \"\${BASH_SOURCE[0]}\")\") 17 | 18 | # Project root path relative to this .sh file 19 | LIGA_DIR=\$SRC/../.. 20 | SCRIPTS_DIR=\$LIGA_DIR/scripts 21 | source \"\$SCRIPTS_DIR\"/build_family.sh 22 | declare -A FONT_WEIGHT 23 | 24 | # String to prefix the name of the generated font with. 25 | PREFIX=\"Liga \" 26 | 27 | # Name of the generated font. Completely replaces the original and prefix 28 | # variable will be ignored. 29 | # OUTPUT_NAME=\"\" 30 | 31 | # Where the generated font files will be located 32 | OUTPUT_DIR=\"\$LIGA_DIR/output/\$PREFIX\"\"$DIR\" 33 | 34 | # Where the input font files are located 35 | INPUT_DIR=\"\$LIGA_DIR/input/$DIR\" 36 | 37 | # The python file to copy the configuration from. 38 | CONFIG=\"\$SRC/config.py\" 39 | 40 | # The variable below is a associative array in which keys must be the basename 41 | # of each font file (without extensions), and values the following options: 42 | # - Light 43 | # - Regular 44 | # - Retina 45 | # - Medium 46 | # - SemiBold 47 | # - Bold 48 | # This serves the purpose of handwrite the weight of the FiraCode file in case 49 | # the automatic weight detection doesn't fit well. 50 | 51 | FONT_WEIGHT=( 52 | # Example 53 | # [\"IBMPlexMono-Thin\"]=\"Light\" 54 | # [\"IBMPlexMono-Regular\"]=\"Regular\" 55 | # [\"IBMPlexMono-Text\"]=\"Retina\" 56 | # [\"IBMPlexMono-Bold\"]=\"Bold\" 57 | ) 58 | 59 | # If this variable is set to true, only the files specified in \$FONT_WEIGHT 60 | # will be ligated. Otherwise, all the font files will also be. 61 | FILTER_BY_FONT_WEIGHT=false 62 | 63 | # Copy glyphs for (some) individual characters from the ligature font as well. 64 | # This will result in punctuation that matches the ligatures more closely, but 65 | # may not fit in as well with the rest of the font. 66 | COPY_GLYPHS=true 67 | 68 | # Remove the currently existing ligatures from the input font file. It is 69 | # recommended in case of glitches presented in the resulting font. 70 | REMOVE_ORIGINAL_LIGATURES=true 71 | 72 | pushd \"\$LIGA_DIR\" || exit 73 | build_family 74 | popd || exit 75 | 76 | # Finally you could copy the font license to the output 77 | # directory, like: 78 | # cp \"\$INPUT_DIR/LICENSE.txt\" \"\$OUTPUT_DIR\" 79 | " \ 80 | > "$FONTS/build.sh" 81 | 82 | chmod +x "$FONTS/build.sh" 83 | -------------------------------------------------------------------------------- /scripts/list_fonts.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | shopt -s globstar 4 | 5 | if [ "$(command -v exa)" ]; then 6 | exa -l -s mod -r fonts/**/build.sh 7 | else 8 | ls -l --sort time fonts/**/build.sh 9 | fi 10 | -------------------------------------------------------------------------------- /scripts/progress_bar.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # https://github.com/pollev/bash_progress_bar - See license at end of file 3 | 4 | # Usage: 5 | # Source this script 6 | # enable_trapping <- optional to clean up properly if user presses ctrl-c 7 | # setup_scroll_area <- create empty progress bar 8 | # draw_progress_bar 10 <- advance progress bar 9 | # draw_progress_bar 40 <- advance progress bar 10 | # block_progress_bar 45 <- turns the progress bar yellow to indicate some action is requested from the user 11 | # draw_progress_bar 90 <- advance progress bar 12 | # destroy_scroll_area <- remove progress bar 13 | 14 | # Constants 15 | CODE_SAVE_CURSOR="\033[s" 16 | CODE_RESTORE_CURSOR="\033[u" 17 | CODE_CURSOR_IN_SCROLL_AREA="\033[1A" 18 | 19 | # Variables 20 | TRAP_SET="false" 21 | 22 | CURRENT_NR_LINES=0 23 | CURRENT_NR_COLS=0 24 | CURRENT_TOTAL=1 25 | 26 | setup_scroll_area() { 27 | trap_on_interrupt 28 | 29 | lines=$(tput lines) 30 | CURRENT_NR_LINES=$lines 31 | cols=$(tput cols) 32 | CURRENT_NR_COLS=$cols 33 | CURRENT_TOTAL=$1 34 | ((lines=lines-1)) 35 | # Scroll down a bit to avoid visual glitch when the screen area shrinks by one row 36 | echo -en "\n" 37 | 38 | # Save cursor 39 | echo -en "$CODE_SAVE_CURSOR" 40 | # Set scroll region (this will place the cursor in the top left) 41 | echo -en "\033[0;${lines}r" 42 | 43 | # Restore cursor but ensure its inside the scrolling area 44 | echo -en "$CODE_RESTORE_CURSOR" 45 | echo -en "$CODE_CURSOR_IN_SCROLL_AREA" 46 | 47 | # Start empty progress bar 48 | draw_progress_bar 0 "$CURRENT_TOTAL" 49 | } 50 | 51 | destroy_scroll_area() { 52 | lines=$(tput lines) 53 | # Save cursor 54 | echo -en "$CODE_SAVE_CURSOR" 55 | # Set scroll region (this will place the cursor in the top left) 56 | echo -en "\033[0;${lines}r" 57 | 58 | # Restore cursor but ensure its inside the scrolling area 59 | echo -en "$CODE_RESTORE_CURSOR" 60 | echo -en "$CODE_CURSOR_IN_SCROLL_AREA" 61 | 62 | # We are done so clear the scroll bar 63 | clear_progress_bar 64 | 65 | # Scroll down a bit to avoid visual glitch when the screen area grows by one row 66 | echo -en "\n\n" 67 | 68 | # Once the scroll area is cleared, we want to remove any trap previously set. Otherwise, ctrl+c will exit our shell 69 | if [ "$TRAP_SET" = "true" ]; then 70 | trap - INT 71 | fi 72 | } 73 | 74 | draw_progress_bar() { 75 | current=$1 76 | lines=$(tput lines) 77 | cols=$(tput cols) 78 | ((lines=lines)) 79 | 80 | # Check if the window has been resized. If so, reset the scroll area 81 | if ((lines != CURRENT_NR_LINES)) || ((cols != CURRENT_NR_COLS)); then 82 | setup_scroll_area "$CURRENT_TOTAL" 83 | fi 84 | 85 | # Save cursor 86 | echo -en "$CODE_SAVE_CURSOR" 87 | 88 | # Move cursor position to last row 89 | echo -en "\033[${lines};0f" 90 | 91 | # Clear progress bar 92 | tput el 93 | 94 | # Draw progress bar 95 | print_bar_text "$current" "$total" 96 | 97 | # Restore cursor position 98 | echo -en "$CODE_RESTORE_CURSOR" 99 | } 100 | 101 | clear_progress_bar() { 102 | lines=$(tput lines) 103 | ((lines=lines)) 104 | # Save cursor 105 | echo -en "$CODE_SAVE_CURSOR" 106 | 107 | # Move cursor position to last row 108 | echo -en "\033[${lines};0f" 109 | 110 | # clear progress bar 111 | tput el 112 | 113 | # Restore cursor position 114 | echo -en "$CODE_RESTORE_CURSOR" 115 | } 116 | 117 | print_bar_text() { 118 | current=$1 119 | total=$CURRENT_TOTAL 120 | percentage=$((current*100/total)) 121 | cols=$(tput cols) 122 | ((half_cols=cols/2)) 123 | ((bar_size=half_cols-(${#total}*2+6))) 124 | 125 | # Prepare progress bar 126 | ((complete_size=bar_size*percentage/100)) 127 | ((remainder_size=bar_size-complete_size)) 128 | 129 | local left_bit="" 130 | if (( complete_size > 0 )); then 131 | left_bit="" 132 | fi 133 | local bit="" 134 | if (( complete_size > 1 )); then 135 | bit="" 136 | fi 137 | local right_bit="" 138 | if (( remainder_size == 0 )); then 139 | right_bit="" 140 | fi 141 | progress_bar=$(echo -ne $left_bit; printf_new $bit $complete_size; printf_new "" $remainder_size; echo -ne $right_bit); 142 | 143 | # Print progress bar 144 | white_space=$(printf_new "|" "$half_cols"); 145 | echo -en "$white_space $progress_bar $(printf "%${#total}s" "$current")/$total" 146 | } 147 | 148 | trap_on_interrupt() { 149 | # If this function is called, we setup an interrupt handler to cleanup the progress bar 150 | TRAP_SET="true" 151 | trap cleanup_on_interrupt INT 152 | } 153 | 154 | cleanup_on_interrupt() { 155 | destroy_scroll_area 156 | exit 157 | } 158 | 159 | printf_new() { 160 | str=$1 161 | num=$2 162 | for ((i=0; i test/showcases.txt -------------------------------------------------------------------------------- /scripts/update_builds.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | BUILDS=() 4 | 5 | mapfile -t BUILDS < <(find fonts -mindepth 1 -type d -not -path fonts/ignore | perl -p -e "s/fonts\///g") 6 | 7 | for item in "${BUILDS[@]}"; do 8 | ./scripts/generate_build.sh "$item" 9 | done -------------------------------------------------------------------------------- /server.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ssi-server/ssi_server.py -------------------------------------------------------------------------------- /showcase.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/showcase.gif -------------------------------------------------------------------------------- /ssi-server/LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /ssi-server/README.md: -------------------------------------------------------------------------------- 1 | ssi-server 2 | ========== 3 | 4 | Server Side Includes in Python's SimpleHTTPServer 5 | 6 | Use this in the same way as Python's SimpleHTTPServer: 7 | 8 | ./ssi_server.py [port] 9 | 10 | The only difference is that, for files ending in '.html', ssi_server will 11 | inline SSI (Server Side Includes) of the form: 12 | 13 | 14 | 15 | Quick start: 16 | 17 | git clone https://github.com/danvk/ssi-server.git 18 | cd ssi-server 19 | ./ssi_server 20 | (visit localhost:8000) in your browser. 21 | -------------------------------------------------------------------------------- /ssi-server/about.html: -------------------------------------------------------------------------------- 1 |

ssi_server is like Python's SimpleHTTPServer, but with minimal support for Server Side Includes (SSI).

2 | -------------------------------------------------------------------------------- /ssi-server/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ssi_server demo 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /ssi-server/ssi.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Shared code for ssi_server.py and ssi_expander.py. 3 | ''' 4 | 5 | import re 6 | import os.path 7 | import warnings 8 | 9 | error_tmpl = """ 10 |

11 | %s 12 |

13 | """ 14 | 15 | def InlineIncludes(path, web_path): 16 | """Read a file, expanding statements.""" 17 | def get_include_file_content(x): 18 | file_to_read = x.group(2) 19 | recursive_web_path = web_path 20 | if len(os.path.dirname(web_path)) >2: 21 | file_to_read = os.path.join(os.path.dirname(web_path),file_to_read)[1:] 22 | recursive_web_path = "/%s/" % os.path.dirname(file_to_read) 23 | if os.path.exists(file_to_read): 24 | # Recursively process ssi calls in the included file 25 | return InlineIncludes(file_to_read, recursive_web_path) 26 | else: 27 | error = "File not found: %s" % file_to_read 28 | warnings.warn(error) 29 | return error_tmpl % error 30 | 31 | content = open(path).read() 32 | content = re.sub(r'', 33 | get_include_file_content, 34 | content) 35 | return content 36 | -------------------------------------------------------------------------------- /ssi-server/ssi_expander.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | This script copies the files in one directory to another, expanding any SSI 4 | statements it encounters along the way. 5 | 6 | Usage: 7 | 8 | ./ssi_expander.py [source_directory] destination_directory 9 | 10 | If source_directory is not specified, then the current directory is used. 11 | ''' 12 | 13 | import os 14 | import ssi 15 | import sys 16 | 17 | def process(source, dest): 18 | for dirpath, dirnames, filenames in os.walk(source): 19 | dest_dir = os.path.realpath(os.path.join(dest, os.path.relpath(dirpath, source))) 20 | os.mkdir(dest_dir) 21 | for filename in filenames: 22 | src_path = os.path.abspath(os.path.join(dirpath, filename)) 23 | dest_path = os.path.join(dest_dir, filename) 24 | if not filename.endswith('.html'): 25 | os.symlink(src_path, dest_path) 26 | else: 27 | file(dest_path, 'w').write(ssi.InlineIncludes(src_path, "/%s" % os.path.relpath(src_path))) 28 | 29 | # ignore hidden directories 30 | for dirname in dirnames[:]: 31 | if dirname.startswith('.'): 32 | dirnames.remove(dirname) 33 | 34 | 35 | if __name__ == '__main__': 36 | if len(sys.argv) == 2: 37 | source = '.' 38 | dest = sys.argv[1] 39 | elif len(sys.argv) == 3: 40 | source, dest = sys.argv[1:] 41 | else: 42 | sys.stderr.write('Usage: %s [source_directory] destination_directory\n' % sys.argv[0]) 43 | sys.exit(1) 44 | 45 | process(source, dest) 46 | -------------------------------------------------------------------------------- /ssi-server/ssi_server.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Use this in the same way as Python's SimpleHTTPServer: 4 | 5 | ./ssi_server.py [port] 6 | 7 | The only difference is that, for files ending in '.html', ssi_server will 8 | inline SSI (Server Side Includes) of the form: 9 | 10 | 11 | 12 | Run ./ssi_server.py in this directory and visit localhost:8000 for an exmaple. 13 | ''' 14 | 15 | import os 16 | import ssi 17 | try: 18 | # This works for Python 2 19 | from SimpleHTTPServer import SimpleHTTPRequestHandler 20 | import SimpleHTTPServer 21 | except ImportError: 22 | # This works for Python 3 23 | from http.server import SimpleHTTPRequestHandler 24 | import http.server as SimpleHTTPServer 25 | import tempfile 26 | 27 | 28 | class SSIRequestHandler(SimpleHTTPRequestHandler): 29 | """Adds minimal support for directives. 30 | 31 | The key bit is translate_path, which intercepts requests and serves them 32 | using a temporary file which inlines the #includes. 33 | """ 34 | 35 | def __init__(self, request, client_address, server): 36 | self.temp_files = [] 37 | SimpleHTTPRequestHandler.__init__(self, request, client_address, server) 38 | 39 | def do_GET(self): 40 | SimpleHTTPRequestHandler.do_GET(self) 41 | self.delete_temp_files() 42 | 43 | def do_HEAD(self): 44 | SimpleHTTPRequestHandler.do_HEAD(self) 45 | self.delete_temp_files() 46 | 47 | def translate_path(self, path): 48 | fs_path = SimpleHTTPRequestHandler.translate_path(self, path) 49 | if self.path.endswith('/'): 50 | for index in "index.html", "index.htm", "index.shtml": 51 | index = os.path.join(fs_path, index) 52 | if os.path.exists(index): 53 | fs_path = index 54 | break 55 | 56 | if (fs_path.endswith('.html') or fs_path.endswith(".shtml")) and os.path.exists(fs_path): 57 | content = ssi.InlineIncludes(fs_path, path) 58 | fs_path = self.create_temp_file(fs_path, content) 59 | return fs_path 60 | 61 | def delete_temp_files(self): 62 | for temp_file in self.temp_files: 63 | os.remove(temp_file) 64 | 65 | def create_temp_file(self, original_path, content): 66 | _, ext = os.path.splitext(original_path) 67 | if ext == ".shtml": 68 | ext = ".html" 69 | fd, path = tempfile.mkstemp(suffix=ext) 70 | try: 71 | os.write(fd, content) # This works for Python 2 72 | except TypeError: 73 | os.write(fd, bytes(content, 'UTF-8')) # This works for Python 3 74 | os.close(fd) 75 | 76 | self.temp_files.append(path) 77 | return path 78 | 79 | 80 | if __name__ == '__main__': 81 | SimpleHTTPServer.test(HandlerClass=SSIRequestHandler) 82 | -------------------------------------------------------------------------------- /test/UnicodeBMPFallback.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EzequielRamis/liga/169e73ca05a26987b08a72c64f84c8519471e8b0/test/UnicodeBMPFallback.ttf -------------------------------------------------------------------------------- /test/fira.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "FiraCode"; 3 | src: url("../fira/FiraCode-Light.otf"); 4 | font-weight: 300; 5 | } 6 | @font-face { 7 | font-family: "FiraCode"; 8 | src: url("../fira/FiraCode-Regular.otf"); 9 | font-weight: 400; 10 | } 11 | @font-face { 12 | font-family: "FiraCode"; 13 | src: url("../fira/FiraCode-Retina.otf"); 14 | font-weight: 450; 15 | } 16 | @font-face { 17 | font-family: "FiraCode"; 18 | src: url("../fira/FiraCode-Medium.otf"); 19 | font-weight: 500; 20 | } 21 | @font-face { 22 | font-family: "FiraCode"; 23 | src: url("../fira/FiraCode-SemiBold.otf"); 24 | font-weight: 600; 25 | } 26 | @font-face { 27 | font-family: "FiraCode"; 28 | src: url("../fira/FiraCode-Bold.otf"); 29 | font-weight: 700; 30 | } 31 | --------------------------------------------------------------------------------