acid-drop- Hacking the planet from a LilyGo T-Deck using custom firmware |
git clone git://git.acid.vegas/acid-drop.git |
Log | Files | Refs | Archive | README | LICENSE |
Create_font.pde (24593B)
1 // This is a Processing sketch, see https://processing.org/ to download the IDE 2 3 // Select the font, size and character ranges in the user configuration section 4 // of this sketch, which starts at line 120. Instructions start at line 50. 5 6 7 /* 8 Software License Agreement (FreeBSD License) 9 10 Copyright (c) 2018 Bodmer (https://github.com/Bodmer) 11 12 All rights reserved. 13 14 Redistribution and use in source and binary forms, with or without 15 modification, are permitted provided that the following conditions are met: 16 17 1. Redistributions of source code must retain the above copyright notice, this 18 list of conditions and the following disclaimer. 19 2. Redistributions in binary form must reproduce the above copyright notice, 20 this list of conditions and the following disclaimer in the documentation 21 and/or other materials provided with the distribution. 22 23 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 24 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 26 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 27 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 30 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 32 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 34 The views and conclusions contained in the software and documentation are those 35 of the authors and should not be interpreted as representing official policies, 36 either expressed or implied, of the FreeBSD Project. 37 */ 38 39 //////////////////////////////////////////////////////////////////////////////////////////////// 40 41 // This is a processing sketch to create font files for the TFT_eSPI library: 42 43 // https://github.com/Bodmer/TFT_eSPI 44 45 // Coded by Bodmer January 2018, updated 10/2/19 46 // Version 0.8 47 48 // >>>>>>>>>>>>>>>>>>>> INSTRUCTIONS <<<<<<<<<<<<<<<<<<<< 49 50 // See comments below in code for specifying the font parameters (point size, 51 // unicode blocks to include etc). Ranges of characters (glyphs) and specific 52 // individual glyphs can be included in the created "*.vlw" font file. 53 54 // Created fonts are saved in the sketches "FontFiles" folder. Press Ctrl+K to 55 // see that folder location. 56 57 // 16 bit Unicode point codes in the range 0x0000 - 0xFFFF are supported. 58 // Codes 0-31 are control codes such as "tab" and "carraige return" etc. 59 // and 32 is a "space", these should NOT be included. 60 61 // The sketch will convert True Type (a .ttf or .otf file) file stored in the 62 // sketches "Data" folder as well as your computers' system fonts. 63 64 // To maximise rendering performance and the memory consumed only include the characters 65 // you will use. Characters at the start of the file will render faster than those at 66 // the end due to the buffering and file seeking overhead. 67 68 // The inclusion of "non-existant" characters in a font may give unpredicatable results 69 // when rendering with the TFT_eSPI library. The Processing sketch window that pops up 70 // to show the font characters will print "boxes" (also known as Tofu!) for non existant 71 // characters. 72 73 // Once created the files must be loaded into the ESP32 or ESP8266 SPIFFS memory 74 // using the Arduino IDE plugin detailed here: 75 // https://github.com/esp8266/arduino-esp8266fs-plugin 76 // https://github.com/me-no-dev/arduino-esp32fs-plugin 77 78 // When the sketch is run it will generate a file called "System_Font_List.txt" in the 79 // sketch "FontFiles" folder, press Ctrl+K to see it. Open the file in a text editor to 80 // view it. This list provides the font reference number needed below to locate that 81 // font on your system. 82 83 // The sketch also lists all the available system fonts to the console, you can increase 84 // the console line count (in preferences.txt) to stop some fonts scrolling out of view. 85 // See link in File>Preferences to locate "preferences.txt" file. You must close 86 // Processing then edit the file lines. If Processing is not closed first then the 87 // edits will be overwritten by defaults! Edit "preferences.txt" as follows for 88 // 3000 lines, then save, then run Processing again: 89 90 // console.length=3000; // Line 4 in file 91 // console.scrollback.lines=3000; // Line 7 in file 92 93 94 // Useful links: 95 /* 96 97 https://en.wikipedia.org/wiki/Unicode_font 98 99 https://www.gnu.org/software/freefont/ 100 https://www.gnu.org/software/freefont/sources/ 101 https://www.gnu.org/software/freefont/ranges/ 102 http://savannah.gnu.org/projects/freefont/ 103 104 http://www.google.com/get/noto/ 105 106 https://github.com/Bodmer/TFT_eSPI 107 https://github.com/esp8266/arduino-esp8266fs-plugin 108 https://github.com/me-no-dev/arduino-esp32fs-plugin 109 110 >>>>>>>>>>>>>>>>>>>> END OF INSTRUCTIONS <<<<<<<<<<<<<<<<<<<< */ 111 112 113 import java.awt.Desktop; // Required to allow sketch to open file windows 114 115 116 //////////////////////////////////////////////////////////////////////////////////////////////// 117 118 // >>>>>>>>>> USER CONFIGURED PARAMETERS START HERE <<<<<<<<<< 119 120 // Use font number or name, -1 for fontNumber means use fontName below, a value >=0 means use system font number from list. 121 // When the sketch is run it will generate a file called "systemFontList.txt" in the sketch folder, press Ctrl+K to see it. 122 // Open the "systemFontList.txt" in a text editor to view the font files and reference numbers for your system. 123 124 int fontNumber = -1; // << Use [Number] in brackets from the fonts listed. 125 126 // OR use font name for ttf files placed in the "Data" folder or the font number seen in IDE Console for system fonts 127 // the font numbers are listed when the sketch is run. 128 // | 1 2 | Maximum filename size for SPIFFS is 31 including leading / 129 // 1234567890123456789012345 and added point size and .vlw extension, so max is 25 130 String fontName = "Final-Frontier"; // Manually crop the filename length later after creation if needed 131 // Note: SPIFFS does NOT accept underscore in a filename! 132 String fontType = ".ttf"; 133 //String fontType = ".otf"; 134 135 136 // Define the font size in points for the TFT_eSPI font file 137 int fontSize = 20; 138 139 // Font size to use in the Processing sketch display window that pops up (can be different to above) 140 int displayFontSize = 28; 141 142 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 143 // Next we specify which unicode blocks from the the Basic Multilingual Plane (BMP) are included in the final font file. // 144 // Note: The ttf/otf font file MAY NOT contain all possible Unicode characters, refer to the fonts online documentation. // 145 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 146 147 static final int[] unicodeBlocks = { 148 // The list below has been created from the table here: https://en.wikipedia.org/wiki/Unicode_block 149 // Remove // at start of lines below to include that unicode block, different code ranges can also be specified by 150 // editing the start and end-of-range values. Multiple lines from the list below can be included, limited only by 151 // the final font file size! 152 153 // Block range, //Block name, Code points, Assigned characters, Scripts 154 // First, last, //Range is inclusive of first and last codes 155 0x0021, 0x007E, //Basic Latin, 128, 128, Latin (52 characters), Common (76 characters) 156 //0x0080, 0x00FF, //Latin-1 Supplement, 128, 128, Latin (64 characters), Common (64 characters) 157 //0x0100, 0x017F, //Latin Extended-A, 128, 128, Latin 158 //0x0180, 0x024F, //Latin Extended-B, 208, 208, Latin 159 //0x0250, 0x02AF, //IPA Extensions, 96, 96, Latin 160 //0x02B0, 0x02FF, //Spacing Modifier Letters, 80, 80, Bopomofo (2 characters), Latin (14 characters), Common (64 characters) 161 //0x0300, 0x036F, //Combining Diacritical Marks, 112, 112, Inherited 162 //0x0370, 0x03FF, //Greek and Coptic, 144, 135, Coptic (14 characters), Greek (117 characters), Common (4 characters) 163 //0x0400, 0x04FF, //Cyrillic, 256, 256, Cyrillic (254 characters), Inherited (2 characters) 164 //0x0500, 0x052F, //Cyrillic Supplement, 48, 48, Cyrillic 165 //0x0530, 0x058F, //Armenian, 96, 89, Armenian (88 characters), Common (1 character) 166 //0x0590, 0x05FF, //Hebrew, 112, 87, Hebrew 167 //0x0600, 0x06FF, //Arabic, 256, 255, Arabic (237 characters), Common (6 characters), Inherited (12 characters) 168 //0x0700, 0x074F, //Syriac, 80, 77, Syriac 169 //0x0750, 0x077F, //Arabic Supplement, 48, 48, Arabic 170 //0x0780, 0x07BF, //Thaana, 64, 50, Thaana 171 //0x07C0, 0x07FF, //NKo, 64, 59, Nko 172 //0x0800, 0x083F, //Samaritan, 64, 61, Samaritan 173 //0x0840, 0x085F, //Mandaic, 32, 29, Mandaic 174 //0x0860, 0x086F, //Syriac Supplement, 16, 11, Syriac 175 //0x08A0, 0x08FF, //Arabic Extended-A, 96, 73, Arabic (72 characters), Common (1 character) 176 //0x0900, 0x097F, //Devanagari, 128, 128, Devanagari (124 characters), Common (2 characters), Inherited (2 characters) 177 //0x0980, 0x09FF, //Bengali, 128, 95, Bengali 178 //0x0A00, 0x0A7F, //Gurmukhi, 128, 79, Gurmukhi 179 //0x0A80, 0x0AFF, //Gujarati, 128, 91, Gujarati 180 //0x0B00, 0x0B7F, //Oriya, 128, 90, Oriya 181 //0x0B80, 0x0BFF, //Tamil, 128, 72, Tamil 182 //0x0C00, 0x0C7F, //Telugu, 128, 96, Telugu 183 //0x0C80, 0x0CFF, //Kannada, 128, 88, Kannada 184 //0x0D00, 0x0D7F, //Malayalam, 128, 117, Malayalam 185 //0x0D80, 0x0DFF, //Sinhala, 128, 90, Sinhala 186 //0x0E00, 0x0E7F, //Thai, 128, 87, Thai (86 characters), Common (1 character) 187 //0x0E80, 0x0EFF, //Lao, 128, 67, Lao 188 //0x0F00, 0x0FFF, //Tibetan, 256, 211, Tibetan (207 characters), Common (4 characters) 189 //0x1000, 0x109F, //Myanmar, 160, 160, Myanmar 190 //0x10A0, 0x10FF, //Georgian, 96, 88, Georgian (87 characters), Common (1 character) 191 //0x1100, 0x11FF, //Hangul Jamo, 256, 256, Hangul 192 //0x1200, 0x137F, //Ethiopic, 384, 358, Ethiopic 193 //0x1380, 0x139F, //Ethiopic Supplement, 32, 26, Ethiopic 194 //0x13A0, 0x13FF, //Cherokee, 96, 92, Cherokee 195 //0x1400, 0x167F, //Unified Canadian Aboriginal Syllabics, 640, 640, Canadian Aboriginal 196 //0x1680, 0x169F, //Ogham, 32, 29, Ogham 197 //0x16A0, 0x16FF, //Runic, 96, 89, Runic (86 characters), Common (3 characters) 198 //0x1700, 0x171F, //Tagalog, 32, 20, Tagalog 199 //0x1720, 0x173F, //Hanunoo, 32, 23, Hanunoo (21 characters), Common (2 characters) 200 //0x1740, 0x175F, //Buhid, 32, 20, Buhid 201 //0x1760, 0x177F, //Tagbanwa, 32, 18, Tagbanwa 202 //0x1780, 0x17FF, //Khmer, 128, 114, Khmer 203 //0x1800, 0x18AF, //Mongolian, 176, 156, Mongolian (153 characters), Common (3 characters) 204 //0x18B0, 0x18FF, //Unified Canadian Aboriginal Syllabics Extended, 80, 70, Canadian Aboriginal 205 //0x1900, 0x194F, //Limbu, 80, 68, Limbu 206 //0x1950, 0x197F, //Tai Le, 48, 35, Tai Le 207 //0x1980, 0x19DF, //New Tai Lue, 96, 83, New Tai Lue 208 //0x19E0, 0x19FF, //Khmer Symbols, 32, 32, Khmer 209 //0x1A00, 0x1A1F, //Buginese, 32, 30, Buginese 210 //0x1A20, 0x1AAF, //Tai Tham, 144, 127, Tai Tham 211 //0x1AB0, 0x1AFF, //Combining Diacritical Marks Extended, 80, 15, Inherited 212 //0x1B00, 0x1B7F, //Balinese, 128, 121, Balinese 213 //0x1B80, 0x1BBF, //Sundanese, 64, 64, Sundanese 214 //0x1BC0, 0x1BFF, //Batak, 64, 56, Batak 215 //0x1C00, 0x1C4F, //Lepcha, 80, 74, Lepcha 216 //0x1C50, 0x1C7F, //Ol Chiki, 48, 48, Ol Chiki 217 //0x1C80, 0x1C8F, //Cyrillic Extended-C, 16, 9, Cyrillic 218 //0x1CC0, 0x1CCF, //Sundanese Supplement, 16, 8, Sundanese 219 //0x1CD0, 0x1CFF, //Vedic Extensions, 48, 42, Common (15 characters), Inherited (27 characters) 220 //0x1D00, 0x1D7F, //Phonetic Extensions, 128, 128, Cyrillic (2 characters), Greek (15 characters), Latin (111 characters) 221 //0x1D80, 0x1DBF, //Phonetic Extensions Supplement, 64, 64, Greek (1 character), Latin (63 characters) 222 //0x1DC0, 0x1DFF, //Combining Diacritical Marks Supplement, 64, 63, Inherited 223 //0x1E00, 0x1EFF, //Latin Extended Additional, 256, 256, Latin 224 //0x1F00, 0x1FFF, //Greek Extended, 256, 233, Greek 225 //0x2000, 0x206F, //General Punctuation, 112, 111, Common (109 characters), Inherited (2 characters) 226 //0x2070, 0x209F, //Superscripts and Subscripts, 48, 42, Latin (15 characters), Common (27 characters) 227 //0x20A0, 0x20CF, //Currency Symbols, 48, 32, Common 228 //0x20D0, 0x20FF, //Combining Diacritical Marks for Symbols, 48, 33, Inherited 229 //0x2100, 0x214F, //Letterlike Symbols, 80, 80, Greek (1 character), Latin (4 characters), Common (75 characters) 230 //0x2150, 0x218F, //Number Forms, 64, 60, Latin (41 characters), Common (19 characters) 231 //0x2190, 0x21FF, //Arrows, 112, 112, Common 232 //0x2200, 0x22FF, //Mathematical Operators, 256, 256, Common 233 //0x2300, 0x23FF, //Miscellaneous Technical, 256, 256, Common 234 //0x2400, 0x243F, //Control Pictures, 64, 39, Common 235 //0x2440, 0x245F, //Optical Character Recognition, 32, 11, Common 236 //0x2460, 0x24FF, //Enclosed Alphanumerics, 160, 160, Common 237 //0x2500, 0x257F, //Box Drawing, 128, 128, Common 238 //0x2580, 0x259F, //Block Elements, 32, 32, Common 239 //0x25A0, 0x25FF, //Geometric Shapes, 96, 96, Common 240 //0x2600, 0x26FF, //Miscellaneous Symbols, 256, 256, Common 241 //0x2700, 0x27BF, //Dingbats, 192, 192, Common 242 //0x27C0, 0x27EF, //Miscellaneous Mathematical Symbols-A, 48, 48, Common 243 //0x27F0, 0x27FF, //Supplemental Arrows-A, 16, 16, Common 244 //0x2800, 0x28FF, //Braille Patterns, 256, 256, Braille 245 //0x2900, 0x297F, //Supplemental Arrows-B, 128, 128, Common 246 //0x2980, 0x29FF, //Miscellaneous Mathematical Symbols-B, 128, 128, Common 247 //0x2A00, 0x2AFF, //Supplemental Mathematical Operators, 256, 256, Common 248 //0x2B00, 0x2BFF, //Miscellaneous Symbols and Arrows, 256, 207, Common 249 //0x2C00, 0x2C5F, //Glagolitic, 96, 94, Glagolitic 250 //0x2C60, 0x2C7F, //Latin Extended-C, 32, 32, Latin 251 //0x2C80, 0x2CFF, //Coptic, 128, 123, Coptic 252 //0x2D00, 0x2D2F, //Georgian Supplement, 48, 40, Georgian 253 //0x2D30, 0x2D7F, //Tifinagh, 80, 59, Tifinagh 254 //0x2D80, 0x2DDF, //Ethiopic Extended, 96, 79, Ethiopic 255 //0x2DE0, 0x2DFF, //Cyrillic Extended-A, 32, 32, Cyrillic 256 //0x2E00, 0x2E7F, //Supplemental Punctuation, 128, 74, Common 257 //0x2E80, 0x2EFF, //CJK Radicals Supplement, 128, 115, Han 258 //0x2F00, 0x2FDF, //Kangxi Radicals, 224, 214, Han 259 //0x2FF0, 0x2FFF, //Ideographic Description Characters, 16, 12, Common 260 //0x3000, 0x303F, //CJK Symbols and Punctuation, 64, 64, Han (15 characters), Hangul (2 characters), Common (43 characters), Inherited (4 characters) 261 //0x3040, 0x309F, //Hiragana, 96, 93, Hiragana (89 characters), Common (2 characters), Inherited (2 characters) 262 //0x30A0, 0x30FF, //Katakana, 96, 96, Katakana (93 characters), Common (3 characters) 263 //0x3100, 0x312F, //Bopomofo, 48, 42, Bopomofo 264 //0x3130, 0x318F, //Hangul Compatibility Jamo, 96, 94, Hangul 265 //0x3190, 0x319F, //Kanbun, 16, 16, Common 266 //0x31A0, 0x31BF, //Bopomofo Extended, 32, 27, Bopomofo 267 //0x31C0, 0x31EF, //CJK Strokes, 48, 36, Common 268 //0x31F0, 0x31FF, //Katakana Phonetic Extensions, 16, 16, Katakana 269 //0x3200, 0x32FF, //Enclosed CJK Letters and Months, 256, 254, Hangul (62 characters), Katakana (47 characters), Common (145 characters) 270 //0x3300, 0x33FF, //CJK Compatibility, 256, 256, Katakana (88 characters), Common (168 characters) 271 //0x3400, 0x4DBF, //CJK Unified Ideographs Extension A, 6,592, 6,582, Han 272 //0x4DC0, 0x4DFF, //Yijing Hexagram Symbols, 64, 64, Common 273 //0x4E00, 0x9FFF, //CJK Unified Ideographs, 20,992, 20,971, Han 274 //0xA000, 0xA48F, //Yi Syllables, 1,168, 1,165, Yi 275 //0xA490, 0xA4CF, //Yi Radicals, 64, 55, Yi 276 //0xA4D0, 0xA4FF, //Lisu, 48, 48, Lisu 277 //0xA500, 0xA63F, //Vai, 320, 300, Vai 278 //0xA640, 0xA69F, //Cyrillic Extended-B, 96, 96, Cyrillic 279 //0xA6A0, 0xA6FF, //Bamum, 96, 88, Bamum 280 //0xA700, 0xA71F, //Modifier Tone Letters, 32, 32, Common 281 //0xA720, 0xA7FF, //Latin Extended-D, 224, 160, Latin (155 characters), Common (5 characters) 282 //0xA800, 0xA82F, //Syloti Nagri, 48, 44, Syloti Nagri 283 //0xA830, 0xA83F, //Common Indic Number Forms, 16, 10, Common 284 //0xA840, 0xA87F, //Phags-pa, 64, 56, Phags Pa 285 //0xA880, 0xA8DF, //Saurashtra, 96, 82, Saurashtra 286 //0xA8E0, 0xA8FF, //Devanagari Extended, 32, 30, Devanagari 287 //0xA900, 0xA92F, //Kayah Li, 48, 48, Kayah Li (47 characters), Common (1 character) 288 //0xA930, 0xA95F, //Rejang, 48, 37, Rejang 289 //0xA960, 0xA97F, //Hangul Jamo Extended-A, 32, 29, Hangul 290 //0xA980, 0xA9DF, //Javanese, 96, 91, Javanese (90 characters), Common (1 character) 291 //0xA9E0, 0xA9FF, //Myanmar Extended-B, 32, 31, Myanmar 292 //0xAA00, 0xAA5F, //Cham, 96, 83, Cham 293 //0xAA60, 0xAA7F, //Myanmar Extended-A, 32, 32, Myanmar 294 //0xAA80, 0xAADF, //Tai Viet, 96, 72, Tai Viet 295 //0xAAE0, 0xAAFF, //Meetei Mayek Extensions, 32, 23, Meetei Mayek 296 //0xAB00, 0xAB2F, //Ethiopic Extended-A, 48, 32, Ethiopic 297 //0xAB30, 0xAB6F, //Latin Extended-E, 64, 54, Latin (52 characters), Greek (1 character), Common (1 character) 298 //0xAB70, 0xABBF, //Cherokee Supplement, 80, 80, Cherokee 299 //0xABC0, 0xABFF, //Meetei Mayek, 64, 56, Meetei Mayek 300 //0xAC00, 0xD7AF, //Hangul Syllables, 11,184, 11,172, Hangul 301 //0xD7B0, 0xD7FF, //Hangul Jamo Extended-B, 80, 72, Hangul 302 //0xD800, 0xDB7F, //High Surrogates, 896, 0, Unknown 303 //0xDB80, 0xDBFF, //High Private Use Surrogates, 128, 0, Unknown 304 //0xDC00, 0xDFFF, //Low Surrogates, 1,024, 0, Unknown 305 //0xE000, 0xF8FF, //Private Use Area, 6,400, 6,400, Unknown 306 //0xF900, 0xFAFF, //CJK Compatibility Ideographs, 512, 472, Han 307 //0xFB00, 0xFB4F, //Alphabetic Presentation Forms, 80, 58, Armenian (5 characters), Hebrew (46 characters), Latin (7 characters) 308 //0xFB50, 0xFDFF, //Arabic Presentation Forms-A, 688, 611, Arabic (609 characters), Common (2 characters) 309 //0xFE00, 0xFE0F, //Variation Selectors, 16, 16, Inherited 310 //0xFE10, 0xFE1F, //Vertical Forms, 16, 10, Common 311 //0xFE20, 0xFE2F, //Combining Half Marks, 16, 16, Cyrillic (2 characters), Inherited (14 characters) 312 //0xFE30, 0xFE4F, //CJK Compatibility Forms, 32, 32, Common 313 //0xFE50, 0xFE6F, //Small Form Variants, 32, 26, Common 314 //0xFE70, 0xFEFF, //Arabic Presentation Forms-B, 144, 141, Arabic (140 characters), Common (1 character) 315 //0xFF00, 0xFFEF, //Halfwidth and Fullwidth Forms, 240, 225, Hangul (52 characters), Katakana (55 characters), Latin (52 characters), Common (66 characters) 316 //0xFFF0, 0xFFFF, //Specials, 16, 5, Common 317 318 //0x0030, 0x0039, //Example custom range (numbers 0-9) 319 //0x0041, 0x005A, //Example custom range (Upper case A-Z) 320 //0x0061, 0x007A, //Example custom range (Lower case a-z) 321 }; 322 323 // Here we specify particular individual Unicodes to be included (appended at end of selected range) 324 static final int[] specificUnicodes = { 325 326 // Commonly used codes, add or remove // in next line 327 // 0x00A3, 0x00B0, 0x00B5, 0x03A9, 0x20AC, // £ ° µ Ω € 328 329 // Numbers and characters for showing time, change next line to //* to use 330 /* 331 0x002B, 0x002D, 0x002E, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, // - + . 0 1 2 3 4 332 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x0061, 0x006D, // 5 6 7 8 9 : a m 333 0x0070, // p 334 //*/ 335 336 // More characters for TFT_eSPI test sketches, change next line to //* to use 337 /* 338 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x010C, 0x010D, 339 0x010E, 0x010F, 0x0110, 0x0111, 0x0118, 0x0119, 0x011A, 0x011B, 340 341 0x0131, 0x0139, 0x013A, 0x013D, 0x013E, 0x0141, 0x0142, 0x0143, 342 0x0144, 0x0147, 0x0148, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 343 0x0155, 0x0158, 0x0159, 0x015A, 0x015B, 0x015E, 0x015F, 0x0160, 344 0x0161, 0x0162, 0x0163, 0x0164, 0x0165, 0x016E, 0x016F, 0x0170, 345 0x0171, 0x0178, 0x0179, 0x017A, 0x017B, 0x017C, 0x017D, 0x017E, 346 0x0192, 347 348 0x02C6, 0x02C7, 0x02D8, 0x02D9, 0x02DA, 0x02DB, 0x02DC, 0x02DD, 349 0x03A9, 0x03C0, 0x2013, 0x2014, 0x2018, 0x2019, 0x201A, 0x201C, 350 0x201D, 0x201E, 0x2020, 0x2021, 0x2022, 0x2026, 0x2030, 0x2039, 351 0x203A, 0x2044, 0x20AC, 352 353 0x2122, 0x2202, 0x2206, 0x220F, 354 355 0x2211, 0x221A, 0x221E, 0x222B, 0x2248, 0x2260, 0x2264, 0x2265, 356 0x25CA, 357 358 0xF8FF, 0xFB01, 0xFB02, 359 //*/ 360 }; 361 362 // >>>>>>>>>> USER CONFIGURED PARAMETERS END HERE <<<<<<<<<< 363 364 //////////////////////////////////////////////////////////////////////////////////////////////// 365 366 // Variable to hold the inclusive Unicode range (16 bit values only for this sketch) 367 int firstUnicode = 0; 368 int lastUnicode = 0; 369 370 PFont myFont; 371 372 PrintWriter logOutput; 373 374 void setup() { 375 logOutput = createWriter("FontFiles/System_Font_List.txt"); 376 377 size(1000, 800); 378 379 // Print the available fonts to the console as a list: 380 String[] fontList = PFont.list(); 381 printArray(fontList); 382 383 // Save font list to file 384 for (int x = 0; x < fontList.length; x++) 385 { 386 logOutput.print("[" + x + "] "); 387 logOutput.println(fontList[x]); 388 } 389 logOutput.flush(); // Writes the remaining data to the file 390 logOutput.close(); // Finishes the file 391 392 // Set the fontName from the array number or the defined fontName 393 if (fontNumber >= 0) 394 { 395 fontName = fontList[fontNumber]; 396 fontType = ""; 397 } 398 399 char[] charset; 400 int index = 0, count = 0; 401 402 int blockCount = unicodeBlocks.length; 403 404 for (int i = 0; i < blockCount; i+=2) { 405 firstUnicode = unicodeBlocks[i]; 406 lastUnicode = unicodeBlocks[i+1]; 407 if (lastUnicode < firstUnicode) { 408 delay(100); 409 System.err.println("ERROR: Bad Unicode range secified, last < first!"); 410 System.err.print("first in range = 0x" + hex(firstUnicode, 4)); 411 System.err.println(", last in range = 0x" + hex(lastUnicode, 4)); 412 while (true); 413 } 414 // calculate the number of characters 415 count += (lastUnicode - firstUnicode + 1); 416 } 417 418 count += specificUnicodes.length; 419 420 println(); 421 println("====================="); 422 println("Creating font file..."); 423 println("Unicode blocks included = " + (blockCount/2)); 424 println("Specific unicodes included = " + specificUnicodes.length); 425 println("Total number of characters = " + count); 426 427 if (count == 0) { 428 delay(100); 429 System.err.println("ERROR: No Unicode range or specific codes have been defined!"); 430 while (true); 431 } 432 433 // allocate memory 434 charset = new char[count]; 435 436 for (int i = 0; i < blockCount; i+=2) { 437 firstUnicode = unicodeBlocks[i]; 438 lastUnicode = unicodeBlocks[i+1]; 439 440 // loading the range specified 441 for (int code = firstUnicode; code <= lastUnicode; code++) { 442 charset[index] = Character.toChars(code)[0]; 443 index++; 444 } 445 } 446 447 // loading the specific point codes 448 for (int i = 0; i < specificUnicodes.length; i++) { 449 charset[index] = Character.toChars(specificUnicodes[i])[0]; 450 index++; 451 } 452 453 // Make font smooth (anti-aliased) 454 boolean smooth = true; 455 456 // Create the font in memory 457 myFont = createFont(fontName+fontType, displayFontSize, smooth, charset); 458 459 // Print characters to the sketch window 460 fill(0, 0, 0); 461 textFont(myFont); 462 463 // Set the left and top margin 464 int margin = displayFontSize; 465 translate(margin/2, margin); 466 467 int gapx = displayFontSize*10/8; 468 int gapy = displayFontSize*10/8; 469 index = 0; 470 fill(0); 471 472 textSize(displayFontSize); 473 474 for (int y = 0; y < height-gapy; y += gapy) { 475 int x = 0; 476 while (x < width) { 477 478 int unicode = charset[index]; 479 float cwidth = textWidth((char)unicode) + 2; 480 if ( (x + cwidth) > (width - gapx) ) break; 481 482 // Draw the glyph to the screen 483 text(new String(Character.toChars(unicode)), x, y); 484 485 // Move cursor 486 x += cwidth; 487 // Increment the counter 488 index++; 489 if (index >= count) break; 490 } 491 if (index >= count) break; 492 } 493 494 495 // creating font to save as a file 496 PFont font; 497 498 font = createFont(fontName+fontType, fontSize, smooth, charset); 499 500 println("Created font " + fontName + str(fontSize) + ".vlw"); 501 502 // creating file 503 try { 504 print("Saving to sketch FontFiles folder... "); 505 506 OutputStream output = createOutput("FontFiles/" + fontName + str(fontSize) + ".vlw"); 507 font.save(output); 508 output.close(); 509 510 println("OK!"); 511 512 delay(100); 513 514 // Open up the FontFiles folder to access the saved file 515 String path = sketchPath(); 516 Desktop.getDesktop().open(new File(path+"/FontFiles")); 517 518 System.err.println("All done! Note: Rectangles are displayed for non-existant characters."); 519 } 520 catch(IOException e) { 521 println("Doh! Failed to create the file"); 522 } 523 }