├── .gitattributes ├── example ├── output.otf ├── output.ttf ├── output.woff ├── output.woff2 ├── font_template.ai ├── generate_fonts.py ├── SVG │ ├── 67 C.svg │ ├── 91 bracketleft.svg │ ├── 93 bracketright.svg │ ├── 57 9.svg │ ├── 48 0.svg │ ├── 65 A.svg │ ├── 63 question.svg │ └── 66 B.svg ├── batch_import_svg.py └── output.sfd ├── font_template.ai ├── img ├── 3-ai_export.png ├── 2-ai_menu_export.png ├── 1-ai_font_template.png ├── 4-fontforge_import.png ├── 5-fontforge_adjust_width.png ├── 7-fontforge_generate_font.png └── 6-fontforge_menu_generate_font.png ├── font_template_single.ai ├── template_desc ├── font_template_single_description.ai └── font_template_single_description.png ├── .gitignore ├── other_files ├── font_template-glyph_list.txt ├── update_artboard_names.js └── font_template-glyph_list-char-dec-filename_table.txt ├── test └── test.sh ├── batch_import_svg.py ├── LICENSE └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=crlf 2 | *.txt text=auto eol=lf 3 | *.sh text=auto eol=lf -------------------------------------------------------------------------------- /example/output.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/example/output.otf -------------------------------------------------------------------------------- /example/output.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/example/output.ttf -------------------------------------------------------------------------------- /font_template.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/font_template.ai -------------------------------------------------------------------------------- /example/output.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/example/output.woff -------------------------------------------------------------------------------- /example/output.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/example/output.woff2 -------------------------------------------------------------------------------- /img/3-ai_export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/img/3-ai_export.png -------------------------------------------------------------------------------- /font_template_single.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/font_template_single.ai -------------------------------------------------------------------------------- /example/font_template.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/example/font_template.ai -------------------------------------------------------------------------------- /img/2-ai_menu_export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/img/2-ai_menu_export.png -------------------------------------------------------------------------------- /img/1-ai_font_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/img/1-ai_font_template.png -------------------------------------------------------------------------------- /img/4-fontforge_import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/img/4-fontforge_import.png -------------------------------------------------------------------------------- /img/5-fontforge_adjust_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/img/5-fontforge_adjust_width.png -------------------------------------------------------------------------------- /img/7-fontforge_generate_font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/img/7-fontforge_generate_font.png -------------------------------------------------------------------------------- /img/6-fontforge_menu_generate_font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/img/6-fontforge_menu_generate_font.png -------------------------------------------------------------------------------- /template_desc/font_template_single_description.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/template_desc/font_template_single_description.ai -------------------------------------------------------------------------------- /template_desc/font_template_single_description.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomchen/font-template/HEAD/template_desc/font_template_single_description.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /test/* 2 | !/test/test.sh 3 | 4 | # Mac 5 | .DS_Store 6 | 7 | # Windows 8 | Thumbs.db 9 | 10 | # WebStorm 11 | .idea/ 12 | 13 | # vi 14 | *~ 15 | 16 | # General 17 | log/ 18 | *.log 19 | -------------------------------------------------------------------------------- /example/generate_fonts.py: -------------------------------------------------------------------------------- 1 | import fontforge 2 | 3 | font = fontforge.open('output.sfd') 4 | 5 | font.generate('output.otf') 6 | font.generate('output.ttf') 7 | font.generate('output.woff') 8 | font.generate('output.woff2') 9 | -------------------------------------------------------------------------------- /other_files/font_template-glyph_list.txt: -------------------------------------------------------------------------------- 1 | ABCDEFGHIJKLMNOPQRSTUVWXYZ 2 | abcdefghijklmnopqrstuvwxyz 3 | 0123456789.,:;!?'"‘’“”@_&# 4 | %*+-×÷=~<>/\(){}[]$¢€£¥©®™ 5 | ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒÙÚ 6 | ÛÜÝŸÞÐŁŠŽ¡¿«»‹›¤•°±−¶§‰⁄–— 7 | àáâãäåæçèéêëìíîïñòóôõöøœùú 8 | ûüýÿþðłšžßı^ˆˇ¨˜`´¸‛‚„…|†‡ -------------------------------------------------------------------------------- /example/SVG/67 C.svg: -------------------------------------------------------------------------------- 1 | 67 C -------------------------------------------------------------------------------- /example/SVG/91 bracketleft.svg: -------------------------------------------------------------------------------- 1 | 91 bracketleft -------------------------------------------------------------------------------- /example/SVG/93 bracketright.svg: -------------------------------------------------------------------------------- 1 | 93 bracketright -------------------------------------------------------------------------------- /example/SVG/57 9.svg: -------------------------------------------------------------------------------- 1 | 57 9 -------------------------------------------------------------------------------- /example/SVG/48 0.svg: -------------------------------------------------------------------------------- 1 | 48 0 -------------------------------------------------------------------------------- /test/test.sh: -------------------------------------------------------------------------------- 1 | mkdir -p SVG 2 | 3 | cp "../example/SVG/65 A.svg" . 4 | 5 | (cat ../other_files/font_template-glyph_list-char-dec-filename_table.txt; echo) | sed 1d | while IFS=$'\t' read -r -a arr 6 | do 7 | cp "65 A.svg" "SVG/${arr[2]}.svg" 8 | done 9 | rm "65 A.svg" 10 | 11 | cp ../batch_import_svg.py . 12 | 13 | # Windows 14 | # run C:\Program Files (x86)\FontForgeBuilds\fontforge-console.bat, navigate to the folder using cd and execute the Python script by using: 15 | # ffpython batch_import_svg.py 16 | 17 | # Mac / Linux 18 | # fontforge -lang=py -script batch_import_svg.py 19 | -------------------------------------------------------------------------------- /example/SVG/65 A.svg: -------------------------------------------------------------------------------- 1 | 65 A -------------------------------------------------------------------------------- /example/SVG/63 question.svg: -------------------------------------------------------------------------------- 1 | 63 question -------------------------------------------------------------------------------- /example/SVG/66 B.svg: -------------------------------------------------------------------------------- 1 | 66 B -------------------------------------------------------------------------------- /batch_import_svg.py: -------------------------------------------------------------------------------- 1 | # Batch Import SVG Individual Glyph Files into FontForge's Font File 2 | # For Windows users, run C:\Program Files (x86)\FontForgeBuilds\fontforge-console.bat, navigate to the folder using 'cd ' and execute the Python script by using `ffpython batch_import_svg.py` 3 | 4 | import fontforge 5 | from pathlib import Path 6 | 7 | # font = fontforge.open('example.sfd') 8 | font = fontforge.font() # new font 9 | 10 | svgFilePaths = list(Path('SVG').glob('**/*.svg')) 11 | 12 | for p in svgFilePaths: 13 | dec = p.stem.split(" ", 1)[0] 14 | glyph = font.createChar(int(dec)) 15 | glyph.importOutlines(str(p)) 16 | 17 | font.save('output.sfd') 18 | 19 | # font.generate('output.otf') 20 | # font.generate('output.ttf') 21 | # font.generate('output.woff') 22 | # font.generate('output.woff2') 23 | -------------------------------------------------------------------------------- /example/batch_import_svg.py: -------------------------------------------------------------------------------- 1 | # Batch Import SVG Individual Glyph Files into FontForge's Font File 2 | # For Windows users, run C:\Program Files (x86)\FontForgeBuilds\fontforge-console.bat, navigate to the folder using 'cd ' and execute the Python script by using `ffpython batch_import_svg.py` 3 | 4 | import fontforge 5 | from pathlib import Path 6 | 7 | # font = fontforge.open('example.sfd') 8 | font = fontforge.font() # new font 9 | 10 | svgFilePaths = list(Path('SVG').glob('**/*.svg')) 11 | 12 | for p in svgFilePaths: 13 | dec = p.stem.split(" ", 1)[0] 14 | glyph = font.createChar(int(dec)) 15 | glyph.importOutlines(str(p)) 16 | 17 | font.save('output.sfd') 18 | 19 | # font.generate('output.otf') 20 | # font.generate('output.ttf') 21 | # font.generate('output.woff') 22 | # font.generate('output.woff2') 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Tom Chen (tomchen.org) 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 | -------------------------------------------------------------------------------- /other_files/update_artboard_names.js: -------------------------------------------------------------------------------- 1 | var artboardNameMap = { 2 | "46 .": "46 period", 3 | "44 ,": "44 comma", 4 | "59 ;": "59 semicolon", 5 | "33 !": "33 exclam", 6 | "39 '": "39 quotesingle", 7 | "8216 ‘": "8216 quoteleft", 8 | "8217 ’": "8217 quoteright", 9 | "8220 “": "8220 quotedblleft", 10 | "8221 ”": "8221 quotedblright", 11 | "64 @": "64 at", 12 | "95 _": "95 underscore", 13 | "38 &": "38 ampersand", 14 | "35 #": "35 numbersign", 15 | "37 %": "37 percent", 16 | "43 +": "43 plus", 17 | "45 -": "45 hyphen", 18 | "215 ×": "215 multiply", 19 | "247 ÷": "247 divide", 20 | "61 =": "61 equal", 21 | "126 ~": "126 asciitilde", 22 | "40 (": "40 parenleft", 23 | "41 )": "41 parenright", 24 | "123 {": "123 braceleft", 25 | "125 }": "125 braceright", 26 | "36 $": "36 dollar", 27 | "162 ¢": "162 cent", 28 | "8364 €": "8364 euro", 29 | "163 £": "163 sterling", 30 | "165 ¥": "165 yen", 31 | "169 ©": "169 copyright", 32 | "174 ®": "174 registered", 33 | "8482 ™": "8482 trademark", 34 | "192 À": "192 Agrave", 35 | "193 Á": "193 Aacute", 36 | "194 Â": "194 Acircumflex", 37 | "195 Ã": "195 Atilde", 38 | "196 Ä": "196 Adieresis", 39 | "197 Å": "197 Aring", 40 | "198 Æ": "198 AE", 41 | "199 Ç": "199 Ccedilla", 42 | "200 È": "200 Egrave", 43 | "201 É": "201 Eacute", 44 | "202 Ê": "202 Ecircumflex", 45 | "203 Ë": "203 Edieresis", 46 | "204 Ì": "204 Igrave", 47 | "205 Í": "205 Iacute", 48 | "206 Î": "206 Icircumflex", 49 | "207 Ï": "207 Idieresis", 50 | "209 Ñ": "209 Ntilde", 51 | "210 Ò": "210 Ograve", 52 | "211 Ó": "211 Oacute", 53 | "212 Ô": "212 Ocircumflex", 54 | "213 Õ": "213 Otilde", 55 | "214 Ö": "214 Odieresis", 56 | "216 Ø": "216 Oslash", 57 | "338 Œ": "338 OE", 58 | "217 Ù": "217 Ugrave", 59 | "218 Ú": "218 Uacute", 60 | "219 Û": "219 Ucircumflex", 61 | "220 Ü": "220 Udieresis", 62 | "221 Ý": "221 Yacute", 63 | "376 Ÿ": "376 Ydieresis", 64 | "222 Þ": "222 Thorn", 65 | "208 Ð": "208 Eth", 66 | "321 Ł": "321 Lslash", 67 | "352 Š": "352 Scaron", 68 | "381 Ž": "381 Zcaron", 69 | "161 ¡": "161 exclamdown", 70 | "191 ¿": "191 questiondown", 71 | "171 «": "171 guillemotleft", 72 | "187 »": "187 guillemotright", 73 | "8249 ‹": "8249 guilsinglleft", 74 | "8250 ›": "8250 guilsinglright", 75 | "164 ¤": "164 currency", 76 | "8226 •": "8226 bullet", 77 | "176 °": "176 degree", 78 | "177 ±": "177 plusminus", 79 | "8722 −": "8722 minus", 80 | "182 ¶": "182 paragraph", 81 | "167 §": "167 section", 82 | "8240 ‰": "8240 perthousand", 83 | "8260 ⁄": "8260 fraction", 84 | "8211 –": "8211 endash", 85 | "8212 —": "8212 emdash", 86 | "224 à": "224 agrave", 87 | "225 á": "225 aacute", 88 | "226 â": "226 acircumflex", 89 | "227 ã": "227 atilde", 90 | "228 ä": "228 adieresis", 91 | "229 å": "229 aring", 92 | "230 æ": "230 ae", 93 | "231 ç": "231 ccedilla", 94 | "232 è": "232 egrave", 95 | "233 é": "233 eacute", 96 | "234 ê": "234 ecircumflex", 97 | "235 ë": "235 edieresis", 98 | "236 ì": "236 igrave", 99 | "237 í": "237 iacute", 100 | "238 î": "238 icircumflex", 101 | "239 ï": "239 idieresis", 102 | "241 ñ": "241 ntilde", 103 | "242 ò": "242 ograve", 104 | "243 ó": "243 oacute", 105 | "244 ô": "244 ocircumflex", 106 | "245 õ": "245 otilde", 107 | "246 ö": "246 odieresis", 108 | "248 ø": "248 oslash", 109 | "339 œ": "339 oe", 110 | "249 ù": "249 ugrave", 111 | "250 ú": "250 uacute", 112 | "251 û": "251 ucircumflex", 113 | "252 ü": "252 udieresis", 114 | "253 ý": "253 yacute", 115 | "255 ÿ": "255 ydieresis", 116 | "254 þ": "254 thorn", 117 | "240 ð": "240 eth", 118 | "322 ł": "322 lslash", 119 | "353 š": "353 scaron", 120 | "382 ž": "382 zcaron", 121 | "223 ß": "223 germandbls", 122 | "305 ı": "305 dotlessi", 123 | "94 ^": "94 asciicircum", 124 | "710 ˆ": "710 circumflex", 125 | "711 ˇ": "711 caron", 126 | "168 ¨": "168 dieresis", 127 | "732 ˜": "732 tilde", 128 | "96 `": "96 grave", 129 | "180 ´": "180 acute", 130 | "184 ¸": "184 cedilla", 131 | "8219 ‛": "8219 quotereversed", 132 | "8218 ‚": "8218 quotesinglbase", 133 | "8222 „": "8222 quotedblbase", 134 | "8230 …": "8230 ellipsis", 135 | "124 bar": "124 verticalbar", 136 | "8224 †": "8224 dagger", 137 | "8225 ‡": "8225 daggerdbl" 138 | }; 139 | 140 | var abs = app.activeDocument.artboards; 141 | for (var i = 0; i < abs.length; i++) { 142 | var ab = abs[i]; 143 | if (ab.name in artboardNameMap) { 144 | ab.name = artboardNameMap[ab.name] 145 | } 146 | } -------------------------------------------------------------------------------- /other_files/font_template-glyph_list-char-dec-filename_table.txt: -------------------------------------------------------------------------------- 1 | Character Decimal Artboard/SVG file name Glyph name (AGL) 2 | A 65 65 A A 3 | B 66 66 B B 4 | C 67 67 C C 5 | D 68 68 D D 6 | E 69 69 E E 7 | F 70 70 F F 8 | G 71 71 G G 9 | H 72 72 H H 10 | I 73 73 I I 11 | J 74 74 J J 12 | K 75 75 K K 13 | L 76 76 L L 14 | M 77 77 M M 15 | N 78 78 N N 16 | O 79 79 O O 17 | P 80 80 P P 18 | Q 81 81 Q Q 19 | R 82 82 R R 20 | S 83 83 S S 21 | T 84 84 T T 22 | U 85 85 U U 23 | V 86 86 V V 24 | W 87 87 W W 25 | X 88 88 X X 26 | Y 89 89 Y Y 27 | Z 90 90 Z Z 28 | a 97 97 a a 29 | b 98 98 b b 30 | c 99 99 c c 31 | d 100 100 d d 32 | e 101 101 e e 33 | f 102 102 f f 34 | g 103 103 g g 35 | h 104 104 h h 36 | i 105 105 i i 37 | j 106 106 j j 38 | k 107 107 k k 39 | l 108 108 l l 40 | m 109 109 m m 41 | n 110 110 n n 42 | o 111 111 o o 43 | p 112 112 p p 44 | q 113 113 q q 45 | r 114 114 r r 46 | s 115 115 s s 47 | t 116 116 t t 48 | u 117 117 u u 49 | v 118 118 v v 50 | w 119 119 w w 51 | x 120 120 x x 52 | y 121 121 y y 53 | z 122 122 z z 54 | 0 48 48 0 zero 55 | 1 49 49 1 one 56 | 2 50 50 2 two 57 | 3 51 51 3 three 58 | 4 52 52 4 four 59 | 5 53 53 5 five 60 | 6 54 54 6 six 61 | 7 55 55 7 seven 62 | 8 56 56 8 eight 63 | 9 57 57 9 nine 64 | . 46 46 period period 65 | , 44 44 comma comma 66 | : 58 58 colon colon 67 | ; 59 59 semicolon semicolon 68 | ! 33 33 exclam exclam 69 | ? 63 63 question question 70 | ' 39 39 quotesingle quotesingle 71 | " 34 34 quotedbl quotedbl 72 | ‘ 8216 8216 quoteleft quoteleft 73 | ’ 8217 8217 quoteright quoteright 74 | “ 8220 8220 quotedblleft quotedblleft 75 | ” 8221 8221 quotedblright quotedblright 76 | @ 64 64 at at 77 | _ 95 95 underscore underscore 78 | & 38 38 ampersand ampersand 79 | # 35 35 numbersign numbersign 80 | % 37 37 percent percent 81 | * 42 42 asterisk asterisk 82 | + 43 43 plus plus 83 | - 45 45 hyphen hyphen 84 | × 215 215 multiply multiply 85 | ÷ 247 247 divide divide 86 | = 61 61 equal equal 87 | ~ 126 126 asciitilde asciitilde 88 | < 60 60 less less 89 | > 62 62 greater greater 90 | / 47 47 slash slash 91 | \ 92 92 backslash backslash 92 | ( 40 40 parenleft parenleft 93 | ) 41 41 parenright parenright 94 | { 123 123 braceleft braceleft 95 | } 125 125 braceright braceright 96 | [ 91 91 bracketleft bracketleft 97 | ] 93 93 bracketright bracketright 98 | $ 36 36 dollar dollar 99 | ¢ 162 162 cent cent 100 | € 8364 8364 euro euro 101 | £ 163 163 sterling sterling 102 | ¥ 165 165 yen yen 103 | © 169 169 copyright copyright 104 | ® 174 174 registered registered 105 | ™ 8482 8482 trademark trademark 106 | À 192 192 Agrave Agrave 107 | Á 193 193 Aacute Aacute 108 |  194 194 Acircumflex Acircumflex 109 | à 195 195 Atilde Atilde 110 | Ä 196 196 Adieresis Adieresis 111 | Å 197 197 Aring Aring 112 | Æ 198 198 AE AE 113 | Ç 199 199 Ccedilla Ccedilla 114 | È 200 200 Egrave Egrave 115 | É 201 201 Eacute Eacute 116 | Ê 202 202 Ecircumflex Ecircumflex 117 | Ë 203 203 Edieresis Edieresis 118 | Ì 204 204 Igrave Igrave 119 | Í 205 205 Iacute Iacute 120 | Î 206 206 Icircumflex Icircumflex 121 | Ï 207 207 Idieresis Idieresis 122 | Ñ 209 209 Ntilde Ntilde 123 | Ò 210 210 Ograve Ograve 124 | Ó 211 211 Oacute Oacute 125 | Ô 212 212 Ocircumflex Ocircumflex 126 | Õ 213 213 Otilde Otilde 127 | Ö 214 214 Odieresis Odieresis 128 | Ø 216 216 Oslash Oslash 129 | Œ 338 338 OE OE 130 | Ù 217 217 Ugrave Ugrave 131 | Ú 218 218 Uacute Uacute 132 | Û 219 219 Ucircumflex Ucircumflex 133 | Ü 220 220 Udieresis Udieresis 134 | Ý 221 221 Yacute Yacute 135 | Ÿ 376 376 Ydieresis Ydieresis 136 | Þ 222 222 Thorn Thorn 137 | Ð 208 208 Eth Eth 138 | Ł 321 321 Lslash Lslash 139 | Š 352 352 Scaron Scaron 140 | Ž 381 381 Zcaron Zcaron 141 | ¡ 161 161 exclamdown exclamdown 142 | ¿ 191 191 questiondown questiondown 143 | « 171 171 guillemotleft guillemotleft 144 | » 187 187 guillemotright guillemotright 145 | ‹ 8249 8249 guilsinglleft guilsinglleft 146 | › 8250 8250 guilsinglright guilsinglright 147 | ¤ 164 164 currency currency 148 | • 8226 8226 bullet bullet 149 | ° 176 176 degree degree 150 | ± 177 177 plusminus plusminus 151 | − 8722 8722 minus minus 152 | ¶ 182 182 paragraph paragraph 153 | § 167 167 section section 154 | ‰ 8240 8240 perthousand perthousand 155 | ⁄ 8260 8260 fraction fraction 156 | – 8211 8211 endash endash 157 | — 8212 8212 emdash emdash 158 | à 224 224 agrave agrave 159 | á 225 225 aacute aacute 160 | â 226 226 acircumflex acircumflex 161 | ã 227 227 atilde atilde 162 | ä 228 228 adieresis adieresis 163 | å 229 229 aring aring 164 | æ 230 230 ae ae 165 | ç 231 231 ccedilla ccedilla 166 | è 232 232 egrave egrave 167 | é 233 233 eacute eacute 168 | ê 234 234 ecircumflex ecircumflex 169 | ë 235 235 edieresis edieresis 170 | ì 236 236 igrave igrave 171 | í 237 237 iacute iacute 172 | î 238 238 icircumflex icircumflex 173 | ï 239 239 idieresis idieresis 174 | ñ 241 241 ntilde ntilde 175 | ò 242 242 ograve ograve 176 | ó 243 243 oacute oacute 177 | ô 244 244 ocircumflex ocircumflex 178 | õ 245 245 otilde otilde 179 | ö 246 246 odieresis odieresis 180 | ø 248 248 oslash oslash 181 | œ 339 339 oe oe 182 | ù 249 249 ugrave ugrave 183 | ú 250 250 uacute uacute 184 | û 251 251 ucircumflex ucircumflex 185 | ü 252 252 udieresis udieresis 186 | ý 253 253 yacute yacute 187 | ÿ 255 255 ydieresis ydieresis 188 | þ 254 254 thorn thorn 189 | ð 240 240 eth eth 190 | ł 322 322 lslash lslash 191 | š 353 353 scaron scaron 192 | ž 382 382 zcaron zcaron 193 | ß 223 223 germandbls germandbls 194 | ı 305 305 dotlessi dotlessi 195 | ^ 94 94 asciicircum asciicircum 196 | ˆ 710 710 circumflex circumflex 197 | ˇ 711 711 caron caron 198 | ¨ 168 168 dieresis dieresis 199 | ˜ 732 732 tilde tilde 200 | ` 96 96 grave grave 201 | ´ 180 180 acute acute 202 | ¸ 184 184 cedilla cedilla 203 | ‛ 8219 8219 quotereversed quotereversed 204 | ‚ 8218 8218 quotesinglbase quotesinglbase 205 | „ 8222 8222 quotedblbase quotedblbase 206 | … 8230 8230 ellipsis ellipsis 207 | | 124 124 verticalbar verticalbar 208 | † 8224 8224 dagger dagger 209 | ‡ 8225 8225 daggerdbl daggerdbl -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Font Template: the simplest way to create your own font using Adobe Illustrator and FontForge 2 | 3 | Adobe Illustrator font templates that allow you to edit shapes of glyphs (characters) altogether in one `.ai` file (or in their separate, respective `.ai` files if you want), then export them as `.svg` files, which can be imported into a font file in free and open-source font maker [FontForge](https://fontforge.org/), and generate final production font files (`.otf`, `.ttf`, `.woff`, `.woff2`, etc.). 4 | 5 |

6 | Beautiful version of this tutorial on my website 7 |

8 | 9 | ## Files 10 | 11 | * **`font_template.ai`** ([download](https://github.com/tomchen/font-template/raw/master/font_template.ai)): Adobe Illustrator font template for basic and extended symbols and latin letters (significant CP1252 coverage), each glyph has a separate artboard, so that you can easily export each of them as individual glyph SVG file. 12 | * **`font_template_single.ai`** ([download](https://github.com/tomchen/font-template/raw/master/font_template_single.ai)): Adobe Illustrator font template for a single glyph. If you want, you can use this file instead of (or along with) `font_template.ai`. 13 | * **`batch_import_svg.py`** ([open](https://github.com/tomchen/font-template/raw/master/batch_import_svg.py), then Ctrl+S / Cmd+S to save): a python script that can import multiple SVG individual glyph files into FontForge's `.sfd` font file (and can optionally convert it to production font files, i.e. `.otf`, `.ttf`, `.woff`, `.woff2`, etc.) 14 | 15 | (Instead of downloading the files, you may also `git clone `[`https://github.com/tomchen/font-template.git`](https://github.com/tomchen/font-template.git) or [download the whole repository](https://github.com/tomchen/font-template/archive/master.zip)) 16 | 17 | (**Make sure you use the latest version of FontForge, which is 20th Anniversary Edition (2020-11-07) ([GitHub Release Page](https://github.com/fontforge/fontforge/releases) or [FontForge.org Download Page](https://fontforge.org/en-US/downloads/)). Old Windows version 20200314 crashes when importing SVG files.**) 18 | 19 | ## Usage 20 | 21 | Open `font_template.ai`, draw your glyphs in the "Artwork glyph" layer. 22 | 23 | (It doesn't matter if your glyph is partially and slightly outside its artboard.) 24 | 25 | ![AI font template](https://raw.githubusercontent.com/tomchen/font-template/master/img/1-ai_font_template.png) 26 | 27 | After finishing drawing the glyphs, hide "Example glyph" layer. Click "File" -> "Export" -> "Export for Screens". 28 | 29 | ![AI menu export](https://raw.githubusercontent.com/tomchen/font-template/master/img/2-ai_menu_export.png) 30 | 31 | Select the glyphs you want to export (do not select empty ones), select "SVG" format, click "Export Artboard". 32 | 33 | ![AI export](https://raw.githubusercontent.com/tomchen/font-template/master/img/3-ai_export.png) 34 | 35 | Exported individual glyph SVG files are inside an "SVG" folder, put it in a folder that also contains the `batch_import_svg.py` script file. 36 | 37 | For Windows users, run `C:\Program Files (x86)\FontForgeBuilds\fontforge-console.bat`,* navigate to the folder using `cd ` and execute the Python script using `ffpython batch_import_svg.py`. An `output.sfd` font file will be generated. 38 | 39 | For Mac or Linux users, `cd ` and execute `fontforge -lang=py -script batch_import_svg.py`. 40 | 41 | *(\*: for 64 bit Windows it's `Program Files (x86)`, for 32 bit Windows it's `Program Files`)* 42 | 43 | ![FontForge import](https://raw.githubusercontent.com/tomchen/font-template/master/img/4-fontforge_import.png) 44 | 45 | Open the `output.sfd` font file with FontForge. Adjust glyphs' width (use Shift key to select all the glyphs you want to adjust width, then, in the menu, select "Metrics" -> "Auto Width", OR, double click a glyph and manually drag its border line). 46 | 47 | ![FontForge adjust width](https://raw.githubusercontent.com/tomchen/font-template/master/img/5-fontforge_adjust_width.png) 48 | 49 | In the menu, select "File" -> "Generate Fonts..." 50 | 51 | ![FontForge menu generate font](https://raw.githubusercontent.com/tomchen/font-template/master/img/6-fontforge_menu_generate_font.png) 52 | 53 | Type in a font name, select a font format (typically TrueType or OpenType), click "Generate" button. Then you have your self-made computer font! 54 | 55 | ![FontForge generate font](https://raw.githubusercontent.com/tomchen/font-template/master/img/7-fontforge_generate_font.png) 56 | 57 | You can stop here and do not need to read the following sections. 58 | 59 | ## Other optional workflows and tips 60 | 61 | ### font_template_single.ai file 62 | 63 | This font template can be used to draw single glyph and produce single glyph SVG. 64 | 65 | The following image depicts the guides of a single glyph. 66 | ![Font template single description](https://raw.githubusercontent.com/tomchen/font-template/master/template_desc/font_template_single_description.png) 67 | 68 | In FontForge, select a glyph or open a glyph, then click "File" -> "Import...", select "SVG" as "Format", select your single glyph SVG file and import it. 69 | 70 | ### batch_import_svg.py file 71 | 72 | Modify `batch_import_svg.py` file if you want to open an existing `.sfd` font file, or generate `.otf`, `.ttf`, `.woff`, `.woff2` directly, instead of doing so with FontForge GUI. 73 | 74 | ### Export all glyphs as individual SVG files in FontForge 75 | 76 | In the FontForge menu, click "File" -> "Execute Script" 77 | 78 | Copy and paste: `SelectWorthOutputting(); foreach Export("%e_%n.svg"); endloop;` 79 | 80 | Select "FF" radial button. 81 | 82 | Click "OK" button. 83 | 84 | ### Join overlapping paths 85 | 86 | If a glyph's shape contains multiple overlapping paths, it would be better to join them ([a nice YouTube tutorial](https://www.youtube.com/watch?v=ESj0M0l6Rho)) instead of grouping them or making them a compound path. This step helps to avoid font rendering problems for overlapping paths. However, for seperate (non-overlapping) paths, feel free to use "group" (Ctrl+G) or "compound path" ("Object" -> "Compound Path" -> "Make"). 87 | 88 | ### Use existing free and open-source font file 89 | 90 | Instead of creating a font file with FontForge from scrach, it's sometimes a good idea to use an existing free and open-source font file as a base and fallback font. Typical open-source fonts with good glyph coverage are Adobe's [Source Sans Pro](https://github.com/adobe-fonts/source-sans-pro/tree/release/TTF) and [Source Serif Pro](https://github.com/adobe-fonts/source-serif-pro/tree/release/TTF). Choose a weight such as "Regular", depending on your needs. Open the font file with FontForge, edit it to create your font. However, if you use an existing font, you may need to edit not only A-Z, a-z but also their [ligatures](https://fontforge.org/docs/tutorial/editexample4.html#creating-a-ligature) such as "ff" and "fi". 91 | 92 | ### Do not use empty glyphs 93 | 94 | When you select glyphs in Illustrator's "Export for Screens" window, you should not select empty glyphs, otherwise, you will see "I'm sorry this file is too complex for me to understand (or is erroneous)" warning when you execute `batch_import_svg.py` script. Nevertheless, it will not stop and will continue to generate the `output.sfd` file. 95 | 96 | ### Update your font_template.ai before 2020-08-19 97 | 98 | On 19 August 2020, the project's `font_template.ai` file was updated (many artboard names were changed, e.g. `44 ,` were changed to `44 comma`) to fix an [Unicode filename issue](https://github.com/tomchen/font-template/issues/3). If you have downloaded `font_template.ai` before 2020-08-19 and made your `.ai` file based on the old version, you may optionally** update the artboard names in your `font_template.ai` using *either* of the following methods: 99 | 100 | * Copy your "Artwork glyph" layer (and any other layers you have added) from your old `.ai` file to the latest `font_template.ai` 101 | * *Or* execute [**`/other_files/update_artboard_names.js`**](https://github.com/tomchen/font-template/raw/master/other_files/update_artboard_names.js) in Illustrator: open your `.ai` file in Adobe Illustrator, in the menu, click "File" -> "Scripts" -> "Other Script...", find and select the downloaded `update_artboard_names.js` file, click "Open" 102 | 103 | After the update, delete and regenerate your glyph SVG files in `SVG` folder. 104 | 105 | *(\*\*: If you are using the old version but your glyphs are limited to basic [ASCII characters](https://en.wikipedia.org/wiki/ASCII#Character_set) therefore will not encounter any SVG Unicode filename related problem, you may opt not to update your `.ai` file)* 106 | 107 | ### Web fonts (alphabet or icon) 108 | 109 | Once you have your own font, you can use it on your web pages (including websites, web applications, Electron-compiled cross-plateform Desktop applications, or even React Native / NativeScript mobile app). 110 | 111 | Your font can be alphabet font or monochrome icon font. If you want to show color icons, use SVG or PNG. 112 | 113 | Put your `.woff2` and `.woff` font files (`my_font.woff2` and `my_font.woff` in the example) in your CSS folder and insert the following code in your CSS file (it [supports](https://css-tricks.com/snippets/css/using-font-face/#practical-level-of-browser-support) IE9+): 114 | 115 | ```css 116 | @font-face { 117 | font-family: 'MyFont'; 118 | src: url('my_font.woff2') format('woff2'), 119 | url('my_font.woff') format('woff'); 120 | } 121 | ``` 122 | 123 | (If you do not want to [support any IE](https://caniuse.com/#search=woff2), you can delete the `.woff` file and use only `.woff2` (the smallest and latest format)) 124 | 125 | Then use your customized `font-family` name ('MyFont' in the example): 126 | 127 | ```css 128 | .my-special-font { 129 | font-family: 'MyFont', sans-serif; 130 | color: yellow; 131 | font-size: 20px; 132 | } 133 | ``` 134 | 135 | HTML: 136 | 137 | ```html 138 | B 139 | ``` 140 | 141 | If it is a monochrome icon font, the letter B in the HTML code will be shown as the monochrome icon mapping to the letter B. Although web developers usually use characters in Unicode [Private Use Area](https://en.wikipedia.org/wiki/Private_Use_Areas) such as U+EEA0 and U+F2BB instead of basic latin letters and other commonly-used characters over semantics / SEO / accessibility concerns, nobody prevents you from using latin letters. To address those concerns, you may semantically identify a font icon by adding `role` and `aria-label` attributes to your HTML element: 142 | 143 | ```html 144 | B 145 | ``` 146 | 147 | ## Real-world example 148 | 149 | * [Erathian language font in the universe of *(Heroes of) Might and Magic* game series](https://github.com/might-and-magic/erathian-font) 150 | 151 | ## References and credits 152 | 153 | * [How to Design a custom font using Illustrator and FontForge](https://www.schoolofmotion.com/blog/custom-font-illustrator-fontforge) 154 | *This project is highly inspired by the fantastic article above which has its own single glyph template, although my template here has different guide proportion, and the native artboard export in lieu of a 3rd-party MultiExporter is used in the font creation flow described by this project.* 155 | * [Font creation template](https://community.fontself.com/t/font-creation-template/165) 156 | *This project is highly inspired by Fontself community's awesome template, as my template picks the same glyphs and has the same order. However, my template is a total remake, and does not require Fontself software.* 157 | * [Notes on dumping SVG outlines into a FontForge file](https://gist.github.com/psmay/fd3e7e91893f6012b262) 158 | * [FontForge: Export a font's individual glyphs into svg files in batch?](https://stackoverflow.com/questions/56179680/fontforge-export-a-fonts-individual-glyphs-into-svg-files-in-batch) 159 | * [How to import fontforge to python in windows 7](https://stackoverflow.com/questions/23365299/how-to-import-fontforge-to-python-in-windows-7) 160 | * [AGL (Adobe Glyph List) glyphlist.txt](https://github.com/adobe-type-tools/agl-aglfn/blob/master/glyphlist.txt) 161 | * [Using @font-face](https://css-tricks.com/snippets/css/using-font-face/#practical-level-of-browser-support) 162 | * [Semantically identifying a font icon with role="img"](https://www.w3.org/WAI/WCAG21/Techniques/aria/ARIA24.html) 163 | 164 | ## License 165 | 166 | [MIT License](https://github.com/tomchen/font-template/blob/master/LICENSE) for everything in this repository 167 | -------------------------------------------------------------------------------- /example/output.sfd: -------------------------------------------------------------------------------- 1 | SplineFontDB: 3.2 2 | FontName: Untitled1 3 | FullName: Untitled1 4 | FamilyName: Untitled1 5 | Weight: Regular 6 | Copyright: Copyright (c) 2020, Chen 7 | UComments: "2020-4-9: Created with FontForge (http://fontforge.org)" 8 | Version: 001.000 9 | ItalicAngle: 0 10 | UnderlinePosition: -100 11 | UnderlineWidth: 50 12 | Ascent: 800 13 | Descent: 200 14 | InvalidEm: 0 15 | LayerCount: 2 16 | Layer: 0 0 "Back" 1 17 | Layer: 1 0 "Fore" 0 18 | XUID: [1021 510 -1676382235 4765] 19 | OS2Version: 0 20 | OS2_WeightWidthSlopeOnly: 0 21 | OS2_UseTypoMetrics: 1 22 | CreationTime: 1586442923 23 | ModificationTime: 1586442923 24 | OS2TypoAscent: 0 25 | OS2TypoAOffset: 1 26 | OS2TypoDescent: 0 27 | OS2TypoDOffset: 1 28 | OS2TypoLinegap: 0 29 | OS2WinAscent: 0 30 | OS2WinAOffset: 1 31 | OS2WinDescent: 0 32 | OS2WinDOffset: 1 33 | HheadAscent: 0 34 | HheadAOffset: 1 35 | HheadDescent: 0 36 | HheadDOffset: 1 37 | OS2Vendor: 'PfEd' 38 | DEI: 91125 39 | Encoding: ISO8859-1 40 | UnicodeInterp: none 41 | NameList: AGL For New Fonts 42 | DisplaySize: -48 43 | AntiAlias: 1 44 | FitToEm: 0 45 | BeginChars: 256 8 46 | 47 | StartChar: zero 48 | Encoding: 48 48 0 49 | Width: 1000 50 | VWidth: 0 51 | Flags: H 52 | LayerCount: 2 53 | Fore 54 | SplineSet 55 | 657.142578125 680 m 0 56 | 798.286132812 576 834.571289062 415.142578125 787.713867188 247.713867188 c 0 57 | 744.571289062 101.142578125 603.142578125 -79.7138671875 428.857421875 -22.5712890625 c 0 58 | 248.571289062 37.142578125 269.713867188 311.713867188 269.713867188 459.142578125 c 0 59 | 269.708007812 459.484375 269.703125 460.0390625 269.703125 460.380859375 c 0 60 | 269.703125 471.368164062 274.444335938 487.837890625 280.286132812 497.142578125 c 1 61 | 280.286132812 497.142578125 l 1 62 | 281.09765625 502.848632812 283.530273438 511.809570312 285.713867188 517.142578125 c 0 63 | 352.857421875 683.713867188 485.713867188 806 657.142578125 680 c 0 64 | 628.571289062 233.713867188 m 0 65 | 661.428710938 303.428710938 680.857421875 408.571289062 649.142578125 482.286132812 c 0 66 | 635.229492188 512.497070312 600.4140625 550.256835938 571.428710938 566.571289062 c 0 67 | 504.571289062 600 446.857421875 541.428710938 422 479.142578125 c 0 68 | 419.846679688 473.524414062 414.982421875 465.204101562 411.142578125 460.571289062 c 2 69 | 411.142578125 458.857421875 l 2 70 | 411.428710938 378.857421875 403.428710938 276.857421875 426.286132812 199.142578125 c 0 71 | 470 50.5712890625 589.713867188 153.142578125 628.571289062 233.713867188 c 0 72 | EndSplineSet 73 | EndChar 74 | 75 | StartChar: nine 76 | Encoding: 57 57 1 77 | Width: 1000 78 | VWidth: 0 79 | Flags: H 80 | LayerCount: 2 81 | Fore 82 | SplineSet 83 | 643.428710938 756.571289062 m 0 84 | 800 681.713867188 794.571289062 495.428710938 761.428710938 351.713867188 c 0 85 | 760.353515625 346.967773438 757.793945312 339.54296875 755.713867188 335.142578125 c 0 86 | 735.713867188 214 714.571289062 64.5712890625 630.286132812 -7.7138671875 c 0 87 | 546 -80 427.142578125 -64.2861328125 338 -11.7138671875 c 0 88 | 258.857421875 34.857421875 330.857421875 158.286132812 410 111.713867188 c 0 89 | 535.142578125 38.857421875 583.428710938 187.142578125 610 320.571289062 c 1 90 | 412.571289062 274.571289062 175.428710938 388.286132812 304.571289062 622.286132812 c 0 91 | 368.286132812 737.428710938 515.713867188 818.286132812 643.428710938 756.571289062 c 0 92 | 641.713867188 485.713867188 m 0 93 | 642.362304688 490.202148438 642.888671875 497.524414062 642.888671875 502.05859375 c 0 94 | 642.888671875 543.987304688 611.514648438 591.193359375 572.857421875 607.428710938 c 0 95 | 533.428710938 642 496 637.713867188 460.571289062 593.713867188 c 0 96 | 443.091796875 577.647460938 424.275390625 545.903320312 418.571289062 522.857421875 c 0 97 | 404.286132812 406 572.857421875 436.571289062 641.713867188 485.713867188 c 0 98 | EndSplineSet 99 | EndChar 100 | 101 | StartChar: question 102 | Encoding: 63 63 2 103 | Width: 1000 104 | VWidth: 0 105 | Flags: H 106 | LayerCount: 2 107 | Fore 108 | SplineSet 109 | 354 477.142578125 m 0 110 | 301.142578125 402.571289062 177.428710938 474 230.857421875 549.142578125 c 0 111 | 260.571289062 591.142578125 261.713867188 646.857421875 294.286132812 690.286132812 c 0 112 | 316.340820312 719.135742188 361.140625 754.591796875 394.286132812 769.428710938 c 0 113 | 421.764648438 781.779296875 468.517578125 791.801757812 498.64453125 791.801757812 c 0 114 | 545.501953125 791.801757812 613.94921875 768.978515625 651.428710938 740.857421875 c 0 115 | 724 685.713867188 771.428710938 589.428710938 733.428710938 501.713867188 c 0 116 | 688.286132812 400 566 371.428710938 597.428710938 238 c 0 117 | 618.286132812 148.286132812 480.286132812 110.571289062 459.713867188 200 c 0 118 | 454.263671875 221.096679688 449.83984375 255.903320312 449.83984375 277.693359375 c 0 119 | 449.83984375 351.836914062 493.6875 453.22265625 547.713867188 504 c 0 120 | 583.713867188 538 628.571289062 566.857421875 579.713867188 616 c 0 121 | 560.409179688 634.672851562 522.944335938 649.828125 496.0859375 649.828125 c 0 122 | 488.307617188 649.828125 475.853515625 648.369140625 468.286132812 646.571289062 c 0 123 | 382.571289062 622.857421875 395.428710938 534.286132812 354 477.142578125 c 0 124 | 423.142578125 21.4287109375 m 1 125 | 424 21.4287109375 l 2 126 | 422.775390625 26.2763671875 421.78125 34.26953125 421.78125 39.2705078125 c 0 127 | 421.78125 69.326171875 445.17578125 100.62890625 474 109.142578125 c 0 128 | 479.072265625 110.513671875 487.453125 111.625976562 492.70703125 111.625976562 c 0 129 | 522.650390625 111.625976562 553.565429688 88.2412109375 561.713867188 59.4287109375 c 2 130 | 571.428710938 10.857421875 l 2 131 | 572.635742188 6.03125 573.616210938 -1.9228515625 573.616210938 -6.8974609375 c 0 132 | 573.616210938 -37.2216796875 549.98046875 -68.6923828125 520.857421875 -77.142578125 c 0 133 | 515.786132812 -78.5068359375 507.409179688 -79.61328125 502.158203125 -79.61328125 c 0 134 | 472.06640625 -79.61328125 441.01953125 -56.1064453125 432.857421875 -27.142578125 c 2 135 | 423.142578125 21.4287109375 l 1 136 | EndSplineSet 137 | EndChar 138 | 139 | StartChar: A 140 | Encoding: 65 65 3 141 | Width: 1000 142 | VWidth: 0 143 | Flags: H 144 | LayerCount: 2 145 | Fore 146 | SplineSet 147 | 850.857421875 36.857421875 m 2 148 | 878.286132812 -51.142578125 740.286132812 -88.5712890625 714.286132812 -0 c 2 149 | 645.428710938 215.428710938 l 2 150 | 597.39453125 209.874023438 519.166015625 205.365234375 470.810546875 205.365234375 c 0 151 | 441.215820312 205.365234375 393.236328125 207.057617188 363.713867188 209.142578125 c 0 152 | 352.857421875 145.142578125 346 79.7138671875 341.142578125 15.142578125 c 0 153 | 334.571289062 -76 191.428710938 -76.5712890625 198.286132812 15.142578125 c 0 154 | 217.713867188 273.428710938 266 532.286132812 452.286132812 724.857421875 c 0 155 | 463.705078125 736.104492188 485.98046875 745.232421875 502.0078125 745.232421875 c 0 156 | 533.932617188 745.232421875 565.032226562 719.848632812 571.428710938 688.571289062 c 0 157 | 584.90625 687.419921875 603.850585938 678.971679688 613.713867188 669.713867188 c 0 158 | 686.286132812 604.857421875 703.713867188 505.713867188 732.286132812 416 c 2 159 | 748.286132812 364.857421875 l 2 160 | 795.713867188 347.713867188 815.428710938 282.286132812 784.571289062 248.857421875 c 2 161 | 850.857421875 36.857421875 l 2 162 | 397.142578125 351.142578125 m 2 163 | 397.142578125 350.286132812 l 2 164 | 421.176757812 348.748046875 460.229492188 347.5 484.3125 347.5 c 0 165 | 517.727539062 347.5 571.859375 349.900390625 605.142578125 352.857421875 c 1 166 | 586 430 563.713867188 522 512.857421875 567.713867188 c 2 167 | 508.857421875 571.428710938 l 2 168 | 467.19921875 516.119140625 417.151367188 417.430664062 397.142578125 351.142578125 c 2 169 | EndSplineSet 170 | EndChar 171 | 172 | StartChar: B 173 | Encoding: 66 66 4 174 | Width: 1000 175 | VWidth: 0 176 | Flags: H 177 | LayerCount: 2 178 | Fore 179 | SplineSet 180 | 804.571289062 174.286132812 m 0 181 | 820.286132812 -61.7138671875 528.286132812 -106.857421875 351.428710938 -91.4287109375 c 0 182 | 320.088867188 -88.9609375 290.264648438 -61.8251953125 284.857421875 -30.857421875 c 0 183 | 267.576171875 -19.8154296875 253.111328125 5.78515625 252.571289062 26.2861328125 c 0 184 | 238.285481771 249.714518229 223.809244792 473.333333333 209.142578125 697.142578125 c 0 185 | 203.713867188 782 324.857421875 788 348.286132812 716.571289062 c 1 186 | 494.571289062 782.857421875 705.713867188 760.286132812 771.428710938 592 c 0 187 | 812 487.713867188 761.142578125 416 680.286132812 366.571289062 c 1 188 | 746.985351562 334.440429688 802.665039062 248.295898438 804.571289062 174.286132812 c 0 189 | 388.286132812 576.857421875 m 0 190 | 381.249023438 572.669921875 368.9609375 568.318359375 360.857421875 567.142578125 c 0 191 | 364.571289062 514 368 460.571289062 371.428710938 407.428710938 c 1 192 | 443.713867188 420 562.857421875 438 600 482.286132812 c 0 193 | 676 575.142578125 571.428710938 603.142578125 519.713867188 609.142578125 c 0 194 | 514.103515625 609.712890625 504.97265625 610.174804688 499.33203125 610.174804688 c 0 195 | 465.924804688 610.174804688 416.17578125 595.249023438 388.286132812 576.857421875 c 0 196 | 620.857421875 114.286132812 m 0 197 | 670.571614583 137.142903646 676.666666667 165.714192708 639.142578125 200 c 0 198 | 600 294.286132812 468.857421875 276 380 263.142578125 c 0 199 | 384.76171875 191.142578125 389.428385417 119.142578125 394 47.142578125 c 0 200 | 405.095703125 45.9873046875 423.155273438 45.048828125 434.311523438 45.048828125 c 0 201 | 461.298828125 45.048828125 504.422851562 50.466796875 530.571289062 57.142578125 c 0 202 | 564.693359375 58.373046875 605.141601562 83.97265625 620.857421875 114.286132812 c 0 203 | EndSplineSet 204 | EndChar 205 | 206 | StartChar: C 207 | Encoding: 67 67 5 208 | Width: 1000 209 | VWidth: 0 210 | Flags: H 211 | LayerCount: 2 212 | Fore 213 | SplineSet 214 | 840.286132812 571.428710938 m 0 215 | 898.286132812 501.428710938 797.713867188 400 739.713867188 471.142578125 c 0 216 | 671.142578125 554.286132812 566.571289062 649.713867188 447.142578125 614 c 0 217 | 341.142578125 582.286132812 282.571289062 446.286132812 280.571289062 345.142578125 c 0 218 | 278.286132812 238.857421875 342.857421875 132 452 109.713867188 c 0 219 | 571.428710938 85.7138671875 657.142578125 190.857421875 721.428710938 271.713867188 c 0 220 | 779.428710938 342 879.428710938 241.428710938 822.286132812 170.571289062 c 0 221 | 712.286132812 34.857421875 564.857421875 -81.4287109375 381.142578125 -18.2861328125 c 0 222 | 246.33984375 31.677734375 136.934570312 188.905273438 136.934570312 332.669921875 c 0 223 | 136.934570312 336.11328125 137.028320312 341.701171875 137.142578125 345.142578125 c 0 224 | 140 498.857421875 226 680.571289062 376 740.286132812 c 0 225 | 554.286132812 811.428710938 728.571289062 707.713867188 840.286132812 571.428710938 c 0 226 | EndSplineSet 227 | EndChar 228 | 229 | StartChar: bracketleft 230 | Encoding: 91 91 6 231 | Width: 1000 232 | VWidth: 0 233 | Flags: H 234 | LayerCount: 2 235 | Fore 236 | SplineSet 237 | 651.713867188 762.857421875 m 2 238 | 651.428710938 762.857421875 l 2 239 | 742.857421875 756.857421875 743.142578125 614 651.428710938 620 c 1 240 | 654.571289062 619.713867188 540.857421875 631.142578125 548.286132812 636.571289062 c 1 241 | 539.428710938 630 546.571289062 544.286132812 546.571289062 531.142578125 c 0 242 | 546.571289062 452 546.571289062 373.142578125 546.571289062 294 c 0 243 | 548 206.286132812 551.428710938 120.857421875 559.142578125 31.142578125 c 0 244 | 566.857421875 -58.5712890625 558.571289062 -52.5712890625 650.857421875 -49.7138671875 c 0 245 | 743.142578125 -46.857421875 742.571289062 -189.713867188 650.857421875 -192.571289062 c 0 246 | 565.428710938 -194.857421875 475.428710938 -218.857421875 436.857421875 -127.142578125 c 0 247 | 387.428710938 -10.2861328125 406 168.286132812 403.713867188 294 c 0 248 | 402 407.713867188 367.428710938 599.142578125 419.142578125 703.142578125 c 0 249 | 461.713867188 789.142578125 573.142578125 768 651.713867188 762.857421875 c 2 250 | EndSplineSet 251 | EndChar 252 | 253 | StartChar: bracketright 254 | Encoding: 93 93 7 255 | Width: 1000 256 | VWidth: 0 257 | Flags: H 258 | LayerCount: 2 259 | Fore 260 | SplineSet 261 | 371.428710938 591.428710938 m 0 262 | 279.713867188 582.857421875 280.571289062 726 371.428710938 734.286132812 c 0 263 | 455.428710938 742.857421875 565.713867188 776 618.286132812 690 c 0 264 | 674.571289062 598.286132812 629.713867188 432.286132812 624 328.857421875 c 2 265 | 610.571289062 82.2861328125 l 2 266 | 607.713867188 28.5712890625 618.286132812 -56.857421875 593.142578125 -109.142578125 c 0 267 | 549.713867188 -200 464.571289062 -177.428710938 380.857421875 -184.571289062 c 0 268 | 289.142578125 -192.571289062 290 -49.7138671875 380.857421875 -41.7138671875 c 0 269 | 429.142578125 -37.7138671875 441.142578125 -47.4287109375 460 -21.4287109375 c 0 270 | 478.857421875 4.5712890625 467.428710938 75.4287109375 469.428710938 109.713867188 c 2 271 | 481.142578125 328.857421875 l 2 272 | 485.713867188 391.713867188 514.286132812 514.286132812 494.571289062 576 c 0 273 | 477.142578125 626.857421875 545.713867188 591.428710938 458.571289062 600 c 0 274 | 434.313476562 599.73828125 395.2734375 595.8984375 371.428710938 591.428710938 c 0 275 | EndSplineSet 276 | EndChar 277 | EndChars 278 | EndSplineFont 279 | --------------------------------------------------------------------------------