├── LICENSE.md ├── README.md ├── Woffle.app └── Contents │ ├── Info.plist │ ├── MacOS │ └── Woffle │ └── Resources │ ├── AppSettings.plist │ ├── Credits.html │ ├── MainMenu.nib │ ├── appIcon.icns │ ├── docIcon.icns │ ├── script │ ├── sfnt2woff-zopfli │ └── woff2_compress ├── dmg-builder.sh ├── docs └── Credits.html ├── img ├── GenericFontIcon.icns ├── logo-head-crunch.png ├── waffle.png └── woffle.gif ├── installer └── Woffle-Installer.dmg ├── profile └── Woffle.platypus ├── settings.py └── src ├── include ├── sfnt2woff-zopfli └── woff2_compress └── woffle.sh /LICENSE.md: -------------------------------------------------------------------------------- 1 | ### Woffle License 2 | 3 | Copyright (c) 2017 Christopher Simpkins 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 | 23 | 24 | ### sfnt2woff-zopfli License 25 | 26 | Copyright 2011 Google Inc. All Rights Reserved. 27 | 28 | Licensed under the Apache License, Version 2.0 (the "License"); 29 | you may not use this file except in compliance with the License. 30 | You may obtain a copy of the License at 31 | 32 | http://www.apache.org/licenses/LICENSE-2.0 33 | 34 | Unless required by applicable law or agreed to in writing, software 35 | distributed under the License is distributed on an "AS IS" BASIS, 36 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 37 | See the License for the specific language governing permissions and 38 | limitations under the License. 39 | 40 | --------------------------------------------------------------------------- 41 | 42 | Version: MPL 1.1/GPL 2.0/LGPL 2.1 43 | 44 | The contents of this file are subject to the Mozilla Public License Version 45 | 1.1 (the "License"); you may not use this file except in compliance with 46 | the License. You may obtain a copy of the License at 47 | http://www.mozilla.org/MPL/ 48 | 49 | Software distributed under the License is distributed on an "AS IS" basis, 50 | WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 51 | for the specific language governing rights and limitations under the 52 | License. 53 | 54 | The Original Code is WOFF font packaging code. 55 | 56 | The Initial Developer of the Original Code is Mozilla Corporation. 57 | Portions created by the Initial Developer are Copyright (C) 2009 58 | the Initial Developer. All Rights Reserved. 59 | 60 | 61 | 62 | ### woff2_compress License 63 | 64 | Copyright 2017 Google Inc. All Rights Reserved. 65 | 66 | Licensed under the Apache License, Version 2.0 (the "License"); 67 | you may not use this file except in compliance with the License. 68 | You may obtain a copy of the License at 69 | 70 | http://www.apache.org/licenses/LICENSE-2.0 71 | 72 | Unless required by applicable law or agreed to in writing, software 73 | distributed under the License is distributed on an "AS IS" BASIS, 74 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 75 | See the License for the specific language governing permissions and 76 | limitations under the License. 77 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://github.com/source-foundry/Woffle/raw/master/img/logo-head-crunch.png) 2 | 3 | ## About 4 | 5 | Woffle is a GUI application that supports woff and woff2 web font compilation on OS X. Drag and drop your ttf or otf font file on the GUI window and Woffle does the rest! 6 | 7 | Woffle is built with the open source [sfnt2woff-zopfli](https://github.com/bramstein/sfnt2woff-zopfli) and [woff2_compress](https://github.com/google/woff2) font compilers and implements the same web font build approach that we use in [Hack](https://github.com/source-foundry/Hack), all in a tidy little GUI package. 8 | 9 | ![](https://github.com/source-foundry/Woffle/raw/master/img/woffle.gif) 10 | 11 | ## Installation 12 | 13 | Select either of the following approaches to install Woffle on your OS X system. 14 | 15 | ### Download and Use the Installer (.dmg) 16 | 17 | Download the installer for [the latest release](https://github.com/source-foundry/Woffle/releases/latest). Double click the installer file and then drag the Woffle icon to the Applications directory when prompted to do so. 18 | 19 | Click Launchpad and you will find Woffle on your desktop. 20 | 21 | ### Clone Repository with git and Install 22 | 23 | Use the following commands to pull the Woffle repository to your system and open the repository in your Finder: 24 | 25 | ``` 26 | $ git clone https://github.com/source-foundry/Woffle.git 27 | $ cd Woffle 28 | $ open . 29 | ``` 30 | 31 | Drag and drop Woffle (in the top level of the repository directory) into your Applications directory. 32 | 33 | Click Launchpad and you will find Woffle on your desktop. 34 | 35 | ## Usage 36 | 37 | Drag and drop one or more ttf or otf font files onto the Woffle GUI window after you open it. The compiled woff and woff2 files are located in the directory where your original fonts are located. The original font files are not altered in any fashion during this process. 38 | 39 | ## License 40 | 41 | Woffle is licensed under the MIT license. 42 | 43 | sfnt2woff-zopfli is licensed under the Apache and Mozilla Public licenses 44 | 45 | woff2_compress is licensed under the Apache license. 46 | 47 | See [LICENSE.md](https://github.com/source-foundry/Woffle/blob/master/LICENSE.md) for details. 48 | 49 | -------------------------------------------------------------------------------- /Woffle.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDocumentTypes 8 | 9 | 10 | CFBundleTypeExtensions 11 | 12 | CFBundleTypeIconFile 13 | docIcon.icns 14 | CFBundleTypeRole 15 | Viewer 16 | LSItemContentTypes 17 | 18 | public.item 19 | public.folder 20 | 21 | 22 | 23 | CFBundleExecutable 24 | Woffle 25 | CFBundleIconFile 26 | appIcon.icns 27 | CFBundleIdentifier 28 | com.csimpkins.Woffle 29 | CFBundleInfoDictionaryVersion 30 | 6.0 31 | CFBundleName 32 | Woffle 33 | CFBundlePackageType 34 | APPL 35 | CFBundleShortVersionString 36 | 0.9 37 | CFBundleSignature 38 | ???? 39 | CFBundleVersion 40 | 0.9 41 | LSMinimumSystemVersion 42 | 10.7.0 43 | LSUIElement 44 | 45 | NSAppTransportSecurity 46 | 47 | NSAllowsArbitraryLoads 48 | 49 | 50 | NSHumanReadableCopyright 51 | © 2017 Christopher Simpkins 52 | NSMainNibFile 53 | MainMenu 54 | NSPrincipalClass 55 | NSApplication 56 | 57 | 58 | -------------------------------------------------------------------------------- /Woffle.app/Contents/MacOS/Woffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/Woffle.app/Contents/MacOS/Woffle -------------------------------------------------------------------------------- /Woffle.app/Contents/Resources/AppSettings.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AcceptsFiles 6 | 7 | AcceptsText 8 | 9 | Authentication 10 | 11 | Creator 12 | Platypus-5.2 13 | Droppable 14 | 15 | InterfaceType 16 | Text Window 17 | InterpreterArgs 18 | 19 | InterpreterPath 20 | /bin/sh 21 | PromptForFileOnLaunch 22 | 23 | RemainRunning 24 | 25 | ScriptArgs 26 | 27 | Suffixes 28 | 29 | TextBackground 30 | #16adff 31 | TextFont 32 | AndaleMono 33 | TextForeground 34 | #ffffff 35 | TextSize 36 | 13 37 | URISchemes 38 | 39 | UniformTypes 40 | 41 | public.item 42 | public.folder 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Woffle.app/Contents/Resources/Credits.html: -------------------------------------------------------------------------------- 1 |
2 |

Woffle is a woff and woff2 web font compiler that is built with sfnt2woff-zopfli and woff2 3 |

8 |

9 |

sfnt2woff-zopfli is licensed under the Apache License v2.0 and the Mozilla Public License v1.1

10 |

zopflipng is licensed under the Apache License, v2.0

11 |

icon made by Freepik from flaticon.com

12 |
13 | -------------------------------------------------------------------------------- /Woffle.app/Contents/Resources/MainMenu.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/Woffle.app/Contents/Resources/MainMenu.nib -------------------------------------------------------------------------------- /Woffle.app/Contents/Resources/appIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/Woffle.app/Contents/Resources/appIcon.icns -------------------------------------------------------------------------------- /Woffle.app/Contents/Resources/docIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/Woffle.app/Contents/Resources/docIcon.icns -------------------------------------------------------------------------------- /Woffle.app/Contents/Resources/script: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | WOFFLE_TITLE=" 4 | 5 | ██╗ ██╗ ██████╗ ███████╗███████╗██╗ ███████╗ 6 | ██║ ██║██╔═══██╗██╔════╝██╔════╝██║ ██╔════╝ 7 | ██║ █╗ ██║██║ ██║█████╗ █████╗ ██║ █████╗ 8 | ██║███╗██║██║ ██║██╔══╝ ██╔══╝ ██║ ██╔══╝ 9 | ╚███╔███╔╝╚██████╔╝██║ ██║ ███████╗███████╗ 10 | ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝ 11 | 12 | v0.9.0" 13 | 14 | 15 | SUCCESS_THUMB=" 16 | ┈┈┈┈┈┈▕▔╲ 17 | ┈┈┈┈┈┈┈▏▕ 18 | ┈┈┈┈┈┈┈▏▕▂▂▂ 19 | ▂▂▂▂▂▂╱┈▕▂▂▂▏ 20 | ▉▉▉▉▉┈┈┈▕▂▂▂▏ 21 | ▉▉▉▉▉┈┈┈▕▂▂▂▏ 22 | ▔▔▔▔▔▔╲▂▕▂▂▂▏ 23 | " 24 | 25 | SFNTWOFF_BIN="./sfnt2woff-zopfli" 26 | ZOPFLI_ITERATIONS="3" 27 | 28 | WOFF2_BIN="./woff2_compress" 29 | 30 | # Message on application open (no arguments passed to script on initial open) 31 | if [ $# -eq 0 ]; then 32 | echo " " 33 | echo " " 34 | printf "%s\n" "$WOFFLE_TITLE" 35 | echo "woff and woff2 web font generator" 36 | echo "Built with sfnt2woff-zopfli and woff2 compilers" 37 | echo "======================================================" 38 | echo "Copyright 2017 Christopher Simpkins" 39 | echo "MIT License" 40 | echo "Source: github.com/source-foundry/Woffle" 41 | echo "Issues: github.com/source-foundry/Woffle/issues" 42 | echo "======================================================" 43 | echo " " 44 | echo "Drag and drop your ttf or otf files on this window to begin." 45 | fi 46 | 47 | # test file extensions to confirm dealing with appropriate font files 48 | for FONTPATH in "$@" 49 | do 50 | FILE_EXTENSION="${FONTPATH##*.}" 51 | if [ "$FILE_EXTENSION" = "ttf" ] || [ "$FILE_EXTENSION" = "otf" ]; then 52 | echo " " >/dev/null # do nothing... 53 | else 54 | echo " " 55 | echo "ERROR: You appear to have dropped a file on the window that is not a ttf or otf font. Please try again." 56 | exit 57 | fi 58 | done 59 | 60 | 61 | # woff compilation 62 | 63 | if [ $# -eq 1 ]; then 64 | echo "===> Beginning compilation of woff file..." 65 | echo " " 66 | elif [ $# -gt 1 ]; then 67 | echo "===> Beginning compilation of woff files..." 68 | echo " " 69 | fi 70 | 71 | for FONTPATH in "$@" 72 | do 73 | FILE_EXTENSION="${FONTPATH##*.}" 74 | if ! "$SFNTWOFF_BIN" -n $ZOPFLI_ITERATIONS "$FONTPATH" 2>&1 >/dev/null; then 75 | echo "ERROR: Unable to build woff from $FONTPATH." 1>&2 76 | exit 77 | else 78 | echo "[NEW] ${FONTPATH%.*}.woff" 79 | echo " " 80 | fi 81 | done 82 | 83 | 84 | # woff2 compilation 85 | 86 | if [ $# -eq 1 ]; then 87 | echo "===> Beginning compilation of woff2 file..." 88 | echo " " 89 | elif [ $# -gt 1 ]; then 90 | echo "===> Beginning compilation of woff2 files..." 91 | echo " " 92 | fi 93 | 94 | for FONTPATH in "$@" 95 | do 96 | if ! "$WOFF2_BIN" "$FONTPATH" >/dev/null 2>&1; then 97 | echo "ERROR: Unable to build woff2 from $FONTPATH." 1>&2 98 | exit 99 | else 100 | echo "[NEW] ${FONTPATH%.*}.woff2" 101 | echo " " 102 | fi 103 | done 104 | 105 | if [ $# -gt 0 ]; then 106 | echo " " 107 | echo "✓ Complete!" 108 | echo " " 109 | printf "%s\n" "$SUCCESS_THUMB" 110 | fi 111 | -------------------------------------------------------------------------------- /Woffle.app/Contents/Resources/sfnt2woff-zopfli: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/Woffle.app/Contents/Resources/sfnt2woff-zopfli -------------------------------------------------------------------------------- /Woffle.app/Contents/Resources/woff2_compress: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/Woffle.app/Contents/Resources/woff2_compress -------------------------------------------------------------------------------- /dmg-builder.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | dmgbuild -s settings.py -D app=Woffle.app "Woffle" Woffle-Installer.dmg 5 | 6 | if [ -f Woffle-Installer.dmg ]; then 7 | mv Woffle-Installer.dmg installer/Woffle-Installer.dmg 8 | fi 9 | -------------------------------------------------------------------------------- /docs/Credits.html: -------------------------------------------------------------------------------- 1 |
2 |

Woffle is a woff and woff2 web font compiler that is built with sfnt2woff-zopfli and woff2 3 |

8 |

9 |

sfnt2woff-zopfli is licensed under the Apache License v2.0 and the Mozilla Public License v1.1

10 |

zopflipng is licensed under the Apache License, v2.0

11 |

icon made by Freepik from flaticon.com

12 |
13 | -------------------------------------------------------------------------------- /img/GenericFontIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/img/GenericFontIcon.icns -------------------------------------------------------------------------------- /img/logo-head-crunch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/img/logo-head-crunch.png -------------------------------------------------------------------------------- /img/waffle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/img/waffle.png -------------------------------------------------------------------------------- /img/woffle.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/img/woffle.gif -------------------------------------------------------------------------------- /installer/Woffle-Installer.dmg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/installer/Woffle-Installer.dmg -------------------------------------------------------------------------------- /profile/Woffle.platypus: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AcceptsFiles 6 | 7 | AcceptsText 8 | 9 | Authentication 10 | 11 | Author 12 | Christopher Simpkins 13 | BundledFiles 14 | 15 | /Users/ces/Desktop/code/Woffle/src/include/sfnt2woff-zopfli 16 | /Users/ces/Desktop/code/Woffle/src/include/woff2_compress 17 | /Users/ces/Desktop/code/Woffle/docs/Credits.html 18 | 19 | Creator 20 | Platypus-5.2 21 | DeclareService 22 | 23 | Destination 24 | /Users/ces/Desktop/Application.app 25 | DevelopmentVersion 26 | 27 | DocIconPath 28 | /Users/ces/Desktop/code/Woffle/img/GenericFontIcon.icns 29 | Droppable 30 | 31 | ExecutablePath 32 | /usr/local/share/platypus/ScriptExec 33 | IconPath 34 | /Users/ces/Library/Application Support/Platypus/PlatypusIcon-47128.icns 35 | Identifier 36 | com.csimpkins.Woffle 37 | InterfaceType 38 | Text Window 39 | InterpreterArgs 40 | 41 | InterpreterPath 42 | /bin/sh 43 | Name 44 | Woffle 45 | NibPath 46 | /usr/local/share/platypus/MainMenu.nib 47 | OptimizeApplication 48 | 49 | Overwrite 50 | 51 | PromptForFileOnLaunch 52 | 53 | RemainRunning 54 | 55 | RunInBackground 56 | 57 | ScriptArgs 58 | 59 | ScriptPath 60 | /Users/ces/Desktop/code/Woffle/src/woffle.sh 61 | StatusItemDisplayType 62 | Text 63 | StatusItemIcon 64 | 65 | TU0AKgAAFEj///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// 66 | AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// 67 | /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAA 68 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAACuAAAAAAAAAAAAAAAA 69 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 70 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 71 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAP8AAADOAAAAAAAAAAAAAAAAAAAAAQAAABAA 72 | AAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 73 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 74 | UgAAAB8AAAA5AAAA/wAAAN8AAAAAAAAAPgAAAKcAAADNAAAAzgMBAMUCAADJAAAAzwAA 75 | ALoAAABrAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 76 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAACAAAA/wAAAMEAAACV 77 | AAAA/wAAAK8AAAC0AgEA+B0EAsQ4BAN1OgQCQBoLCCcZBQQ1JAgEYicFAqgNAwHrAAAA 78 | 9gAAAIYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 79 | AAAAAAAAAAAAAAAAAAAAAADmAAAA0AAAAEAAAAAAAAAA8AAAAP8AAADhAAAA/wAAAP8j 80 | DAWvPAsFIE0HAwBgBQUATAMCABkNCgAaBAUANQsGAFIKBQBJDQYAPwoEcA8EAP0AAADc 81 | AAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 82 | AAAAAAAAAABgAAAA/wAAAP8AAACkAAAA1AAAAO4AAAD/CQMA40IZCDxVIA0ANAADADoB 83 | AgBFCAQAPQcDAB8JBQAbBwMALAoFAEIFAQBKCwUAexAHAFsaDAUQBgTSAAAA/wAAANsA 84 | AABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 85 | 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 153 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAABJAAAAXQAAAGsAAACFAAAA 154 | uxADAeRLEgZdNgkAnwAAAP8CAgXTAQIC9lYdHDlKHx4ABwQEXAwBAu4AAAL/AAAAfAAA 155 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 156 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHkzEw10 157 | lCsbAAwAAIgAAAD/AgEE8gAAAtEMCAqcAAAB9QAAAf8AAAD/AAAAJwAAAAAAAAAAAAAA 158 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 159 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuFREAjDAjAEMtGQAb 160 | GxBsAAAA/wAABt8DBgzXAAAA/wAAAN0AAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 161 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 162 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuEw8AhywfAEs3IABBPCUAGRQNOAsJ 163 | Bb0HAgLQLyILkEo+HQgAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ 164 | //8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A 165 | ////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//// 166 | AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAADgEAAAMAAAAB 167 | ACQAAAEBAAMAAAABACQAAAECAAMAAAAEAAAU9gEDAAMAAAABAAEAAAEGAAMAAAABAAIA 168 | AAERAAQAAAABAAAACAESAAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABACQAAAEX 169 | AAQAAAABAAAUQAEcAAMAAAABAAEAAAFSAAMAAAABAAIAAAFTAAMAAAAEAAAU/odzAAcA 170 | AAxIAAAVBgAAAAAACAAIAAgACAABAAEAAQABAAAMSExpbm8CEAAAbW50clJHQiBYWVog 171 | B84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbWAAEA 172 | AAAA0y1IUCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 173 | AAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQA 174 | AAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABw 175 | ZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA/gAAAAUbWVh 176 | cwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAA 177 | BDwAAAgMdGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJkIENv 178 | bXBhbnkAAGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAASc1JH 179 | QiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 180 | AAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAA 181 | AABYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAA 182 | ACSgAAAPhAAAts9kZXNjAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAA 183 | AAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 184 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZh 185 | dWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIu 186 | MSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAA 187 | AAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2 188 | MTk2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4g 189 | SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4A 190 | FF8uABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAA 191 | AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAE 192 | AAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3 193 | AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA 194 | +wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGh 195 | AakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoC 196 | hAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOW 197 | A6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE 198 | 8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7 199 | BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYI 200 | WghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApq 201 | CoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM 202 | 2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96 203 | D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQS 204 | hBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9 205 | FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZ 206 | axmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1H 207 | HXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUh 208 | oSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYn 209 | Jlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIr 210 | NitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBs 211 | MKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02 212 | NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76Dwn 213 | PGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJC 214 | tUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUlj 215 | SalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQ 216 | u1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4Fgv 217 | WH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVg 218 | V2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iW 219 | aOxpQ2maafFqSGqfavdrT2una/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpx 220 | lXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6Rnql 221 | ewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2E 222 | gITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45m 223 | js6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZ 224 | JJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPm 225 | pFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxav 226 | i7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsu 227 | u6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HH 228 | v8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ 229 | 1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UTh 230 | zOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A 231 | 78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9 232 | uv5L/tz/bf// 233 | 234 | StatusItemIconIsTemplate 235 | 236 | StatusItemTitle 237 | Title 238 | StatusItemUseSystemFont 239 | 240 | Suffixes 241 | 242 | TextBackground 243 | #16adff 244 | TextFont 245 | AndaleMono 246 | TextForeground 247 | #ffffff 248 | TextSize 249 | 13 250 | URISchemes 251 | 252 | UniformTypes 253 | 254 | public.item 255 | public.folder 256 | 257 | UseXMLPlistFormat 258 | 259 | Version 260 | 0.9 261 | 262 | 263 | -------------------------------------------------------------------------------- /settings.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | import biplist 5 | import os.path 6 | 7 | # 8 | # Example settings file for dmgbuild 9 | # 10 | 11 | # Use like this: dmgbuild -s settings.py "Test Volume" test.dmg 12 | 13 | # You can actually use this file for your own application (not just TextEdit) 14 | # by doing e.g. 15 | # 16 | # dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg 17 | 18 | # .. Useful stuff .............................................................. 19 | 20 | application = defines.get('app', '/Applications/Woffle.app') 21 | appname = os.path.basename(application) 22 | 23 | def icon_from_app(app_path): 24 | plist_path = os.path.join(app_path, 'Contents', 'Info.plist') 25 | plist = biplist.readPlist(plist_path) 26 | icon_name = plist['CFBundleIconFile'] 27 | icon_root,icon_ext = os.path.splitext(icon_name) 28 | if not icon_ext: 29 | icon_ext = '.icns' 30 | icon_name = icon_root + icon_ext 31 | return os.path.join(app_path, 'Contents', 'Resources', icon_name) 32 | 33 | # .. Basics .................................................................... 34 | 35 | # Uncomment to override the output filename 36 | # filename = 'test.dmg' 37 | 38 | # Uncomment to override the output volume name 39 | # volume_name = 'Test' 40 | 41 | # Volume format (see hdiutil create -help) 42 | format = defines.get('format', 'UDBZ') 43 | 44 | # Volume size 45 | size = defines.get('size', None) 46 | 47 | # Files to include 48 | files = [ application ] 49 | 50 | # Symlinks to create 51 | symlinks = { 'Applications': '/Applications' } 52 | 53 | # Volume icon 54 | # 55 | # You can either define icon, in which case that icon file will be copied to the 56 | # image, *or* you can define badge_icon, in which case the icon file you specify 57 | # will be used to badge the system's Removable Disk icon 58 | # 59 | #icon = '/path/to/icon.icns' 60 | badge_icon = icon_from_app(application) 61 | 62 | # Where to put the icons 63 | icon_locations = { 64 | appname: (140, 120), 65 | 'Applications': (500, 120) 66 | } 67 | 68 | # .. Window configuration ...................................................... 69 | 70 | # Background 71 | # 72 | # This is a STRING containing any of the following: 73 | # 74 | # #3344ff - web-style RGB color 75 | # #34f - web-style RGB color, short form (#34f == #3344ff) 76 | # rgb(1,0,0) - RGB color, each value is between 0 and 1 77 | # hsl(120,1,.5) - HSL (hue saturation lightness) color 78 | # hwb(300,0,0) - HWB (hue whiteness blackness) color 79 | # cmyk(0,1,0,0) - CMYK color 80 | # goldenrod - X11/SVG named color 81 | # builtin-arrow - A simple built-in background with a blue arrow 82 | # /foo/bar/baz.png - The path to an image file 83 | # 84 | # The hue component in hsl() and hwb() may include a unit; it defaults to 85 | # degrees ('deg'), but also supports radians ('rad') and gradians ('grad' 86 | # or 'gon'). 87 | # 88 | # Other color components may be expressed either in the range 0 to 1, or 89 | # as percentages (e.g. 60% is equivalent to 0.6). 90 | background = 'builtin-arrow' 91 | 92 | show_status_bar = False 93 | show_tab_view = False 94 | show_toolbar = False 95 | show_pathbar = False 96 | show_sidebar = False 97 | sidebar_width = 180 98 | 99 | # Window position in ((x, y), (w, h)) format 100 | window_rect = ((100, 100), (640, 280)) 101 | 102 | # Select the default view; must be one of 103 | # 104 | # 'icon-view' 105 | # 'list-view' 106 | # 'column-view' 107 | # 'coverflow' 108 | # 109 | default_view = 'icon-view' 110 | 111 | # General view configuration 112 | show_icon_preview = False 113 | 114 | # Set these to True to force inclusion of icon/list view settings (otherwise 115 | # we only include settings for the default view) 116 | include_icon_view_settings = 'auto' 117 | include_list_view_settings = 'auto' 118 | 119 | # .. Icon view configuration ................................................... 120 | 121 | arrange_by = None 122 | grid_offset = (0, 0) 123 | grid_spacing = 100 124 | scroll_position = (0, 0) 125 | label_pos = 'bottom' # or 'right' 126 | text_size = 16 127 | icon_size = 128 128 | 129 | # .. List view configuration ................................................... 130 | 131 | # Column names are as follows: 132 | # 133 | # name 134 | # date-modified 135 | # date-created 136 | # date-added 137 | # date-last-opened 138 | # size 139 | # kind 140 | # label 141 | # version 142 | # comments 143 | # 144 | list_icon_size = 16 145 | list_text_size = 12 146 | list_scroll_position = (0, 0) 147 | list_sort_by = 'name' 148 | list_use_relative_dates = True 149 | list_calculate_all_sizes = False, 150 | list_columns = ('name', 'date-modified', 'size', 'kind', 'date-added') 151 | list_column_widths = { 152 | 'name': 300, 153 | 'date-modified': 181, 154 | 'date-created': 181, 155 | 'date-added': 181, 156 | 'date-last-opened': 181, 157 | 'size': 97, 158 | 'kind': 115, 159 | 'label': 100, 160 | 'version': 75, 161 | 'comments': 300, 162 | } 163 | list_column_sort_directions = { 164 | 'name': 'ascending', 165 | 'date-modified': 'descending', 166 | 'date-created': 'descending', 167 | 'date-added': 'descending', 168 | 'date-last-opened': 'descending', 169 | 'size': 'descending', 170 | 'kind': 'ascending', 171 | 'label': 'ascending', 172 | 'version': 'ascending', 173 | 'comments': 'ascending', 174 | } 175 | 176 | # .. License configuration ..................................................... 177 | 178 | # Text in the license configuration is stored in the resources, which means 179 | # it gets stored in a legacy Mac encoding according to the language. dmgbuild 180 | # will *try* to convert Unicode strings to the appropriate encoding, *but* 181 | # you should be aware that Python doesn't support all of the necessary encodings; 182 | # in many cases you will need to encode the text yourself and use byte strings 183 | # instead here. 184 | 185 | # Recognized language names are: 186 | # 187 | # af_ZA, ar, be_BY, bg_BG, bn, bo, br, ca_ES, cs_CZ, cy, da_DK, de_AT, de_CH, 188 | # de_DE, dz_BT, el_CY, el_GR, en_AU, en_CA, en_GB, en_IE, en_SG, en_US, eo, 189 | # es_419, es_ES, et_EE, fa_IR, fi_FI, fo_FO, fr_001, fr_BE, fr_CA, fr_CH, 190 | # fr_FR, ga-Latg_IE, ga_IE, gd, grc, gu_IN, gv, he_IL, hi_IN, hr_HR, hu_HU, 191 | # hy_AM, is_IS, it_CH, it_IT, iu_CA, ja_JP, ka_GE, kl, ko_KR, lt_LT, lv_LV, 192 | # mk_MK, mr_IN, mt_MT, nb_NO, ne_NP, nl_BE, nl_NL, nn_NO, pa, pl_PL, pt_BR, 193 | # pt_PT, ro_RO, ru_RU, se, sk_SK, sl_SI, sr_RS, sv_SE, th_TH, to_TO, tr_TR, 194 | # uk_UA, ur_IN, ur_PK, uz_UZ, vi_VN, zh_CN, zh_TW 195 | 196 | # license = { 197 | # 'default-language': 'en_US', 198 | # 'licenses': { 199 | # # For each language, the text of the license. This can be plain text, 200 | # # RTF (in which case it must start "{\rtf1"), or a path to a file 201 | # # containing the license text. If you're using RTF, 202 | # # watch out for Python escaping (or read it from a file). 203 | # 'English': b'''{\\rtf1\\ansi\\ansicpg1252\\cocoartf1504\\cocoasubrtf820 204 | # {\\fonttbl\\f0\\fnil\\fcharset0 Helvetica-Bold;\\f1\\fnil\\fcharset0 Helvetica;} 205 | # {\\colortbl;\\red255\\green255\\blue255;\\red0\\green0\\blue0;} 206 | # {\\*\\expandedcolortbl;;\\cssrgb\\c0\\c0\\c0;} 207 | # \\paperw11905\\paperh16837\\margl1133\\margr1133\\margb1133\\margt1133 208 | # \\deftab720 209 | # \\pard\\pardeftab720\\sa160\\partightenfactor0 210 | 211 | # \\f0\\b\\fs60 \\cf2 \\expnd0\\expndtw0\\kerning0 212 | # \\up0 \\nosupersub \\ulnone \\outl0\\strokewidth0 \\strokec2 Test License\\ 213 | # \\pard\\pardeftab720\\sa160\\partightenfactor0 214 | 215 | # \\fs36 \\cf2 \\strokec2 What is this?\\ 216 | # \\pard\\pardeftab720\\sa160\\partightenfactor0 217 | 218 | # \\f1\\b0\\fs22 \\cf2 \\strokec2 This is the English license. It says what you are allowed to do with this software.\\ 219 | # \\ 220 | # }''', 221 | # }, 222 | # 'buttons': { 223 | # # For each language, text for the buttons on the licensing window. 224 | # # 225 | # # Default buttons and text are built-in for the following languages: 226 | # # 227 | # # English (en_US), German (de_DE), Spanish (es_ES), French (fr_FR), 228 | # # Italian (it_IT), Japanese (ja_JP), Dutch (nl_NL), Swedish (sv_SE), 229 | # # Brazilian Portuguese (pt_BR), Simplified Chinese (zh_CN), 230 | # # Traditional Chinese (zh_TW), Danish (da_DK), Finnish (fi_FI), 231 | # # Korean (ko_KR), Norwegian (nb_NO) 232 | # # 233 | # # You don't need to specify them for those languages; if you fail to 234 | # # specify them for some other language, English will be used instead. 235 | 236 | # 'en_US': ( 237 | # b'English', 238 | # b'Agree', 239 | # b'Disagree', 240 | # b'Print', 241 | # b'Save', 242 | # b'If you agree with the terms of this license, press "Agree" to ' 243 | # b'install the software. If you do not agree, press "Disagree".' 244 | # ), 245 | # }, 246 | # } 247 | -------------------------------------------------------------------------------- /src/include/sfnt2woff-zopfli: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/src/include/sfnt2woff-zopfli -------------------------------------------------------------------------------- /src/include/woff2_compress: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/source-foundry/Woffle/c807a55f3a65c5070e8900913bc5f44f834f536c/src/include/woff2_compress -------------------------------------------------------------------------------- /src/woffle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | WOFFLE_TITLE=" 4 | 5 | ██╗ ██╗ ██████╗ ███████╗███████╗██╗ ███████╗ 6 | ██║ ██║██╔═══██╗██╔════╝██╔════╝██║ ██╔════╝ 7 | ██║ █╗ ██║██║ ██║█████╗ █████╗ ██║ █████╗ 8 | ██║███╗██║██║ ██║██╔══╝ ██╔══╝ ██║ ██╔══╝ 9 | ╚███╔███╔╝╚██████╔╝██║ ██║ ███████╗███████╗ 10 | ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝ 11 | 12 | v0.9.0" 13 | 14 | 15 | SUCCESS_THUMB=" 16 | ┈┈┈┈┈┈▕▔╲ 17 | ┈┈┈┈┈┈┈▏▕ 18 | ┈┈┈┈┈┈┈▏▕▂▂▂ 19 | ▂▂▂▂▂▂╱┈▕▂▂▂▏ 20 | ▉▉▉▉▉┈┈┈▕▂▂▂▏ 21 | ▉▉▉▉▉┈┈┈▕▂▂▂▏ 22 | ▔▔▔▔▔▔╲▂▕▂▂▂▏ 23 | " 24 | 25 | SFNTWOFF_BIN="./sfnt2woff-zopfli" 26 | ZOPFLI_ITERATIONS="3" 27 | 28 | WOFF2_BIN="./woff2_compress" 29 | 30 | # Message on application open (no arguments passed to script on initial open) 31 | if [ $# -eq 0 ]; then 32 | echo " " 33 | echo " " 34 | printf "%s\n" "$WOFFLE_TITLE" 35 | echo "woff and woff2 web font generator" 36 | echo "Built with sfnt2woff-zopfli and woff2 compilers" 37 | echo "======================================================" 38 | echo "Copyright 2017 Christopher Simpkins" 39 | echo "MIT License" 40 | echo "Source: github.com/source-foundry/Woffle" 41 | echo "Issues: github.com/source-foundry/Woffle/issues" 42 | echo "======================================================" 43 | echo " " 44 | echo "Drag and drop your ttf or otf files on this window to begin." 45 | fi 46 | 47 | # test file extensions to confirm dealing with appropriate font files 48 | for FONTPATH in "$@" 49 | do 50 | FILE_EXTENSION="${FONTPATH##*.}" 51 | if [ "$FILE_EXTENSION" = "ttf" ] || [ "$FILE_EXTENSION" = "otf" ]; then 52 | echo " " >/dev/null # do nothing... 53 | else 54 | echo " " 55 | echo "ERROR: You appear to have dropped a file on the window that is not a ttf or otf font. Please try again." 56 | exit 57 | fi 58 | done 59 | 60 | 61 | # woff compilation 62 | 63 | if [ $# -eq 1 ]; then 64 | echo "===> Beginning compilation of woff file..." 65 | echo " " 66 | elif [ $# -gt 1 ]; then 67 | echo "===> Beginning compilation of woff files..." 68 | echo " " 69 | fi 70 | 71 | for FONTPATH in "$@" 72 | do 73 | FILE_EXTENSION="${FONTPATH##*.}" 74 | if ! "$SFNTWOFF_BIN" -n $ZOPFLI_ITERATIONS "$FONTPATH" 2>&1 >/dev/null; then 75 | echo "ERROR: Unable to build woff from $FONTPATH." 1>&2 76 | exit 77 | else 78 | echo "[NEW] ${FONTPATH%.*}.woff" 79 | echo " " 80 | fi 81 | done 82 | 83 | 84 | # woff2 compilation 85 | 86 | if [ $# -eq 1 ]; then 87 | echo "===> Beginning compilation of woff2 file..." 88 | echo " " 89 | elif [ $# -gt 1 ]; then 90 | echo "===> Beginning compilation of woff2 files..." 91 | echo " " 92 | fi 93 | 94 | for FONTPATH in "$@" 95 | do 96 | if ! "$WOFF2_BIN" "$FONTPATH" >/dev/null 2>&1; then 97 | echo "ERROR: Unable to build woff2 from $FONTPATH." 1>&2 98 | exit 99 | else 100 | echo "[NEW] ${FONTPATH%.*}.woff2" 101 | echo " " 102 | fi 103 | done 104 | 105 | if [ $# -gt 0 ]; then 106 | echo " " 107 | echo "✓ Complete!" 108 | echo " " 109 | printf "%s\n" "$SUCCESS_THUMB" 110 | fi 111 | --------------------------------------------------------------------------------