├── .gitignore ├── LICENSE-gpl-2.0.txt ├── LICENSE.md ├── README.md ├── dm ├── __init__.py ├── actions.py ├── areas.py ├── depdata.py ├── drawstuff.py └── lines.py ├── dm_tomatrixled.py ├── ppmtools ├── image_to_ansi.py ├── ppm-enlarger.py ├── ppmtest.py └── ppmtest.sh ├── requirements.txt ├── res ├── bdf │ ├── 4x6.bdf │ ├── 5x7-mod.bdf │ ├── tom-thumb.bdf │ ├── uwe_prop.bdf │ └── uwe_prop_mod.bdf ├── hstcolors.json └── ppm │ ├── dbkeks.ppm │ ├── icon-ad.ppm │ ├── icon-delay.ppm │ ├── icon-earlyterm.ppm │ ├── icon-fhswf.ppm │ ├── icon-ic6.ppm │ ├── icon-ic7.ppm │ ├── icon-ice6.ppm │ ├── icon-ice7.ppm │ ├── icon-info.ppm │ ├── icon-ne-thin6.ppm │ ├── icon-ne-thin7.ppm │ ├── icon-ne6.ppm │ ├── icon-ne7.ppm │ ├── icon-no-deps.ppm │ ├── icon-no-rt.ppm │ ├── icon-smile.ppm │ ├── icon-stop.ppm │ ├── icon-warn.ppm │ ├── matrix11x11sun.ppm │ ├── matrix13x13vrr-engebuchstaben-2.ppm │ ├── red-ausfall-long.ppm │ ├── red-ausfall.ppm │ ├── sonne.ppm │ ├── white-bus6.ppm │ ├── white-bus7.ppm │ ├── white-hanging6.ppm │ ├── white-hanging7.ppm │ ├── white-hispeed6.ppm │ ├── white-hispeed7.ppm │ ├── white-min.ppm │ ├── white-sofort-high.ppm │ ├── white-sofort.ppm │ ├── white-train6.ppm │ ├── white-train7.ppm │ ├── white-tram6.ppm │ ├── white-tram7.ppm │ ├── wolke mit regen.ppm │ ├── wolke mit sonne.ppm │ └── wolke.ppm └── service ├── matrix.service ├── run.env.example └── run.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .*_action 2 | .completed_data 3 | service/run.env 4 | 5 | .vscode/ 6 | log/ 7 | 8 | # Byte-compiled / optimized / DLL files 9 | __pycache__/ 10 | *.py[cod] 11 | *$py.class 12 | 13 | # C extensions 14 | *.so 15 | 16 | # Distribution / packaging 17 | .Python 18 | build/ 19 | develop-eggs/ 20 | dist/ 21 | downloads/ 22 | eggs/ 23 | .eggs/ 24 | lib/ 25 | lib64/ 26 | parts/ 27 | sdist/ 28 | var/ 29 | wheels/ 30 | *.egg-info/ 31 | .installed.cfg 32 | *.egg 33 | MANIFEST 34 | 35 | # PyInstaller 36 | # Usually these files are written by a python script from a template 37 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 38 | *.manifest 39 | *.spec 40 | 41 | # Installer logs 42 | pip-log.txt 43 | pip-delete-this-directory.txt 44 | 45 | # Unit test / coverage reports 46 | htmlcov/ 47 | .tox/ 48 | .coverage 49 | .coverage.* 50 | .cache 51 | nosetests.xml 52 | coverage.xml 53 | *.cover 54 | .hypothesis/ 55 | .pytest_cache/ 56 | 57 | # Translations 58 | *.mo 59 | *.pot 60 | 61 | # Django stuff: 62 | *.log 63 | local_settings.py 64 | db.sqlite3 65 | 66 | # Flask stuff: 67 | instance/ 68 | .webassets-cache 69 | 70 | # Scrapy stuff: 71 | .scrapy 72 | 73 | # Sphinx documentation 74 | docs/_build/ 75 | 76 | # PyBuilder 77 | target/ 78 | 79 | # Jupyter Notebook 80 | .ipynb_checkpoints 81 | 82 | # pyenv 83 | .python-version 84 | 85 | # celery beat schedule file 86 | celerybeat-schedule 87 | 88 | # SageMath parsed files 89 | *.sage.py 90 | 91 | # Environments 92 | .env 93 | .venv 94 | env/ 95 | venv/ 96 | ENV/ 97 | env.bak/ 98 | venv.bak/ 99 | 100 | # Spyder project settings 101 | .spyderproject 102 | .spyproject 103 | 104 | # Rope project settings 105 | .ropeproject 106 | 107 | # mkdocs documentation 108 | /site 109 | 110 | # mypy 111 | .mypy_cache/ 112 | -------------------------------------------------------------------------------- /LICENSE-gpl-2.0.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (C) 2018 Kevin Arutyunyan 2 | 3 | This program is free software; you can redistribute it and/or modify 4 | it under the terms of the GNU General Public License as published by 5 | the Free Software Foundation version 2. 6 | 7 | This program is distributed in the hope that it will be useful, 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | GNU General Public License for more details. 11 | 12 | You should have received a copy of the GNU General Public License along 13 | with this program. If not, see 14 | 15 | *** 16 | 17 | __Parts of this project not related to the LED-matrix library and without 18 | an explicitly stated license can be reused under the ISC license:__ 19 | 20 | Copyright 2018 Kevin Arutyunyan 21 | 22 | Permission to use, copy, modify, and/or distribute this software for any 23 | purpose with or without fee is hereby granted, provided that the above 24 | copyright notice and this permission notice appear in all copies. 25 | 26 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 27 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 28 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 29 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 30 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 31 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 32 | PERFORMANCE OF THIS SOFTWARE. 33 | 34 | *** 35 | 36 | The __LED-matrix library__ is (c) Henner Zeller , licensed with 37 | [GNU General Public License Version 2.0](http://www.gnu.org/licenses/gpl-2.0.txt) 38 | 39 | *** 40 | 41 | __res/bdf/uwe_prop.bdf, res/bdf/uwe_prop_mod.bdf:__ 42 | 43 | Permission to use, copy, modify, and distribute this 44 | software for any purpose and without fee is hereby granted, 45 | provided that the above copyright notice appear in all 46 | copies and that both that copyright notice and this 47 | permission notice appear in supporting documentation, and 48 | that the name of Uwe Freese not be used in advertising or 49 | publicity pertaining to distribution of the software without 50 | specific, written prior permission. Uwe Freese makes no 51 | representations about the suitability of this software for 52 | any purpose. It is provided "as is" without express or 53 | implied warranty. 54 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Projekt 2 | 3 | Ziel dieses Projekts ist, Abfahrten im ÖPNV auf LED-Matrizen darzustellen. 4 | Dazu wird [hzeller/rpi-rgb-led-matrix](https://github.com/hzeller/rpi-rgb-led-matrix) (genauer gesagt [dieser Fork](https://github.com/d3d9/rpi-rgb-led-matrix)) mit dem Raspberry Pi verwendet. 5 | 6 | Ursprünglich habe ich die EFA-Schnittstelle vom [VRR](http://openvrr.de) nur so ausprobiert, dabei vor allem das Darstellen von Abfahrten, was überraschend einfach ging. Dann wollte ich es mit LED-Matrizen verbinden, um eine interessante Darstellung zu erhalten, nicht nur in der Kommandozeile. Daraus entstand das hier sichtbare Projekt. 7 | Mittlerweile können auch Daten der DB eingebunden werden[.](https://twitter.com/cabinentaxi/status/1095810658355068930) 8 | 9 | In der zweiten Jahreshälfte 2018 wurde die Entwicklung über das Mobilitätsstipendium Baden-Württemberg gefördert, der Projekttitel lautet "Preiswertes digitales Fahrgastinformationssystem für Schaufenster, Geschäfte, Wohnungen und Räume". 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | Beispielvideos: [Datenaktualisierung](https://github.com/d3d9/dm_tomatrixled/raw/_media/matrix_dataupdate.webm), [Verspätung & Infotext](https://github.com/d3d9/dm_tomatrixled/raw/_media/matrix_messages_delay.webm), [Teilausfall](https://github.com/d3d9/dm_tomatrixled/raw/_media/matrix_earlytermination.webm) 21 | 22 | __Nutzungsbeispiele__ siehe [service/run.sh](service/run.sh). 23 | __Lizenzen__ siehe [LICENSE.md](LICENSE.md). 24 | 25 | Das Projekt hat noch keine schöne Bezeichnung, deswegen bleibt es hier erstmal noch beim "temporären" Repo-Titel. 26 | 27 | ## Ziele 28 | Zeitnah sollen (eventuell erst temporär) Matrizen mit dieser Software in Schaufenstern an Haltestellen aufgestellt werden, um da wo es geht für bessere Fahrgastinformation und für Aufmerksamkeit auf das Vorhandensein von Echtzeitdaten zu sorgen sowie Rückmeldungen zu erhalten und auszuwerten. 29 | 30 | Dieses Projekt wird wahrscheinlich nicht ausschlaggebend weit verbreitet werden können, aufgrund einiger Voraussetzungen (Strom, Internet, Indoor, ...). Ich hoffe, dass es in vielen weiteren Situationen eingesetzt werden kann, und dass dieses Projekt auf dem Weg zu einer insgesamt besseren Fahrgastinformation die Vorteile und auch aktuelle Probleme (u. a. in Datenqualität, -bereitstellung, Lizenzen usw.) verständlich darstellen kann, wovon letztendlich jede erdenkliche Datennutzung weiterer Anwendungen profitieren kann. 31 | 32 | Weitere softwarebezogene Ideen und Ziele sind in den [Projekten](https://github.com/d3d9/dm_tomatrixled/projects) enthalten. 33 | 34 | ## Gefördert von 35 | Ministerium für Verkehr Baden-Württemberg 36 | 37 | 38 | # Funktionalität 39 | Folgend werden einige Möglichkeiten der Software beschrieben. 40 | 41 | ### Konfiguration 42 | Es gibt viele Kommandozeilenparameter sowie weitere potenzielle Einstellungen, eventuell wird das besser strukturiert sein. 43 | Verschiedene Betriebs- und Darstellungsbezogene Dinge können konfiguriert werden, siehe Anfang von [dm_tomatrixled.py](dm_tomatrixled.py). 44 | 45 | Grundsätzlich ist es möglich, weitere, z. B. größere Schriftarten zu nutzen, dabei wurde allerdings noch nicht viel getestet und manche Parameter müssen je nach Schrift manuell angepasst werden. Proportionale Schriftarten werden unterstützt. Wichtig ist, dass in der Regel ein Pixel rechts frei sein soll, dies ist eine Annahme, die aktuell noch an vielen Stellen im Code vorhanden ist. 46 | Auch andere Symbole können verwendet werden. 47 | 48 | Es wird eine Logdatei geschrieben, die Anfang und Ende sowie auftretende Fehler und ggf. die fehlerhaften Schnittstellendaten protokolliert, optional wird auch eine Datei geschrieben, in der die Datenaktualisierungszeitpunkte sowie die Anzahl der enthaltenen Abfahrten (und Anzahl der Echtzeitabfahrten) festgehalten werden. 49 | Alle diese Informationen werden auch auf der Standardfehlerausgabe ausgegeben und sind, wenn man den systemd service (siehe unten) nutzt, auch über journalctl aufrufbar (z. B. ```journalctl -o cat -fu matrix```, optional auch bunt mit ```| ccze -A``` dahinter). 50 | 51 | Konfiguration bezogen auf die LED-Matrizen ist unter [hzeller/rpi-rgb-led-matrix/README.md](https://github.com/hzeller/rpi-rgb-led-matrix/blob/master/README.md) beschrieben. 52 | 53 | Beispiel mit mehreren Matrizen: 54 | 55 | 56 | ### Darstellung 57 | 58 | __Abfahrtszeilen__: 59 | Jede Abfahrtszeile besteht aktuell aus Liniennummer, Zieltext, Countdown, und optional Steignummer. Weitere Möglichkeiten wie eigene Steigsymbole/-referenzen oder ergänzende Symbole soll es zukünftig geben. 60 | Horizontale Abstände in Pixeln zwischen den folgend genannten Elementen können angegeben werden (beispielsweise dass zwischen Zieltext und Countdown 1px frei sein muss). 61 | 62 | Für die Liniennummer kann eine Hintergrundfarbe verwendet werden. Die Breite in Pixel kann mit Parameter ```-w``` angepasst werden. Es wird versucht, die Liniennummer so passend wie möglich darzustellen, indem z. B. bei Grenzfällen eine kleinere Schriftart verwendet wird. Wenn etwas abgeschnitten werden muss, die Liniennummer aber z. B. "ICE" am Anfang hat, so wird anstatt einer abgeschnittenen Bezeichnung nur noch "ICE" angezeigt. 63 | 64 | Für den Countdown wird basierend auf der Verspätung bzw. der Verfügbarkeit von Echtzeitdaten eine Farbe ausgewählt, die Grenzen (ab wann etwas eine leichte oder hohe Verspätung ist) können angepasst werden. 65 | Einstellbar kann anstatt eines Verkehrsmittelsymbols auch nur "0min" angezeigt werden. Die Darstellung vom "min" an sich ist ebenfalls einstellbar; so wie auch das Blinken bei sofortigen Abfahrten. 66 | Fahrtausfälle werden standardmäßig mit einem Symbol (aktuell ein kleiner Text "fällt aus") dargestellt. 67 | Abfahrten ab einem konfigurierbaren Countdownwert, z. B. ab 60 Minuten Entfernung, werden mit der absoluten Uhrzeit dargestellt. 68 | 69 | Zieltexte werden jeweils mit so viel Platz, wie noch zwischen Liniennummer und Countdown verfügbar ist, dargestellt. Mit dem mehrfach nutzbaren Parameter ```--place-string``` können zu entfernende Ausschnitte wie z. B. "Hagen ", "HA-" oder ", Hagen (Westf)" vorbereitend entfernt werden, ein Abkürzungsverzeichnis o. ä. gibt es aber noch nicht. 70 | 71 | __Scrollzeilen__: 72 | Die vorhandenen Meldungen besitzen optional auch zugehörige Symbole, diese können gemeinsam mit dem Text gescrollt werden. Standardmäßig wird nach der letzten Meldung etwas Platz gelassen, um "Durchläufe" voneinander zu unterscheiden. 73 | Aktuell gibt es noch keine eingebaute Logik, die bei Meldungsaktualisierung darauf achtet, keine Sprünge/vollen Resets zu machen, wenn dies nicht nötig ist. 74 | Deswegen kommt es aktuell bei einer hohen Anzahl an Aktualisierungen sowie sich ändernden Meldungen zu erkennbaren Sprüngen an den Anfang, dies ist z. B. insbesondere bei Hauptbahnhöfen oder anderen Haltestellen mit relativ vielen Abfahrten erkennbar. 75 | Immerhin: Die offiziellen Anzeigen machen es meistens nicht viel besser 😌 (und das sogar schon wenn auch nur Abfahrtsinformationen bei gleichbleibender scrollender Nachricht aktualisiert werden, gerne auch sehr oft nacheinander..). 76 | 77 | __Weiteres__: 78 | Optional kann als erste Zeile eine Überschrift mit dem Haltestellennamen dargestellt werden. 79 | Außerdem gibt es mit dem Kommandozeilenparameter ```-r``` die Möglichkeit, rechts etwas Platz wegzunehmen, um die Uhrzeit und Symbole dadrunter darzustellen, oder platzsparend auch nur die Uhrzeit vertikal darzustellen. Der horizontale Abstand zu den zuvor genannten Zeileninhalten kann angepasst werden. Die Option -r3 (horizontale Uhrzeit mit Symbol dadrunter) erlaubt ganz unten immernoch scrollenden Text, so dass zumindest dafür die volle Matrizenbreite verwendet werden kann, siehe Beispieldarstellung unten. 80 | 81 | Mit dem Kommandozeilenparameter ```--write-ppm DATEINAME``` kann laufend eine binäre ppm-Datei von der Matrizenausgabe erstellt werden (am besten an einem Standort, der sich nicht auf der microSD-Karte befindet, z. B. als tmpfs). 82 | 83 | __Beispieldarstellung__ (```--write-ppm```-Ausgabe, mit [ppmtools/ppm-enlarger.py](ppmtools/ppm-enlarger.py) bearbeitet): 84 | ![Beispieldarstellung](https://github.com/d3d9/dm_tomatrixled/raw/_media/ppm-beispiel.png) 85 | 86 | ### Datenladung 87 | Aktuell werden Daten von EFA-Systemen (z. B. VRR, EFA-BW, ...) sowie von der Deutschen Bahn über [db-rest](https://github.com/derhuerst/db-rest) unterstützt. Weitere Datenquellen können hinzugefügt werden. 88 | Mehrere Datenquellen können parallel abgefragt werden, um so z. B. für verschiedene Verkehrsmittel unterschiedliche Quellen zu benutzen, oder mehrere Haltestellen/Steige gleichzeitig abzufragen, wenn die Datenquelle selber diese Möglichkeit nicht anbietet. Auch Datenquellen, die nur Informationstexte liefern, ohne Abfahrtsdaten, können verwendet werden. 89 | Es ist möglich, Ersatzquellen anzugeben. Wenn beispielsweise 4 Mal keine Abfrage bei der VRR EFA erfolgen konnte, wird auf EFA-BW als Fallback zurückgegriffen. 90 | 91 | Abfragen erfolgen aktuell noch nicht basierend auf der Uhrzeit (z. B. "sofort zu jeder neuen Minute"), sondern basierend auf Darstellungsschritten. Die "sleeptime" zwischen jedem neuen Bild sowie die gewünschte Schrittanzahl ergeben multipliziert ungefähr die erwartbare Aktualisierungsrate, beispielsweise sorgen 0.03 s * 330 Schritte + etwas Latenz (Datenabfragen an sich) für neue Daten ca. alle 11 Sekunden. 92 | 93 | Standardmäßig werden automatisch zusätzliche Meldungen generiert, aktuell wird dies für Verspätungen (wenn eine Fahrt eigentlich dargestellt werden sollte, dies aber nicht so ist weil genug andere Fahrten vor dem verspäteten Abfahrtszeitpunkt abfahren und demnach die hoch verspätete Fahrt verdecken) und für frühzeitig endende Fahrten getan (Beispiele siehe oben verlinkte Videos). 94 | 95 | Die Datenladung erfolgt in einem eigenen Prozess, in dem wiederum für jede Quelle die spezifische Bearbeitung in einem eigenen Thread "parallel" erfolgt. Auf die Darstellung gibt es keine großen negativen Auswirkungen, z. B. fließt scrollender Text währenddessen ungestört weiter (außer auf Systemen mit einem CPU-Kern). 96 | 97 | ### Wiederverwendbarkeit 98 | Einiges vom Code kann vermutlich auch außerhalb dieses Projekts und außerhalb des Nahverkehrskontexts verwendet werden, beispielsweise die Scrollzeilen aus dm_lines.py oder die Versuchslogik aus dm_depdata.py. Eventuell lässt sich weiteres verallgemeinern und besser nutzbar machen; außerdem fehlt an sehr vielen Stellen noch Dokumentation. 99 | 100 | 101 | # Installation 102 | __Voraussetzungen__ 103 | * Raspberry Pi (z. B. 3 Model B+ oder 4; insbesondere die viel älteren Modelle oder auch Pi Zero sind hierfür nicht empfohlen) mit (micro)SD-Karte, Netzteil usw. 104 | * LED-Matrizen und alles dafür benötigte, siehe https://github.com/hzeller/rpi-rgb-led-matrix/blob/master/README.md. 105 | 106 | __Vorgehensweise__ 107 | 1. Raspbian Lite auf dem Pi installieren, (empfohlen:) ssh aktivieren (leere Datei "ssh" in der Bootpartition erstellen) und verbinden. 108 | 2. apt-get update und upgrade durchführen, dann grundsätzliche Konfiguration mit raspi-config vornehmen (z. B. WLAN einrichten, Interfaces ausschalten, ...), ggf. weiteres wie z. B. tmpfs unter /tmp einrichten, isolcpus=3 in /boot/cmdline.txt ergänzen, dtparam=audio=off in /boot/config.txt ergänzen, mehr siehe oben verlinktes Readme. Danach neustarten. 109 | 3. Sicherstellen, dass Python 3.8 oder höher installiert ist 110 | 4. ```apt-get install git libjpeg9-dev libopenjp2-7 python3-pip```, ```pip3 install -r requirements.txt``` 111 | 5. ```git clone```: [d3d9/rpi-rgb-led-matrix](https://github.com/d3d9/rpi-rgb-led-matrix) sowie [d3d9/dm_tomatrixled](https://github.com/d3d9/dm_tomatrixled) (hier). 112 | 6. Im rpi-rgb-led-matrix-Verzeichnis: ```sudo make -j4 install-python PYTHON="$(which python3.9)"``` (Python-Versionsnummer durch die relevante austauschen) 113 | 7. Im dm_tomatrixled-Verzeichnis: siehe Beispiele, das Programm (als Root) ausführen, ggf. Optionen, insbesondere bzgl. der Matrix, anpassen. Bei Darstellungsproblemen Hinweise unter [hzeller/rpi-rgb-led-matrix/README.md](https://github.com/hzeller/rpi-rgb-led-matrix/blob/master/README.md) beachten. Weitere Probleme gerne hier melden. 114 | 115 | ### Service 116 | Im Verzeichnis [service/](service/) befinden sich Dateien, mit denen man das Programm beim Systemstart automatisch ausführen lassen kann. Es kann je nach Bedarf angepasst werden. 117 | Mit z. B. ```sudo systemctl enable /home/pi/dm_tomatrixled/service/matrix.service``` lässt es sich direkt für den Systemstart aktivieren. 118 | Vorher sollte die Datei ```run.env.example``` in eine Datei ```run.env``` kopiert werden. 119 | -------------------------------------------------------------------------------- /dm/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from dataclasses import dataclass 4 | 5 | from typing import Dict 6 | 7 | # todo 8 | @dataclass 9 | class Configuration: 10 | version: str 11 | raw: str 12 | configuration: Dict 13 | 14 | config = Configuration("initial version", "", {}) 15 | -------------------------------------------------------------------------------- /dm/actions.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from . import config 4 | from dataclasses import dataclass 5 | from datetime import datetime 6 | from time import time 7 | from subprocess import check_output 8 | from sys import stdout 9 | from typing import Callable, Optional 10 | 11 | from requests import post 12 | from loguru import logger 13 | 14 | from yaml import load as yaml_load 15 | try: 16 | from yaml import CLoader as Loader, CDumper as Dumper 17 | except ImportError: 18 | from yaml import Loader, Dumper 19 | 20 | _start_time = int(time()) 21 | 22 | def handle_restart_application(action): 23 | check_output("systemctl restart matrix", shell=True) 24 | return False 25 | 26 | def handle_restart_system(action): 27 | check_output("reboot now", shell=True) 28 | return False 29 | 30 | ''' 31 | def handle_update_application(action): 32 | return False 33 | 34 | def handle_configuration(action): 35 | raw_yaml = action["data"] 36 | assert raw_yaml 37 | config.raw = raw_yaml 38 | logger.info("current config version: " + config.version) 39 | configuration = yaml_load(raw_yaml, Loader=Loader) 40 | config.configuration = configuration 41 | config.version = configuration.get("version") 42 | return config.version 43 | ''' 44 | 45 | def check_restart_application(action): 46 | action_ts = int(action["timestamp"]) 47 | return _start_time > action_ts 48 | 49 | def check_restart_system(action): 50 | action_ts = int(action["timestamp"]) 51 | start_ts = int(check_output('date -d "$( action_ts 53 | 54 | ''' 55 | def check_update_application(action): 56 | return False 57 | 58 | def check_configuration(action): 59 | return False 60 | ''' 61 | 62 | 63 | @dataclass 64 | class ActionType: 65 | name: str 66 | handle: Callable # return False, wenn action nicht direkt completed. sonst True oder daten 67 | completed: Optional[Callable] = None # nur notwendig, wenn handle False returnen kann. sonst True oder daten 68 | 69 | _actions = [ 70 | ActionType("restart_application", handle_restart_application, check_restart_application), 71 | ActionType("restart_system", handle_restart_system, check_restart_system), 72 | # ActionType("update_application", handle_update_application, check_update_application), 73 | # ActionType("configuration", handle_configuration), # , check_configuration), 74 | # ActionType("screenshot", handle_screenshot, check_screenshot) 75 | ] 76 | 77 | actions = {obj.name: obj for obj in _actions} 78 | 79 | def _action_file(name): 80 | fp = name 81 | def _action_file_fn(content: Optional[str] = None): 82 | if content is None: 83 | try: 84 | with open(fp, 'r') as f: 85 | return f.read() 86 | except IOError: 87 | return '' 88 | with open(fp, 'w') as f: 89 | f.write(content) 90 | return _action_file_fn 91 | 92 | pending_action = _action_file('.pending_action') # sobald empfangen. leeren sobald verarbeitung beendet (.completed_action) und request an KA gemacht wurde. 93 | working_action = _action_file('.working_action') # setzen wenn verarbeitung beginnt, bei fehler/crash leeren. also gesetzt nur während aktiver verarbeitung und ausstehender completion 94 | completed_action = _action_file('.completed_action') # setzen wenn verarbeitung beendet und sobald request an KA zsm mit pending leeren 95 | completed_data = _action_file('.completed_data') 96 | 97 | def check_action(action, url, dfi_id, key): 98 | if action is False: 99 | if (pending_uuid := pending_action()): 100 | logger.info(f"unsetting action data, previously pending: {pending_uuid}") 101 | pending_action('') 102 | working_action('') 103 | completed_action('') 104 | completed_data('') 105 | return False 106 | 107 | # logger.info(f"checking action {action}") 108 | uuid = action['uuid'] 109 | _type = action['type'] 110 | if _type not in actions: 111 | raise ValueError(f"unknown action type {_type} (action {action})") 112 | action_type = actions[_type] 113 | data = action['data'] 114 | 115 | def check_action_completion(): 116 | if (action_type.completed is None): raise ValueError(f"action of type {_type} is supposed to be completed instantly (action {action})") 117 | return action_type.completed(action) 118 | 119 | def handle_action(): 120 | return action_type.handle(action) # returns False, wenn action nicht direkt completed wurde (check notwendig) 121 | 122 | def handle_completion(data=''): 123 | working_action('') 124 | completed_action(uuid) 125 | if not data: 126 | data = completed_data() 127 | elif data is True: 128 | data = '' 129 | else: 130 | data = str(data) # zukünftig ändern? 131 | # TODO kill handler setzen um completed_data(data) zu machen 132 | try: 133 | payload = {"action": "dfi_action_completed", "id": dfi_id, "key": key, "uuid": uuid} 134 | if data: 135 | payload["data"] = data 136 | r = post(url, data=payload) 137 | r.raise_for_status() 138 | response = r.json() 139 | new_action = response.get('action') 140 | except Exception as e: 141 | logger.exception(f"exception while sending completion. content: {r.content}") 142 | completed_data(data) 143 | return action # action pending 144 | else: 145 | logger.info(f"action_completed request made for {action}") 146 | completed_data('') 147 | completed_action('') 148 | pending_action('') 149 | if new_action: return check_action(new_action, url, dfi_id, key) 150 | return False # keine action pending 151 | 152 | if pending_action() == uuid: 153 | if completed_action() == uuid: 154 | logger.info(f"action was already completed: {action}") 155 | return handle_completion() 156 | elif working_action() == uuid: 157 | completion = check_action_completion() 158 | if completion: # Check, ob eine nicht direkt verarbeitbare Aktion bereits beendet wurde erfolgt hier 159 | logger.info(f"action has completed in the meantime: {action}") 160 | return handle_completion(completion) 161 | else: 162 | logger.info(f"action is still being worked on: {action}") 163 | return action # action pending 164 | 165 | # Wenn die vorher geprüften Umstände nicht zu einem return geführt haben, wird die Aktion nun ausgeführt 166 | logger.info(f"action processing starts: {action}") 167 | pending_action(uuid) 168 | working_action(uuid) 169 | completed_data('') 170 | action_result = False 171 | 172 | # Hier folgt der Code zur Verarbeitung. 173 | try: 174 | action_result = handle_action() 175 | except Exception as e: 176 | logger.exception("exception while working on action") 177 | working_action('') 178 | 179 | # Kann eine Aktion nicht direkt verarbeitet werden, ist die completion-Prüfung im Block `working_action() == uuid:` oben relevant. Ansonsten direkt hier. 180 | if action_result: 181 | logger.info(f"action has completed: {action}") 182 | return handle_completion(action_result) 183 | 184 | logger.info(f"action will be completed at a later point in time: {action}") 185 | return action # action pending 186 | 187 | -------------------------------------------------------------------------------- /dm/areas.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from subprocess import check_output 3 | from rgbmatrix import graphics 4 | from .drawstuff import clockstr_tt, drawppm_bottomleft, drawppm_topcentered, drawppm_centered, drawsecpixels, drawverticaltime 5 | from .lines import textpx 6 | 7 | 8 | def rightbar_wide(canvas, x, y, rightbarwidth, font, color, i, step, currenttime, ppmlist): 9 | timestr = clockstr_tt(currenttime) 10 | graphics.DrawText(canvas, font, canvas.width-rightbarwidth+(rightbarwidth-textpx(font, timestr))//2, font.baseline, color, timestr) 11 | # Temperatur 12 | # pitemp = int(Decimal(int(check_output(['cat', '/sys/class/thermal/thermal_zone0/temp']).decode('utf-8').strip())/1000).quantize(0, ROUND_HALF_UP)) 13 | pitemp = "--" 14 | tempstr = str(pitemp) 15 | degstr = "°" 16 | _temppos = canvas.width-rightbarwidth+(rightbarwidth-textpx(font, tempstr))//2 17 | _temppos += graphics.DrawText(canvas, font, _temppos, canvas.height-1, color, tempstr) 18 | graphics.DrawText(canvas, font, _temppos, canvas.height-1, color, degstr) 19 | # Bilder 20 | drawppm_centered(canvas, ppmlist[int(((i % step)/step)*len(ppmlist))], canvas.width-1-rightbarwidth//2, canvas.height//2) 21 | 22 | 23 | def rightbar_tmp(canvas, x, y, rightbarwidth, font, color, i, step, currenttime, logoppm, seccolor=None): #, r_scroller=None): 24 | timestr = clockstr_tt(currenttime) 25 | y += font.baseline + 1 26 | tw = graphics.DrawText(canvas, font, canvas.width-rightbarwidth+(rightbarwidth-textpx(font, timestr))//2, y, color, timestr) - 1 27 | drawsecpixels(canvas, tuple((x+_,y) for _ in range(tw)), currenttime.tm_sec, seccolor or color) 28 | y += 2 29 | drawppm_topcentered(canvas, logoppm, canvas.width-1-rightbarwidth//2, y) 30 | # if r_scroller: 31 | # r_scroller.render(canvas, canvas.height) 32 | 33 | 34 | def rightbar_verticalclock(canvas, x, y, rightbarwidth, font, color, i, step, currenttime, showsecs): 35 | drawverticaltime(canvas, font, x+1, y+font.height, color, currenttime.tm_hour, currenttime.tm_min, currenttime.tm_sec if showsecs else None) 36 | 37 | 38 | def startscreen(canvas, font, color, ifopt, ppm): 39 | textpos = drawppm_bottomleft(canvas, ppm, 0, 7) 40 | graphics.DrawText(canvas, font, textpos + 1, 6, color, "DFI") 41 | graphics.DrawText(canvas, font, 0, 14, color, ifopt[3:]) 42 | ip = check_output(['hostname', '-I']).decode('utf-8').split(" ")[0].split(".") 43 | graphics.DrawText(canvas, font, 0, 22, color, ".".join(ip[0:2])+".") 44 | graphics.DrawText(canvas, font, 0, 30, color, ".".join(ip[2:4])) 45 | -------------------------------------------------------------------------------- /dm/drawstuff.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import random 3 | from rgbmatrix import graphics 4 | 5 | 6 | def clockstr_tt(tt): 7 | return f"{tt.tm_hour:02}:{tt.tm_min:02}" 8 | 9 | 10 | def colorppm(ppm, color, fromcolor=(255, 255, 255)): 11 | newppm = ppm.copy() 12 | data = newppm.load() 13 | for x in range(newppm.size[0]): 14 | for y in range(newppm.size[1]): 15 | if data[x, y] == fromcolor: 16 | data[x, y] = (color.red, color.green, color.blue) 17 | return newppm 18 | 19 | 20 | def drawppm_topcentered(canvas, ppm, cx, ty, unsafe=True, transp=False): 21 | halfwidth = ppm.size[0]//2 22 | canvas.SetImage(ppm, cx-halfwidth, ty, unsafe, transp) 23 | return cx+halfwidth 24 | 25 | 26 | def drawppm_centered(canvas, ppm, cx, cy, unsafe=True, transp=False): 27 | halfwidth = ppm.size[0]//2 28 | canvas.SetImage(ppm, cx-halfwidth, cy-ppm.size[1]//2, unsafe, transp) 29 | return cx+halfwidth 30 | 31 | 32 | def drawppm_bottomleft(canvas, ppm, lx, by, unsafe=True, transp=False): 33 | canvas.SetImage(ppm, lx, by-ppm.size[1], unsafe, transp) 34 | return lx+ppm.size[0] 35 | 36 | 37 | def drawppm_bottomright(canvas, ppm, rx, by, unsafe=True, transp=False): 38 | canvas.SetImage(ppm, rx+1-ppm.size[0], by-ppm.size[1], unsafe, transp) 39 | return rx+1 40 | 41 | 42 | def drawsecpixels(canvas, coords, sec, maincolor, addcolor=None, offcolor=graphics.Color()): 43 | if addcolor is None: 44 | addcolor = maincolor 45 | groups = len(coords) 46 | groupsecs = 60 / groups 47 | for _i, (x, y) in enumerate(coords): 48 | spos = sec // groupsecs 49 | if _i == spos: 50 | vm = (sec % groupsecs)/groupsecs 51 | _r, _g, _b = int(vm*addcolor.red), int(vm*addcolor.green), int(vm*addcolor.blue) 52 | else: 53 | _c = maincolor if _i < spos else offcolor 54 | _r, _g, _b = _c.red, _c.green, _c.blue 55 | canvas.SetPixel(x, y, _r, _g, _b) 56 | 57 | 58 | def drawverticaltime(canvas, font, x, y, color, hour, minute, sec=None, sec_mainc=None, sec_addc=None, sec_offc=graphics.Color()): 59 | y = 1 + graphics.VerticalDrawText(canvas, font, x, y, color, f"{hour:02}") 60 | if sec is not None: 61 | drawsecpixels(canvas, ((x+2,y), (x+2,y+1), (x+1,y+1), (x+1,y)), sec, maincolor=(sec_mainc or color), addcolor=sec_addc, offcolor=sec_offc) 62 | y += 1 + font.height + 1 63 | y += graphics.VerticalDrawText(canvas, font, x, y, color, f"{minute:02}") 64 | 65 | 66 | def makechristmasfn(maxrgb, randspeed, ptrgb, ptspeed, ptlen, ptscale): 67 | ## Beispielangaben: 68 | # randspeed = 8 69 | # maxrgb = (130, 150, 35) 70 | ## maxrgb = (150, 150, 0) 71 | # ptspeed = 4 72 | # ptlen = 3 73 | # ptscale = 0.8 74 | # ptrgb = (77, 65, 0) 75 | ## ptrgb = (153, 130, 0) 76 | def drawchristmas(canvas, x_min, x_max, y_min, y_max, i): 77 | l = x_max+1-x_min 78 | bbness = 1 79 | if ptspeed: 80 | pt = x_min+((i//ptspeed)%(x_max-x_min)) 81 | # canvas.SetPixel(pt, y_max-4, 255, 255, 255) 82 | if randspeed: 83 | random.seed(i//randspeed) 84 | for x in range(x_min, x_max+1): 85 | if ptspeed and ptscale: 86 | dist = abs(x-pt) 87 | bbness = (min(dist/l, (l-dist)/l))*ptscale 88 | bbness = max(0, min(bbness, 1)) 89 | rv, gv, bv = (maxrgb[_]*bbness*((not randspeed) or random.triangular(0.2, 1, 0.6)) for _ in (0, 1, 2)) 90 | # % usw.. anpassen/? 91 | canvas.SetPixel(x, y_min+x%2, rv*bool(x%5), gv*(not x%3), bv*(not x%5)) 92 | canvas.SetPixel(x_min+x_max-x, y_max-x%2, rv*bool(x%5), gv*(not x%3), bv*(not x%5)) 93 | if ptspeed: 94 | tmp = l-(l%2) # ? 95 | for x in range(pt-ptlen, pt+ptlen+1): 96 | canvas.SetPixel(x_min+x%(tmp), y_min, ptrgb[0]*bool(x%2), ptrgb[1]*bool(x%2), ptrgb[2]*bool(x%2)) 97 | canvas.SetPixel(x_min+x%(tmp), y_min+1, ptrgb[0]*(not x%2), ptrgb[1]*(not x%2), ptrgb[2]*(not x%2)) 98 | canvas.SetPixel(x_min+(x_max-x)%(tmp), y_max-1, ptrgb[0]*bool(x%2), ptrgb[1]*bool(x%2), ptrgb[2]*bool(x%2)) 99 | canvas.SetPixel(x_min+(x_max-x)%(tmp), y_max, ptrgb[0]*(not x%2), ptrgb[1]*(not x%2), ptrgb[2]*(not x%2)) 100 | return drawchristmas 101 | -------------------------------------------------------------------------------- /dm/lines.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from dataclasses import dataclass, field 3 | from datetime import datetime, timezone 4 | from functools import lru_cache 5 | from re import Pattern, match as re_match 6 | from typing import List, Optional, Callable, Tuple, Dict, Match 7 | 8 | from PIL import Image 9 | from rgbmatrix import graphics 10 | from rgbmatrix.core import FrameCanvas 11 | from webcolors import hex_to_rgb 12 | 13 | from .drawstuff import clockstr_tt, drawppm_bottomleft, drawppm_bottomright 14 | from .depdata import Departure, Meldung, MOT, trainMOT 15 | 16 | 17 | class MultisymbolScrollline: 18 | @dataclass 19 | class __Element: 20 | text: str 21 | symbol: Image.Image 22 | textcolor: graphics.Color 23 | initial_pretext: int 24 | initial_posttext: int 25 | letters_passed: int = field(init=False, default=0) 26 | curr_textxoffset: int = field(init=False, default=0) 27 | pretext: int = field(init=False) 28 | posttext: int = field(init=False) 29 | 30 | def __post_init__(self): 31 | self.pretext = self.initial_pretext 32 | self.posttext = self.initial_posttext 33 | 34 | def reset(self): 35 | self.pretext = self.initial_pretext 36 | self.posttext = self.initial_posttext 37 | self.letters_passed = 0 38 | self.curr_textxoffset = 0 39 | 40 | def __init__(self, lx, rx, symoffset, font, defaulttextcolor, symdict, bgcolor_t=None, initial_pretext=2, initial_posttext=5, pretext_zero_if_no_symbol=True, add_end_spacer=True, last_char_separated=False, fixedy: Optional[int] = None): 41 | # attributes 42 | self.lx = lx 43 | self.rx = rx 44 | self.symoffset = symoffset 45 | self.font = font 46 | self.defaulttextcolor = defaulttextcolor 47 | self.symdict = symdict 48 | self.bgcolor = graphics.Color(*bgcolor_t) if bgcolor_t else graphics.Color() 49 | self.initial_posttext = initial_posttext 50 | self.initial_pretext = initial_pretext 51 | self.pretext_zero_if_no_symbol = pretext_zero_if_no_symbol 52 | self.add_end_spacer = add_end_spacer 53 | self.last_char_separated = last_char_separated 54 | self.fixedy = fixedy 55 | # self.staticleftsymtextspacing = staticleftsymtextspacing 56 | # self.forcescroll = forcescroll 57 | # self.noscroll = noscroll 58 | 59 | # state 60 | self.meldungs: List[Meldung] = [] 61 | self.elements: List[MultisymbolScrollline.__Element] = [] 62 | self.currfirstelemi = None 63 | self.currlastelemi = None 64 | self.shownelems = 0 65 | self.startpos = rx 66 | 67 | def update(self, meldungs: List[Meldung]) -> None: 68 | if meldungs == self.meldungs: 69 | return 70 | ... # todo: schlaue anpassung je nach davor angezeigter meldung; dabei alle anderen zeilen hier anpassen 71 | self.meldungs = meldungs 72 | self.elements = [] 73 | self.currfirstelemi = None 74 | self.currlastelemi = None 75 | self.shownelems = 0 76 | self.startpos = self.rx 77 | for meldung in meldungs: 78 | _symbol = self.symdict and self.symdict.get(meldung.symbol) or None 79 | _text = ''.join(_char for _char in meldung.text if characterwidth(self.font, ord(_char))) 80 | self.elements.append( 81 | self.__class__.__Element( 82 | text=_text, 83 | symbol=_symbol, 84 | textcolor=graphics.Color(*(int(meldung.color.lstrip("#")[i:i+2], 16) for i in (0, 2, 4))) if meldung.color else self.defaulttextcolor, 85 | initial_pretext=self.initial_pretext if _text and (_symbol is not None or not self.pretext_zero_if_no_symbol) else 0, 86 | initial_posttext=self.initial_posttext 87 | ) 88 | ) 89 | if self.elements: 90 | if self.elements[0].symbol is not None: 91 | self.startpos -= (self.elements[0].symbol.size[0] - 1) 92 | if self.add_end_spacer: 93 | self.elements[-1].initial_posttext = 0 94 | self.elements[-1].posttext = 0 95 | self.elements.append(self.__class__.__Element(text='', symbol=None, textcolor=self.defaulttextcolor, initial_pretext=0, initial_posttext=self.startpos-self.lx)) 96 | 97 | if self.last_char_separated: 98 | # experimentell 99 | _i = 0 100 | for _e in self.elements[:]: 101 | if _e.text: 102 | _i += 1 103 | self.elements.insert(_i, self.__class__.__Element(text=_e.text[-1], symbol=None, textcolor=_e.textcolor, initial_pretext=0, initial_posttext=_e.initial_posttext)) 104 | _e.text = _e.text[:-1] 105 | _e.initial_posttext = 1 106 | _e.posttext = 1 107 | _i += 1 108 | 109 | def render(self, canvas: FrameCanvas, texty: int) -> None: 110 | if not self.elements: 111 | return 112 | texty = self.fixedy if self.fixedy is not None else texty 113 | currx = self.startpos 114 | if self.currfirstelemi is None: 115 | self.currfirstelemi = 0 116 | elemi = self.currfirstelemi 117 | self.shownelems = 0 118 | while currx <= self.rx: 119 | elem = self.elements[elemi] 120 | isleftelem = currx == self.lx 121 | if currx + (elem.symbol is not None and (elem.symbol.size[0] - 1)) <= self.rx: 122 | self.shownelems += 1 123 | self.currlastelemi = elemi 124 | if elem.symbol is not None: currx = drawppm_bottomleft(canvas, elem.symbol, currx, texty+self.symoffset, transp=True) 125 | if isleftelem: 126 | currx += elem.pretext 127 | text_max = propscroll(self.font, elem.text[elem.letters_passed:], currx+elem.curr_textxoffset, self.rx) 128 | else: 129 | currx += elem.initial_pretext 130 | text_max = propscroll(self.font, elem.text, currx, self.rx) 131 | if text_max or (not elem.text) or (isleftelem and elem.letters_passed == len(elem.text)): 132 | if isleftelem: 133 | currx += elem.curr_textxoffset 134 | # _total_text wird unten verwendet, Wert wird hier gespeichert, damit er bis dahin unverändert bleibt 135 | _total_text = (isleftelem and elem.letters_passed) + text_max 136 | if text_max: 137 | if isleftelem: 138 | currx += graphics.DrawText(canvas, self.font, currx, texty, elem.textcolor, elem.text[elem.letters_passed:elem.letters_passed+text_max]) - 1 139 | if not elem.pretext: 140 | elem.curr_textxoffset -= 1 141 | if elem.curr_textxoffset < 0: 142 | elem.curr_textxoffset = characterwidth(self.font, ord(elem.text[elem.letters_passed])) - 1 143 | elem.letters_passed += 1 144 | else: 145 | currx += graphics.DrawText(canvas, self.font, currx, texty, elem.textcolor, elem.text[:text_max]) - 1 146 | else: # if ((not elem.text) or (isleftelem and elem.letters_passed = len(elem.text))): 147 | if isleftelem and elem.posttext < 0 and elem.symbol is not None: 148 | _thissize = elem.symbol.size[0] 149 | for _y in range(texty+self.symoffset-elem.symbol.size[1], texty+self.symoffset+1): 150 | graphics.DrawLine(canvas, self.lx+_thissize+elem.posttext, _y, self.lx+_thissize-1, _y, self.bgcolor) 151 | if isleftelem: 152 | currx += elem.posttext 153 | if elem.letters_passed == len(elem.text): 154 | if elem.curr_textxoffset: 155 | elem.curr_textxoffset -= 1 156 | elif not elem.pretext: 157 | elem.posttext -= 1 158 | if elem.pretext: elem.pretext -= 1 159 | if elem.posttext <= ((elem.symbol is not None and -elem.symbol.size[0]) or -1): 160 | elem.reset() 161 | self.currfirstelemi = (self.currfirstelemi + 1) % len(self.elements) 162 | self.shownelems -= 1 163 | else: 164 | currx += elem.initial_posttext 165 | if _total_text < len(elem.text): 166 | break 167 | elemi = (elemi + 1) % len(self.elements) 168 | else: break 169 | else: break 170 | if self.startpos > self.lx: self.startpos -= 1 171 | 172 | 173 | class SimpleScrollline: 174 | def __init__(self, lx, rx, symoffset, font, textcolor, symtextspacing=1, forcescroll=False, noscroll=False, fixedy: Optional[int] = None): 175 | self.lx = lx 176 | self.rx = rx 177 | self.symoffset = symoffset 178 | self.font = font 179 | self.textcolor = textcolor 180 | self.symtextspacing = symtextspacing 181 | self.forcescroll = forcescroll 182 | self.noscroll = noscroll 183 | self.fixedy = fixedy 184 | 185 | self.currx = rx 186 | self.letters_passed = 0 187 | self.symbol = None 188 | self.text = "" 189 | self.textlen = 0 190 | self.base_start = lx 191 | self.base_start_static = lx 192 | self.text_max_theoretical = 0 193 | self.willscroll = forcescroll 194 | 195 | def update(self, symbol: Optional[Image.Image], text: str) -> None: 196 | if symbol == self.symbol and text == self.text: 197 | return 198 | self.symbol = symbol 199 | self.text = ''.join(_char for _char in text if characterwidth(self.font, ord(_char))) 200 | self.textlen = len(self.text) 201 | self.base_start = self.lx + (self.symbol is not None and self.symbol.size[0]) 202 | self.base_start_static = self.base_start + (self.symbol is not None and self.symtextspacing) 203 | self.text_max_theoretical = propscroll(self.font, self.text, self.base_start_static, self.rx) 204 | self.willscroll = (not self.noscroll) and (self.forcescroll or self.textlen > self.text_max_theoretical) 205 | 206 | def render(self, canvas: FrameCanvas, texty: int) -> None: 207 | texty = self.fixedy if self.fixedy is not None else texty 208 | if self.symbol: drawppm_bottomleft(canvas, self.symbol, self.lx, texty+self.symoffset, transp=True) 209 | if not self.text: return 210 | if self.willscroll: 211 | if self.letters_passed >= self.textlen: 212 | self.letters_passed = 0 213 | self.currx = self.rx 214 | text_max = propscroll(self.font, self.text[self.letters_passed:], self.currx, self.rx) 215 | scrolllen = graphics.DrawText(canvas, self.font, self.currx, texty, self.textcolor, self.text[self.letters_passed:self.letters_passed+text_max]) 216 | self.currx -= 1 217 | if self.currx < self.base_start: 218 | self.currx = self.base_start + characterwidth(self.font, ord(self.text[self.letters_passed])) - 1 219 | self.letters_passed += 1 220 | else: graphics.DrawText(canvas, self.font, self.base_start_static, texty, self.textcolor, self.text[:self.text_max_theoretical]) 221 | 222 | 223 | _retexttype = Callable[[Match], str] 224 | 225 | @dataclass 226 | class LinenumOptions: 227 | width: int 228 | height: int 229 | normalFont: graphics.Font 230 | smallFont: graphics.Font 231 | normalsmalloffset: int 232 | drawbg: bool 233 | bgColor: graphics.Color 234 | fgColor: graphics.Color 235 | pattern: Pattern 236 | retext_1: _retexttype 237 | retext_2: _retexttype 238 | align_left: bool = False 239 | 240 | 241 | @dataclass 242 | class RealtimeColors: 243 | no_realtime: graphics.Color 244 | no_delay: graphics.Color 245 | slight_delay: graphics.Color 246 | high_delay: graphics.Color 247 | cancelled: graphics.Color 248 | negative_delay: graphics.Color 249 | 250 | 251 | @dataclass 252 | class CountdownOptions: 253 | font: graphics.Font 254 | realtime_colors: RealtimeColors 255 | mot_symbols: Dict[MOT, Image.Image] 256 | mot_coloured_symbols: Dict[graphics.Color, Dict[MOT, Image.Image]] 257 | min_symbol: Image.Image 258 | min_coloured_symbols: Dict[graphics.Color, Image.Image] 259 | mindelay: int 260 | minslightdelay: int 261 | minnegativedelay: int 262 | maxmin: int 263 | zerobus: bool 264 | min_text: bool 265 | min_text_offset: int 266 | in_min_text: bool = False 267 | blink: bool = True 268 | zerosofort: bool = False 269 | use_disp_countdown: bool = False 270 | cancelled_symbol: Optional[Image.Image] = None 271 | 272 | 273 | @dataclass 274 | class PlatformOptions: 275 | width: int 276 | textColor: graphics.Color 277 | texthighlightColor: graphics.Color 278 | normalFont: graphics.Font 279 | smallFont: graphics.Font 280 | normalsmalloffset: int 281 | 282 | 283 | class StandardDepartureLine: 284 | def __init__( 285 | self, 286 | lx: int, 287 | rx: int, 288 | font: graphics.Font, 289 | textColor: graphics.Color, 290 | texthighlightColor: graphics.Color, 291 | space_linenum_direction: int, 292 | space_direction_countdown: int, 293 | space_countdown_platform: int, 294 | linenumopt: LinenumOptions, 295 | countdownopt: CountdownOptions, 296 | platformopt: Optional[PlatformOptions], 297 | fixedy: Optional[int] = None, 298 | cancelled_blink_text: Optional[str] = "entfällt"): 299 | self.lx = lx 300 | self.rx = rx 301 | self.font = font 302 | self.textColor = textColor 303 | self.texthighlightColor = texthighlightColor 304 | self.space_linenum_direction = space_linenum_direction 305 | self.space_direction_countdown = space_direction_countdown 306 | self.space_countdown_platform = space_countdown_platform 307 | self.linenumopt = linenumopt 308 | self.countdownopt = countdownopt 309 | self.platformopt = platformopt 310 | self.fixedy = fixedy 311 | self.cancelled_blink_text = cancelled_blink_text 312 | 313 | self.dep: Optional[Departure] = None 314 | self.dep_tz: Optional[timezone] = None 315 | self.rtcolor: graphics.Color = self.countdownopt.realtime_colors.no_realtime 316 | self.dirtextcolor: graphics.Color = self.textColor 317 | 318 | self.linenum_min: int 319 | self.linenum_max: int 320 | self.direction_xpos: int 321 | self.deptime_x_max: int 322 | self.platform_min: int 323 | self.platform_max: int 324 | self.setminmax() 325 | 326 | def setminmax(self) -> None: 327 | self.linenum_min = self.lx 328 | self.linenum_max = self.linenum_min + self.linenumopt.width - 1 329 | 330 | self.direction_xpos = self.linenum_max + 1 + self.space_linenum_direction 331 | self.deptime_x_max = self.rx 332 | 333 | if self.platformopt is not None and self.platformopt.width > 0: 334 | self.deptime_x_max -= (self.space_countdown_platform + self.platformopt.width) 335 | self.platform_min = self.deptime_x_max + self.space_countdown_platform + 1 336 | self.platform_max = self.platform_min + self.platformopt.width - 1 337 | 338 | def update(self, dep: Departure) -> None: 339 | if dep == self.dep: 340 | return 341 | 342 | self.dep = dep 343 | if self.dep is None: 344 | return 345 | 346 | self.dep_tz = self.dep.deptime.tzinfo 347 | 348 | rtc = self.countdownopt.realtime_colors 349 | if self.dep.realtime: 350 | if self.dep.cancelled: 351 | self.rtcolor = rtc.cancelled 352 | elif self.dep.delay >= self.countdownopt.mindelay: 353 | self.rtcolor = rtc.high_delay 354 | elif self.dep.delay >= self.countdownopt.minslightdelay: 355 | self.rtcolor = rtc.slight_delay 356 | elif self.dep.delay <= self.countdownopt.minnegativedelay: 357 | self.rtcolor = rtc.negative_delay 358 | else: 359 | self.rtcolor = rtc.no_delay 360 | else: 361 | self.rtcolor = rtc.no_realtime 362 | 363 | def render(self, canvas: FrameCanvas, texty: int, blinkon: bool) -> None: 364 | if self.dep is None: 365 | return 366 | 367 | texty = self.fixedy if self.fixedy is not None else texty 368 | 369 | if self.dep.color: 370 | linenum_color = graphics.Color(*hex_to_rgb(self.dep.color)) 371 | linenum_bgColor = graphics.Color() 372 | else: 373 | linenum_color = self.linenumopt.fgColor 374 | linenum_bgColor = self.linenumopt.bgColor 375 | 376 | if self.linenumopt.drawbg: 377 | for y in range(texty-self.linenumopt.height, texty): 378 | graphics.DrawLine(canvas, self.linenum_min, y, self.linenum_max, y, linenum_bgColor) 379 | 380 | linenum_font, linenum_str, linenum_px, linenum_verticaloffset = fittext( 381 | self.dep.disp_linenum, 382 | self.linenumopt.width, 383 | self.linenum_min, 384 | self.linenum_max, 385 | self.linenumopt.normalFont, 386 | self.linenumopt.smallFont, 387 | smallpxoffset=self.linenumopt.normalsmalloffset, 388 | pattern=self.linenumopt.pattern, 389 | alt_retext_1=self.linenumopt.retext_1, 390 | alt_retext_2=self.linenumopt.retext_2) 391 | linenum_xpos = self.linenum_min if self.linenumopt.align_left else (self.linenum_max - linenum_px + (linenum_px == self.linenumopt.width)) 392 | 393 | graphics.DrawText(canvas, linenum_font, linenum_xpos, texty-linenum_verticaloffset, linenum_color, linenum_str) 394 | 395 | directionpixel = self.deptime_x_max - self.direction_xpos 396 | timeoffset = 0 397 | 398 | dep_countdown: int 399 | if self.countdownopt.use_disp_countdown: 400 | dep_countdown = self.dep.disp_countdown 401 | else: 402 | dep_countdown_secs: int = (self.dep.deptime - datetime.now(self.dep_tz)).total_seconds() 403 | dep_countdown = 0 if (-75 < dep_countdown_secs < 30) else int((dep_countdown_secs + 60) // 60) 404 | 405 | if self.dep.cancelled and self.countdownopt.cancelled_symbol is not None: 406 | drawppm_bottomright(canvas, self.countdownopt.cancelled_symbol, self.deptime_x_max, texty, transp=True) 407 | timeoffset += self.countdownopt.cancelled_symbol.size[0] 408 | elif dep_countdown > self.countdownopt.maxmin or self.dep.cancelled: 409 | timestr = clockstr_tt(self.dep.deptime.timetuple()) 410 | timestrpx = textpx(self.countdownopt.font, timestr) 411 | graphics.DrawText(canvas, self.countdownopt.font, self.deptime_x_max - timestrpx + 1, texty, self.rtcolor, timestr) 412 | timeoffset += timestrpx 413 | elif not dep_countdown and (self.countdownopt.zerobus or self.countdownopt.zerosofort): 414 | if blinkon or not self.countdownopt.blink: 415 | if self.countdownopt.zerobus: 416 | drawppm_bottomright(canvas, self.countdownopt.mot_coloured_symbols[self.dep.mot][self.rtcolor], self.deptime_x_max, texty, transp=True) 417 | timeoffset += self.countdownopt.mot_symbols[self.dep.mot].size[0] 418 | elif self.countdownopt.zerosofort: 419 | timestr = " sofort" 420 | timestrpx = textpx(self.countdownopt.font, timestr) 421 | graphics.DrawText(canvas, self.countdownopt.font, self.deptime_x_max - timestrpx + 1, texty, self.rtcolor, timestr) 422 | timeoffset += timestrpx 423 | elif dep_countdown or blinkon or not self.countdownopt.blink: # mehr als 0, oder es ist 0 und kein zerobus/zerosofort 424 | min_text = self.countdownopt.min_text and not self.countdownopt.in_min_text 425 | timestr = (f" in {dep_countdown} min" if dep_countdown >= 0 else f" vor {abs(dep_countdown)} min") if self.countdownopt.in_min_text else str(dep_countdown) 426 | timestrpx = textpx(self.countdownopt.font, timestr) 427 | graphics.DrawText(canvas, self.countdownopt.font, self.deptime_x_max - timestrpx - ((self.countdownopt.min_symbol.size[0]-1+self.countdownopt.min_text_offset) if min_text else -1), texty, self.rtcolor, timestr) 428 | timeoffset += timestrpx 429 | if min_text: 430 | drawppm_bottomright(canvas, self.countdownopt.min_coloured_symbols[self.rtcolor], self.deptime_x_max, texty, transp=True) 431 | timeoffset += self.countdownopt.min_symbol.size[0] + self.countdownopt.min_text_offset 432 | 433 | if self.platformopt is not None and self.platformopt.width > 0 and self.dep.platformno: 434 | platprefix = self.dep.platformtype or ("Gl." if self.dep.mot in trainMOT else "Bstg.") 435 | full_str = platprefix + str(self.dep.platformno) 436 | short_str = str(self.dep.platformno) 437 | if any((hit := _) in short_str for _ in {"Gleis", "Gl.", "Bstg.", "Bstg", "Bussteig", "Bahnsteig", "Steig", "Platform", "Pl."}): 438 | full_str = short_str 439 | short_str = short_str.replace(hit, "").strip() 440 | platform_font, platform_str, platpx, platform_verticaloffset = fittext( 441 | full_str, 442 | self.platformopt.width, 443 | self.platform_min, 444 | self.platform_max, 445 | self.platformopt.normalFont, 446 | self.platformopt.smallFont, 447 | smallpxoffset=self.platformopt.normalsmalloffset, 448 | alt_text=short_str) 449 | platformchanged = self.dep.platformno_planned and (self.dep.platformno_planned != self.dep.platformno) 450 | platform_color = self.platformopt.texthighlightColor if platformchanged else self.platformopt.textColor 451 | platform_xpos = self.platform_max - platpx + 1 452 | graphics.DrawText(canvas, platform_font, platform_xpos, texty-platform_verticaloffset, platform_color, platform_str) 453 | 454 | directionpixel -= (timeoffset + self.space_direction_countdown*bool(timeoffset)) 455 | dirtext = self.cancelled_blink_text if (self.cancelled_blink_text and self.dep.cancelled and blinkon) else self.dep.disp_direction 456 | directionlimit = propscroll(self.font, dirtext, self.direction_xpos, self.direction_xpos+directionpixel) 457 | dirtextcolor = self.texthighlightColor if self.dep.earlytermination else self.textColor 458 | graphics.DrawText(canvas, self.font, self.direction_xpos, texty, dirtextcolor, dirtext[:directionlimit]) 459 | 460 | 461 | # beides ohne extra_spacing 462 | @lru_cache(maxsize=4096) 463 | def propscroll(font: graphics.Font, text: str, start: int, end: int) -> int: 464 | c = 0 465 | cpx = 0 466 | pixel = end - start + 1 + 1 # + 1 wegen space am ende jedes zeichens, was am ende egal ist 467 | while c < len(text): 468 | _cpx = cpx + characterwidth(font, ord(text[c])) 469 | if _cpx > pixel: 470 | break 471 | c += 1 472 | cpx = _cpx 473 | return c 474 | 475 | 476 | @lru_cache(maxsize=64) 477 | def textpx(font: graphics.Font, text: str) -> int: 478 | return sum(characterwidth(font, ord(c)) for c in text) - 1 479 | 480 | 481 | @lru_cache(maxsize=None) 482 | def characterwidth(font: graphics.Font, cp: int) -> int: 483 | _cw = font.CharacterWidth(cp) 484 | if _cw == -1: 485 | _cw = font.CharacterWidth(65533) 486 | if _cw == -1: 487 | _cw = 0 488 | return _cw 489 | 490 | 491 | @lru_cache(maxsize=64) 492 | def fittext(text: str, 493 | avail_width: int, 494 | start: int, 495 | end: int, 496 | normalfont: graphics.Font, 497 | smallfont: graphics.Font, 498 | smallpxoffset: int = 0, 499 | alt_text: str = None, 500 | pattern: Optional[Pattern] = None, 501 | alt_retext_1: Optional[_retexttype] = None, 502 | alt_retext_2: Optional[_retexttype] = None 503 | ) -> Tuple[graphics.Font, str, int, int]: 504 | _font = normalfont 505 | _text = text 506 | _textpx = textpx(_font, _text) 507 | _roff = 0 508 | if _textpx > avail_width: 509 | shownchars_normal = propscroll(normalfont, _text, start, end) 510 | shownchars_small = propscroll(smallfont, _text, start, end) 511 | _search = pattern.search(_text) if pattern is not None else None 512 | if _search is not None: 513 | _text = alt_retext_1(_search) 514 | shownchars_normal = propscroll(normalfont, _text, start, end) 515 | shownchars_small = propscroll(smallfont, _text, start, end) 516 | if shownchars_small < len(_text): 517 | _text = alt_retext_2(_search) 518 | shownchars_normal = propscroll(normalfont, _text, start, end) 519 | shownchars_small = propscroll(smallfont, _text, start, end) 520 | elif alt_text is not None and shownchars_small < len(_text): 521 | _text = _text.replace(" ", "") 522 | shownchars_normal = propscroll(normalfont, _text, start, end) 523 | shownchars_small = propscroll(smallfont, _text, start, end) 524 | if shownchars_small < len(_text): 525 | _text = alt_text 526 | shownchars_normal = propscroll(normalfont, _text, start, end) 527 | shownchars_small = propscroll(smallfont, _text, start, end) 528 | if shownchars_small > shownchars_normal and not _text[shownchars_small-1] in {'(', '/'}: 529 | _text = _text[:shownchars_small] 530 | _font = smallfont 531 | _roff = smallpxoffset 532 | else: 533 | _text = _text[:shownchars_normal] 534 | _font = normalfont 535 | _textpx = textpx(_font, _text) 536 | return _font, _text, _textpx, _roff 537 | -------------------------------------------------------------------------------- /ppmtools/image_to_ansi.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python 2 | 3 | """ Convert an image (argv[1]) to an ANSI text string (xterm-256color) 4 | 5 | Original readme from colortrans.py follows: 6 | 7 | Nice long listing of all 256 colors and their codes. Useful for 8 | developing console color themes, or even script output schemes. 9 | 10 | Resources: 11 | * http://en.wikipedia.org/wiki/8-bit_color 12 | * http://en.wikipedia.org/wiki/ANSI_escape_code 13 | * /usr/share/X11/rgb.txt 14 | 15 | I'm not sure where this script was inspired from. I think I must have 16 | written it from scratch, though it's been several years now. 17 | """ 18 | 19 | __author__ = 'Micah Elliott http://MicahElliott.com; Kevin Lange ' 20 | __version__ = '0.1' 21 | __copyright__ = 'Copyright (C) 2011 Micah Elliott. All rights reserved.' 22 | __license__ = 'WTFPL http://sam.zoy.org/wtfpl/' 23 | 24 | #--------------------------------------------------------------------- 25 | 26 | import sys, re 27 | 28 | CLUT = [ # color look-up table 29 | # 8-bit, RGB hex 30 | 31 | # Primary 3-bit (8 colors). Unique representation! 32 | ('00', '000000'), 33 | ('01', '800000'), 34 | ('02', '008000'), 35 | ('03', '808000'), 36 | ('04', '000080'), 37 | ('05', '800080'), 38 | ('06', '008080'), 39 | ('07', 'c0c0c0'), 40 | 41 | # Equivalent "bright" versions of original 8 colors. 42 | ('08', '808080'), 43 | ('09', 'ff0000'), 44 | ('10', '00ff00'), 45 | ('11', 'ffff00'), 46 | ('12', '0000ff'), 47 | ('13', 'ff00ff'), 48 | ('14', '00ffff'), 49 | ('15', 'ffffff'), 50 | 51 | # Strictly ascending. 52 | ('16', '000000'), 53 | ('17', '00005f'), 54 | ('18', '000087'), 55 | ('19', '0000af'), 56 | ('20', '0000d7'), 57 | ('21', '0000ff'), 58 | ('22', '005f00'), 59 | ('23', '005f5f'), 60 | ('24', '005f87'), 61 | ('25', '005faf'), 62 | ('26', '005fd7'), 63 | ('27', '005fff'), 64 | ('28', '008700'), 65 | ('29', '00875f'), 66 | ('30', '008787'), 67 | ('31', '0087af'), 68 | ('32', '0087d7'), 69 | ('33', '0087ff'), 70 | ('34', '00af00'), 71 | ('35', '00af5f'), 72 | ('36', '00af87'), 73 | ('37', '00afaf'), 74 | ('38', '00afd7'), 75 | ('39', '00afff'), 76 | ('40', '00d700'), 77 | ('41', '00d75f'), 78 | ('42', '00d787'), 79 | ('43', '00d7af'), 80 | ('44', '00d7d7'), 81 | ('45', '00d7ff'), 82 | ('46', '00ff00'), 83 | ('47', '00ff5f'), 84 | ('48', '00ff87'), 85 | ('49', '00ffaf'), 86 | ('50', '00ffd7'), 87 | ('51', '00ffff'), 88 | ('52', '5f0000'), 89 | ('53', '5f005f'), 90 | ('54', '5f0087'), 91 | ('55', '5f00af'), 92 | ('56', '5f00d7'), 93 | ('57', '5f00ff'), 94 | ('58', '5f5f00'), 95 | ('59', '5f5f5f'), 96 | ('60', '5f5f87'), 97 | ('61', '5f5faf'), 98 | ('62', '5f5fd7'), 99 | ('63', '5f5fff'), 100 | ('64', '5f8700'), 101 | ('65', '5f875f'), 102 | ('66', '5f8787'), 103 | ('67', '5f87af'), 104 | ('68', '5f87d7'), 105 | ('69', '5f87ff'), 106 | ('70', '5faf00'), 107 | ('71', '5faf5f'), 108 | ('72', '5faf87'), 109 | ('73', '5fafaf'), 110 | ('74', '5fafd7'), 111 | ('75', '5fafff'), 112 | ('76', '5fd700'), 113 | ('77', '5fd75f'), 114 | ('78', '5fd787'), 115 | ('79', '5fd7af'), 116 | ('80', '5fd7d7'), 117 | ('81', '5fd7ff'), 118 | ('82', '5fff00'), 119 | ('83', '5fff5f'), 120 | ('84', '5fff87'), 121 | ('85', '5fffaf'), 122 | ('86', '5fffd7'), 123 | ('87', '5fffff'), 124 | ('88', '870000'), 125 | ('89', '87005f'), 126 | ('90', '870087'), 127 | ('91', '8700af'), 128 | ('92', '8700d7'), 129 | ('93', '8700ff'), 130 | ('94', '875f00'), 131 | ('95', '875f5f'), 132 | ('96', '875f87'), 133 | ('97', '875faf'), 134 | ('98', '875fd7'), 135 | ('99', '875fff'), 136 | ('100', '878700'), 137 | ('101', '87875f'), 138 | ('102', '878787'), 139 | ('103', '8787af'), 140 | ('104', '8787d7'), 141 | ('105', '8787ff'), 142 | ('106', '87af00'), 143 | ('107', '87af5f'), 144 | ('108', '87af87'), 145 | ('109', '87afaf'), 146 | ('110', '87afd7'), 147 | ('111', '87afff'), 148 | ('112', '87d700'), 149 | ('113', '87d75f'), 150 | ('114', '87d787'), 151 | ('115', '87d7af'), 152 | ('116', '87d7d7'), 153 | ('117', '87d7ff'), 154 | ('118', '87ff00'), 155 | ('119', '87ff5f'), 156 | ('120', '87ff87'), 157 | ('121', '87ffaf'), 158 | ('122', '87ffd7'), 159 | ('123', '87ffff'), 160 | ('124', 'af0000'), 161 | ('125', 'af005f'), 162 | ('126', 'af0087'), 163 | ('127', 'af00af'), 164 | ('128', 'af00d7'), 165 | ('129', 'af00ff'), 166 | ('130', 'af5f00'), 167 | ('131', 'af5f5f'), 168 | ('132', 'af5f87'), 169 | ('133', 'af5faf'), 170 | ('134', 'af5fd7'), 171 | ('135', 'af5fff'), 172 | ('136', 'af8700'), 173 | ('137', 'af875f'), 174 | ('138', 'af8787'), 175 | ('139', 'af87af'), 176 | ('140', 'af87d7'), 177 | ('141', 'af87ff'), 178 | ('142', 'afaf00'), 179 | ('143', 'afaf5f'), 180 | ('144', 'afaf87'), 181 | ('145', 'afafaf'), 182 | ('146', 'afafd7'), 183 | ('147', 'afafff'), 184 | ('148', 'afd700'), 185 | ('149', 'afd75f'), 186 | ('150', 'afd787'), 187 | ('151', 'afd7af'), 188 | ('152', 'afd7d7'), 189 | ('153', 'afd7ff'), 190 | ('154', 'afff00'), 191 | ('155', 'afff5f'), 192 | ('156', 'afff87'), 193 | ('157', 'afffaf'), 194 | ('158', 'afffd7'), 195 | ('159', 'afffff'), 196 | ('160', 'd70000'), 197 | ('161', 'd7005f'), 198 | ('162', 'd70087'), 199 | ('163', 'd700af'), 200 | ('164', 'd700d7'), 201 | ('165', 'd700ff'), 202 | ('166', 'd75f00'), 203 | ('167', 'd75f5f'), 204 | ('168', 'd75f87'), 205 | ('169', 'd75faf'), 206 | ('170', 'd75fd7'), 207 | ('171', 'd75fff'), 208 | ('172', 'd78700'), 209 | ('173', 'd7875f'), 210 | ('174', 'd78787'), 211 | ('175', 'd787af'), 212 | ('176', 'd787d7'), 213 | ('177', 'd787ff'), 214 | ('178', 'd7af00'), 215 | ('179', 'd7af5f'), 216 | ('180', 'd7af87'), 217 | ('181', 'd7afaf'), 218 | ('182', 'd7afd7'), 219 | ('183', 'd7afff'), 220 | ('184', 'd7d700'), 221 | ('185', 'd7d75f'), 222 | ('186', 'd7d787'), 223 | ('187', 'd7d7af'), 224 | ('188', 'd7d7d7'), 225 | ('189', 'd7d7ff'), 226 | ('190', 'd7ff00'), 227 | ('191', 'd7ff5f'), 228 | ('192', 'd7ff87'), 229 | ('193', 'd7ffaf'), 230 | ('194', 'd7ffd7'), 231 | ('195', 'd7ffff'), 232 | ('196', 'ff0000'), 233 | ('197', 'ff005f'), 234 | ('198', 'ff0087'), 235 | ('199', 'ff00af'), 236 | ('200', 'ff00d7'), 237 | ('201', 'ff00ff'), 238 | ('202', 'ff5f00'), 239 | ('203', 'ff5f5f'), 240 | ('204', 'ff5f87'), 241 | ('205', 'ff5faf'), 242 | ('206', 'ff5fd7'), 243 | ('207', 'ff5fff'), 244 | ('208', 'ff8700'), 245 | ('209', 'ff875f'), 246 | ('210', 'ff8787'), 247 | ('211', 'ff87af'), 248 | ('212', 'ff87d7'), 249 | ('213', 'ff87ff'), 250 | ('214', 'ffaf00'), 251 | ('215', 'ffaf5f'), 252 | ('216', 'ffaf87'), 253 | ('217', 'ffafaf'), 254 | ('218', 'ffafd7'), 255 | ('219', 'ffafff'), 256 | ('220', 'ffd700'), 257 | ('221', 'ffd75f'), 258 | ('222', 'ffd787'), 259 | ('223', 'ffd7af'), 260 | ('224', 'ffd7d7'), 261 | ('225', 'ffd7ff'), 262 | ('226', 'ffff00'), 263 | ('227', 'ffff5f'), 264 | ('228', 'ffff87'), 265 | ('229', 'ffffaf'), 266 | ('230', 'ffffd7'), 267 | ('231', 'ffffff'), 268 | 269 | # Gray-scale range. 270 | ('232', '080808'), 271 | ('233', '121212'), 272 | ('234', '1c1c1c'), 273 | ('235', '262626'), 274 | ('236', '303030'), 275 | ('237', '3a3a3a'), 276 | ('238', '444444'), 277 | ('239', '4e4e4e'), 278 | ('240', '585858'), 279 | ('241', '626262'), 280 | ('242', '6c6c6c'), 281 | ('243', '767676'), 282 | ('244', '808080'), 283 | ('245', '8a8a8a'), 284 | ('246', '949494'), 285 | ('247', '9e9e9e'), 286 | ('248', 'a8a8a8'), 287 | ('249', 'b2b2b2'), 288 | ('250', 'bcbcbc'), 289 | ('251', 'c6c6c6'), 290 | ('252', 'd0d0d0'), 291 | ('253', 'dadada'), 292 | ('254', 'e4e4e4'), 293 | ('255', 'eeeeee'), 294 | ] 295 | 296 | def _str2hex(hexstr): 297 | return int(hexstr, 16) 298 | 299 | def _strip_hash(rgb): 300 | # Strip leading `#` if exists. 301 | if rgb.startswith('#'): 302 | rgb = rgb.lstrip('#') 303 | return rgb 304 | 305 | def _create_dicts(): 306 | short2rgb_dict = dict(CLUT) 307 | rgb2short_dict = {} 308 | for k, v in short2rgb_dict.items(): 309 | rgb2short_dict[v] = k 310 | return rgb2short_dict, short2rgb_dict 311 | 312 | def short2rgb(short): 313 | return SHORT2RGB_DICT[short] 314 | 315 | def print_all(): 316 | """ Print all 256 xterm color codes. 317 | """ 318 | for short, rgb in CLUT: 319 | sys.stdout.write('\033[48;5;%sm%s:%s' % (short, short, rgb)) 320 | sys.stdout.write("\033[0m ") 321 | sys.stdout.write('\033[38;5;%sm%s:%s' % (short, short, rgb)) 322 | sys.stdout.write("\033[0m\n") 323 | print("Printed all codes.") 324 | print("You can translate a hex or 0-255 code by providing an argument.") 325 | 326 | def rgb2short(rgb): 327 | """ Find the closest xterm-256 approximation to the given RGB value. 328 | @param rgb: Hex code representing an RGB value, eg, 'abcdef' 329 | @returns: String between 0 and 255, compatible with xterm. 330 | >>> rgb2short('123456') 331 | ('23', '005f5f') 332 | >>> rgb2short('ffffff') 333 | ('231', 'ffffff') 334 | >>> rgb2short('0DADD6') # vimeo logo 335 | ('38', '00afd7') 336 | """ 337 | rgb = _strip_hash(rgb) 338 | incs = (0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff) 339 | # Break 6-char RGB code into 3 integer vals. 340 | parts = [ int(h, 16) for h in re.split(r'(..)(..)(..)', rgb)[1:4] ] 341 | res = [] 342 | for part in parts: 343 | i = 0 344 | while i < len(incs)-1: 345 | s, b = incs[i], incs[i+1] # smaller, bigger 346 | if s <= part <= b: 347 | s1 = abs(s - part) 348 | b1 = abs(b - part) 349 | if s1 < b1: closest = s 350 | else: closest = b 351 | res.append(closest) 352 | break 353 | i += 1 354 | #print '***', res 355 | res = ''.join([ ('%02.x' % i) for i in res ]) 356 | equiv = RGB2SHORT_DICT[ res ] 357 | #print '***', res, equiv 358 | return equiv, res 359 | 360 | RGB2SHORT_DICT, SHORT2RGB_DICT = _create_dicts() 361 | 362 | #--------------------------------------------------------------------- 363 | 364 | if __name__ == '__main__': 365 | from PIL import Image 366 | im = Image.open(sys.argv[1]) 367 | for y in range(im.size[1]): 368 | for x in range(im.size[0]): 369 | p = im.getpixel((x,y)) 370 | h = "%2x%2x%2x" % (p[0],p[1],p[2]) 371 | short, rgb = rgb2short(h) 372 | sys.stdout.write("\033[48;5;%sm " % short) 373 | sys.stdout.write("\033[0m\n") 374 | sys.stdout.write("\n") 375 | -------------------------------------------------------------------------------- /ppmtools/ppm-enlarger.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | 6 | repeat = 5 7 | spacing = 2 8 | bgcolor_t = (8,8,8) 9 | 10 | with open(sys.argv[1], "rb") as f: 11 | b = f.read() 12 | 13 | _firstn = b.index(b"\n") 14 | orig_width, orig_height = map(int, b[_firstn+1:b.index(b"\n", _firstn+1)].split(b" ")) 15 | width = orig_width*repeat+orig_width*spacing 16 | height = orig_height*repeat+orig_height*spacing 17 | 18 | _s = b"255\n" 19 | _p = b.index(_s) + len(_s) 20 | 21 | tmp = bytearray() 22 | for _i in range(orig_width*orig_height): 23 | start = _p + _i*3 24 | end = start + 3 25 | _bytes = b[start:end] 26 | tmp.extend(bytearray(bgcolor_t)*spacing) 27 | tmp.extend(bytearray(_bytes)*repeat) 28 | 29 | out = bytearray() 30 | for _w in range(height): 31 | start = _w*width*3 32 | end = start + width*3 33 | _lb = tmp[start:end] 34 | out.extend(bytearray(bgcolor_t)*(width+spacing)*spacing) 35 | out.extend((_lb+bytearray(bgcolor_t)*spacing)*repeat) 36 | height += spacing 37 | width += spacing 38 | out.extend(bytearray(bgcolor_t)*width*spacing) 39 | 40 | with open("out-mod.ppm", "wb") as f: 41 | f.write(b"P6\n"+bytes(str(width), encoding='ascii')+b" "+bytes(str(height), encoding='ascii')+b"\n255\n"+out) 42 | -------------------------------------------------------------------------------- /ppmtools/ppmtest.py: -------------------------------------------------------------------------------- 1 | from PIL import Image, ImageFile 2 | from image_to_ansi import rgb2short 3 | from sys import argv 4 | 5 | ImageFile.LOAD_TRUNCATED_IMAGES = True 6 | colors = {} 7 | filename = argv[1] if len(argv) > 1 else '/tmp/out.ppm' 8 | 9 | with open(filename, 'rb') as f: 10 | while True: 11 | s = False 12 | while not s: 13 | try: 14 | im = Image.open(f) 15 | except Exception as e: 16 | print(e) 17 | else: 18 | s = True 19 | _ppmstr = "" 20 | for y in range(im.size[1]): 21 | for x in range(im.size[0]): 22 | p = im.getpixel((x,y)) 23 | h = "%2x%2x%2x" % (p[0],p[1],p[2]) 24 | short = colors.get(h) 25 | if short is None: 26 | short = rgb2short(h)[0] 27 | colors[h] = short 28 | _ppmstr += "\033[48;5;%sm " % short 29 | _ppmstr += "\033[0m\n" 30 | _ppmstr += "\n" 31 | print(_ppmstr) 32 | 33 | -------------------------------------------------------------------------------- /ppmtools/ppmtest.sh: -------------------------------------------------------------------------------- 1 | cat /tmp/out.ppm | sed 's/\x0/ /g' | hexdump -s 14 -v -e '384/1 "%_p" "\n"' 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | ansi2html==1.8.0 2 | loguru==0.6.0 3 | Pillow==9.2.0 4 | PyYAML==6.0 5 | requests==2.28.1 6 | webcolors==1.12 7 | -------------------------------------------------------------------------------- /res/bdf/tom-thumb.bdf: -------------------------------------------------------------------------------- 1 | STARTFONT 2.1 2 | FONT -Raccoon-Fixed4x6-Medium-R-Normal--6-60-75-75-P-40-ISO10646-1 3 | SIZE 6 75 75 4 | FONTBOUNDINGBOX 3 6 0 -1 5 | STARTPROPERTIES 25 6 | FONT_NAME "Fixed4x6" 7 | FONT_ASCENT 5 8 | FONT_DESCENT 1 9 | QUAD_WIDTH 6 10 | X_HEIGHT 3 11 | CAP_HEIGHT 4 12 | FONTNAME_REGISTRY "" 13 | FAMILY_NAME "Fixed4x6" 14 | FOUNDRY "Raccoon" 15 | WEIGHT_NAME "Medium" 16 | SETWIDTH_NAME "Normal" 17 | SLANT "R" 18 | ADD_STYLE_NAME "" 19 | PIXEL_SIZE 6 20 | POINT_SIZE 60 21 | RESOLUTION_X 75 22 | RESOLUTION_Y 75 23 | RESOLUTION 75 24 | SPACING "P" 25 | AVERAGE_WIDTH 40 26 | CHARSET_REGISTRY "ISO10646" 27 | CHARSET_ENCODING "1" 28 | CHARSET_COLLECTIONS "ASCII ISOLatin1Encoding ISO10646-1" 29 | FULL_NAME "Fixed4x6" 30 | COPYRIGHT """""MIT""""" 31 | ENDPROPERTIES 32 | CHARS 204 33 | STARTCHAR space 34 | ENCODING 32 35 | SWIDTH 1000 0 36 | DWIDTH 4 0 37 | BBX 1 1 3 4 38 | BITMAP 39 | 00 40 | ENDCHAR 41 | STARTCHAR exclam 42 | ENCODING 33 43 | SWIDTH 1000 0 44 | DWIDTH 4 0 45 | BBX 1 5 1 0 46 | BITMAP 47 | 80 48 | 80 49 | 80 50 | 00 51 | 80 52 | ENDCHAR 53 | STARTCHAR quotedbl 54 | ENCODING 34 55 | SWIDTH 1000 0 56 | DWIDTH 4 0 57 | BBX 3 2 0 3 58 | BITMAP 59 | A0 60 | A0 61 | ENDCHAR 62 | STARTCHAR numbersign 63 | ENCODING 35 64 | SWIDTH 1000 0 65 | DWIDTH 4 0 66 | BBX 3 5 0 0 67 | BITMAP 68 | A0 69 | E0 70 | A0 71 | E0 72 | A0 73 | ENDCHAR 74 | STARTCHAR dollar 75 | ENCODING 36 76 | SWIDTH 1000 0 77 | DWIDTH 4 0 78 | BBX 3 5 0 0 79 | BITMAP 80 | 60 81 | C0 82 | 60 83 | C0 84 | 40 85 | ENDCHAR 86 | STARTCHAR percent 87 | ENCODING 37 88 | SWIDTH 1000 0 89 | DWIDTH 4 0 90 | BBX 3 5 0 0 91 | BITMAP 92 | 80 93 | 20 94 | 40 95 | 80 96 | 20 97 | ENDCHAR 98 | STARTCHAR ampersand 99 | ENCODING 38 100 | SWIDTH 1000 0 101 | DWIDTH 4 0 102 | BBX 3 5 0 0 103 | BITMAP 104 | C0 105 | C0 106 | E0 107 | A0 108 | 60 109 | ENDCHAR 110 | STARTCHAR quotesingle 111 | ENCODING 39 112 | SWIDTH 1000 0 113 | DWIDTH 4 0 114 | BBX 1 2 1 3 115 | BITMAP 116 | 80 117 | 80 118 | ENDCHAR 119 | STARTCHAR parenleft 120 | ENCODING 40 121 | SWIDTH 1000 0 122 | DWIDTH 4 0 123 | BBX 2 5 1 0 124 | BITMAP 125 | 40 126 | 80 127 | 80 128 | 80 129 | 40 130 | ENDCHAR 131 | STARTCHAR parenright 132 | ENCODING 41 133 | SWIDTH 1000 0 134 | DWIDTH 4 0 135 | BBX 2 5 0 0 136 | BITMAP 137 | 80 138 | 40 139 | 40 140 | 40 141 | 80 142 | ENDCHAR 143 | STARTCHAR asterisk 144 | ENCODING 42 145 | SWIDTH 1000 0 146 | DWIDTH 4 0 147 | BBX 3 3 0 2 148 | BITMAP 149 | A0 150 | 40 151 | A0 152 | ENDCHAR 153 | STARTCHAR plus 154 | ENCODING 43 155 | SWIDTH 1000 0 156 | DWIDTH 4 0 157 | BBX 3 3 0 1 158 | BITMAP 159 | 40 160 | E0 161 | 40 162 | ENDCHAR 163 | STARTCHAR comma 164 | ENCODING 44 165 | SWIDTH 1000 0 166 | DWIDTH 4 0 167 | BBX 2 2 0 0 168 | BITMAP 169 | 40 170 | 80 171 | ENDCHAR 172 | STARTCHAR hyphen 173 | ENCODING 45 174 | SWIDTH 1000 0 175 | DWIDTH 4 0 176 | BBX 3 1 0 2 177 | BITMAP 178 | E0 179 | ENDCHAR 180 | STARTCHAR period 181 | ENCODING 46 182 | SWIDTH 1000 0 183 | DWIDTH 4 0 184 | BBX 1 1 1 0 185 | BITMAP 186 | 80 187 | ENDCHAR 188 | STARTCHAR slash 189 | ENCODING 47 190 | SWIDTH 1000 0 191 | DWIDTH 4 0 192 | BBX 3 5 0 0 193 | BITMAP 194 | 20 195 | 20 196 | 40 197 | 80 198 | 80 199 | ENDCHAR 200 | STARTCHAR zero 201 | ENCODING 48 202 | SWIDTH 1000 0 203 | DWIDTH 4 0 204 | BBX 3 5 0 0 205 | BITMAP 206 | 60 207 | A0 208 | A0 209 | A0 210 | C0 211 | ENDCHAR 212 | STARTCHAR one 213 | ENCODING 49 214 | SWIDTH 1000 0 215 | DWIDTH 4 0 216 | BBX 2 5 0 0 217 | BITMAP 218 | 40 219 | C0 220 | 40 221 | 40 222 | 40 223 | ENDCHAR 224 | STARTCHAR two 225 | ENCODING 50 226 | SWIDTH 1000 0 227 | DWIDTH 4 0 228 | BBX 3 5 0 0 229 | BITMAP 230 | C0 231 | 20 232 | 40 233 | 80 234 | E0 235 | ENDCHAR 236 | STARTCHAR three 237 | ENCODING 51 238 | SWIDTH 1000 0 239 | DWIDTH 4 0 240 | BBX 3 5 0 0 241 | BITMAP 242 | C0 243 | 20 244 | 40 245 | 20 246 | C0 247 | ENDCHAR 248 | STARTCHAR four 249 | ENCODING 52 250 | SWIDTH 1000 0 251 | DWIDTH 4 0 252 | BBX 3 5 0 0 253 | BITMAP 254 | A0 255 | A0 256 | E0 257 | 20 258 | 20 259 | ENDCHAR 260 | STARTCHAR five 261 | ENCODING 53 262 | SWIDTH 1000 0 263 | DWIDTH 4 0 264 | BBX 3 5 0 0 265 | BITMAP 266 | E0 267 | 80 268 | C0 269 | 20 270 | C0 271 | ENDCHAR 272 | STARTCHAR six 273 | ENCODING 54 274 | SWIDTH 1000 0 275 | DWIDTH 4 0 276 | BBX 3 5 0 0 277 | BITMAP 278 | 60 279 | 80 280 | E0 281 | A0 282 | E0 283 | ENDCHAR 284 | STARTCHAR seven 285 | ENCODING 55 286 | SWIDTH 1000 0 287 | DWIDTH 4 0 288 | BBX 3 5 0 0 289 | BITMAP 290 | E0 291 | 20 292 | 40 293 | 80 294 | 80 295 | ENDCHAR 296 | STARTCHAR eight 297 | ENCODING 56 298 | SWIDTH 1000 0 299 | DWIDTH 4 0 300 | BBX 3 5 0 0 301 | BITMAP 302 | E0 303 | A0 304 | E0 305 | A0 306 | E0 307 | ENDCHAR 308 | STARTCHAR nine 309 | ENCODING 57 310 | SWIDTH 1000 0 311 | DWIDTH 4 0 312 | BBX 3 5 0 0 313 | BITMAP 314 | E0 315 | A0 316 | E0 317 | 20 318 | C0 319 | ENDCHAR 320 | STARTCHAR colon 321 | ENCODING 58 322 | SWIDTH 1000 0 323 | DWIDTH 4 0 324 | BBX 1 3 1 1 325 | BITMAP 326 | 80 327 | 00 328 | 80 329 | ENDCHAR 330 | STARTCHAR semicolon 331 | ENCODING 59 332 | SWIDTH 1000 0 333 | DWIDTH 4 0 334 | BBX 2 4 0 0 335 | BITMAP 336 | 40 337 | 00 338 | 40 339 | 80 340 | ENDCHAR 341 | STARTCHAR less 342 | ENCODING 60 343 | SWIDTH 1000 0 344 | DWIDTH 4 0 345 | BBX 3 5 0 0 346 | BITMAP 347 | 20 348 | 40 349 | 80 350 | 40 351 | 20 352 | ENDCHAR 353 | STARTCHAR equal 354 | ENCODING 61 355 | SWIDTH 1000 0 356 | DWIDTH 4 0 357 | BBX 3 3 0 1 358 | BITMAP 359 | E0 360 | 00 361 | E0 362 | ENDCHAR 363 | STARTCHAR greater 364 | ENCODING 62 365 | SWIDTH 1000 0 366 | DWIDTH 4 0 367 | BBX 3 5 0 0 368 | BITMAP 369 | 80 370 | 40 371 | 20 372 | 40 373 | 80 374 | ENDCHAR 375 | STARTCHAR question 376 | ENCODING 63 377 | SWIDTH 1000 0 378 | DWIDTH 4 0 379 | BBX 3 5 0 0 380 | BITMAP 381 | E0 382 | 20 383 | 40 384 | 00 385 | 40 386 | ENDCHAR 387 | STARTCHAR at 388 | ENCODING 64 389 | SWIDTH 1000 0 390 | DWIDTH 4 0 391 | BBX 3 5 0 0 392 | BITMAP 393 | 40 394 | A0 395 | E0 396 | 80 397 | 60 398 | ENDCHAR 399 | STARTCHAR A 400 | ENCODING 65 401 | SWIDTH 1000 0 402 | DWIDTH 4 0 403 | BBX 3 5 0 0 404 | BITMAP 405 | 40 406 | A0 407 | E0 408 | A0 409 | A0 410 | ENDCHAR 411 | STARTCHAR B 412 | ENCODING 66 413 | SWIDTH 1000 0 414 | DWIDTH 4 0 415 | BBX 3 5 0 0 416 | BITMAP 417 | C0 418 | A0 419 | C0 420 | A0 421 | C0 422 | ENDCHAR 423 | STARTCHAR C 424 | ENCODING 67 425 | SWIDTH 1000 0 426 | DWIDTH 4 0 427 | BBX 3 5 0 0 428 | BITMAP 429 | 60 430 | 80 431 | 80 432 | 80 433 | 60 434 | ENDCHAR 435 | STARTCHAR D 436 | ENCODING 68 437 | SWIDTH 1000 0 438 | DWIDTH 4 0 439 | BBX 3 5 0 0 440 | BITMAP 441 | C0 442 | A0 443 | A0 444 | A0 445 | C0 446 | ENDCHAR 447 | STARTCHAR E 448 | ENCODING 69 449 | SWIDTH 1000 0 450 | DWIDTH 4 0 451 | BBX 3 5 0 0 452 | BITMAP 453 | E0 454 | 80 455 | E0 456 | 80 457 | E0 458 | ENDCHAR 459 | STARTCHAR F 460 | ENCODING 70 461 | SWIDTH 1000 0 462 | DWIDTH 4 0 463 | BBX 3 5 0 0 464 | BITMAP 465 | E0 466 | 80 467 | E0 468 | 80 469 | 80 470 | ENDCHAR 471 | STARTCHAR G 472 | ENCODING 71 473 | SWIDTH 1000 0 474 | DWIDTH 4 0 475 | BBX 3 5 0 0 476 | BITMAP 477 | 60 478 | 80 479 | E0 480 | A0 481 | 60 482 | ENDCHAR 483 | STARTCHAR H 484 | ENCODING 72 485 | SWIDTH 1000 0 486 | DWIDTH 4 0 487 | BBX 3 5 0 0 488 | BITMAP 489 | A0 490 | A0 491 | E0 492 | A0 493 | A0 494 | ENDCHAR 495 | STARTCHAR I 496 | ENCODING 73 497 | SWIDTH 1000 0 498 | DWIDTH 4 0 499 | BBX 3 5 0 0 500 | BITMAP 501 | E0 502 | 40 503 | 40 504 | 40 505 | E0 506 | ENDCHAR 507 | STARTCHAR J 508 | ENCODING 74 509 | SWIDTH 1000 0 510 | DWIDTH 4 0 511 | BBX 3 5 0 0 512 | BITMAP 513 | 20 514 | 20 515 | 20 516 | A0 517 | 40 518 | ENDCHAR 519 | STARTCHAR K 520 | ENCODING 75 521 | SWIDTH 1000 0 522 | DWIDTH 4 0 523 | BBX 3 5 0 0 524 | BITMAP 525 | A0 526 | A0 527 | C0 528 | A0 529 | A0 530 | ENDCHAR 531 | STARTCHAR L 532 | ENCODING 76 533 | SWIDTH 1000 0 534 | DWIDTH 4 0 535 | BBX 3 5 0 0 536 | BITMAP 537 | 80 538 | 80 539 | 80 540 | 80 541 | E0 542 | ENDCHAR 543 | STARTCHAR M 544 | ENCODING 77 545 | SWIDTH 1000 0 546 | DWIDTH 4 0 547 | BBX 3 5 0 0 548 | BITMAP 549 | A0 550 | E0 551 | E0 552 | A0 553 | A0 554 | ENDCHAR 555 | STARTCHAR N 556 | ENCODING 78 557 | SWIDTH 1000 0 558 | DWIDTH 4 0 559 | BBX 3 5 0 0 560 | BITMAP 561 | A0 562 | E0 563 | E0 564 | E0 565 | A0 566 | ENDCHAR 567 | STARTCHAR O 568 | ENCODING 79 569 | SWIDTH 1000 0 570 | DWIDTH 4 0 571 | BBX 3 5 0 0 572 | BITMAP 573 | 40 574 | A0 575 | A0 576 | A0 577 | 40 578 | ENDCHAR 579 | STARTCHAR P 580 | ENCODING 80 581 | SWIDTH 1000 0 582 | DWIDTH 4 0 583 | BBX 3 5 0 0 584 | BITMAP 585 | C0 586 | A0 587 | C0 588 | 80 589 | 80 590 | ENDCHAR 591 | STARTCHAR Q 592 | ENCODING 81 593 | SWIDTH 1000 0 594 | DWIDTH 4 0 595 | BBX 3 5 0 0 596 | BITMAP 597 | 40 598 | A0 599 | A0 600 | E0 601 | 60 602 | ENDCHAR 603 | STARTCHAR R 604 | ENCODING 82 605 | SWIDTH 1000 0 606 | DWIDTH 4 0 607 | BBX 3 5 0 0 608 | BITMAP 609 | C0 610 | A0 611 | E0 612 | C0 613 | A0 614 | ENDCHAR 615 | STARTCHAR S 616 | ENCODING 83 617 | SWIDTH 1000 0 618 | DWIDTH 4 0 619 | BBX 3 5 0 0 620 | BITMAP 621 | 60 622 | 80 623 | 40 624 | 20 625 | C0 626 | ENDCHAR 627 | STARTCHAR T 628 | ENCODING 84 629 | SWIDTH 1000 0 630 | DWIDTH 4 0 631 | BBX 3 5 0 0 632 | BITMAP 633 | E0 634 | 40 635 | 40 636 | 40 637 | 40 638 | ENDCHAR 639 | STARTCHAR U 640 | ENCODING 85 641 | SWIDTH 1000 0 642 | DWIDTH 4 0 643 | BBX 3 5 0 0 644 | BITMAP 645 | A0 646 | A0 647 | A0 648 | A0 649 | 60 650 | ENDCHAR 651 | STARTCHAR V 652 | ENCODING 86 653 | SWIDTH 1000 0 654 | DWIDTH 4 0 655 | BBX 3 5 0 0 656 | BITMAP 657 | A0 658 | A0 659 | A0 660 | 40 661 | 40 662 | ENDCHAR 663 | STARTCHAR W 664 | ENCODING 87 665 | SWIDTH 1000 0 666 | DWIDTH 4 0 667 | BBX 3 5 0 0 668 | BITMAP 669 | A0 670 | A0 671 | E0 672 | E0 673 | A0 674 | ENDCHAR 675 | STARTCHAR X 676 | ENCODING 88 677 | SWIDTH 1000 0 678 | DWIDTH 4 0 679 | BBX 3 5 0 0 680 | BITMAP 681 | A0 682 | A0 683 | 40 684 | A0 685 | A0 686 | ENDCHAR 687 | STARTCHAR Y 688 | ENCODING 89 689 | SWIDTH 1000 0 690 | DWIDTH 4 0 691 | BBX 3 5 0 0 692 | BITMAP 693 | A0 694 | A0 695 | 40 696 | 40 697 | 40 698 | ENDCHAR 699 | STARTCHAR Z 700 | ENCODING 90 701 | SWIDTH 1000 0 702 | DWIDTH 4 0 703 | BBX 3 5 0 0 704 | BITMAP 705 | E0 706 | 20 707 | 40 708 | 80 709 | E0 710 | ENDCHAR 711 | STARTCHAR bracketleft 712 | ENCODING 91 713 | SWIDTH 1000 0 714 | DWIDTH 4 0 715 | BBX 3 5 0 0 716 | BITMAP 717 | E0 718 | 80 719 | 80 720 | 80 721 | E0 722 | ENDCHAR 723 | STARTCHAR backslash 724 | ENCODING 92 725 | SWIDTH 1000 0 726 | DWIDTH 4 0 727 | BBX 3 3 0 1 728 | BITMAP 729 | 80 730 | 40 731 | 20 732 | ENDCHAR 733 | STARTCHAR bracketright 734 | ENCODING 93 735 | SWIDTH 1000 0 736 | DWIDTH 4 0 737 | BBX 3 5 0 0 738 | BITMAP 739 | E0 740 | 20 741 | 20 742 | 20 743 | E0 744 | ENDCHAR 745 | STARTCHAR asciicircum 746 | ENCODING 94 747 | SWIDTH 1000 0 748 | DWIDTH 4 0 749 | BBX 3 2 0 3 750 | BITMAP 751 | 40 752 | A0 753 | ENDCHAR 754 | STARTCHAR underscore 755 | ENCODING 95 756 | SWIDTH 1000 0 757 | DWIDTH 4 0 758 | BBX 3 1 0 0 759 | BITMAP 760 | E0 761 | ENDCHAR 762 | STARTCHAR grave 763 | ENCODING 96 764 | SWIDTH 1000 0 765 | DWIDTH 4 0 766 | BBX 2 2 0 3 767 | BITMAP 768 | 80 769 | 40 770 | ENDCHAR 771 | STARTCHAR a 772 | ENCODING 97 773 | SWIDTH 1000 0 774 | DWIDTH 4 0 775 | BBX 3 4 0 0 776 | BITMAP 777 | C0 778 | 60 779 | A0 780 | E0 781 | ENDCHAR 782 | STARTCHAR b 783 | ENCODING 98 784 | SWIDTH 1000 0 785 | DWIDTH 4 0 786 | BBX 3 5 0 0 787 | BITMAP 788 | 80 789 | C0 790 | A0 791 | A0 792 | C0 793 | ENDCHAR 794 | STARTCHAR c 795 | ENCODING 99 796 | SWIDTH 1000 0 797 | DWIDTH 4 0 798 | BBX 3 4 0 0 799 | BITMAP 800 | 60 801 | 80 802 | 80 803 | 60 804 | ENDCHAR 805 | STARTCHAR d 806 | ENCODING 100 807 | SWIDTH 1000 0 808 | DWIDTH 4 0 809 | BBX 3 5 0 0 810 | BITMAP 811 | 20 812 | 60 813 | A0 814 | A0 815 | 60 816 | ENDCHAR 817 | STARTCHAR e 818 | ENCODING 101 819 | SWIDTH 1000 0 820 | DWIDTH 4 0 821 | BBX 3 4 0 0 822 | BITMAP 823 | 60 824 | A0 825 | C0 826 | 60 827 | ENDCHAR 828 | STARTCHAR f 829 | ENCODING 102 830 | SWIDTH 1000 0 831 | DWIDTH 4 0 832 | BBX 3 5 0 0 833 | BITMAP 834 | 20 835 | 40 836 | E0 837 | 40 838 | 40 839 | ENDCHAR 840 | STARTCHAR g 841 | ENCODING 103 842 | SWIDTH 1000 0 843 | DWIDTH 4 0 844 | BBX 3 5 0 -1 845 | BITMAP 846 | 60 847 | A0 848 | E0 849 | 20 850 | 40 851 | ENDCHAR 852 | STARTCHAR h 853 | ENCODING 104 854 | SWIDTH 1000 0 855 | DWIDTH 4 0 856 | BBX 3 5 0 0 857 | BITMAP 858 | 80 859 | C0 860 | A0 861 | A0 862 | A0 863 | ENDCHAR 864 | STARTCHAR i 865 | ENCODING 105 866 | SWIDTH 1000 0 867 | DWIDTH 4 0 868 | BBX 1 5 1 0 869 | BITMAP 870 | 80 871 | 00 872 | 80 873 | 80 874 | 80 875 | ENDCHAR 876 | STARTCHAR j 877 | ENCODING 106 878 | SWIDTH 1000 0 879 | DWIDTH 4 0 880 | BBX 3 6 0 -1 881 | BITMAP 882 | 20 883 | 00 884 | 20 885 | 20 886 | A0 887 | 40 888 | ENDCHAR 889 | STARTCHAR k 890 | ENCODING 107 891 | SWIDTH 1000 0 892 | DWIDTH 4 0 893 | BBX 3 5 0 0 894 | BITMAP 895 | 80 896 | A0 897 | C0 898 | C0 899 | A0 900 | ENDCHAR 901 | STARTCHAR l 902 | ENCODING 108 903 | SWIDTH 1000 0 904 | DWIDTH 4 0 905 | BBX 3 5 0 0 906 | BITMAP 907 | C0 908 | 40 909 | 40 910 | 40 911 | E0 912 | ENDCHAR 913 | STARTCHAR m 914 | ENCODING 109 915 | SWIDTH 1000 0 916 | DWIDTH 4 0 917 | BBX 3 4 0 0 918 | BITMAP 919 | E0 920 | E0 921 | E0 922 | A0 923 | ENDCHAR 924 | STARTCHAR n 925 | ENCODING 110 926 | SWIDTH 1000 0 927 | DWIDTH 4 0 928 | BBX 3 4 0 0 929 | BITMAP 930 | C0 931 | A0 932 | A0 933 | A0 934 | ENDCHAR 935 | STARTCHAR o 936 | ENCODING 111 937 | SWIDTH 1000 0 938 | DWIDTH 4 0 939 | BBX 3 4 0 0 940 | BITMAP 941 | 40 942 | A0 943 | A0 944 | 40 945 | ENDCHAR 946 | STARTCHAR p 947 | ENCODING 112 948 | SWIDTH 1000 0 949 | DWIDTH 4 0 950 | BBX 3 5 0 -1 951 | BITMAP 952 | C0 953 | A0 954 | A0 955 | C0 956 | 80 957 | ENDCHAR 958 | STARTCHAR q 959 | ENCODING 113 960 | SWIDTH 1000 0 961 | DWIDTH 4 0 962 | BBX 3 5 0 -1 963 | BITMAP 964 | 60 965 | A0 966 | A0 967 | 60 968 | 20 969 | ENDCHAR 970 | STARTCHAR r 971 | ENCODING 114 972 | SWIDTH 1000 0 973 | DWIDTH 4 0 974 | BBX 3 4 0 0 975 | BITMAP 976 | 60 977 | 80 978 | 80 979 | 80 980 | ENDCHAR 981 | STARTCHAR s 982 | ENCODING 115 983 | SWIDTH 1000 0 984 | DWIDTH 4 0 985 | BBX 3 4 0 0 986 | BITMAP 987 | 60 988 | C0 989 | 60 990 | C0 991 | ENDCHAR 992 | STARTCHAR t 993 | ENCODING 116 994 | SWIDTH 1000 0 995 | DWIDTH 4 0 996 | BBX 3 5 0 0 997 | BITMAP 998 | 40 999 | E0 1000 | 40 1001 | 40 1002 | 60 1003 | ENDCHAR 1004 | STARTCHAR u 1005 | ENCODING 117 1006 | SWIDTH 1000 0 1007 | DWIDTH 4 0 1008 | BBX 3 4 0 0 1009 | BITMAP 1010 | A0 1011 | A0 1012 | A0 1013 | 60 1014 | ENDCHAR 1015 | STARTCHAR v 1016 | ENCODING 118 1017 | SWIDTH 1000 0 1018 | DWIDTH 4 0 1019 | BBX 3 4 0 0 1020 | BITMAP 1021 | A0 1022 | A0 1023 | E0 1024 | 40 1025 | ENDCHAR 1026 | STARTCHAR w 1027 | ENCODING 119 1028 | SWIDTH 1000 0 1029 | DWIDTH 4 0 1030 | BBX 3 4 0 0 1031 | BITMAP 1032 | A0 1033 | E0 1034 | E0 1035 | E0 1036 | ENDCHAR 1037 | STARTCHAR x 1038 | ENCODING 120 1039 | SWIDTH 1000 0 1040 | DWIDTH 4 0 1041 | BBX 3 4 0 0 1042 | BITMAP 1043 | A0 1044 | 40 1045 | 40 1046 | A0 1047 | ENDCHAR 1048 | STARTCHAR y 1049 | ENCODING 121 1050 | SWIDTH 1000 0 1051 | DWIDTH 4 0 1052 | BBX 3 5 0 -1 1053 | BITMAP 1054 | A0 1055 | A0 1056 | 60 1057 | 20 1058 | 40 1059 | ENDCHAR 1060 | STARTCHAR z 1061 | ENCODING 122 1062 | SWIDTH 1000 0 1063 | DWIDTH 4 0 1064 | BBX 3 4 0 0 1065 | BITMAP 1066 | E0 1067 | 60 1068 | C0 1069 | E0 1070 | ENDCHAR 1071 | STARTCHAR braceleft 1072 | ENCODING 123 1073 | SWIDTH 1000 0 1074 | DWIDTH 4 0 1075 | BBX 3 5 0 0 1076 | BITMAP 1077 | 60 1078 | 40 1079 | 80 1080 | 40 1081 | 60 1082 | ENDCHAR 1083 | STARTCHAR bar 1084 | ENCODING 124 1085 | SWIDTH 1000 0 1086 | DWIDTH 4 0 1087 | BBX 1 5 1 0 1088 | BITMAP 1089 | 80 1090 | 80 1091 | 00 1092 | 80 1093 | 80 1094 | ENDCHAR 1095 | STARTCHAR braceright 1096 | ENCODING 125 1097 | SWIDTH 1000 0 1098 | DWIDTH 4 0 1099 | BBX 3 5 0 0 1100 | BITMAP 1101 | C0 1102 | 40 1103 | 20 1104 | 40 1105 | C0 1106 | ENDCHAR 1107 | STARTCHAR asciitilde 1108 | ENCODING 126 1109 | SWIDTH 1000 0 1110 | DWIDTH 4 0 1111 | BBX 3 2 0 3 1112 | BITMAP 1113 | 60 1114 | C0 1115 | ENDCHAR 1116 | STARTCHAR exclamdown 1117 | ENCODING 161 1118 | SWIDTH 1000 0 1119 | DWIDTH 4 0 1120 | BBX 1 5 1 0 1121 | BITMAP 1122 | 80 1123 | 00 1124 | 80 1125 | 80 1126 | 80 1127 | ENDCHAR 1128 | STARTCHAR cent 1129 | ENCODING 162 1130 | SWIDTH 1000 0 1131 | DWIDTH 4 0 1132 | BBX 3 5 0 0 1133 | BITMAP 1134 | 40 1135 | E0 1136 | 80 1137 | E0 1138 | 40 1139 | ENDCHAR 1140 | STARTCHAR sterling 1141 | ENCODING 163 1142 | SWIDTH 1000 0 1143 | DWIDTH 4 0 1144 | BBX 3 5 0 0 1145 | BITMAP 1146 | 60 1147 | 40 1148 | E0 1149 | 40 1150 | E0 1151 | ENDCHAR 1152 | STARTCHAR currency 1153 | ENCODING 164 1154 | SWIDTH 1000 0 1155 | DWIDTH 4 0 1156 | BBX 3 5 0 0 1157 | BITMAP 1158 | A0 1159 | 40 1160 | E0 1161 | 40 1162 | A0 1163 | ENDCHAR 1164 | STARTCHAR yen 1165 | ENCODING 165 1166 | SWIDTH 1000 0 1167 | DWIDTH 4 0 1168 | BBX 3 5 0 0 1169 | BITMAP 1170 | A0 1171 | A0 1172 | 40 1173 | E0 1174 | 40 1175 | ENDCHAR 1176 | STARTCHAR brokenbar 1177 | ENCODING 166 1178 | SWIDTH 1000 0 1179 | DWIDTH 4 0 1180 | BBX 1 5 1 0 1181 | BITMAP 1182 | 80 1183 | 80 1184 | 00 1185 | 80 1186 | 80 1187 | ENDCHAR 1188 | STARTCHAR section 1189 | ENCODING 167 1190 | SWIDTH 1000 0 1191 | DWIDTH 4 0 1192 | BBX 3 5 0 0 1193 | BITMAP 1194 | 60 1195 | 40 1196 | A0 1197 | 40 1198 | C0 1199 | ENDCHAR 1200 | STARTCHAR dieresis 1201 | ENCODING 168 1202 | SWIDTH 1000 0 1203 | DWIDTH 4 0 1204 | BBX 3 1 0 4 1205 | BITMAP 1206 | A0 1207 | ENDCHAR 1208 | STARTCHAR copyright 1209 | ENCODING 169 1210 | SWIDTH 1000 0 1211 | DWIDTH 4 0 1212 | BBX 3 3 0 2 1213 | BITMAP 1214 | 60 1215 | 80 1216 | 60 1217 | ENDCHAR 1218 | STARTCHAR ordfeminine 1219 | ENCODING 170 1220 | SWIDTH 1000 0 1221 | DWIDTH 4 0 1222 | BBX 3 5 0 0 1223 | BITMAP 1224 | 60 1225 | A0 1226 | E0 1227 | 00 1228 | E0 1229 | ENDCHAR 1230 | STARTCHAR guillemotleft 1231 | ENCODING 171 1232 | SWIDTH 1000 0 1233 | DWIDTH 4 0 1234 | BBX 2 3 0 2 1235 | BITMAP 1236 | 40 1237 | 80 1238 | 40 1239 | ENDCHAR 1240 | STARTCHAR logicalnot 1241 | ENCODING 172 1242 | SWIDTH 1000 0 1243 | DWIDTH 4 0 1244 | BBX 3 2 0 2 1245 | BITMAP 1246 | E0 1247 | 20 1248 | ENDCHAR 1249 | STARTCHAR softhyphen 1250 | ENCODING 173 1251 | SWIDTH 1000 0 1252 | DWIDTH 4 0 1253 | BBX 2 1 0 2 1254 | BITMAP 1255 | C0 1256 | ENDCHAR 1257 | STARTCHAR registered 1258 | ENCODING 174 1259 | SWIDTH 1000 0 1260 | DWIDTH 4 0 1261 | BBX 3 3 0 2 1262 | BITMAP 1263 | C0 1264 | C0 1265 | A0 1266 | ENDCHAR 1267 | STARTCHAR macron 1268 | ENCODING 175 1269 | SWIDTH 1000 0 1270 | DWIDTH 4 0 1271 | BBX 3 1 0 4 1272 | BITMAP 1273 | E0 1274 | ENDCHAR 1275 | STARTCHAR degree 1276 | ENCODING 176 1277 | SWIDTH 1000 0 1278 | DWIDTH 4 0 1279 | BBX 3 3 0 2 1280 | BITMAP 1281 | 40 1282 | A0 1283 | 40 1284 | ENDCHAR 1285 | STARTCHAR plusminus 1286 | ENCODING 177 1287 | SWIDTH 1000 0 1288 | DWIDTH 4 0 1289 | BBX 3 5 0 0 1290 | BITMAP 1291 | 40 1292 | E0 1293 | 40 1294 | 00 1295 | E0 1296 | ENDCHAR 1297 | STARTCHAR twosuperior 1298 | ENCODING 178 1299 | SWIDTH 1000 0 1300 | DWIDTH 4 0 1301 | BBX 3 3 0 2 1302 | BITMAP 1303 | C0 1304 | 40 1305 | 60 1306 | ENDCHAR 1307 | STARTCHAR threesuperior 1308 | ENCODING 179 1309 | SWIDTH 1000 0 1310 | DWIDTH 4 0 1311 | BBX 3 3 0 2 1312 | BITMAP 1313 | E0 1314 | 60 1315 | E0 1316 | ENDCHAR 1317 | STARTCHAR acute 1318 | ENCODING 180 1319 | SWIDTH 1000 0 1320 | DWIDTH 4 0 1321 | BBX 2 2 1 3 1322 | BITMAP 1323 | 40 1324 | 80 1325 | ENDCHAR 1326 | STARTCHAR mu 1327 | ENCODING 181 1328 | SWIDTH 1000 0 1329 | DWIDTH 4 0 1330 | BBX 3 5 0 0 1331 | BITMAP 1332 | A0 1333 | A0 1334 | A0 1335 | C0 1336 | 80 1337 | ENDCHAR 1338 | STARTCHAR paragraph 1339 | ENCODING 182 1340 | SWIDTH 1000 0 1341 | DWIDTH 4 0 1342 | BBX 3 5 0 0 1343 | BITMAP 1344 | 60 1345 | A0 1346 | 60 1347 | 60 1348 | 60 1349 | ENDCHAR 1350 | STARTCHAR periodcentered 1351 | ENCODING 183 1352 | SWIDTH 1000 0 1353 | DWIDTH 4 0 1354 | BBX 3 3 0 1 1355 | BITMAP 1356 | E0 1357 | E0 1358 | E0 1359 | ENDCHAR 1360 | STARTCHAR cedilla 1361 | ENCODING 184 1362 | SWIDTH 1000 0 1363 | DWIDTH 4 0 1364 | BBX 3 3 0 0 1365 | BITMAP 1366 | 40 1367 | 20 1368 | C0 1369 | ENDCHAR 1370 | STARTCHAR onesuperior 1371 | ENCODING 185 1372 | SWIDTH 1000 0 1373 | DWIDTH 4 0 1374 | BBX 1 3 1 2 1375 | BITMAP 1376 | 80 1377 | 80 1378 | 80 1379 | ENDCHAR 1380 | STARTCHAR ordmasculine 1381 | ENCODING 186 1382 | SWIDTH 1000 0 1383 | DWIDTH 4 0 1384 | BBX 3 5 0 0 1385 | BITMAP 1386 | 40 1387 | A0 1388 | 40 1389 | 00 1390 | E0 1391 | ENDCHAR 1392 | STARTCHAR guillemotright 1393 | ENCODING 187 1394 | SWIDTH 1000 0 1395 | DWIDTH 4 0 1396 | BBX 2 3 1 2 1397 | BITMAP 1398 | 80 1399 | 40 1400 | 80 1401 | ENDCHAR 1402 | STARTCHAR onequarter 1403 | ENCODING 188 1404 | SWIDTH 1000 0 1405 | DWIDTH 4 0 1406 | BBX 3 5 0 0 1407 | BITMAP 1408 | 80 1409 | 80 1410 | 00 1411 | 60 1412 | 20 1413 | ENDCHAR 1414 | STARTCHAR onehalf 1415 | ENCODING 189 1416 | SWIDTH 1000 0 1417 | DWIDTH 4 0 1418 | BBX 3 5 0 0 1419 | BITMAP 1420 | 80 1421 | 80 1422 | 00 1423 | C0 1424 | 60 1425 | ENDCHAR 1426 | STARTCHAR threequarters 1427 | ENCODING 190 1428 | SWIDTH 1000 0 1429 | DWIDTH 4 0 1430 | BBX 3 5 0 0 1431 | BITMAP 1432 | C0 1433 | C0 1434 | 00 1435 | 60 1436 | 20 1437 | ENDCHAR 1438 | STARTCHAR questiondown 1439 | ENCODING 191 1440 | SWIDTH 1000 0 1441 | DWIDTH 4 0 1442 | BBX 3 5 0 0 1443 | BITMAP 1444 | 40 1445 | 00 1446 | 40 1447 | 80 1448 | E0 1449 | ENDCHAR 1450 | STARTCHAR Agrave 1451 | ENCODING 192 1452 | SWIDTH 1000 0 1453 | DWIDTH 4 0 1454 | BBX 3 5 0 0 1455 | BITMAP 1456 | 40 1457 | 20 1458 | 40 1459 | E0 1460 | A0 1461 | ENDCHAR 1462 | STARTCHAR Aacute 1463 | ENCODING 193 1464 | SWIDTH 1000 0 1465 | DWIDTH 4 0 1466 | BBX 3 5 0 0 1467 | BITMAP 1468 | 40 1469 | 80 1470 | 40 1471 | E0 1472 | A0 1473 | ENDCHAR 1474 | STARTCHAR Acircumflex 1475 | ENCODING 194 1476 | SWIDTH 1000 0 1477 | DWIDTH 4 0 1478 | BBX 3 5 0 0 1479 | BITMAP 1480 | E0 1481 | 00 1482 | 40 1483 | E0 1484 | A0 1485 | ENDCHAR 1486 | STARTCHAR Atilde 1487 | ENCODING 195 1488 | SWIDTH 1000 0 1489 | DWIDTH 4 0 1490 | BBX 3 5 0 0 1491 | BITMAP 1492 | 60 1493 | C0 1494 | 40 1495 | E0 1496 | A0 1497 | ENDCHAR 1498 | STARTCHAR Adieresis 1499 | ENCODING 196 1500 | SWIDTH 1000 0 1501 | DWIDTH 4 0 1502 | BBX 3 5 0 0 1503 | BITMAP 1504 | A0 1505 | 40 1506 | A0 1507 | E0 1508 | A0 1509 | ENDCHAR 1510 | STARTCHAR Aring 1511 | ENCODING 197 1512 | SWIDTH 1000 0 1513 | DWIDTH 4 0 1514 | BBX 3 5 0 0 1515 | BITMAP 1516 | C0 1517 | C0 1518 | A0 1519 | E0 1520 | A0 1521 | ENDCHAR 1522 | STARTCHAR AE 1523 | ENCODING 198 1524 | SWIDTH 1000 0 1525 | DWIDTH 4 0 1526 | BBX 3 5 0 0 1527 | BITMAP 1528 | 60 1529 | C0 1530 | E0 1531 | C0 1532 | E0 1533 | ENDCHAR 1534 | STARTCHAR Ccedilla 1535 | ENCODING 199 1536 | SWIDTH 1000 0 1537 | DWIDTH 4 0 1538 | BBX 3 6 0 -1 1539 | BITMAP 1540 | 60 1541 | 80 1542 | 80 1543 | 60 1544 | 20 1545 | 40 1546 | ENDCHAR 1547 | STARTCHAR Egrave 1548 | ENCODING 200 1549 | SWIDTH 1000 0 1550 | DWIDTH 4 0 1551 | BBX 3 5 0 0 1552 | BITMAP 1553 | 40 1554 | 20 1555 | E0 1556 | C0 1557 | E0 1558 | ENDCHAR 1559 | STARTCHAR Eacute 1560 | ENCODING 201 1561 | SWIDTH 1000 0 1562 | DWIDTH 4 0 1563 | BBX 3 5 0 0 1564 | BITMAP 1565 | 40 1566 | 80 1567 | E0 1568 | C0 1569 | E0 1570 | ENDCHAR 1571 | STARTCHAR Ecircumflex 1572 | ENCODING 202 1573 | SWIDTH 1000 0 1574 | DWIDTH 4 0 1575 | BBX 3 5 0 0 1576 | BITMAP 1577 | E0 1578 | 00 1579 | E0 1580 | C0 1581 | E0 1582 | ENDCHAR 1583 | STARTCHAR Edieresis 1584 | ENCODING 203 1585 | SWIDTH 1000 0 1586 | DWIDTH 4 0 1587 | BBX 3 5 0 0 1588 | BITMAP 1589 | A0 1590 | 00 1591 | E0 1592 | C0 1593 | E0 1594 | ENDCHAR 1595 | STARTCHAR Igrave 1596 | ENCODING 204 1597 | SWIDTH 1000 0 1598 | DWIDTH 4 0 1599 | BBX 3 5 0 0 1600 | BITMAP 1601 | 40 1602 | 20 1603 | E0 1604 | 40 1605 | E0 1606 | ENDCHAR 1607 | STARTCHAR Iacute 1608 | ENCODING 205 1609 | SWIDTH 1000 0 1610 | DWIDTH 4 0 1611 | BBX 3 5 0 0 1612 | BITMAP 1613 | 40 1614 | 80 1615 | E0 1616 | 40 1617 | E0 1618 | ENDCHAR 1619 | STARTCHAR Icircumflex 1620 | ENCODING 206 1621 | SWIDTH 1000 0 1622 | DWIDTH 4 0 1623 | BBX 3 5 0 0 1624 | BITMAP 1625 | E0 1626 | 00 1627 | E0 1628 | 40 1629 | E0 1630 | ENDCHAR 1631 | STARTCHAR Idieresis 1632 | ENCODING 207 1633 | SWIDTH 1000 0 1634 | DWIDTH 4 0 1635 | BBX 3 5 0 0 1636 | BITMAP 1637 | A0 1638 | 00 1639 | E0 1640 | 40 1641 | E0 1642 | ENDCHAR 1643 | STARTCHAR Eth 1644 | ENCODING 208 1645 | SWIDTH 1000 0 1646 | DWIDTH 4 0 1647 | BBX 3 5 0 0 1648 | BITMAP 1649 | C0 1650 | A0 1651 | E0 1652 | A0 1653 | C0 1654 | ENDCHAR 1655 | STARTCHAR Ntilde 1656 | ENCODING 209 1657 | SWIDTH 1000 0 1658 | DWIDTH 4 0 1659 | BBX 3 5 0 0 1660 | BITMAP 1661 | C0 1662 | 60 1663 | A0 1664 | E0 1665 | A0 1666 | ENDCHAR 1667 | STARTCHAR Ograve 1668 | ENCODING 210 1669 | SWIDTH 1000 0 1670 | DWIDTH 4 0 1671 | BBX 3 5 0 0 1672 | BITMAP 1673 | 40 1674 | 20 1675 | E0 1676 | A0 1677 | E0 1678 | ENDCHAR 1679 | STARTCHAR Oacute 1680 | ENCODING 211 1681 | SWIDTH 1000 0 1682 | DWIDTH 4 0 1683 | BBX 3 5 0 0 1684 | BITMAP 1685 | 40 1686 | 80 1687 | E0 1688 | A0 1689 | E0 1690 | ENDCHAR 1691 | STARTCHAR Ocircumflex 1692 | ENCODING 212 1693 | SWIDTH 1000 0 1694 | DWIDTH 4 0 1695 | BBX 3 5 0 0 1696 | BITMAP 1697 | E0 1698 | 00 1699 | E0 1700 | A0 1701 | E0 1702 | ENDCHAR 1703 | STARTCHAR Otilde 1704 | ENCODING 213 1705 | SWIDTH 1000 0 1706 | DWIDTH 4 0 1707 | BBX 3 5 0 0 1708 | BITMAP 1709 | C0 1710 | 60 1711 | E0 1712 | A0 1713 | E0 1714 | ENDCHAR 1715 | STARTCHAR Odieresis 1716 | ENCODING 214 1717 | SWIDTH 1000 0 1718 | DWIDTH 4 0 1719 | BBX 3 5 0 0 1720 | BITMAP 1721 | A0 1722 | 00 1723 | E0 1724 | A0 1725 | E0 1726 | ENDCHAR 1727 | STARTCHAR multiply 1728 | ENCODING 215 1729 | SWIDTH 1000 0 1730 | DWIDTH 4 0 1731 | BBX 3 3 0 1 1732 | BITMAP 1733 | A0 1734 | 40 1735 | A0 1736 | ENDCHAR 1737 | STARTCHAR Oslash 1738 | ENCODING 216 1739 | SWIDTH 1000 0 1740 | DWIDTH 4 0 1741 | BBX 3 5 0 0 1742 | BITMAP 1743 | 60 1744 | A0 1745 | E0 1746 | A0 1747 | C0 1748 | ENDCHAR 1749 | STARTCHAR Ugrave 1750 | ENCODING 217 1751 | SWIDTH 1000 0 1752 | DWIDTH 4 0 1753 | BBX 3 5 0 0 1754 | BITMAP 1755 | 80 1756 | 40 1757 | A0 1758 | A0 1759 | E0 1760 | ENDCHAR 1761 | STARTCHAR Uacute 1762 | ENCODING 218 1763 | SWIDTH 1000 0 1764 | DWIDTH 4 0 1765 | BBX 3 5 0 0 1766 | BITMAP 1767 | 20 1768 | 40 1769 | A0 1770 | A0 1771 | E0 1772 | ENDCHAR 1773 | STARTCHAR Ucircumflex 1774 | ENCODING 219 1775 | SWIDTH 1000 0 1776 | DWIDTH 4 0 1777 | BBX 3 5 0 0 1778 | BITMAP 1779 | E0 1780 | 00 1781 | A0 1782 | A0 1783 | E0 1784 | ENDCHAR 1785 | STARTCHAR Udieresis 1786 | ENCODING 220 1787 | SWIDTH 1000 0 1788 | DWIDTH 4 0 1789 | BBX 3 5 0 0 1790 | BITMAP 1791 | A0 1792 | 00 1793 | A0 1794 | A0 1795 | E0 1796 | ENDCHAR 1797 | STARTCHAR Yacute 1798 | ENCODING 221 1799 | SWIDTH 1000 0 1800 | DWIDTH 4 0 1801 | BBX 3 5 0 0 1802 | BITMAP 1803 | 20 1804 | 40 1805 | A0 1806 | E0 1807 | 40 1808 | ENDCHAR 1809 | STARTCHAR Thorn 1810 | ENCODING 222 1811 | SWIDTH 1000 0 1812 | DWIDTH 4 0 1813 | BBX 3 5 0 0 1814 | BITMAP 1815 | 80 1816 | E0 1817 | A0 1818 | E0 1819 | 80 1820 | ENDCHAR 1821 | STARTCHAR germandbls 1822 | ENCODING 223 1823 | SWIDTH 1000 0 1824 | DWIDTH 4 0 1825 | BBX 3 6 0 -1 1826 | BITMAP 1827 | 60 1828 | A0 1829 | C0 1830 | A0 1831 | C0 1832 | 80 1833 | ENDCHAR 1834 | STARTCHAR agrave 1835 | ENCODING 224 1836 | SWIDTH 1000 0 1837 | DWIDTH 4 0 1838 | BBX 3 5 0 0 1839 | BITMAP 1840 | 40 1841 | 20 1842 | 60 1843 | A0 1844 | E0 1845 | ENDCHAR 1846 | STARTCHAR aacute 1847 | ENCODING 225 1848 | SWIDTH 1000 0 1849 | DWIDTH 4 0 1850 | BBX 3 5 0 0 1851 | BITMAP 1852 | 40 1853 | 80 1854 | 60 1855 | A0 1856 | E0 1857 | ENDCHAR 1858 | STARTCHAR acircumflex 1859 | ENCODING 226 1860 | SWIDTH 1000 0 1861 | DWIDTH 4 0 1862 | BBX 3 5 0 0 1863 | BITMAP 1864 | E0 1865 | 00 1866 | 60 1867 | A0 1868 | E0 1869 | ENDCHAR 1870 | STARTCHAR atilde 1871 | ENCODING 227 1872 | SWIDTH 1000 0 1873 | DWIDTH 4 0 1874 | BBX 3 5 0 0 1875 | BITMAP 1876 | 60 1877 | C0 1878 | 60 1879 | A0 1880 | E0 1881 | ENDCHAR 1882 | STARTCHAR adieresis 1883 | ENCODING 228 1884 | SWIDTH 1000 0 1885 | DWIDTH 4 0 1886 | BBX 3 5 0 0 1887 | BITMAP 1888 | A0 1889 | 00 1890 | 60 1891 | A0 1892 | E0 1893 | ENDCHAR 1894 | STARTCHAR aring 1895 | ENCODING 229 1896 | SWIDTH 1000 0 1897 | DWIDTH 4 0 1898 | BBX 3 5 0 0 1899 | BITMAP 1900 | 60 1901 | 60 1902 | 60 1903 | A0 1904 | E0 1905 | ENDCHAR 1906 | STARTCHAR ae 1907 | ENCODING 230 1908 | SWIDTH 1000 0 1909 | DWIDTH 4 0 1910 | BBX 3 4 0 0 1911 | BITMAP 1912 | 60 1913 | E0 1914 | E0 1915 | C0 1916 | ENDCHAR 1917 | STARTCHAR ccedilla 1918 | ENCODING 231 1919 | SWIDTH 1000 0 1920 | DWIDTH 4 0 1921 | BBX 3 5 0 -1 1922 | BITMAP 1923 | 60 1924 | 80 1925 | 60 1926 | 20 1927 | 40 1928 | ENDCHAR 1929 | STARTCHAR egrave 1930 | ENCODING 232 1931 | SWIDTH 1000 0 1932 | DWIDTH 4 0 1933 | BBX 3 5 0 0 1934 | BITMAP 1935 | 40 1936 | 20 1937 | 60 1938 | E0 1939 | 60 1940 | ENDCHAR 1941 | STARTCHAR eacute 1942 | ENCODING 233 1943 | SWIDTH 1000 0 1944 | DWIDTH 4 0 1945 | BBX 3 5 0 0 1946 | BITMAP 1947 | 40 1948 | 80 1949 | 60 1950 | E0 1951 | 60 1952 | ENDCHAR 1953 | STARTCHAR ecircumflex 1954 | ENCODING 234 1955 | SWIDTH 1000 0 1956 | DWIDTH 4 0 1957 | BBX 3 5 0 0 1958 | BITMAP 1959 | E0 1960 | 00 1961 | 60 1962 | E0 1963 | 60 1964 | ENDCHAR 1965 | STARTCHAR edieresis 1966 | ENCODING 235 1967 | SWIDTH 1000 0 1968 | DWIDTH 4 0 1969 | BBX 3 5 0 0 1970 | BITMAP 1971 | A0 1972 | 00 1973 | 60 1974 | E0 1975 | 60 1976 | ENDCHAR 1977 | STARTCHAR igrave 1978 | ENCODING 236 1979 | SWIDTH 1000 0 1980 | DWIDTH 4 0 1981 | BBX 2 5 1 0 1982 | BITMAP 1983 | 80 1984 | 40 1985 | 80 1986 | 80 1987 | 80 1988 | ENDCHAR 1989 | STARTCHAR iacute 1990 | ENCODING 237 1991 | SWIDTH 1000 0 1992 | DWIDTH 4 0 1993 | BBX 2 5 0 0 1994 | BITMAP 1995 | 40 1996 | 80 1997 | 40 1998 | 40 1999 | 40 2000 | ENDCHAR 2001 | STARTCHAR icircumflex 2002 | ENCODING 238 2003 | SWIDTH 1000 0 2004 | DWIDTH 4 0 2005 | BBX 3 5 0 0 2006 | BITMAP 2007 | E0 2008 | 00 2009 | 40 2010 | 40 2011 | 40 2012 | ENDCHAR 2013 | STARTCHAR idieresis 2014 | ENCODING 239 2015 | SWIDTH 1000 0 2016 | DWIDTH 4 0 2017 | BBX 3 5 0 0 2018 | BITMAP 2019 | A0 2020 | 00 2021 | 40 2022 | 40 2023 | 40 2024 | ENDCHAR 2025 | STARTCHAR eth 2026 | ENCODING 240 2027 | SWIDTH 1000 0 2028 | DWIDTH 4 0 2029 | BBX 3 5 0 0 2030 | BITMAP 2031 | 60 2032 | C0 2033 | 60 2034 | A0 2035 | 60 2036 | ENDCHAR 2037 | STARTCHAR ntilde 2038 | ENCODING 241 2039 | SWIDTH 1000 0 2040 | DWIDTH 4 0 2041 | BBX 3 5 0 0 2042 | BITMAP 2043 | C0 2044 | 60 2045 | C0 2046 | A0 2047 | A0 2048 | ENDCHAR 2049 | STARTCHAR ograve 2050 | ENCODING 242 2051 | SWIDTH 1000 0 2052 | DWIDTH 4 0 2053 | BBX 3 5 0 0 2054 | BITMAP 2055 | 40 2056 | 20 2057 | 40 2058 | A0 2059 | 40 2060 | ENDCHAR 2061 | STARTCHAR oacute 2062 | ENCODING 243 2063 | SWIDTH 1000 0 2064 | DWIDTH 4 0 2065 | BBX 3 5 0 0 2066 | BITMAP 2067 | 40 2068 | 80 2069 | 40 2070 | A0 2071 | 40 2072 | ENDCHAR 2073 | STARTCHAR ocircumflex 2074 | ENCODING 244 2075 | SWIDTH 1000 0 2076 | DWIDTH 4 0 2077 | BBX 3 5 0 0 2078 | BITMAP 2079 | E0 2080 | 00 2081 | 40 2082 | A0 2083 | 40 2084 | ENDCHAR 2085 | STARTCHAR otilde 2086 | ENCODING 245 2087 | SWIDTH 1000 0 2088 | DWIDTH 4 0 2089 | BBX 3 5 0 0 2090 | BITMAP 2091 | C0 2092 | 60 2093 | 40 2094 | A0 2095 | 40 2096 | ENDCHAR 2097 | STARTCHAR odieresis 2098 | ENCODING 246 2099 | SWIDTH 1000 0 2100 | DWIDTH 4 0 2101 | BBX 3 5 0 0 2102 | BITMAP 2103 | A0 2104 | 00 2105 | 40 2106 | A0 2107 | 40 2108 | ENDCHAR 2109 | STARTCHAR divide 2110 | ENCODING 247 2111 | SWIDTH 1000 0 2112 | DWIDTH 4 0 2113 | BBX 3 5 0 0 2114 | BITMAP 2115 | 40 2116 | 00 2117 | E0 2118 | 00 2119 | 40 2120 | ENDCHAR 2121 | STARTCHAR oslash 2122 | ENCODING 248 2123 | SWIDTH 1000 0 2124 | DWIDTH 4 0 2125 | BBX 3 4 0 0 2126 | BITMAP 2127 | 60 2128 | E0 2129 | A0 2130 | C0 2131 | ENDCHAR 2132 | STARTCHAR ugrave 2133 | ENCODING 249 2134 | SWIDTH 1000 0 2135 | DWIDTH 4 0 2136 | BBX 3 5 0 0 2137 | BITMAP 2138 | 80 2139 | 40 2140 | A0 2141 | A0 2142 | 60 2143 | ENDCHAR 2144 | STARTCHAR uacute 2145 | ENCODING 250 2146 | SWIDTH 1000 0 2147 | DWIDTH 4 0 2148 | BBX 3 5 0 0 2149 | BITMAP 2150 | 20 2151 | 40 2152 | A0 2153 | A0 2154 | 60 2155 | ENDCHAR 2156 | STARTCHAR ucircumflex 2157 | ENCODING 251 2158 | SWIDTH 1000 0 2159 | DWIDTH 4 0 2160 | BBX 3 5 0 0 2161 | BITMAP 2162 | E0 2163 | 00 2164 | A0 2165 | A0 2166 | 60 2167 | ENDCHAR 2168 | STARTCHAR udieresis 2169 | ENCODING 252 2170 | SWIDTH 1000 0 2171 | DWIDTH 4 0 2172 | BBX 3 5 0 0 2173 | BITMAP 2174 | A0 2175 | 00 2176 | A0 2177 | A0 2178 | 60 2179 | ENDCHAR 2180 | STARTCHAR yacute 2181 | ENCODING 253 2182 | SWIDTH 1000 0 2183 | DWIDTH 4 0 2184 | BBX 3 6 0 -1 2185 | BITMAP 2186 | 20 2187 | 40 2188 | A0 2189 | 60 2190 | 20 2191 | 40 2192 | ENDCHAR 2193 | STARTCHAR thorn 2194 | ENCODING 254 2195 | SWIDTH 1000 0 2196 | DWIDTH 4 0 2197 | BBX 3 5 0 -1 2198 | BITMAP 2199 | 80 2200 | C0 2201 | A0 2202 | C0 2203 | 80 2204 | ENDCHAR 2205 | STARTCHAR ydieresis 2206 | ENCODING 255 2207 | SWIDTH 1000 0 2208 | DWIDTH 4 0 2209 | BBX 3 6 0 -1 2210 | BITMAP 2211 | A0 2212 | 00 2213 | A0 2214 | 60 2215 | 20 2216 | 40 2217 | ENDCHAR 2218 | STARTCHAR gcircumflex 2219 | ENCODING 285 2220 | SWIDTH 1000 0 2221 | DWIDTH 6 0 2222 | BBX 1 1 0 0 2223 | BITMAP 2224 | 00 2225 | ENDCHAR 2226 | STARTCHAR OE 2227 | ENCODING 338 2228 | SWIDTH 666 0 2229 | DWIDTH 4 0 2230 | BBX 3 5 0 0 2231 | BITMAP 2232 | 60 2233 | C0 2234 | E0 2235 | C0 2236 | 60 2237 | ENDCHAR 2238 | STARTCHAR oe 2239 | ENCODING 339 2240 | SWIDTH 666 0 2241 | DWIDTH 4 0 2242 | BBX 3 4 0 0 2243 | BITMAP 2244 | 60 2245 | E0 2246 | C0 2247 | E0 2248 | ENDCHAR 2249 | STARTCHAR Scaron 2250 | ENCODING 352 2251 | SWIDTH 666 0 2252 | DWIDTH 4 0 2253 | BBX 3 5 0 0 2254 | BITMAP 2255 | A0 2256 | 60 2257 | C0 2258 | 60 2259 | C0 2260 | ENDCHAR 2261 | STARTCHAR scaron 2262 | ENCODING 353 2263 | SWIDTH 666 0 2264 | DWIDTH 4 0 2265 | BBX 3 5 0 0 2266 | BITMAP 2267 | A0 2268 | 60 2269 | C0 2270 | 60 2271 | C0 2272 | ENDCHAR 2273 | STARTCHAR Ydieresis 2274 | ENCODING 376 2275 | SWIDTH 666 0 2276 | DWIDTH 4 0 2277 | BBX 3 5 0 0 2278 | BITMAP 2279 | A0 2280 | 00 2281 | A0 2282 | 40 2283 | 40 2284 | ENDCHAR 2285 | STARTCHAR Zcaron 2286 | ENCODING 381 2287 | SWIDTH 666 0 2288 | DWIDTH 4 0 2289 | BBX 3 5 0 0 2290 | BITMAP 2291 | A0 2292 | E0 2293 | 60 2294 | C0 2295 | E0 2296 | ENDCHAR 2297 | STARTCHAR zcaron 2298 | ENCODING 382 2299 | SWIDTH 666 0 2300 | DWIDTH 4 0 2301 | BBX 3 5 0 0 2302 | BITMAP 2303 | A0 2304 | E0 2305 | 60 2306 | C0 2307 | E0 2308 | ENDCHAR 2309 | STARTCHAR uni0EA4 2310 | ENCODING 3748 2311 | SWIDTH 1000 0 2312 | DWIDTH 6 0 2313 | BBX 1 1 0 0 2314 | BITMAP 2315 | 00 2316 | ENDCHAR 2317 | STARTCHAR uni13A0 2318 | ENCODING 5024 2319 | SWIDTH 1000 0 2320 | DWIDTH 6 0 2321 | BBX 1 1 0 0 2322 | BITMAP 2323 | 00 2324 | ENDCHAR 2325 | STARTCHAR bullet 2326 | ENCODING 8226 2327 | SWIDTH 666 0 2328 | DWIDTH 4 0 2329 | BBX 1 1 1 2 2330 | BITMAP 2331 | 80 2332 | ENDCHAR 2333 | STARTCHAR ellipsis 2334 | ENCODING 8230 2335 | SWIDTH 666 0 2336 | DWIDTH 4 0 2337 | BBX 3 1 0 0 2338 | BITMAP 2339 | A0 2340 | ENDCHAR 2341 | STARTCHAR Euro 2342 | ENCODING 8364 2343 | SWIDTH 666 0 2344 | DWIDTH 4 0 2345 | BBX 3 5 0 0 2346 | BITMAP 2347 | 60 2348 | E0 2349 | E0 2350 | C0 2351 | 60 2352 | ENDCHAR 2353 | STARTCHAR uniFFFD 2354 | ENCODING 65533 2355 | SWIDTH 1000 0 2356 | DWIDTH 4 0 2357 | BBX 3 5 0 0 2358 | BITMAP 2359 | E0 2360 | A0 2361 | A0 2362 | A0 2363 | E0 2364 | ENDCHAR 2365 | ENDFONT 2366 | -------------------------------------------------------------------------------- /res/bdf/uwe_prop.bdf: -------------------------------------------------------------------------------- 1 | STARTFONT 2.1 2 | COMMENT by Uwe Freese, mail@uwe-freese.de 09/2002. V1.1 3 | COMMENT 4 | COMMENT This font was originally converted from the old RockBox 5 | COMMENT proportional font that was saved in arrays of columns. 6 | COMMENT After conversion, many characters have changed for better 7 | COMMENT readability, some characters were added and the digits 8 | COMMENT changed to have the same width. 9 | COMMENT 10 | COMMENT If someone finds errors (especially in the first font definition 11 | COMMENT lines), please let me know it. 12 | COMMENT 13 | COMMENT Permission to use, copy, modify, and distribute this 14 | COMMENT software for any purpose and without fee is hereby granted, 15 | COMMENT provided that the above copyright notice appear in all 16 | COMMENT copies and that both that copyright notice and this 17 | COMMENT permission notice appear in supporting documentation, and 18 | COMMENT that the name of Uwe Freese not be used in advertising or 19 | COMMENT publicity pertaining to distribution of the software without 20 | COMMENT specific, written prior permission. Uwe Freese makes no 21 | COMMENT representations about the suitability of this software for 22 | COMMENT any purpose. It is provided "as is" without express or 23 | COMMENT implied warranty. 24 | COMMENT 25 | FONT -rockbox-prop-font-iso8859-1 26 | SIZE 8 100 100 27 | FONTBOUNDINGBOX 8 8 0 0 28 | STARTPROPERTIES 20 29 | SPACING "P" 30 | CHARSET_REGISTRY "iso8859-1" 31 | CHARSET_ENCODING "1" 32 | POINT_SIZE 90 33 | WEIGHT 10 34 | RESOLUTION_X 100 35 | RESOLUTION_Y 100 36 | DEFAULT_CHAR 32 37 | FONT_DESCENT 0 38 | FONT_ASCENT 8 39 | _XMBDFED_INFO "Edited with UltraEdit ;)" 40 | AVERAGE_WIDTH 80 41 | FOUNDRY "classic" 42 | FAMILY_NAME "rockbox-prop-font" 43 | WEIGHT_NAME "medium" 44 | SLANT "R" 45 | SETWIDTH_NAME "normal" 46 | ADD_STYLE_NAME "" 47 | PIXEL_SIZE 8 48 | ENDPROPERTIES 49 | CHARS 190 50 | STARTCHAR space 51 | ENCODING 32 52 | SWIDTH 720 0 53 | DWIDTH 5 0 54 | BBX 5 8 0 0 55 | BITMAP 56 | 00 57 | 00 58 | 00 59 | 00 60 | 00 61 | 00 62 | 00 63 | 00 64 | ENDCHAR 65 | STARTCHAR exclamation mark 66 | ENCODING 33 67 | SWIDTH 720 0 68 | DWIDTH 2 0 69 | BBX 2 8 0 0 70 | BITMAP 71 | 00 72 | 40 73 | 40 74 | 40 75 | 40 76 | 40 77 | 00 78 | 40 79 | ENDCHAR 80 | STARTCHAR double quote 81 | ENCODING 34 82 | SWIDTH 720 0 83 | DWIDTH 4 0 84 | BBX 4 8 0 0 85 | BITMAP 86 | 00 87 | 50 88 | 50 89 | 50 90 | 00 91 | 00 92 | 00 93 | 00 94 | ENDCHAR 95 | STARTCHAR hash 96 | ENCODING 35 97 | SWIDTH 720 0 98 | DWIDTH 6 0 99 | BBX 6 8 0 0 100 | BITMAP 101 | 00 102 | 00 103 | 28 104 | 7c 105 | 28 106 | 7c 107 | 28 108 | 00 109 | ENDCHAR 110 | STARTCHAR dollar sign 111 | ENCODING 36 112 | SWIDTH 720 0 113 | DWIDTH 6 0 114 | BBX 6 8 0 0 115 | BITMAP 116 | 00 117 | 10 118 | 3c 119 | 50 120 | 38 121 | 14 122 | 78 123 | 10 124 | ENDCHAR 125 | STARTCHAR percent sign 126 | ENCODING 37 127 | SWIDTH 720 0 128 | DWIDTH 6 0 129 | BBX 6 8 0 0 130 | BITMAP 131 | 00 132 | 00 133 | 00 134 | 44 135 | 08 136 | 10 137 | 20 138 | 44 139 | ENDCHAR 140 | STARTCHAR ampersand 141 | ENCODING 38 142 | SWIDTH 720 0 143 | DWIDTH 7 0 144 | BBX 7 8 0 0 145 | BITMAP 146 | 00 147 | 38 148 | 44 149 | 48 150 | 30 151 | 4a 152 | 44 153 | 3a 154 | ENDCHAR 155 | STARTCHAR apostrophe 156 | ENCODING 39 157 | SWIDTH 720 0 158 | DWIDTH 2 0 159 | BBX 2 8 0 0 160 | BITMAP 161 | 00 162 | 40 163 | 40 164 | 40 165 | 00 166 | 00 167 | 00 168 | 00 169 | ENDCHAR 170 | STARTCHAR open bracket 171 | ENCODING 40 172 | SWIDTH 720 0 173 | DWIDTH 3 0 174 | BBX 3 8 0 0 175 | BITMAP 176 | 00 177 | 20 178 | 40 179 | 40 180 | 40 181 | 40 182 | 40 183 | 20 184 | ENDCHAR 185 | STARTCHAR close bracket 186 | ENCODING 41 187 | SWIDTH 720 0 188 | DWIDTH 3 0 189 | BBX 3 8 0 0 190 | BITMAP 191 | 00 192 | 40 193 | 20 194 | 20 195 | 20 196 | 20 197 | 20 198 | 40 199 | ENDCHAR 200 | STARTCHAR asterisk 201 | ENCODING 42 202 | SWIDTH 720 0 203 | DWIDTH 6 0 204 | BBX 6 8 0 0 205 | BITMAP 206 | 00 207 | 00 208 | 54 209 | 38 210 | 7c 211 | 38 212 | 54 213 | 00 214 | ENDCHAR 215 | STARTCHAR plus sign 216 | ENCODING 43 217 | SWIDTH 720 0 218 | DWIDTH 6 0 219 | BBX 6 8 0 0 220 | BITMAP 221 | 00 222 | 00 223 | 10 224 | 10 225 | 7c 226 | 10 227 | 10 228 | 00 229 | ENDCHAR 230 | STARTCHAR comma 231 | ENCODING 44 232 | SWIDTH 720 0 233 | DWIDTH 3 0 234 | BBX 3 8 0 0 235 | BITMAP 236 | 00 237 | 00 238 | 00 239 | 00 240 | 00 241 | 00 242 | 20 243 | 40 244 | ENDCHAR 245 | STARTCHAR minus sign 246 | ENCODING 45 247 | SWIDTH 720 0 248 | DWIDTH 6 0 249 | BBX 6 8 0 0 250 | BITMAP 251 | 00 252 | 00 253 | 00 254 | 00 255 | 7c 256 | 00 257 | 00 258 | 00 259 | ENDCHAR 260 | STARTCHAR full stop 261 | ENCODING 46 262 | SWIDTH 720 0 263 | DWIDTH 2 0 264 | BBX 2 8 0 0 265 | BITMAP 266 | 00 267 | 00 268 | 00 269 | 00 270 | 00 271 | 00 272 | 00 273 | 40 274 | ENDCHAR 275 | STARTCHAR slash 276 | ENCODING 47 277 | SWIDTH 720 0 278 | DWIDTH 5 0 279 | BBX 5 8 0 0 280 | BITMAP 281 | 08 282 | 08 283 | 10 284 | 10 285 | 20 286 | 20 287 | 40 288 | 40 289 | ENDCHAR 290 | STARTCHAR digit zero 291 | ENCODING 48 292 | SWIDTH 720 0 293 | DWIDTH 5 0 294 | BBX 5 8 0 0 295 | BITMAP 296 | 00 297 | 30 298 | 48 299 | 58 300 | 68 301 | 48 302 | 48 303 | 30 304 | ENDCHAR 305 | STARTCHAR digit one 306 | ENCODING 49 307 | SWIDTH 720 0 308 | DWIDTH 5 0 309 | BBX 5 8 0 0 310 | BITMAP 311 | 00 312 | 10 313 | 30 314 | 50 315 | 10 316 | 10 317 | 10 318 | 10 319 | ENDCHAR 320 | STARTCHAR digit two 321 | ENCODING 50 322 | SWIDTH 720 0 323 | DWIDTH 5 0 324 | BBX 5 8 0 0 325 | BITMAP 326 | 00 327 | 30 328 | 48 329 | 08 330 | 30 331 | 40 332 | 40 333 | 78 334 | ENDCHAR 335 | STARTCHAR digit three 336 | ENCODING 51 337 | SWIDTH 720 0 338 | DWIDTH 5 0 339 | BBX 5 8 0 0 340 | BITMAP 341 | 00 342 | 30 343 | 48 344 | 08 345 | 30 346 | 08 347 | 48 348 | 30 349 | ENDCHAR 350 | STARTCHAR digit four 351 | ENCODING 52 352 | SWIDTH 720 0 353 | DWIDTH 5 0 354 | BBX 5 8 0 0 355 | BITMAP 356 | 00 357 | 10 358 | 30 359 | 50 360 | 78 361 | 10 362 | 10 363 | 10 364 | ENDCHAR 365 | STARTCHAR digit five 366 | ENCODING 53 367 | SWIDTH 720 0 368 | DWIDTH 5 0 369 | BBX 5 8 0 0 370 | BITMAP 371 | 00 372 | 78 373 | 40 374 | 40 375 | 30 376 | 08 377 | 48 378 | 30 379 | ENDCHAR 380 | STARTCHAR digit six 381 | ENCODING 54 382 | SWIDTH 720 0 383 | DWIDTH 5 0 384 | BBX 5 8 0 0 385 | BITMAP 386 | 00 387 | 30 388 | 40 389 | 40 390 | 70 391 | 48 392 | 48 393 | 30 394 | ENDCHAR 395 | STARTCHAR digit seven 396 | ENCODING 55 397 | SWIDTH 720 0 398 | DWIDTH 5 0 399 | BBX 5 8 0 0 400 | BITMAP 401 | 00 402 | 78 403 | 08 404 | 08 405 | 10 406 | 10 407 | 10 408 | 10 409 | ENDCHAR 410 | STARTCHAR digit eight 411 | ENCODING 56 412 | SWIDTH 720 0 413 | DWIDTH 5 0 414 | BBX 5 8 0 0 415 | BITMAP 416 | 00 417 | 30 418 | 48 419 | 48 420 | 30 421 | 48 422 | 48 423 | 30 424 | ENDCHAR 425 | STARTCHAR digit nine 426 | ENCODING 57 427 | SWIDTH 720 0 428 | DWIDTH 5 0 429 | BBX 5 8 0 0 430 | BITMAP 431 | 00 432 | 30 433 | 48 434 | 48 435 | 38 436 | 08 437 | 08 438 | 30 439 | ENDCHAR 440 | STARTCHAR colon 441 | ENCODING 58 442 | SWIDTH 720 0 443 | DWIDTH 2 0 444 | BBX 2 8 0 0 445 | BITMAP 446 | 00 447 | 00 448 | 40 449 | 00 450 | 00 451 | 00 452 | 40 453 | 00 454 | ENDCHAR 455 | STARTCHAR semicolon 456 | ENCODING 59 457 | SWIDTH 720 0 458 | DWIDTH 3 0 459 | BBX 3 8 0 0 460 | BITMAP 461 | 00 462 | 00 463 | 20 464 | 00 465 | 00 466 | 00 467 | 20 468 | 40 469 | ENDCHAR 470 | STARTCHAR less-than sign 471 | ENCODING 60 472 | SWIDTH 720 0 473 | DWIDTH 4 0 474 | BBX 4 8 0 0 475 | BITMAP 476 | 00 477 | 00 478 | 10 479 | 20 480 | 40 481 | 20 482 | 10 483 | 00 484 | ENDCHAR 485 | STARTCHAR equal sign 486 | ENCODING 61 487 | SWIDTH 720 0 488 | DWIDTH 5 0 489 | BBX 5 8 0 0 490 | BITMAP 491 | 00 492 | 00 493 | 00 494 | 78 495 | 00 496 | 78 497 | 00 498 | 00 499 | ENDCHAR 500 | STARTCHAR greater-than sign 501 | ENCODING 62 502 | SWIDTH 720 0 503 | DWIDTH 4 0 504 | BBX 4 8 0 0 505 | BITMAP 506 | 00 507 | 00 508 | 40 509 | 20 510 | 10 511 | 20 512 | 40 513 | 00 514 | ENDCHAR 515 | STARTCHAR question mark 516 | ENCODING 63 517 | SWIDTH 720 0 518 | DWIDTH 5 0 519 | BBX 5 8 0 0 520 | BITMAP 521 | 00 522 | 30 523 | 48 524 | 08 525 | 30 526 | 20 527 | 00 528 | 20 529 | ENDCHAR 530 | STARTCHAR commercial at 531 | ENCODING 64 532 | SWIDTH 720 0 533 | DWIDTH 6 0 534 | BBX 6 8 0 0 535 | BITMAP 536 | 00 537 | 38 538 | 44 539 | 5c 540 | 58 541 | 40 542 | 38 543 | 00 544 | ENDCHAR 545 | STARTCHAR A 546 | ENCODING 65 547 | SWIDTH 720 0 548 | DWIDTH 5 0 549 | BBX 5 8 0 0 550 | BITMAP 551 | 00 552 | 30 553 | 48 554 | 48 555 | 78 556 | 48 557 | 48 558 | 48 559 | ENDCHAR 560 | STARTCHAR B 561 | ENCODING 66 562 | SWIDTH 720 0 563 | DWIDTH 5 0 564 | BBX 5 8 0 0 565 | BITMAP 566 | 00 567 | 70 568 | 48 569 | 48 570 | 70 571 | 48 572 | 48 573 | 70 574 | ENDCHAR 575 | STARTCHAR C 576 | ENCODING 67 577 | SWIDTH 720 0 578 | DWIDTH 5 0 579 | BBX 5 8 0 0 580 | BITMAP 581 | 00 582 | 30 583 | 48 584 | 40 585 | 40 586 | 40 587 | 48 588 | 30 589 | ENDCHAR 590 | STARTCHAR D 591 | ENCODING 68 592 | SWIDTH 720 0 593 | DWIDTH 5 0 594 | BBX 5 8 0 0 595 | BITMAP 596 | 00 597 | 70 598 | 48 599 | 48 600 | 48 601 | 48 602 | 48 603 | 70 604 | ENDCHAR 605 | STARTCHAR E 606 | ENCODING 69 607 | SWIDTH 720 0 608 | DWIDTH 5 0 609 | BBX 5 8 0 0 610 | BITMAP 611 | 00 612 | 38 613 | 40 614 | 40 615 | 70 616 | 40 617 | 40 618 | 38 619 | ENDCHAR 620 | STARTCHAR F 621 | ENCODING 70 622 | SWIDTH 720 0 623 | DWIDTH 5 0 624 | BBX 5 8 0 0 625 | BITMAP 626 | 00 627 | 38 628 | 40 629 | 40 630 | 70 631 | 40 632 | 40 633 | 40 634 | ENDCHAR 635 | STARTCHAR G 636 | ENCODING 71 637 | SWIDTH 720 0 638 | DWIDTH 5 0 639 | BBX 5 8 0 0 640 | BITMAP 641 | 00 642 | 38 643 | 40 644 | 40 645 | 58 646 | 48 647 | 48 648 | 38 649 | ENDCHAR 650 | STARTCHAR H 651 | ENCODING 72 652 | SWIDTH 720 0 653 | DWIDTH 5 0 654 | BBX 5 8 0 0 655 | BITMAP 656 | 00 657 | 48 658 | 48 659 | 48 660 | 78 661 | 48 662 | 48 663 | 48 664 | ENDCHAR 665 | STARTCHAR I 666 | ENCODING 73 667 | SWIDTH 720 0 668 | DWIDTH 4 0 669 | BBX 4 8 0 0 670 | BITMAP 671 | 00 672 | 70 673 | 20 674 | 20 675 | 20 676 | 20 677 | 20 678 | 70 679 | ENDCHAR 680 | STARTCHAR J 681 | ENCODING 74 682 | SWIDTH 720 0 683 | DWIDTH 5 0 684 | BBX 5 8 0 0 685 | BITMAP 686 | 00 687 | 08 688 | 08 689 | 08 690 | 08 691 | 08 692 | 48 693 | 30 694 | ENDCHAR 695 | STARTCHAR K 696 | ENCODING 75 697 | SWIDTH 720 0 698 | DWIDTH 5 0 699 | BBX 5 8 0 0 700 | BITMAP 701 | 00 702 | 48 703 | 48 704 | 50 705 | 60 706 | 50 707 | 48 708 | 48 709 | ENDCHAR 710 | STARTCHAR L 711 | ENCODING 76 712 | SWIDTH 720 0 713 | DWIDTH 5 0 714 | BBX 5 8 0 0 715 | BITMAP 716 | 00 717 | 40 718 | 40 719 | 40 720 | 40 721 | 40 722 | 40 723 | 38 724 | ENDCHAR 725 | STARTCHAR M 726 | ENCODING 77 727 | SWIDTH 720 0 728 | DWIDTH 6 0 729 | BBX 6 8 0 0 730 | BITMAP 731 | 00 732 | 28 733 | 54 734 | 54 735 | 54 736 | 44 737 | 44 738 | 44 739 | ENDCHAR 740 | STARTCHAR N 741 | ENCODING 78 742 | SWIDTH 720 0 743 | DWIDTH 5 0 744 | BBX 5 8 0 0 745 | BITMAP 746 | 00 747 | 70 748 | 48 749 | 48 750 | 48 751 | 48 752 | 48 753 | 48 754 | ENDCHAR 755 | STARTCHAR O 756 | ENCODING 79 757 | SWIDTH 720 0 758 | DWIDTH 5 0 759 | BBX 5 8 0 0 760 | BITMAP 761 | 00 762 | 30 763 | 48 764 | 48 765 | 48 766 | 48 767 | 48 768 | 30 769 | ENDCHAR 770 | STARTCHAR P 771 | ENCODING 80 772 | SWIDTH 720 0 773 | DWIDTH 5 0 774 | BBX 5 8 0 0 775 | BITMAP 776 | 00 777 | 70 778 | 48 779 | 48 780 | 70 781 | 40 782 | 40 783 | 40 784 | ENDCHAR 785 | STARTCHAR Q 786 | ENCODING 81 787 | SWIDTH 720 0 788 | DWIDTH 6 0 789 | BBX 6 8 0 0 790 | BITMAP 791 | 00 792 | 30 793 | 48 794 | 48 795 | 48 796 | 58 797 | 48 798 | 34 799 | ENDCHAR 800 | STARTCHAR R 801 | ENCODING 82 802 | SWIDTH 720 0 803 | DWIDTH 5 0 804 | BBX 5 8 0 0 805 | BITMAP 806 | 00 807 | 70 808 | 48 809 | 48 810 | 70 811 | 48 812 | 48 813 | 48 814 | ENDCHAR 815 | STARTCHAR S 816 | ENCODING 83 817 | SWIDTH 720 0 818 | DWIDTH 5 0 819 | BBX 5 8 0 0 820 | BITMAP 821 | 00 822 | 38 823 | 40 824 | 40 825 | 30 826 | 08 827 | 08 828 | 70 829 | ENDCHAR 830 | STARTCHAR T 831 | ENCODING 84 832 | SWIDTH 720 0 833 | DWIDTH 6 0 834 | BBX 6 8 0 0 835 | BITMAP 836 | 00 837 | 7c 838 | 10 839 | 10 840 | 10 841 | 10 842 | 10 843 | 10 844 | ENDCHAR 845 | STARTCHAR U 846 | ENCODING 85 847 | SWIDTH 720 0 848 | DWIDTH 5 0 849 | BBX 5 8 0 0 850 | BITMAP 851 | 00 852 | 48 853 | 48 854 | 48 855 | 48 856 | 48 857 | 48 858 | 30 859 | ENDCHAR 860 | STARTCHAR V 861 | ENCODING 86 862 | SWIDTH 720 0 863 | DWIDTH 6 0 864 | BBX 6 8 0 0 865 | BITMAP 866 | 00 867 | 44 868 | 44 869 | 44 870 | 44 871 | 44 872 | 28 873 | 10 874 | ENDCHAR 875 | STARTCHAR W 876 | ENCODING 87 877 | SWIDTH 720 0 878 | DWIDTH 6 0 879 | BBX 6 8 0 0 880 | BITMAP 881 | 00 882 | 44 883 | 44 884 | 44 885 | 54 886 | 54 887 | 54 888 | 28 889 | ENDCHAR 890 | STARTCHAR X 891 | ENCODING 88 892 | SWIDTH 720 0 893 | DWIDTH 6 0 894 | BBX 6 8 0 0 895 | BITMAP 896 | 00 897 | 44 898 | 44 899 | 28 900 | 10 901 | 28 902 | 44 903 | 44 904 | ENDCHAR 905 | STARTCHAR Y 906 | ENCODING 89 907 | SWIDTH 720 0 908 | DWIDTH 6 0 909 | BBX 6 8 0 0 910 | BITMAP 911 | 00 912 | 44 913 | 44 914 | 44 915 | 28 916 | 10 917 | 10 918 | 10 919 | ENDCHAR 920 | STARTCHAR Z 921 | ENCODING 90 922 | SWIDTH 720 0 923 | DWIDTH 6 0 924 | BBX 6 8 0 0 925 | BITMAP 926 | 00 927 | 7c 928 | 04 929 | 08 930 | 10 931 | 20 932 | 40 933 | 7c 934 | ENDCHAR 935 | STARTCHAR left square bracket 936 | ENCODING 91 937 | SWIDTH 720 0 938 | DWIDTH 3 0 939 | BBX 3 8 0 0 940 | BITMAP 941 | 00 942 | 60 943 | 40 944 | 40 945 | 40 946 | 40 947 | 40 948 | 60 949 | ENDCHAR 950 | STARTCHAR backslash 951 | ENCODING 92 952 | SWIDTH 720 0 953 | DWIDTH 5 0 954 | BBX 5 8 0 0 955 | BITMAP 956 | 40 957 | 40 958 | 20 959 | 20 960 | 10 961 | 10 962 | 08 963 | 08 964 | ENDCHAR 965 | STARTCHAR right square bracket 966 | ENCODING 93 967 | SWIDTH 720 0 968 | DWIDTH 3 0 969 | BBX 3 8 0 0 970 | BITMAP 971 | 00 972 | 60 973 | 20 974 | 20 975 | 20 976 | 20 977 | 20 978 | 60 979 | ENDCHAR 980 | STARTCHAR circumflex accent 981 | ENCODING 94 982 | SWIDTH 720 0 983 | DWIDTH 6 0 984 | BBX 6 8 0 0 985 | BITMAP 986 | 00 987 | 10 988 | 28 989 | 44 990 | 00 991 | 00 992 | 00 993 | 00 994 | ENDCHAR 995 | STARTCHAR underscore 996 | ENCODING 95 997 | SWIDTH 720 0 998 | DWIDTH 6 0 999 | BBX 6 8 0 0 1000 | BITMAP 1001 | 00 1002 | 00 1003 | 00 1004 | 00 1005 | 00 1006 | 00 1007 | 00 1008 | 7c 1009 | ENDCHAR 1010 | STARTCHAR grave accent 1011 | ENCODING 96 1012 | SWIDTH 720 0 1013 | DWIDTH 3 0 1014 | BBX 3 8 0 0 1015 | BITMAP 1016 | 00 1017 | 40 1018 | 40 1019 | 20 1020 | 00 1021 | 00 1022 | 00 1023 | 00 1024 | ENDCHAR 1025 | STARTCHAR a 1026 | ENCODING 97 1027 | SWIDTH 720 0 1028 | DWIDTH 5 0 1029 | BBX 5 8 0 0 1030 | BITMAP 1031 | 00 1032 | 00 1033 | 00 1034 | 30 1035 | 08 1036 | 38 1037 | 48 1038 | 38 1039 | ENDCHAR 1040 | STARTCHAR b 1041 | ENCODING 98 1042 | SWIDTH 720 0 1043 | DWIDTH 5 0 1044 | BBX 5 8 0 0 1045 | BITMAP 1046 | 00 1047 | 40 1048 | 40 1049 | 70 1050 | 48 1051 | 48 1052 | 48 1053 | 70 1054 | ENDCHAR 1055 | STARTCHAR c 1056 | ENCODING 99 1057 | SWIDTH 720 0 1058 | DWIDTH 5 0 1059 | BBX 5 8 0 0 1060 | BITMAP 1061 | 00 1062 | 00 1063 | 00 1064 | 38 1065 | 40 1066 | 40 1067 | 40 1068 | 38 1069 | ENDCHAR 1070 | STARTCHAR d 1071 | ENCODING 100 1072 | SWIDTH 720 0 1073 | DWIDTH 5 0 1074 | BBX 5 8 0 0 1075 | BITMAP 1076 | 00 1077 | 08 1078 | 08 1079 | 38 1080 | 48 1081 | 48 1082 | 48 1083 | 38 1084 | ENDCHAR 1085 | STARTCHAR e 1086 | ENCODING 101 1087 | SWIDTH 720 0 1088 | DWIDTH 5 0 1089 | BBX 5 8 0 0 1090 | BITMAP 1091 | 00 1092 | 00 1093 | 00 1094 | 30 1095 | 48 1096 | 78 1097 | 40 1098 | 38 1099 | ENDCHAR 1100 | STARTCHAR f 1101 | ENCODING 102 1102 | SWIDTH 720 0 1103 | DWIDTH 5 0 1104 | BBX 5 8 0 0 1105 | BITMAP 1106 | 00 1107 | 18 1108 | 20 1109 | 20 1110 | 70 1111 | 20 1112 | 20 1113 | 20 1114 | ENDCHAR 1115 | STARTCHAR g 1116 | ENCODING 103 1117 | SWIDTH 720 0 1118 | DWIDTH 5 0 1119 | BBX 5 8 0 0 1120 | BITMAP 1121 | 00 1122 | 00 1123 | 00 1124 | 38 1125 | 48 1126 | 38 1127 | 08 1128 | 70 1129 | ENDCHAR 1130 | STARTCHAR h 1131 | ENCODING 104 1132 | SWIDTH 720 0 1133 | DWIDTH 5 0 1134 | BBX 5 8 0 0 1135 | BITMAP 1136 | 00 1137 | 40 1138 | 40 1139 | 70 1140 | 48 1141 | 48 1142 | 48 1143 | 48 1144 | ENDCHAR 1145 | STARTCHAR i 1146 | ENCODING 105 1147 | SWIDTH 720 0 1148 | DWIDTH 2 0 1149 | BBX 2 8 0 0 1150 | BITMAP 1151 | 00 1152 | 40 1153 | 00 1154 | 40 1155 | 40 1156 | 40 1157 | 40 1158 | 40 1159 | ENDCHAR 1160 | STARTCHAR j 1161 | ENCODING 106 1162 | SWIDTH 720 0 1163 | DWIDTH 5 0 1164 | BBX 5 8 0 0 1165 | BITMAP 1166 | 00 1167 | 08 1168 | 00 1169 | 18 1170 | 08 1171 | 08 1172 | 48 1173 | 30 1174 | ENDCHAR 1175 | STARTCHAR k 1176 | ENCODING 107 1177 | SWIDTH 720 0 1178 | DWIDTH 5 0 1179 | BBX 5 8 0 0 1180 | BITMAP 1181 | 00 1182 | 40 1183 | 40 1184 | 48 1185 | 50 1186 | 60 1187 | 50 1188 | 48 1189 | ENDCHAR 1190 | STARTCHAR l 1191 | ENCODING 108 1192 | SWIDTH 720 0 1193 | DWIDTH 2 0 1194 | BBX 2 8 0 0 1195 | BITMAP 1196 | 00 1197 | 40 1198 | 40 1199 | 40 1200 | 40 1201 | 40 1202 | 40 1203 | 40 1204 | ENDCHAR 1205 | STARTCHAR m 1206 | ENCODING 109 1207 | SWIDTH 720 0 1208 | DWIDTH 6 0 1209 | BBX 6 8 0 0 1210 | BITMAP 1211 | 00 1212 | 00 1213 | 00 1214 | 28 1215 | 54 1216 | 54 1217 | 44 1218 | 44 1219 | ENDCHAR 1220 | STARTCHAR n 1221 | ENCODING 110 1222 | SWIDTH 720 0 1223 | DWIDTH 5 0 1224 | BBX 5 8 0 0 1225 | BITMAP 1226 | 00 1227 | 00 1228 | 00 1229 | 70 1230 | 48 1231 | 48 1232 | 48 1233 | 48 1234 | ENDCHAR 1235 | STARTCHAR o 1236 | ENCODING 111 1237 | SWIDTH 720 0 1238 | DWIDTH 5 0 1239 | BBX 5 8 0 0 1240 | BITMAP 1241 | 00 1242 | 00 1243 | 00 1244 | 30 1245 | 48 1246 | 48 1247 | 48 1248 | 30 1249 | ENDCHAR 1250 | STARTCHAR p 1251 | ENCODING 112 1252 | SWIDTH 720 0 1253 | DWIDTH 5 0 1254 | BBX 5 8 0 0 1255 | BITMAP 1256 | 00 1257 | 00 1258 | 00 1259 | 70 1260 | 48 1261 | 70 1262 | 40 1263 | 40 1264 | ENDCHAR 1265 | STARTCHAR q 1266 | ENCODING 113 1267 | SWIDTH 720 0 1268 | DWIDTH 5 0 1269 | BBX 5 8 0 0 1270 | BITMAP 1271 | 00 1272 | 00 1273 | 00 1274 | 38 1275 | 48 1276 | 38 1277 | 08 1278 | 08 1279 | ENDCHAR 1280 | STARTCHAR r 1281 | ENCODING 114 1282 | SWIDTH 720 0 1283 | DWIDTH 4 0 1284 | BBX 4 8 0 0 1285 | BITMAP 1286 | 00 1287 | 00 1288 | 00 1289 | 50 1290 | 60 1291 | 40 1292 | 40 1293 | 40 1294 | ENDCHAR 1295 | STARTCHAR s 1296 | ENCODING 115 1297 | SWIDTH 720 0 1298 | DWIDTH 5 0 1299 | BBX 5 8 0 0 1300 | BITMAP 1301 | 00 1302 | 00 1303 | 00 1304 | 38 1305 | 40 1306 | 30 1307 | 08 1308 | 70 1309 | ENDCHAR 1310 | STARTCHAR t 1311 | ENCODING 116 1312 | SWIDTH 720 0 1313 | DWIDTH 4 0 1314 | BBX 4 8 0 0 1315 | BITMAP 1316 | 00 1317 | 20 1318 | 20 1319 | 70 1320 | 20 1321 | 20 1322 | 20 1323 | 20 1324 | ENDCHAR 1325 | STARTCHAR u 1326 | ENCODING 117 1327 | SWIDTH 720 0 1328 | DWIDTH 5 0 1329 | BBX 5 8 0 0 1330 | BITMAP 1331 | 00 1332 | 00 1333 | 00 1334 | 48 1335 | 48 1336 | 48 1337 | 48 1338 | 30 1339 | ENDCHAR 1340 | STARTCHAR v 1341 | ENCODING 118 1342 | SWIDTH 720 0 1343 | DWIDTH 6 0 1344 | BBX 6 8 0 0 1345 | BITMAP 1346 | 00 1347 | 00 1348 | 00 1349 | 44 1350 | 44 1351 | 44 1352 | 28 1353 | 10 1354 | ENDCHAR 1355 | STARTCHAR w 1356 | ENCODING 119 1357 | SWIDTH 720 0 1358 | DWIDTH 6 0 1359 | BBX 6 8 0 0 1360 | BITMAP 1361 | 00 1362 | 00 1363 | 00 1364 | 44 1365 | 44 1366 | 54 1367 | 54 1368 | 28 1369 | ENDCHAR 1370 | STARTCHAR x 1371 | ENCODING 120 1372 | SWIDTH 720 0 1373 | DWIDTH 4 0 1374 | BBX 4 8 0 0 1375 | BITMAP 1376 | 00 1377 | 00 1378 | 00 1379 | 50 1380 | 50 1381 | 20 1382 | 50 1383 | 50 1384 | ENDCHAR 1385 | STARTCHAR y 1386 | ENCODING 121 1387 | SWIDTH 720 0 1388 | DWIDTH 5 0 1389 | BBX 5 8 0 0 1390 | BITMAP 1391 | 00 1392 | 00 1393 | 00 1394 | 48 1395 | 48 1396 | 38 1397 | 08 1398 | 30 1399 | ENDCHAR 1400 | STARTCHAR z 1401 | ENCODING 122 1402 | SWIDTH 720 0 1403 | DWIDTH 4 0 1404 | BBX 4 8 0 0 1405 | BITMAP 1406 | 00 1407 | 00 1408 | 00 1409 | 70 1410 | 10 1411 | 20 1412 | 40 1413 | 70 1414 | ENDCHAR 1415 | STARTCHAR left curly bracket 1416 | ENCODING 123 1417 | SWIDTH 720 0 1418 | DWIDTH 4 0 1419 | BBX 4 8 0 0 1420 | BITMAP 1421 | 00 1422 | 10 1423 | 20 1424 | 20 1425 | 40 1426 | 20 1427 | 20 1428 | 10 1429 | ENDCHAR 1430 | STARTCHAR pipe symbol 1431 | ENCODING 124 1432 | SWIDTH 720 0 1433 | DWIDTH 2 0 1434 | BBX 2 8 0 0 1435 | BITMAP 1436 | 40 1437 | 40 1438 | 40 1439 | 40 1440 | 40 1441 | 40 1442 | 40 1443 | 40 1444 | ENDCHAR 1445 | STARTCHAR right curly bracket 1446 | ENCODING 125 1447 | SWIDTH 720 0 1448 | DWIDTH 4 0 1449 | BBX 4 8 0 0 1450 | BITMAP 1451 | 00 1452 | 40 1453 | 20 1454 | 20 1455 | 10 1456 | 20 1457 | 20 1458 | 40 1459 | ENDCHAR 1460 | STARTCHAR tilde 1461 | ENCODING 126 1462 | SWIDTH 720 0 1463 | DWIDTH 6 0 1464 | BBX 6 8 0 0 1465 | BITMAP 1466 | 00 1467 | 74 1468 | 5c 1469 | 00 1470 | 00 1471 | 00 1472 | 00 1473 | 00 1474 | ENDCHAR 1475 | STARTCHAR inverted exclamation 1476 | ENCODING 161 1477 | SWIDTH 720 0 1478 | DWIDTH 2 0 1479 | BBX 2 8 0 0 1480 | BITMAP 1481 | 00 1482 | 40 1483 | 00 1484 | 40 1485 | 40 1486 | 40 1487 | 40 1488 | 40 1489 | ENDCHAR 1490 | STARTCHAR cent sign 1491 | ENCODING 162 1492 | SWIDTH 720 0 1493 | DWIDTH 6 0 1494 | BBX 6 8 0 0 1495 | BITMAP 1496 | 00 1497 | 00 1498 | 10 1499 | 38 1500 | 54 1501 | 50 1502 | 54 1503 | 38 1504 | ENDCHAR 1505 | STARTCHAR pound sign 1506 | ENCODING 163 1507 | SWIDTH 720 0 1508 | DWIDTH 6 0 1509 | BBX 6 8 0 0 1510 | BITMAP 1511 | 00 1512 | 18 1513 | 24 1514 | 20 1515 | 78 1516 | 20 1517 | 20 1518 | 7c 1519 | ENDCHAR 1520 | STARTCHAR euro sign 1521 | ENCODING 164 1522 | SWIDTH 720 0 1523 | DWIDTH 5 0 1524 | BBX 5 8 0 0 1525 | BITMAP 1526 | 00 1527 | 18 1528 | 20 1529 | 70 1530 | 20 1531 | 70 1532 | 20 1533 | 18 1534 | ENDCHAR 1535 | STARTCHAR yen sign 1536 | ENCODING 165 1537 | SWIDTH 720 0 1538 | DWIDTH 6 0 1539 | BBX 6 8 0 0 1540 | BITMAP 1541 | 00 1542 | 44 1543 | 44 1544 | 28 1545 | 7c 1546 | 10 1547 | 7c 1548 | 10 1549 | ENDCHAR 1550 | STARTCHAR broken bar 1551 | ENCODING 166 1552 | SWIDTH 720 0 1553 | DWIDTH 2 0 1554 | BBX 2 8 0 0 1555 | BITMAP 1556 | 00 1557 | 40 1558 | 40 1559 | 40 1560 | 00 1561 | 40 1562 | 40 1563 | 40 1564 | ENDCHAR 1565 | STARTCHAR section sign 1566 | ENCODING 167 1567 | SWIDTH 720 0 1568 | DWIDTH 5 0 1569 | BBX 5 8 0 0 1570 | BITMAP 1571 | 00 1572 | 38 1573 | 40 1574 | 30 1575 | 48 1576 | 30 1577 | 08 1578 | 70 1579 | ENDCHAR 1580 | STARTCHAR dieresis 1581 | ENCODING 168 1582 | SWIDTH 720 0 1583 | DWIDTH 5 0 1584 | BBX 5 8 0 0 1585 | BITMAP 1586 | 00 1587 | 48 1588 | 00 1589 | 00 1590 | 00 1591 | 00 1592 | 00 1593 | 00 1594 | ENDCHAR 1595 | STARTCHAR copyright sign 1596 | ENCODING 169 1597 | SWIDTH 720 0 1598 | DWIDTH 8 0 1599 | BBX 8 8 0 0 1600 | BITMAP 1601 | 00 1602 | 3e 1603 | 41 1604 | 5d 1605 | 51 1606 | 5d 1607 | 41 1608 | 3e 1609 | ENDCHAR 1610 | STARTCHAR feminine ordinal 1611 | ENCODING 170 1612 | SWIDTH 720 0 1613 | DWIDTH 7 0 1614 | BBX 7 8 0 0 1615 | BITMAP 1616 | 00 1617 | 3c 1618 | 04 1619 | 1c 1620 | 24 1621 | 3e 1622 | 00 1623 | 00 1624 | ENDCHAR 1625 | STARTCHAR guillemot left 1626 | ENCODING 171 1627 | SWIDTH 720 0 1628 | DWIDTH 6 0 1629 | BBX 6 8 0 0 1630 | BITMAP 1631 | 00 1632 | 00 1633 | 14 1634 | 28 1635 | 50 1636 | 28 1637 | 14 1638 | 00 1639 | ENDCHAR 1640 | STARTCHAR not sign 1641 | ENCODING 172 1642 | SWIDTH 720 0 1643 | DWIDTH 6 0 1644 | BBX 6 8 0 0 1645 | BITMAP 1646 | 00 1647 | 7c 1648 | 04 1649 | 00 1650 | 00 1651 | 00 1652 | 00 1653 | 00 1654 | ENDCHAR 1655 | STARTCHAR soft hyphen 1656 | ENCODING 173 1657 | SWIDTH 720 0 1658 | DWIDTH 6 0 1659 | BBX 6 8 0 0 1660 | BITMAP 1661 | 00 1662 | 00 1663 | 00 1664 | 7c 1665 | 00 1666 | 00 1667 | 00 1668 | 00 1669 | ENDCHAR 1670 | STARTCHAR registered trademark 1671 | ENCODING 174 1672 | SWIDTH 720 0 1673 | DWIDTH 8 0 1674 | BBX 8 8 0 0 1675 | BITMAP 1676 | 00 1677 | 3e 1678 | 41 1679 | 5d 1680 | 55 1681 | 59 1682 | 55 1683 | 3e 1684 | ENDCHAR 1685 | STARTCHAR macron 1686 | ENCODING 175 1687 | SWIDTH 720 0 1688 | DWIDTH 8 0 1689 | BBX 8 8 0 0 1690 | BITMAP 1691 | 00 1692 | 7f 1693 | 00 1694 | 00 1695 | 00 1696 | 00 1697 | 00 1698 | 00 1699 | ENDCHAR 1700 | STARTCHAR degree sign 1701 | ENCODING 176 1702 | SWIDTH 720 0 1703 | DWIDTH 5 0 1704 | BBX 5 8 0 0 1705 | BITMAP 1706 | 00 1707 | 30 1708 | 48 1709 | 30 1710 | 00 1711 | 00 1712 | 00 1713 | 00 1714 | ENDCHAR 1715 | STARTCHAR plus or minus 1716 | ENCODING 177 1717 | SWIDTH 720 0 1718 | DWIDTH 6 0 1719 | BBX 6 8 0 0 1720 | BITMAP 1721 | 00 1722 | 10 1723 | 7c 1724 | 10 1725 | 00 1726 | 7c 1727 | 00 1728 | 00 1729 | ENDCHAR 1730 | STARTCHAR superscript 2 1731 | ENCODING 178 1732 | SWIDTH 720 0 1733 | DWIDTH 5 0 1734 | BBX 5 8 0 0 1735 | BITMAP 1736 | 00 1737 | 70 1738 | 10 1739 | 60 1740 | 78 1741 | 00 1742 | 00 1743 | 00 1744 | ENDCHAR 1745 | STARTCHAR superscript 3 1746 | ENCODING 179 1747 | SWIDTH 720 0 1748 | DWIDTH 4 0 1749 | BBX 4 8 0 0 1750 | BITMAP 1751 | 00 1752 | 70 1753 | 30 1754 | 10 1755 | 70 1756 | 00 1757 | 00 1758 | 00 1759 | ENDCHAR 1760 | STARTCHAR spacing acute 1761 | ENCODING 180 1762 | SWIDTH 720 0 1763 | DWIDTH 3 0 1764 | BBX 3 8 0 0 1765 | BITMAP 1766 | 00 1767 | 20 1768 | 40 1769 | 00 1770 | 00 1771 | 00 1772 | 00 1773 | 00 1774 | ENDCHAR 1775 | STARTCHAR micro sign 1776 | ENCODING 181 1777 | SWIDTH 720 0 1778 | DWIDTH 5 0 1779 | BBX 5 8 0 0 1780 | BITMAP 1781 | 00 1782 | 48 1783 | 48 1784 | 70 1785 | 40 1786 | 00 1787 | 00 1788 | 00 1789 | ENDCHAR 1790 | STARTCHAR paragraph sign 1791 | ENCODING 182 1792 | SWIDTH 720 0 1793 | DWIDTH 7 0 1794 | BBX 7 8 0 0 1795 | BITMAP 1796 | 00 1797 | 3e 1798 | 7a 1799 | 7a 1800 | 1a 1801 | 0a 1802 | 0a 1803 | 0a 1804 | ENDCHAR 1805 | STARTCHAR middle dot 1806 | ENCODING 183 1807 | SWIDTH 720 0 1808 | DWIDTH 5 0 1809 | BBX 5 8 0 0 1810 | BITMAP 1811 | 00 1812 | 00 1813 | 00 1814 | 30 1815 | 78 1816 | 30 1817 | 00 1818 | 00 1819 | ENDCHAR 1820 | STARTCHAR cedilla 1821 | ENCODING 184 1822 | SWIDTH 720 0 1823 | DWIDTH 5 0 1824 | BBX 5 8 0 0 1825 | BITMAP 1826 | 00 1827 | 00 1828 | 00 1829 | 00 1830 | 00 1831 | 00 1832 | 10 1833 | 08 1834 | ENDCHAR 1835 | STARTCHAR suprtscript 1 1836 | ENCODING 185 1837 | SWIDTH 720 0 1838 | DWIDTH 4 0 1839 | BBX 4 8 0 0 1840 | BITMAP 1841 | 00 1842 | 60 1843 | 20 1844 | 70 1845 | 00 1846 | 00 1847 | 00 1848 | 00 1849 | ENDCHAR 1850 | STARTCHAR masculine ordinal 1851 | ENCODING 186 1852 | SWIDTH 720 0 1853 | DWIDTH 5 0 1854 | BBX 5 8 0 0 1855 | BITMAP 1856 | 00 1857 | 30 1858 | 48 1859 | 30 1860 | 00 1861 | 00 1862 | 00 1863 | 00 1864 | ENDCHAR 1865 | STARTCHAR guillemot right 1866 | ENCODING 187 1867 | SWIDTH 720 0 1868 | DWIDTH 6 0 1869 | BBX 6 8 0 0 1870 | BITMAP 1871 | 00 1872 | 00 1873 | 50 1874 | 28 1875 | 14 1876 | 28 1877 | 50 1878 | 00 1879 | ENDCHAR 1880 | STARTCHAR one quarter 1881 | ENCODING 188 1882 | SWIDTH 720 0 1883 | DWIDTH 7 0 1884 | BBX 7 8 0 0 1885 | BITMAP 1886 | 00 1887 | 44 1888 | 48 1889 | 50 1890 | 2a 1891 | 4e 1892 | 02 1893 | 00 1894 | ENDCHAR 1895 | STARTCHAR one half 1896 | ENCODING 189 1897 | SWIDTH 720 0 1898 | DWIDTH 8 0 1899 | BBX 8 8 0 0 1900 | BITMAP 1901 | 00 1902 | 44 1903 | 48 1904 | 50 1905 | 2e 1906 | 42 1907 | 0c 1908 | 0f 1909 | ENDCHAR 1910 | STARTCHAR three quarters 1911 | ENCODING 190 1912 | SWIDTH 720 0 1913 | DWIDTH 7 0 1914 | BBX 7 8 0 0 1915 | BITMAP 1916 | 00 1917 | 72 1918 | 34 1919 | 18 1920 | 70 1921 | 2a 1922 | 4e 1923 | 02 1924 | ENDCHAR 1925 | STARTCHAR inverted question 1926 | ENCODING 191 1927 | SWIDTH 720 0 1928 | DWIDTH 5 0 1929 | BBX 5 8 0 0 1930 | BITMAP 1931 | 00 1932 | 10 1933 | 00 1934 | 10 1935 | 30 1936 | 40 1937 | 48 1938 | 30 1939 | ENDCHAR 1940 | STARTCHAR large A, grave accent 1941 | ENCODING 192 1942 | SWIDTH 720 0 1943 | DWIDTH 5 0 1944 | BBX 5 8 0 0 1945 | BITMAP 1946 | 40 1947 | 20 1948 | 30 1949 | 48 1950 | 48 1951 | 78 1952 | 48 1953 | 48 1954 | ENDCHAR 1955 | STARTCHAR large A, acute accent 1956 | ENCODING 193 1957 | SWIDTH 720 0 1958 | DWIDTH 5 0 1959 | BBX 5 8 0 0 1960 | BITMAP 1961 | 08 1962 | 10 1963 | 30 1964 | 48 1965 | 48 1966 | 78 1967 | 48 1968 | 48 1969 | ENDCHAR 1970 | STARTCHAR large A, circumflex accent 1971 | ENCODING 194 1972 | SWIDTH 720 0 1973 | DWIDTH 5 0 1974 | BBX 5 8 0 0 1975 | BITMAP 1976 | 30 1977 | 48 1978 | 30 1979 | 48 1980 | 48 1981 | 78 1982 | 48 1983 | 48 1984 | ENDCHAR 1985 | STARTCHAR large A, tilde 1986 | ENCODING 195 1987 | SWIDTH 720 0 1988 | DWIDTH 5 0 1989 | BBX 5 8 0 0 1990 | BITMAP 1991 | 28 1992 | 50 1993 | 30 1994 | 48 1995 | 48 1996 | 78 1997 | 48 1998 | 48 1999 | ENDCHAR 2000 | STARTCHAR large A, dieresis 2001 | ENCODING 196 2002 | SWIDTH 720 0 2003 | DWIDTH 5 0 2004 | BBX 5 8 0 0 2005 | BITMAP 2006 | 48 2007 | 00 2008 | 30 2009 | 48 2010 | 48 2011 | 78 2012 | 48 2013 | 48 2014 | ENDCHAR 2015 | STARTCHAR large A, circle 2016 | ENCODING 197 2017 | SWIDTH 720 0 2018 | DWIDTH 5 0 2019 | BBX 5 8 0 0 2020 | BITMAP 2021 | 30 2022 | 48 2023 | 30 2024 | 48 2025 | 48 2026 | 78 2027 | 48 2028 | 48 2029 | ENDCHAR 2030 | STARTCHAR large AE, diphtong 2031 | ENCODING 198 2032 | SWIDTH 720 0 2033 | DWIDTH 8 0 2034 | BBX 8 8 0 0 2035 | BITMAP 2036 | 00 2037 | 3f 2038 | 48 2039 | 48 2040 | 7e 2041 | 48 2042 | 48 2043 | 4f 2044 | ENDCHAR 2045 | STARTCHAR large C, cedilla 2046 | ENCODING 199 2047 | SWIDTH 720 0 2048 | DWIDTH 7 0 2049 | BBX 7 8 0 0 2050 | BITMAP 2051 | 00 2052 | 3c 2053 | 42 2054 | 40 2055 | 40 2056 | 42 2057 | 3c 2058 | 10 2059 | ENDCHAR 2060 | STARTCHAR large E, grave accent 2061 | ENCODING 200 2062 | SWIDTH 720 0 2063 | DWIDTH 5 0 2064 | BBX 5 8 0 0 2065 | BITMAP 2066 | 20 2067 | 10 2068 | 38 2069 | 40 2070 | 70 2071 | 40 2072 | 40 2073 | 38 2074 | ENDCHAR 2075 | STARTCHAR large E, acute accent 2076 | ENCODING 201 2077 | SWIDTH 720 0 2078 | DWIDTH 5 0 2079 | BBX 5 8 0 0 2080 | BITMAP 2081 | 10 2082 | 20 2083 | 38 2084 | 40 2085 | 70 2086 | 40 2087 | 40 2088 | 38 2089 | ENDCHAR 2090 | STARTCHAR large E, circumflex accent 2091 | ENCODING 202 2092 | SWIDTH 720 0 2093 | DWIDTH 5 0 2094 | BBX 5 8 0 0 2095 | BITMAP 2096 | 30 2097 | 48 2098 | 38 2099 | 40 2100 | 70 2101 | 40 2102 | 40 2103 | 38 2104 | ENDCHAR 2105 | STARTCHAR large E, dieresis 2106 | ENCODING 203 2107 | SWIDTH 720 0 2108 | DWIDTH 5 0 2109 | BBX 5 8 0 0 2110 | BITMAP 2111 | 48 2112 | 00 2113 | 38 2114 | 40 2115 | 70 2116 | 40 2117 | 40 2118 | 38 2119 | ENDCHAR 2120 | STARTCHAR capital I, grave accent 2121 | ENCODING 204 2122 | SWIDTH 720 0 2123 | DWIDTH 4 0 2124 | BBX 4 8 0 0 2125 | BITMAP 2126 | 40 2127 | 20 2128 | 70 2129 | 20 2130 | 20 2131 | 20 2132 | 20 2133 | 70 2134 | ENDCHAR 2135 | STARTCHAR capital I, acute accent 2136 | ENCODING 205 2137 | SWIDTH 720 0 2138 | DWIDTH 4 0 2139 | BBX 4 8 0 0 2140 | BITMAP 2141 | 10 2142 | 20 2143 | 70 2144 | 20 2145 | 20 2146 | 20 2147 | 20 2148 | 70 2149 | ENDCHAR 2150 | STARTCHAR capital I, circumflex accent 2151 | ENCODING 206 2152 | SWIDTH 720 0 2153 | DWIDTH 4 0 2154 | BBX 4 8 0 0 2155 | BITMAP 2156 | 20 2157 | 50 2158 | 70 2159 | 20 2160 | 20 2161 | 20 2162 | 20 2163 | 70 2164 | ENDCHAR 2165 | STARTCHAR capital I, dieresis 2166 | ENCODING 207 2167 | SWIDTH 720 0 2168 | DWIDTH 4 0 2169 | BBX 4 8 0 0 2170 | BITMAP 2171 | 50 2172 | 00 2173 | 70 2174 | 20 2175 | 20 2176 | 20 2177 | 20 2178 | 70 2179 | ENDCHAR 2180 | STARTCHAR capital Eth, Icelandic 2181 | ENCODING 208 2182 | SWIDTH 720 0 2183 | DWIDTH 6 0 2184 | BBX 6 8 0 0 2185 | BITMAP 2186 | 00 2187 | 38 2188 | 24 2189 | 24 2190 | 74 2191 | 24 2192 | 24 2193 | 38 2194 | ENDCHAR 2195 | STARTCHAR capital N, tilde 2196 | ENCODING 209 2197 | SWIDTH 720 0 2198 | DWIDTH 5 0 2199 | BBX 5 8 0 0 2200 | BITMAP 2201 | 28 2202 | 50 2203 | 70 2204 | 48 2205 | 48 2206 | 48 2207 | 48 2208 | 48 2209 | ENDCHAR 2210 | STARTCHAR capital O, grave accent 2211 | ENCODING 210 2212 | SWIDTH 720 0 2213 | DWIDTH 5 0 2214 | BBX 5 8 0 0 2215 | BITMAP 2216 | 40 2217 | 20 2218 | 30 2219 | 48 2220 | 48 2221 | 48 2222 | 48 2223 | 30 2224 | ENDCHAR 2225 | STARTCHAR capital O, acute accent 2226 | ENCODING 211 2227 | SWIDTH 720 0 2228 | DWIDTH 5 0 2229 | BBX 5 8 0 0 2230 | BITMAP 2231 | 08 2232 | 10 2233 | 30 2234 | 48 2235 | 48 2236 | 48 2237 | 48 2238 | 30 2239 | ENDCHAR 2240 | STARTCHAR capital O, circumflex accent 2241 | ENCODING 212 2242 | SWIDTH 720 0 2243 | DWIDTH 5 0 2244 | BBX 5 8 0 0 2245 | BITMAP 2246 | 30 2247 | 48 2248 | 30 2249 | 48 2250 | 48 2251 | 48 2252 | 48 2253 | 30 2254 | ENDCHAR 2255 | STARTCHAR capital O, tilde 2256 | ENCODING 213 2257 | SWIDTH 720 0 2258 | DWIDTH 5 0 2259 | BBX 5 8 0 0 2260 | BITMAP 2261 | 28 2262 | 50 2263 | 30 2264 | 48 2265 | 48 2266 | 48 2267 | 48 2268 | 30 2269 | ENDCHAR 2270 | STARTCHAR capital O, dieresis 2271 | ENCODING 214 2272 | SWIDTH 720 0 2273 | DWIDTH 5 0 2274 | BBX 5 8 0 0 2275 | BITMAP 2276 | 48 2277 | 00 2278 | 30 2279 | 48 2280 | 48 2281 | 48 2282 | 48 2283 | 30 2284 | ENDCHAR 2285 | STARTCHAR multiply sign 2286 | ENCODING 215 2287 | SWIDTH 720 0 2288 | DWIDTH 6 0 2289 | BBX 6 8 0 0 2290 | BITMAP 2291 | 00 2292 | 00 2293 | 44 2294 | 28 2295 | 10 2296 | 28 2297 | 44 2298 | 00 2299 | ENDCHAR 2300 | STARTCHAR capital O, slash 2301 | ENCODING 216 2302 | SWIDTH 720 0 2303 | DWIDTH 8 0 2304 | BBX 8 8 0 0 2305 | BITMAP 2306 | 00 2307 | 01 2308 | 1e 2309 | 26 2310 | 2a 2311 | 32 2312 | 3c 2313 | 40 2314 | ENDCHAR 2315 | STARTCHAR capital U, grave accent 2316 | ENCODING 217 2317 | SWIDTH 720 0 2318 | DWIDTH 5 0 2319 | BBX 5 8 0 0 2320 | BITMAP 2321 | 20 2322 | 10 2323 | 48 2324 | 48 2325 | 48 2326 | 48 2327 | 48 2328 | 30 2329 | ENDCHAR 2330 | STARTCHAR capital U, acute accent 2331 | ENCODING 218 2332 | SWIDTH 720 0 2333 | DWIDTH 5 0 2334 | BBX 5 8 0 0 2335 | BITMAP 2336 | 10 2337 | 20 2338 | 48 2339 | 48 2340 | 48 2341 | 48 2342 | 48 2343 | 30 2344 | ENDCHAR 2345 | STARTCHAR capital U, circumflex accent 2346 | ENCODING 219 2347 | SWIDTH 720 0 2348 | DWIDTH 5 0 2349 | BBX 5 8 0 0 2350 | BITMAP 2351 | 30 2352 | 48 2353 | 00 2354 | 48 2355 | 48 2356 | 48 2357 | 48 2358 | 30 2359 | ENDCHAR 2360 | STARTCHAR capital U, dieresis 2361 | ENCODING 220 2362 | SWIDTH 720 0 2363 | DWIDTH 5 0 2364 | BBX 5 8 0 0 2365 | BITMAP 2366 | 48 2367 | 00 2368 | 48 2369 | 48 2370 | 48 2371 | 48 2372 | 48 2373 | 30 2374 | ENDCHAR 2375 | STARTCHAR capital Y, acute accent 2376 | ENCODING 221 2377 | SWIDTH 720 0 2378 | DWIDTH 6 0 2379 | BBX 6 8 0 0 2380 | BITMAP 2381 | 08 2382 | 10 2383 | 44 2384 | 28 2385 | 10 2386 | 10 2387 | 10 2388 | 10 2389 | ENDCHAR 2390 | STARTCHAR capital Thorn, Icelandic 2391 | ENCODING 222 2392 | SWIDTH 720 0 2393 | DWIDTH 5 0 2394 | BBX 5 8 0 0 2395 | BITMAP 2396 | 00 2397 | 40 2398 | 70 2399 | 48 2400 | 70 2401 | 40 2402 | 40 2403 | 40 2404 | ENDCHAR 2405 | STARTCHAR sharp s, German 2406 | ENCODING 223 2407 | SWIDTH 720 0 2408 | DWIDTH 6 0 2409 | BBX 6 8 0 0 2410 | BITMAP 2411 | 00 2412 | 30 2413 | 48 2414 | 48 2415 | 50 2416 | 48 2417 | 50 2418 | 40 2419 | ENDCHAR 2420 | STARTCHAR small a, grave accent 2421 | ENCODING 224 2422 | SWIDTH 720 0 2423 | DWIDTH 5 0 2424 | BBX 5 8 0 0 2425 | BITMAP 2426 | 20 2427 | 10 2428 | 00 2429 | 30 2430 | 08 2431 | 38 2432 | 48 2433 | 38 2434 | ENDCHAR 2435 | STARTCHAR small a, acute accent 2436 | ENCODING 225 2437 | SWIDTH 720 0 2438 | DWIDTH 5 0 2439 | BBX 5 8 0 0 2440 | BITMAP 2441 | 10 2442 | 20 2443 | 00 2444 | 30 2445 | 08 2446 | 38 2447 | 48 2448 | 38 2449 | ENDCHAR 2450 | STARTCHAR small a, circumflex accent 2451 | ENCODING 226 2452 | SWIDTH 720 0 2453 | DWIDTH 5 0 2454 | BBX 5 8 0 0 2455 | BITMAP 2456 | 30 2457 | 48 2458 | 00 2459 | 30 2460 | 08 2461 | 38 2462 | 48 2463 | 38 2464 | ENDCHAR 2465 | STARTCHAR small a, tilde 2466 | ENCODING 227 2467 | SWIDTH 720 0 2468 | DWIDTH 5 0 2469 | BBX 5 8 0 0 2470 | BITMAP 2471 | 28 2472 | 50 2473 | 00 2474 | 30 2475 | 08 2476 | 38 2477 | 48 2478 | 38 2479 | ENDCHAR 2480 | STARTCHAR small a, dieresis 2481 | ENCODING 228 2482 | SWIDTH 720 0 2483 | DWIDTH 5 0 2484 | BBX 5 8 0 0 2485 | BITMAP 2486 | 00 2487 | 48 2488 | 00 2489 | 30 2490 | 08 2491 | 38 2492 | 48 2493 | 38 2494 | ENDCHAR 2495 | STARTCHAR small a, circle 2496 | ENCODING 229 2497 | SWIDTH 720 0 2498 | DWIDTH 5 0 2499 | BBX 5 8 0 0 2500 | BITMAP 2501 | 00 2502 | 30 2503 | 48 2504 | 30 2505 | 08 2506 | 38 2507 | 48 2508 | 38 2509 | ENDCHAR 2510 | STARTCHAR small ae, diphtong 2511 | ENCODING 230 2512 | SWIDTH 720 0 2513 | DWIDTH 8 0 2514 | BBX 8 8 0 0 2515 | BITMAP 2516 | 00 2517 | 00 2518 | 00 2519 | 36 2520 | 09 2521 | 3f 2522 | 48 2523 | 3f 2524 | ENDCHAR 2525 | STARTCHAR small c, cedilla 2526 | ENCODING 231 2527 | SWIDTH 720 0 2528 | DWIDTH 6 0 2529 | BBX 6 8 0 0 2530 | BITMAP 2531 | 00 2532 | 00 2533 | 00 2534 | 3c 2535 | 40 2536 | 40 2537 | 3c 2538 | 10 2539 | ENDCHAR 2540 | STARTCHAR small e, grave accent 2541 | ENCODING 232 2542 | SWIDTH 720 0 2543 | DWIDTH 5 0 2544 | BBX 5 8 0 0 2545 | BITMAP 2546 | 20 2547 | 10 2548 | 00 2549 | 30 2550 | 48 2551 | 78 2552 | 40 2553 | 38 2554 | ENDCHAR 2555 | STARTCHAR small e, acute accent 2556 | ENCODING 233 2557 | SWIDTH 720 0 2558 | DWIDTH 5 0 2559 | BBX 5 8 0 0 2560 | BITMAP 2561 | 10 2562 | 20 2563 | 00 2564 | 30 2565 | 48 2566 | 78 2567 | 40 2568 | 38 2569 | ENDCHAR 2570 | STARTCHAR small e, circumflex accent 2571 | ENCODING 234 2572 | SWIDTH 720 0 2573 | DWIDTH 5 0 2574 | BBX 5 8 0 0 2575 | BITMAP 2576 | 30 2577 | 48 2578 | 00 2579 | 30 2580 | 48 2581 | 78 2582 | 40 2583 | 38 2584 | ENDCHAR 2585 | STARTCHAR small e, dieresis 2586 | ENCODING 235 2587 | SWIDTH 720 0 2588 | DWIDTH 5 0 2589 | BBX 5 8 0 0 2590 | BITMAP 2591 | 00 2592 | 48 2593 | 00 2594 | 30 2595 | 48 2596 | 78 2597 | 40 2598 | 38 2599 | ENDCHAR 2600 | STARTCHAR small i, grave accent 2601 | ENCODING 236 2602 | SWIDTH 720 0 2603 | DWIDTH 3 0 2604 | BBX 3 8 0 0 2605 | BITMAP 2606 | 40 2607 | 20 2608 | 00 2609 | 40 2610 | 40 2611 | 40 2612 | 40 2613 | 40 2614 | ENDCHAR 2615 | STARTCHAR small i, acute accent 2616 | ENCODING 237 2617 | SWIDTH 720 0 2618 | DWIDTH 3 0 2619 | BBX 3 8 0 0 2620 | BITMAP 2621 | 20 2622 | 40 2623 | 00 2624 | 40 2625 | 40 2626 | 40 2627 | 40 2628 | 40 2629 | ENDCHAR 2630 | STARTCHAR small i, circumflex accent 2631 | ENCODING 238 2632 | SWIDTH 720 0 2633 | DWIDTH 4 0 2634 | BBX 4 8 0 0 2635 | BITMAP 2636 | 20 2637 | 50 2638 | 00 2639 | 20 2640 | 20 2641 | 20 2642 | 20 2643 | 20 2644 | ENDCHAR 2645 | STARTCHAR small i, dieresis 2646 | ENCODING 239 2647 | SWIDTH 720 0 2648 | DWIDTH 4 0 2649 | BBX 4 8 0 0 2650 | BITMAP 2651 | 00 2652 | 50 2653 | 00 2654 | 20 2655 | 20 2656 | 20 2657 | 20 2658 | 20 2659 | ENDCHAR 2660 | STARTCHAR small eth, Icelandic 2661 | ENCODING 240 2662 | SWIDTH 720 0 2663 | DWIDTH 5 0 2664 | BBX 5 8 0 0 2665 | BITMAP 2666 | 20 2667 | 60 2668 | 10 2669 | 30 2670 | 48 2671 | 48 2672 | 48 2673 | 30 2674 | ENDCHAR 2675 | STARTCHAR small n, tilde 2676 | ENCODING 241 2677 | SWIDTH 720 0 2678 | DWIDTH 5 0 2679 | BBX 5 8 0 0 2680 | BITMAP 2681 | 28 2682 | 50 2683 | 00 2684 | 70 2685 | 48 2686 | 48 2687 | 48 2688 | 48 2689 | ENDCHAR 2690 | STARTCHAR small o, grave accent 2691 | ENCODING 242 2692 | SWIDTH 720 0 2693 | DWIDTH 5 0 2694 | BBX 5 8 0 0 2695 | BITMAP 2696 | 40 2697 | 20 2698 | 00 2699 | 30 2700 | 48 2701 | 48 2702 | 48 2703 | 30 2704 | ENDCHAR 2705 | STARTCHAR small o, acute accent 2706 | ENCODING 243 2707 | SWIDTH 720 0 2708 | DWIDTH 5 0 2709 | BBX 5 8 0 0 2710 | BITMAP 2711 | 08 2712 | 10 2713 | 00 2714 | 30 2715 | 48 2716 | 48 2717 | 48 2718 | 30 2719 | ENDCHAR 2720 | STARTCHAR small o, circumflex accent 2721 | ENCODING 244 2722 | SWIDTH 720 0 2723 | DWIDTH 5 0 2724 | BBX 5 8 0 0 2725 | BITMAP 2726 | 30 2727 | 48 2728 | 00 2729 | 30 2730 | 48 2731 | 48 2732 | 48 2733 | 30 2734 | ENDCHAR 2735 | STARTCHAR small o, tilde 2736 | ENCODING 245 2737 | SWIDTH 720 0 2738 | DWIDTH 5 0 2739 | BBX 5 8 0 0 2740 | BITMAP 2741 | 28 2742 | 50 2743 | 00 2744 | 30 2745 | 48 2746 | 48 2747 | 48 2748 | 30 2749 | ENDCHAR 2750 | STARTCHAR small o, dieresis 2751 | ENCODING 246 2752 | SWIDTH 720 0 2753 | DWIDTH 5 0 2754 | BBX 5 8 0 0 2755 | BITMAP 2756 | 00 2757 | 48 2758 | 00 2759 | 30 2760 | 48 2761 | 48 2762 | 48 2763 | 30 2764 | ENDCHAR 2765 | STARTCHAR division sign 2766 | ENCODING 247 2767 | SWIDTH 720 0 2768 | DWIDTH 6 0 2769 | BBX 6 8 0 0 2770 | BITMAP 2771 | 00 2772 | 00 2773 | 10 2774 | 00 2775 | 7c 2776 | 00 2777 | 10 2778 | 00 2779 | ENDCHAR 2780 | STARTCHAR small o, slash 2781 | ENCODING 248 2782 | SWIDTH 720 0 2783 | DWIDTH 7 0 2784 | BBX 7 8 0 0 2785 | BITMAP 2786 | 00 2787 | 00 2788 | 3a 2789 | 44 2790 | 4a 2791 | 52 2792 | 22 2793 | 5c 2794 | ENDCHAR 2795 | STARTCHAR small u, grave accent 2796 | ENCODING 249 2797 | SWIDTH 720 0 2798 | DWIDTH 5 0 2799 | BBX 5 8 0 0 2800 | BITMAP 2801 | 20 2802 | 10 2803 | 00 2804 | 48 2805 | 48 2806 | 48 2807 | 48 2808 | 30 2809 | ENDCHAR 2810 | STARTCHAR small u, acute accent 2811 | ENCODING 250 2812 | SWIDTH 720 0 2813 | DWIDTH 5 0 2814 | BBX 5 8 0 0 2815 | BITMAP 2816 | 10 2817 | 20 2818 | 00 2819 | 48 2820 | 48 2821 | 48 2822 | 48 2823 | 30 2824 | ENDCHAR 2825 | STARTCHAR small u, circumflex accent 2826 | ENCODING 251 2827 | SWIDTH 720 0 2828 | DWIDTH 5 0 2829 | BBX 5 8 0 0 2830 | BITMAP 2831 | 30 2832 | 48 2833 | 00 2834 | 48 2835 | 48 2836 | 48 2837 | 48 2838 | 30 2839 | ENDCHAR 2840 | STARTCHAR small u, dieresis 2841 | ENCODING 252 2842 | SWIDTH 720 0 2843 | DWIDTH 5 0 2844 | BBX 5 8 0 0 2845 | BITMAP 2846 | 00 2847 | 48 2848 | 00 2849 | 48 2850 | 48 2851 | 48 2852 | 48 2853 | 30 2854 | ENDCHAR 2855 | STARTCHAR small y, acute accent 2856 | ENCODING 253 2857 | SWIDTH 720 0 2858 | DWIDTH 5 0 2859 | BBX 5 8 0 0 2860 | BITMAP 2861 | 20 2862 | 10 2863 | 00 2864 | 48 2865 | 48 2866 | 38 2867 | 08 2868 | 30 2869 | ENDCHAR 2870 | STARTCHAR small thorn, Icelandic 2871 | ENCODING 254 2872 | SWIDTH 720 0 2873 | DWIDTH 7 0 2874 | BBX 7 8 0 0 2875 | BITMAP 2876 | 00 2877 | 40 2878 | 5c 2879 | 62 2880 | 42 2881 | 62 2882 | 5c 2883 | 40 2884 | ENDCHAR 2885 | STARTCHAR small y, dieresis 2886 | ENCODING 255 2887 | SWIDTH 720 0 2888 | DWIDTH 5 0 2889 | BBX 5 8 0 0 2890 | BITMAP 2891 | 00 2892 | 48 2893 | 00 2894 | 48 2895 | 48 2896 | 38 2897 | 08 2898 | 30 2899 | ENDCHAR 2900 | ENDFONT -------------------------------------------------------------------------------- /res/bdf/uwe_prop_mod.bdf: -------------------------------------------------------------------------------- 1 | STARTFONT 2.1 2 | COMMENT by Uwe Freese, mail@uwe-freese.de 09/2002. V1.1 3 | COMMENT 4 | COMMENT This font was originally converted from the old RockBox 5 | COMMENT proportional font that was saved in arrays of columns. 6 | COMMENT After conversion, many characters have changed for better 7 | COMMENT readability, some characters were added and the digits 8 | COMMENT changed to have the same width. 9 | COMMENT 10 | COMMENT If someone finds errors (especially in the first font definition 11 | COMMENT lines), please let me know it. 12 | COMMENT 13 | COMMENT Permission to use, copy, modify, and distribute this 14 | COMMENT software for any purpose and without fee is hereby granted, 15 | COMMENT provided that the above copyright notice appear in all 16 | COMMENT copies and that both that copyright notice and this 17 | COMMENT permission notice appear in supporting documentation, and 18 | COMMENT that the name of Uwe Freese not be used in advertising or 19 | COMMENT publicity pertaining to distribution of the software without 20 | COMMENT specific, written prior permission. Uwe Freese makes no 21 | COMMENT representations about the suitability of this software for 22 | COMMENT any purpose. It is provided "as is" without express or 23 | COMMENT implied warranty. 24 | COMMENT 25 | COMMENT modified by Kevin Arutyunyan for use with rpi-rgb-led-matrix 26 | COMMENT edited with Fony 27 | FONT rockbox-prop-font 28 | SIZE 8 100 100 29 | FONTBOUNDINGBOX 8 8 0 0 30 | STARTPROPERTIES 6 31 | RESOLUTION_X 100 32 | RESOLUTION_Y 100 33 | FONT_ASCENT 8 34 | FONT_DESCENT 0 35 | DEFAULT_CHAR 32 36 | ENDPROPERTIES 37 | CHARS 198 38 | STARTCHAR 032 39 | ENCODING 32 40 | SWIDTH 360 0 41 | DWIDTH 4 0 42 | BBX 4 8 0 0 43 | BITMAP 44 | 00 45 | 00 46 | 00 47 | 00 48 | 00 49 | 00 50 | 00 51 | 00 52 | ENDCHAR 53 | STARTCHAR 033 54 | ENCODING 33 55 | SWIDTH 144 0 56 | DWIDTH 2 0 57 | BBX 2 8 0 0 58 | BITMAP 59 | 00 60 | 80 61 | 80 62 | 80 63 | 80 64 | 80 65 | 00 66 | 80 67 | ENDCHAR 68 | STARTCHAR 034 69 | ENCODING 34 70 | SWIDTH 288 0 71 | DWIDTH 4 0 72 | BBX 4 8 0 0 73 | BITMAP 74 | 00 75 | A0 76 | A0 77 | A0 78 | 00 79 | 00 80 | 00 81 | 00 82 | ENDCHAR 83 | STARTCHAR 035 84 | ENCODING 35 85 | SWIDTH 432 0 86 | DWIDTH 6 0 87 | BBX 6 8 0 0 88 | BITMAP 89 | 00 90 | 00 91 | 50 92 | F8 93 | 50 94 | F8 95 | 50 96 | 00 97 | ENDCHAR 98 | STARTCHAR 036 99 | ENCODING 36 100 | SWIDTH 432 0 101 | DWIDTH 6 0 102 | BBX 6 8 0 0 103 | BITMAP 104 | 00 105 | 20 106 | 78 107 | A0 108 | 70 109 | 28 110 | F0 111 | 20 112 | ENDCHAR 113 | STARTCHAR 037 114 | ENCODING 37 115 | SWIDTH 432 0 116 | DWIDTH 6 0 117 | BBX 6 8 0 0 118 | BITMAP 119 | 00 120 | 00 121 | 00 122 | 88 123 | 10 124 | 20 125 | 40 126 | 88 127 | ENDCHAR 128 | STARTCHAR 038 129 | ENCODING 38 130 | SWIDTH 504 0 131 | DWIDTH 7 0 132 | BBX 7 8 0 0 133 | BITMAP 134 | 00 135 | 70 136 | 88 137 | 90 138 | 60 139 | 94 140 | 88 141 | 74 142 | ENDCHAR 143 | STARTCHAR 039 144 | ENCODING 39 145 | SWIDTH 144 0 146 | DWIDTH 2 0 147 | BBX 2 8 0 0 148 | BITMAP 149 | 00 150 | 80 151 | 80 152 | 80 153 | 00 154 | 00 155 | 00 156 | 00 157 | ENDCHAR 158 | STARTCHAR 040 159 | ENCODING 40 160 | SWIDTH 216 0 161 | DWIDTH 3 0 162 | BBX 3 8 0 0 163 | BITMAP 164 | 00 165 | 40 166 | 80 167 | 80 168 | 80 169 | 80 170 | 80 171 | 40 172 | ENDCHAR 173 | STARTCHAR 041 174 | ENCODING 41 175 | SWIDTH 216 0 176 | DWIDTH 3 0 177 | BBX 3 8 0 0 178 | BITMAP 179 | 00 180 | 80 181 | 40 182 | 40 183 | 40 184 | 40 185 | 40 186 | 80 187 | ENDCHAR 188 | STARTCHAR 042 189 | ENCODING 42 190 | SWIDTH 432 0 191 | DWIDTH 6 0 192 | BBX 6 8 0 0 193 | BITMAP 194 | 00 195 | 00 196 | A8 197 | 70 198 | F8 199 | 70 200 | A8 201 | 00 202 | ENDCHAR 203 | STARTCHAR 043 204 | ENCODING 43 205 | SWIDTH 432 0 206 | DWIDTH 6 0 207 | BBX 6 8 0 0 208 | BITMAP 209 | 00 210 | 00 211 | 20 212 | 20 213 | F8 214 | 20 215 | 20 216 | 00 217 | ENDCHAR 218 | STARTCHAR 044 219 | ENCODING 44 220 | SWIDTH 216 0 221 | DWIDTH 3 0 222 | BBX 3 8 0 0 223 | BITMAP 224 | 00 225 | 00 226 | 00 227 | 00 228 | 00 229 | 00 230 | 40 231 | 80 232 | ENDCHAR 233 | STARTCHAR 045 234 | ENCODING 45 235 | SWIDTH 432 0 236 | DWIDTH 5 0 237 | BBX 5 8 0 0 238 | BITMAP 239 | 00 240 | 00 241 | 00 242 | 00 243 | F0 244 | 00 245 | 00 246 | 00 247 | ENDCHAR 248 | STARTCHAR 046 249 | ENCODING 46 250 | SWIDTH 144 0 251 | DWIDTH 2 0 252 | BBX 2 8 0 0 253 | BITMAP 254 | 00 255 | 00 256 | 00 257 | 00 258 | 00 259 | 00 260 | 00 261 | 80 262 | ENDCHAR 263 | STARTCHAR 047 264 | ENCODING 47 265 | SWIDTH 360 0 266 | DWIDTH 4 0 267 | BBX 4 8 0 0 268 | BITMAP 269 | 00 270 | 20 271 | 20 272 | 40 273 | 40 274 | 40 275 | 80 276 | 80 277 | ENDCHAR 278 | STARTCHAR 048 279 | ENCODING 48 280 | SWIDTH 360 0 281 | DWIDTH 5 0 282 | BBX 5 8 0 0 283 | BITMAP 284 | 00 285 | 60 286 | 90 287 | B0 288 | D0 289 | 90 290 | 90 291 | 60 292 | ENDCHAR 293 | STARTCHAR 049 294 | ENCODING 49 295 | SWIDTH 360 0 296 | DWIDTH 5 0 297 | BBX 5 8 0 0 298 | BITMAP 299 | 00 300 | 20 301 | 60 302 | A0 303 | 20 304 | 20 305 | 20 306 | 20 307 | ENDCHAR 308 | STARTCHAR 050 309 | ENCODING 50 310 | SWIDTH 360 0 311 | DWIDTH 5 0 312 | BBX 5 8 0 0 313 | BITMAP 314 | 00 315 | 60 316 | 90 317 | 10 318 | 60 319 | 80 320 | 80 321 | F0 322 | ENDCHAR 323 | STARTCHAR 051 324 | ENCODING 51 325 | SWIDTH 360 0 326 | DWIDTH 5 0 327 | BBX 5 8 0 0 328 | BITMAP 329 | 00 330 | 60 331 | 90 332 | 10 333 | 60 334 | 10 335 | 90 336 | 60 337 | ENDCHAR 338 | STARTCHAR 052 339 | ENCODING 52 340 | SWIDTH 360 0 341 | DWIDTH 5 0 342 | BBX 5 8 0 0 343 | BITMAP 344 | 00 345 | 20 346 | 60 347 | A0 348 | F0 349 | 20 350 | 20 351 | 20 352 | ENDCHAR 353 | STARTCHAR 053 354 | ENCODING 53 355 | SWIDTH 360 0 356 | DWIDTH 5 0 357 | BBX 5 8 0 0 358 | BITMAP 359 | 00 360 | F0 361 | 80 362 | 80 363 | 60 364 | 10 365 | 90 366 | 60 367 | ENDCHAR 368 | STARTCHAR 054 369 | ENCODING 54 370 | SWIDTH 360 0 371 | DWIDTH 5 0 372 | BBX 5 8 0 0 373 | BITMAP 374 | 00 375 | 60 376 | 80 377 | 80 378 | E0 379 | 90 380 | 90 381 | 60 382 | ENDCHAR 383 | STARTCHAR 055 384 | ENCODING 55 385 | SWIDTH 360 0 386 | DWIDTH 5 0 387 | BBX 5 8 0 0 388 | BITMAP 389 | 00 390 | F0 391 | 10 392 | 10 393 | 20 394 | 20 395 | 20 396 | 20 397 | ENDCHAR 398 | STARTCHAR 056 399 | ENCODING 56 400 | SWIDTH 360 0 401 | DWIDTH 5 0 402 | BBX 5 8 0 0 403 | BITMAP 404 | 00 405 | 60 406 | 90 407 | 90 408 | 60 409 | 90 410 | 90 411 | 60 412 | ENDCHAR 413 | STARTCHAR 057 414 | ENCODING 57 415 | SWIDTH 360 0 416 | DWIDTH 5 0 417 | BBX 5 8 0 0 418 | BITMAP 419 | 00 420 | 60 421 | 90 422 | 90 423 | 70 424 | 10 425 | 10 426 | 60 427 | ENDCHAR 428 | STARTCHAR 058 429 | ENCODING 58 430 | SWIDTH 144 0 431 | DWIDTH 2 0 432 | BBX 2 8 0 0 433 | BITMAP 434 | 00 435 | 00 436 | 80 437 | 00 438 | 00 439 | 00 440 | 80 441 | 00 442 | ENDCHAR 443 | STARTCHAR 059 444 | ENCODING 59 445 | SWIDTH 216 0 446 | DWIDTH 3 0 447 | BBX 3 8 0 0 448 | BITMAP 449 | 00 450 | 00 451 | 40 452 | 00 453 | 00 454 | 00 455 | 40 456 | 80 457 | ENDCHAR 458 | STARTCHAR 060 459 | ENCODING 60 460 | SWIDTH 288 0 461 | DWIDTH 4 0 462 | BBX 4 8 0 0 463 | BITMAP 464 | 00 465 | 00 466 | 20 467 | 40 468 | 80 469 | 40 470 | 20 471 | 00 472 | ENDCHAR 473 | STARTCHAR 061 474 | ENCODING 61 475 | SWIDTH 360 0 476 | DWIDTH 5 0 477 | BBX 5 8 0 0 478 | BITMAP 479 | 00 480 | 00 481 | 00 482 | F0 483 | 00 484 | F0 485 | 00 486 | 00 487 | ENDCHAR 488 | STARTCHAR 062 489 | ENCODING 62 490 | SWIDTH 288 0 491 | DWIDTH 4 0 492 | BBX 4 8 0 0 493 | BITMAP 494 | 00 495 | 00 496 | 80 497 | 40 498 | 20 499 | 40 500 | 80 501 | 00 502 | ENDCHAR 503 | STARTCHAR 063 504 | ENCODING 63 505 | SWIDTH 360 0 506 | DWIDTH 5 0 507 | BBX 5 8 0 0 508 | BITMAP 509 | 00 510 | 60 511 | 90 512 | 10 513 | 60 514 | 40 515 | 00 516 | 40 517 | ENDCHAR 518 | STARTCHAR 064 519 | ENCODING 64 520 | SWIDTH 432 0 521 | DWIDTH 6 0 522 | BBX 6 8 0 0 523 | BITMAP 524 | 00 525 | 70 526 | 88 527 | B8 528 | B0 529 | 80 530 | 70 531 | 00 532 | ENDCHAR 533 | STARTCHAR 065 534 | ENCODING 65 535 | SWIDTH 360 0 536 | DWIDTH 5 0 537 | BBX 5 8 0 0 538 | BITMAP 539 | 00 540 | 60 541 | 90 542 | 90 543 | F0 544 | 90 545 | 90 546 | 90 547 | ENDCHAR 548 | STARTCHAR 066 549 | ENCODING 66 550 | SWIDTH 360 0 551 | DWIDTH 5 0 552 | BBX 5 8 0 0 553 | BITMAP 554 | 00 555 | E0 556 | 90 557 | 90 558 | E0 559 | 90 560 | 90 561 | E0 562 | ENDCHAR 563 | STARTCHAR 067 564 | ENCODING 67 565 | SWIDTH 360 0 566 | DWIDTH 5 0 567 | BBX 5 8 0 0 568 | BITMAP 569 | 00 570 | 60 571 | 90 572 | 80 573 | 80 574 | 80 575 | 90 576 | 60 577 | ENDCHAR 578 | STARTCHAR 068 579 | ENCODING 68 580 | SWIDTH 360 0 581 | DWIDTH 5 0 582 | BBX 5 8 0 0 583 | BITMAP 584 | 00 585 | E0 586 | 90 587 | 90 588 | 90 589 | 90 590 | 90 591 | E0 592 | ENDCHAR 593 | STARTCHAR 069 594 | ENCODING 69 595 | SWIDTH 360 0 596 | DWIDTH 5 0 597 | BBX 5 8 0 0 598 | BITMAP 599 | 00 600 | F0 601 | 80 602 | 80 603 | E0 604 | 80 605 | 80 606 | F0 607 | ENDCHAR 608 | STARTCHAR 070 609 | ENCODING 70 610 | SWIDTH 360 0 611 | DWIDTH 5 0 612 | BBX 5 8 0 0 613 | BITMAP 614 | 00 615 | F0 616 | 80 617 | 80 618 | E0 619 | 80 620 | 80 621 | 80 622 | ENDCHAR 623 | STARTCHAR 071 624 | ENCODING 71 625 | SWIDTH 360 0 626 | DWIDTH 5 0 627 | BBX 5 8 0 0 628 | BITMAP 629 | 00 630 | 70 631 | 80 632 | 80 633 | B0 634 | 90 635 | 90 636 | 70 637 | ENDCHAR 638 | STARTCHAR 072 639 | ENCODING 72 640 | SWIDTH 360 0 641 | DWIDTH 5 0 642 | BBX 5 8 0 0 643 | BITMAP 644 | 00 645 | 90 646 | 90 647 | 90 648 | F0 649 | 90 650 | 90 651 | 90 652 | ENDCHAR 653 | STARTCHAR 073 654 | ENCODING 73 655 | SWIDTH 288 0 656 | DWIDTH 4 0 657 | BBX 4 8 0 0 658 | BITMAP 659 | 00 660 | E0 661 | 40 662 | 40 663 | 40 664 | 40 665 | 40 666 | E0 667 | ENDCHAR 668 | STARTCHAR 074 669 | ENCODING 74 670 | SWIDTH 360 0 671 | DWIDTH 5 0 672 | BBX 5 8 0 0 673 | BITMAP 674 | 00 675 | 10 676 | 10 677 | 10 678 | 10 679 | 10 680 | 90 681 | 60 682 | ENDCHAR 683 | STARTCHAR 075 684 | ENCODING 75 685 | SWIDTH 360 0 686 | DWIDTH 5 0 687 | BBX 5 8 0 0 688 | BITMAP 689 | 00 690 | 90 691 | 90 692 | A0 693 | C0 694 | A0 695 | 90 696 | 90 697 | ENDCHAR 698 | STARTCHAR 076 699 | ENCODING 76 700 | SWIDTH 360 0 701 | DWIDTH 5 0 702 | BBX 5 8 0 0 703 | BITMAP 704 | 00 705 | 80 706 | 80 707 | 80 708 | 80 709 | 80 710 | 80 711 | F0 712 | ENDCHAR 713 | STARTCHAR 077 714 | ENCODING 77 715 | SWIDTH 432 0 716 | DWIDTH 6 0 717 | BBX 6 8 0 0 718 | BITMAP 719 | 00 720 | 50 721 | A8 722 | A8 723 | A8 724 | 88 725 | 88 726 | 88 727 | ENDCHAR 728 | STARTCHAR 078 729 | ENCODING 78 730 | SWIDTH 360 0 731 | DWIDTH 5 0 732 | BBX 5 8 0 0 733 | BITMAP 734 | 00 735 | 90 736 | D0 737 | D0 738 | B0 739 | B0 740 | 90 741 | 90 742 | ENDCHAR 743 | STARTCHAR 079 744 | ENCODING 79 745 | SWIDTH 360 0 746 | DWIDTH 5 0 747 | BBX 5 8 0 0 748 | BITMAP 749 | 00 750 | 60 751 | 90 752 | 90 753 | 90 754 | 90 755 | 90 756 | 60 757 | ENDCHAR 758 | STARTCHAR 080 759 | ENCODING 80 760 | SWIDTH 360 0 761 | DWIDTH 5 0 762 | BBX 5 8 0 0 763 | BITMAP 764 | 00 765 | E0 766 | 90 767 | 90 768 | E0 769 | 80 770 | 80 771 | 80 772 | ENDCHAR 773 | STARTCHAR 081 774 | ENCODING 81 775 | SWIDTH 432 0 776 | DWIDTH 6 0 777 | BBX 6 8 0 0 778 | BITMAP 779 | 00 780 | 60 781 | 90 782 | 90 783 | 90 784 | B0 785 | 90 786 | 68 787 | ENDCHAR 788 | STARTCHAR 082 789 | ENCODING 82 790 | SWIDTH 360 0 791 | DWIDTH 5 0 792 | BBX 5 8 0 0 793 | BITMAP 794 | 00 795 | E0 796 | 90 797 | 90 798 | E0 799 | 90 800 | 90 801 | 90 802 | ENDCHAR 803 | STARTCHAR 083 804 | ENCODING 83 805 | SWIDTH 360 0 806 | DWIDTH 5 0 807 | BBX 5 8 0 0 808 | BITMAP 809 | 00 810 | 70 811 | 80 812 | 80 813 | 60 814 | 10 815 | 10 816 | E0 817 | ENDCHAR 818 | STARTCHAR 084 819 | ENCODING 84 820 | SWIDTH 432 0 821 | DWIDTH 6 0 822 | BBX 6 8 0 0 823 | BITMAP 824 | 00 825 | F8 826 | 20 827 | 20 828 | 20 829 | 20 830 | 20 831 | 20 832 | ENDCHAR 833 | STARTCHAR 085 834 | ENCODING 85 835 | SWIDTH 360 0 836 | DWIDTH 5 0 837 | BBX 5 8 0 0 838 | BITMAP 839 | 00 840 | 90 841 | 90 842 | 90 843 | 90 844 | 90 845 | 90 846 | 60 847 | ENDCHAR 848 | STARTCHAR 086 849 | ENCODING 86 850 | SWIDTH 432 0 851 | DWIDTH 6 0 852 | BBX 6 8 0 0 853 | BITMAP 854 | 00 855 | 88 856 | 88 857 | 88 858 | 88 859 | 88 860 | 50 861 | 20 862 | ENDCHAR 863 | STARTCHAR 087 864 | ENCODING 87 865 | SWIDTH 432 0 866 | DWIDTH 6 0 867 | BBX 6 8 0 0 868 | BITMAP 869 | 00 870 | 88 871 | 88 872 | 88 873 | A8 874 | A8 875 | A8 876 | 50 877 | ENDCHAR 878 | STARTCHAR 088 879 | ENCODING 88 880 | SWIDTH 432 0 881 | DWIDTH 6 0 882 | BBX 6 8 0 0 883 | BITMAP 884 | 00 885 | 88 886 | 88 887 | 50 888 | 20 889 | 50 890 | 88 891 | 88 892 | ENDCHAR 893 | STARTCHAR 089 894 | ENCODING 89 895 | SWIDTH 432 0 896 | DWIDTH 6 0 897 | BBX 6 8 0 0 898 | BITMAP 899 | 00 900 | 88 901 | 88 902 | 88 903 | 50 904 | 20 905 | 20 906 | 20 907 | ENDCHAR 908 | STARTCHAR 090 909 | ENCODING 90 910 | SWIDTH 432 0 911 | DWIDTH 6 0 912 | BBX 6 8 0 0 913 | BITMAP 914 | 00 915 | F8 916 | 08 917 | 10 918 | 20 919 | 40 920 | 80 921 | F8 922 | ENDCHAR 923 | STARTCHAR 091 924 | ENCODING 91 925 | SWIDTH 216 0 926 | DWIDTH 3 0 927 | BBX 3 8 0 0 928 | BITMAP 929 | 00 930 | C0 931 | 80 932 | 80 933 | 80 934 | 80 935 | 80 936 | C0 937 | ENDCHAR 938 | STARTCHAR 092 939 | ENCODING 92 940 | SWIDTH 360 0 941 | DWIDTH 5 0 942 | BBX 5 8 0 0 943 | BITMAP 944 | 80 945 | 80 946 | 40 947 | 40 948 | 20 949 | 20 950 | 10 951 | 10 952 | ENDCHAR 953 | STARTCHAR 093 954 | ENCODING 93 955 | SWIDTH 216 0 956 | DWIDTH 3 0 957 | BBX 3 8 0 0 958 | BITMAP 959 | 00 960 | C0 961 | 40 962 | 40 963 | 40 964 | 40 965 | 40 966 | C0 967 | ENDCHAR 968 | STARTCHAR 094 969 | ENCODING 94 970 | SWIDTH 432 0 971 | DWIDTH 6 0 972 | BBX 6 8 0 0 973 | BITMAP 974 | 00 975 | 20 976 | 50 977 | 88 978 | 00 979 | 00 980 | 00 981 | 00 982 | ENDCHAR 983 | STARTCHAR 095 984 | ENCODING 95 985 | SWIDTH 432 0 986 | DWIDTH 6 0 987 | BBX 6 8 0 0 988 | BITMAP 989 | 00 990 | 00 991 | 00 992 | 00 993 | 00 994 | 00 995 | 00 996 | F8 997 | ENDCHAR 998 | STARTCHAR 096 999 | ENCODING 96 1000 | SWIDTH 216 0 1001 | DWIDTH 3 0 1002 | BBX 3 8 0 0 1003 | BITMAP 1004 | 00 1005 | 80 1006 | 80 1007 | 40 1008 | 00 1009 | 00 1010 | 00 1011 | 00 1012 | ENDCHAR 1013 | STARTCHAR 097 1014 | ENCODING 97 1015 | SWIDTH 360 0 1016 | DWIDTH 5 0 1017 | BBX 5 8 0 0 1018 | BITMAP 1019 | 00 1020 | 00 1021 | 00 1022 | 60 1023 | 10 1024 | 70 1025 | 90 1026 | 70 1027 | ENDCHAR 1028 | STARTCHAR 098 1029 | ENCODING 98 1030 | SWIDTH 360 0 1031 | DWIDTH 5 0 1032 | BBX 5 8 0 0 1033 | BITMAP 1034 | 00 1035 | 80 1036 | 80 1037 | E0 1038 | 90 1039 | 90 1040 | 90 1041 | E0 1042 | ENDCHAR 1043 | STARTCHAR 099 1044 | ENCODING 99 1045 | SWIDTH 360 0 1046 | DWIDTH 5 0 1047 | BBX 5 8 0 0 1048 | BITMAP 1049 | 00 1050 | 00 1051 | 00 1052 | 70 1053 | 80 1054 | 80 1055 | 80 1056 | 70 1057 | ENDCHAR 1058 | STARTCHAR 100 1059 | ENCODING 100 1060 | SWIDTH 360 0 1061 | DWIDTH 5 0 1062 | BBX 5 8 0 0 1063 | BITMAP 1064 | 00 1065 | 10 1066 | 10 1067 | 70 1068 | 90 1069 | 90 1070 | 90 1071 | 70 1072 | ENDCHAR 1073 | STARTCHAR 101 1074 | ENCODING 101 1075 | SWIDTH 360 0 1076 | DWIDTH 5 0 1077 | BBX 5 8 0 0 1078 | BITMAP 1079 | 00 1080 | 00 1081 | 00 1082 | 60 1083 | 90 1084 | F0 1085 | 80 1086 | 70 1087 | ENDCHAR 1088 | STARTCHAR 102 1089 | ENCODING 102 1090 | SWIDTH 360 0 1091 | DWIDTH 5 0 1092 | BBX 5 8 0 0 1093 | BITMAP 1094 | 00 1095 | 30 1096 | 40 1097 | 40 1098 | E0 1099 | 40 1100 | 40 1101 | 40 1102 | ENDCHAR 1103 | STARTCHAR 103 1104 | ENCODING 103 1105 | SWIDTH 360 0 1106 | DWIDTH 5 0 1107 | BBX 5 8 0 0 1108 | BITMAP 1109 | 00 1110 | 00 1111 | 00 1112 | 70 1113 | 90 1114 | 70 1115 | 10 1116 | E0 1117 | ENDCHAR 1118 | STARTCHAR 104 1119 | ENCODING 104 1120 | SWIDTH 360 0 1121 | DWIDTH 5 0 1122 | BBX 5 8 0 0 1123 | BITMAP 1124 | 00 1125 | 80 1126 | 80 1127 | E0 1128 | 90 1129 | 90 1130 | 90 1131 | 90 1132 | ENDCHAR 1133 | STARTCHAR 105 1134 | ENCODING 105 1135 | SWIDTH 144 0 1136 | DWIDTH 2 0 1137 | BBX 2 8 0 0 1138 | BITMAP 1139 | 00 1140 | 80 1141 | 00 1142 | 80 1143 | 80 1144 | 80 1145 | 80 1146 | 80 1147 | ENDCHAR 1148 | STARTCHAR 106 1149 | ENCODING 106 1150 | SWIDTH 360 0 1151 | DWIDTH 5 0 1152 | BBX 5 8 0 0 1153 | BITMAP 1154 | 00 1155 | 10 1156 | 00 1157 | 30 1158 | 10 1159 | 10 1160 | 90 1161 | 60 1162 | ENDCHAR 1163 | STARTCHAR 107 1164 | ENCODING 107 1165 | SWIDTH 360 0 1166 | DWIDTH 5 0 1167 | BBX 5 8 0 0 1168 | BITMAP 1169 | 00 1170 | 80 1171 | 80 1172 | 90 1173 | A0 1174 | C0 1175 | A0 1176 | 90 1177 | ENDCHAR 1178 | STARTCHAR 108 1179 | ENCODING 108 1180 | SWIDTH 144 0 1181 | DWIDTH 2 0 1182 | BBX 2 8 0 0 1183 | BITMAP 1184 | 00 1185 | 80 1186 | 80 1187 | 80 1188 | 80 1189 | 80 1190 | 80 1191 | 80 1192 | ENDCHAR 1193 | STARTCHAR 109 1194 | ENCODING 109 1195 | SWIDTH 432 0 1196 | DWIDTH 6 0 1197 | BBX 6 8 0 0 1198 | BITMAP 1199 | 00 1200 | 00 1201 | 00 1202 | 50 1203 | A8 1204 | A8 1205 | 88 1206 | 88 1207 | ENDCHAR 1208 | STARTCHAR 110 1209 | ENCODING 110 1210 | SWIDTH 360 0 1211 | DWIDTH 5 0 1212 | BBX 5 8 0 0 1213 | BITMAP 1214 | 00 1215 | 00 1216 | 00 1217 | E0 1218 | 90 1219 | 90 1220 | 90 1221 | 90 1222 | ENDCHAR 1223 | STARTCHAR 111 1224 | ENCODING 111 1225 | SWIDTH 360 0 1226 | DWIDTH 5 0 1227 | BBX 5 8 0 0 1228 | BITMAP 1229 | 00 1230 | 00 1231 | 00 1232 | 60 1233 | 90 1234 | 90 1235 | 90 1236 | 60 1237 | ENDCHAR 1238 | STARTCHAR 112 1239 | ENCODING 112 1240 | SWIDTH 360 0 1241 | DWIDTH 5 0 1242 | BBX 5 8 0 0 1243 | BITMAP 1244 | 00 1245 | 00 1246 | 00 1247 | E0 1248 | 90 1249 | E0 1250 | 80 1251 | 80 1252 | ENDCHAR 1253 | STARTCHAR 113 1254 | ENCODING 113 1255 | SWIDTH 360 0 1256 | DWIDTH 5 0 1257 | BBX 5 8 0 0 1258 | BITMAP 1259 | 00 1260 | 00 1261 | 00 1262 | 70 1263 | 90 1264 | 70 1265 | 10 1266 | 10 1267 | ENDCHAR 1268 | STARTCHAR 114 1269 | ENCODING 114 1270 | SWIDTH 288 0 1271 | DWIDTH 4 0 1272 | BBX 4 8 0 0 1273 | BITMAP 1274 | 00 1275 | 00 1276 | 00 1277 | A0 1278 | C0 1279 | 80 1280 | 80 1281 | 80 1282 | ENDCHAR 1283 | STARTCHAR 115 1284 | ENCODING 115 1285 | SWIDTH 360 0 1286 | DWIDTH 5 0 1287 | BBX 5 8 0 0 1288 | BITMAP 1289 | 00 1290 | 00 1291 | 00 1292 | 70 1293 | 80 1294 | 60 1295 | 10 1296 | E0 1297 | ENDCHAR 1298 | STARTCHAR 116 1299 | ENCODING 116 1300 | SWIDTH 288 0 1301 | DWIDTH 4 0 1302 | BBX 4 8 0 0 1303 | BITMAP 1304 | 00 1305 | 40 1306 | 40 1307 | E0 1308 | 40 1309 | 40 1310 | 40 1311 | 40 1312 | ENDCHAR 1313 | STARTCHAR 117 1314 | ENCODING 117 1315 | SWIDTH 360 0 1316 | DWIDTH 5 0 1317 | BBX 5 8 0 0 1318 | BITMAP 1319 | 00 1320 | 00 1321 | 00 1322 | 90 1323 | 90 1324 | 90 1325 | 90 1326 | 60 1327 | ENDCHAR 1328 | STARTCHAR 118 1329 | ENCODING 118 1330 | SWIDTH 432 0 1331 | DWIDTH 6 0 1332 | BBX 6 8 0 0 1333 | BITMAP 1334 | 00 1335 | 00 1336 | 00 1337 | 88 1338 | 88 1339 | 88 1340 | 50 1341 | 20 1342 | ENDCHAR 1343 | STARTCHAR 119 1344 | ENCODING 119 1345 | SWIDTH 432 0 1346 | DWIDTH 6 0 1347 | BBX 6 8 0 0 1348 | BITMAP 1349 | 00 1350 | 00 1351 | 00 1352 | 88 1353 | 88 1354 | A8 1355 | A8 1356 | 50 1357 | ENDCHAR 1358 | STARTCHAR 120 1359 | ENCODING 120 1360 | SWIDTH 288 0 1361 | DWIDTH 4 0 1362 | BBX 4 8 0 0 1363 | BITMAP 1364 | 00 1365 | 00 1366 | 00 1367 | A0 1368 | A0 1369 | 40 1370 | A0 1371 | A0 1372 | ENDCHAR 1373 | STARTCHAR 121 1374 | ENCODING 121 1375 | SWIDTH 360 0 1376 | DWIDTH 5 0 1377 | BBX 5 8 0 0 1378 | BITMAP 1379 | 00 1380 | 00 1381 | 00 1382 | 90 1383 | 90 1384 | 70 1385 | 10 1386 | 60 1387 | ENDCHAR 1388 | STARTCHAR 122 1389 | ENCODING 122 1390 | SWIDTH 288 0 1391 | DWIDTH 4 0 1392 | BBX 4 8 0 0 1393 | BITMAP 1394 | 00 1395 | 00 1396 | 00 1397 | E0 1398 | 20 1399 | 40 1400 | 80 1401 | E0 1402 | ENDCHAR 1403 | STARTCHAR 123 1404 | ENCODING 123 1405 | SWIDTH 288 0 1406 | DWIDTH 4 0 1407 | BBX 4 8 0 0 1408 | BITMAP 1409 | 00 1410 | 20 1411 | 40 1412 | 40 1413 | 80 1414 | 40 1415 | 40 1416 | 20 1417 | ENDCHAR 1418 | STARTCHAR 124 1419 | ENCODING 124 1420 | SWIDTH 144 0 1421 | DWIDTH 2 0 1422 | BBX 2 8 0 0 1423 | BITMAP 1424 | 80 1425 | 80 1426 | 80 1427 | 80 1428 | 80 1429 | 80 1430 | 80 1431 | 80 1432 | ENDCHAR 1433 | STARTCHAR 125 1434 | ENCODING 125 1435 | SWIDTH 288 0 1436 | DWIDTH 4 0 1437 | BBX 4 8 0 0 1438 | BITMAP 1439 | 00 1440 | 80 1441 | 40 1442 | 40 1443 | 20 1444 | 40 1445 | 40 1446 | 80 1447 | ENDCHAR 1448 | STARTCHAR 126 1449 | ENCODING 126 1450 | SWIDTH 432 0 1451 | DWIDTH 6 0 1452 | BBX 6 8 0 0 1453 | BITMAP 1454 | 00 1455 | E8 1456 | B8 1457 | 00 1458 | 00 1459 | 00 1460 | 00 1461 | 00 1462 | ENDCHAR 1463 | STARTCHAR 161 1464 | ENCODING 161 1465 | SWIDTH 144 0 1466 | DWIDTH 2 0 1467 | BBX 2 8 0 0 1468 | BITMAP 1469 | 00 1470 | 80 1471 | 00 1472 | 80 1473 | 80 1474 | 80 1475 | 80 1476 | 80 1477 | ENDCHAR 1478 | STARTCHAR 162 1479 | ENCODING 162 1480 | SWIDTH 432 0 1481 | DWIDTH 6 0 1482 | BBX 6 8 0 0 1483 | BITMAP 1484 | 00 1485 | 00 1486 | 20 1487 | 70 1488 | A8 1489 | A0 1490 | A8 1491 | 70 1492 | ENDCHAR 1493 | STARTCHAR 163 1494 | ENCODING 163 1495 | SWIDTH 432 0 1496 | DWIDTH 6 0 1497 | BBX 6 8 0 0 1498 | BITMAP 1499 | 00 1500 | 30 1501 | 48 1502 | 40 1503 | F0 1504 | 40 1505 | 40 1506 | F8 1507 | ENDCHAR 1508 | STARTCHAR 164 1509 | ENCODING 164 1510 | SWIDTH 360 0 1511 | DWIDTH 5 0 1512 | BBX 5 8 0 0 1513 | BITMAP 1514 | 00 1515 | 30 1516 | 40 1517 | E0 1518 | 40 1519 | E0 1520 | 40 1521 | 30 1522 | ENDCHAR 1523 | STARTCHAR 165 1524 | ENCODING 165 1525 | SWIDTH 432 0 1526 | DWIDTH 6 0 1527 | BBX 6 8 0 0 1528 | BITMAP 1529 | 00 1530 | 88 1531 | 88 1532 | 50 1533 | F8 1534 | 20 1535 | F8 1536 | 20 1537 | ENDCHAR 1538 | STARTCHAR 166 1539 | ENCODING 166 1540 | SWIDTH 144 0 1541 | DWIDTH 2 0 1542 | BBX 2 8 0 0 1543 | BITMAP 1544 | 00 1545 | 80 1546 | 80 1547 | 80 1548 | 00 1549 | 80 1550 | 80 1551 | 80 1552 | ENDCHAR 1553 | STARTCHAR 167 1554 | ENCODING 167 1555 | SWIDTH 360 0 1556 | DWIDTH 5 0 1557 | BBX 5 8 0 0 1558 | BITMAP 1559 | 00 1560 | 70 1561 | 80 1562 | 60 1563 | 90 1564 | 60 1565 | 10 1566 | E0 1567 | ENDCHAR 1568 | STARTCHAR 168 1569 | ENCODING 168 1570 | SWIDTH 360 0 1571 | DWIDTH 5 0 1572 | BBX 5 8 0 0 1573 | BITMAP 1574 | 00 1575 | 90 1576 | 00 1577 | 00 1578 | 00 1579 | 00 1580 | 00 1581 | 00 1582 | ENDCHAR 1583 | STARTCHAR 169 1584 | ENCODING 169 1585 | SWIDTH 576 0 1586 | DWIDTH 8 0 1587 | BBX 8 8 0 0 1588 | BITMAP 1589 | 00 1590 | 7C 1591 | 82 1592 | BA 1593 | A2 1594 | BA 1595 | 82 1596 | 7C 1597 | ENDCHAR 1598 | STARTCHAR 170 1599 | ENCODING 170 1600 | SWIDTH 504 0 1601 | DWIDTH 7 0 1602 | BBX 7 8 0 0 1603 | BITMAP 1604 | 00 1605 | 78 1606 | 08 1607 | 38 1608 | 48 1609 | 7C 1610 | 00 1611 | 00 1612 | ENDCHAR 1613 | STARTCHAR 171 1614 | ENCODING 171 1615 | SWIDTH 432 0 1616 | DWIDTH 6 0 1617 | BBX 6 8 0 0 1618 | BITMAP 1619 | 00 1620 | 00 1621 | 28 1622 | 50 1623 | A0 1624 | 50 1625 | 28 1626 | 00 1627 | ENDCHAR 1628 | STARTCHAR 172 1629 | ENCODING 172 1630 | SWIDTH 432 0 1631 | DWIDTH 6 0 1632 | BBX 6 8 0 0 1633 | BITMAP 1634 | 00 1635 | F8 1636 | 08 1637 | 00 1638 | 00 1639 | 00 1640 | 00 1641 | 00 1642 | ENDCHAR 1643 | STARTCHAR 173 1644 | ENCODING 173 1645 | SWIDTH 432 0 1646 | DWIDTH 6 0 1647 | BBX 6 8 0 0 1648 | BITMAP 1649 | 00 1650 | 00 1651 | 00 1652 | F8 1653 | 00 1654 | 00 1655 | 00 1656 | 00 1657 | ENDCHAR 1658 | STARTCHAR 174 1659 | ENCODING 174 1660 | SWIDTH 576 0 1661 | DWIDTH 8 0 1662 | BBX 8 8 0 0 1663 | BITMAP 1664 | 00 1665 | 7C 1666 | 82 1667 | BA 1668 | AA 1669 | B2 1670 | AA 1671 | 7C 1672 | ENDCHAR 1673 | STARTCHAR 175 1674 | ENCODING 175 1675 | SWIDTH 576 0 1676 | DWIDTH 8 0 1677 | BBX 8 8 0 0 1678 | BITMAP 1679 | 00 1680 | FE 1681 | 00 1682 | 00 1683 | 00 1684 | 00 1685 | 00 1686 | 00 1687 | ENDCHAR 1688 | STARTCHAR 176 1689 | ENCODING 176 1690 | SWIDTH 360 0 1691 | DWIDTH 5 0 1692 | BBX 5 8 0 0 1693 | BITMAP 1694 | 00 1695 | 60 1696 | 90 1697 | 60 1698 | 00 1699 | 00 1700 | 00 1701 | 00 1702 | ENDCHAR 1703 | STARTCHAR 177 1704 | ENCODING 177 1705 | SWIDTH 432 0 1706 | DWIDTH 6 0 1707 | BBX 6 8 0 0 1708 | BITMAP 1709 | 00 1710 | 20 1711 | F8 1712 | 20 1713 | 00 1714 | F8 1715 | 00 1716 | 00 1717 | ENDCHAR 1718 | STARTCHAR 178 1719 | ENCODING 178 1720 | SWIDTH 360 0 1721 | DWIDTH 5 0 1722 | BBX 5 8 0 0 1723 | BITMAP 1724 | 00 1725 | E0 1726 | 20 1727 | C0 1728 | F0 1729 | 00 1730 | 00 1731 | 00 1732 | ENDCHAR 1733 | STARTCHAR 179 1734 | ENCODING 179 1735 | SWIDTH 288 0 1736 | DWIDTH 4 0 1737 | BBX 4 8 0 0 1738 | BITMAP 1739 | 00 1740 | E0 1741 | 60 1742 | 20 1743 | E0 1744 | 00 1745 | 00 1746 | 00 1747 | ENDCHAR 1748 | STARTCHAR 180 1749 | ENCODING 180 1750 | SWIDTH 216 0 1751 | DWIDTH 3 0 1752 | BBX 3 8 0 0 1753 | BITMAP 1754 | 00 1755 | 40 1756 | 80 1757 | 00 1758 | 00 1759 | 00 1760 | 00 1761 | 00 1762 | ENDCHAR 1763 | STARTCHAR 181 1764 | ENCODING 181 1765 | SWIDTH 360 0 1766 | DWIDTH 5 0 1767 | BBX 5 8 0 0 1768 | BITMAP 1769 | 00 1770 | 90 1771 | 90 1772 | E0 1773 | 80 1774 | 00 1775 | 00 1776 | 00 1777 | ENDCHAR 1778 | STARTCHAR 182 1779 | ENCODING 182 1780 | SWIDTH 504 0 1781 | DWIDTH 7 0 1782 | BBX 7 8 0 0 1783 | BITMAP 1784 | 00 1785 | 7C 1786 | F4 1787 | F4 1788 | 34 1789 | 14 1790 | 14 1791 | 14 1792 | ENDCHAR 1793 | STARTCHAR 183 1794 | ENCODING 183 1795 | SWIDTH 360 0 1796 | DWIDTH 5 0 1797 | BBX 5 8 0 0 1798 | BITMAP 1799 | 00 1800 | 00 1801 | 00 1802 | 60 1803 | F0 1804 | 60 1805 | 00 1806 | 00 1807 | ENDCHAR 1808 | STARTCHAR 184 1809 | ENCODING 184 1810 | SWIDTH 360 0 1811 | DWIDTH 5 0 1812 | BBX 5 8 0 0 1813 | BITMAP 1814 | 00 1815 | 00 1816 | 00 1817 | 00 1818 | 00 1819 | 00 1820 | 20 1821 | 10 1822 | ENDCHAR 1823 | STARTCHAR 185 1824 | ENCODING 185 1825 | SWIDTH 288 0 1826 | DWIDTH 4 0 1827 | BBX 4 8 0 0 1828 | BITMAP 1829 | 00 1830 | C0 1831 | 40 1832 | E0 1833 | 00 1834 | 00 1835 | 00 1836 | 00 1837 | ENDCHAR 1838 | STARTCHAR 186 1839 | ENCODING 186 1840 | SWIDTH 360 0 1841 | DWIDTH 5 0 1842 | BBX 5 8 0 0 1843 | BITMAP 1844 | 00 1845 | 60 1846 | 90 1847 | 60 1848 | 00 1849 | 00 1850 | 00 1851 | 00 1852 | ENDCHAR 1853 | STARTCHAR 187 1854 | ENCODING 187 1855 | SWIDTH 432 0 1856 | DWIDTH 6 0 1857 | BBX 6 8 0 0 1858 | BITMAP 1859 | 00 1860 | 00 1861 | A0 1862 | 50 1863 | 28 1864 | 50 1865 | A0 1866 | 00 1867 | ENDCHAR 1868 | STARTCHAR 188 1869 | ENCODING 188 1870 | SWIDTH 504 0 1871 | DWIDTH 7 0 1872 | BBX 7 8 0 0 1873 | BITMAP 1874 | 00 1875 | 88 1876 | 90 1877 | A0 1878 | 54 1879 | 9C 1880 | 04 1881 | 00 1882 | ENDCHAR 1883 | STARTCHAR 189 1884 | ENCODING 189 1885 | SWIDTH 576 0 1886 | DWIDTH 8 0 1887 | BBX 8 8 0 0 1888 | BITMAP 1889 | 00 1890 | 88 1891 | 90 1892 | A0 1893 | 5C 1894 | 84 1895 | 18 1896 | 1E 1897 | ENDCHAR 1898 | STARTCHAR 190 1899 | ENCODING 190 1900 | SWIDTH 504 0 1901 | DWIDTH 7 0 1902 | BBX 7 8 0 0 1903 | BITMAP 1904 | 00 1905 | E4 1906 | 68 1907 | 30 1908 | E0 1909 | 54 1910 | 9C 1911 | 04 1912 | ENDCHAR 1913 | STARTCHAR 191 1914 | ENCODING 191 1915 | SWIDTH 360 0 1916 | DWIDTH 5 0 1917 | BBX 5 8 0 0 1918 | BITMAP 1919 | 00 1920 | 20 1921 | 00 1922 | 20 1923 | 60 1924 | 80 1925 | 90 1926 | 60 1927 | ENDCHAR 1928 | STARTCHAR 192 1929 | ENCODING 192 1930 | SWIDTH 360 0 1931 | DWIDTH 5 0 1932 | BBX 5 8 0 0 1933 | BITMAP 1934 | 80 1935 | 40 1936 | 60 1937 | 90 1938 | 90 1939 | F0 1940 | 90 1941 | 90 1942 | ENDCHAR 1943 | STARTCHAR 193 1944 | ENCODING 193 1945 | SWIDTH 360 0 1946 | DWIDTH 5 0 1947 | BBX 5 8 0 0 1948 | BITMAP 1949 | 10 1950 | 20 1951 | 60 1952 | 90 1953 | 90 1954 | F0 1955 | 90 1956 | 90 1957 | ENDCHAR 1958 | STARTCHAR 194 1959 | ENCODING 194 1960 | SWIDTH 360 0 1961 | DWIDTH 5 0 1962 | BBX 5 8 0 0 1963 | BITMAP 1964 | 60 1965 | 90 1966 | 60 1967 | 90 1968 | 90 1969 | F0 1970 | 90 1971 | 90 1972 | ENDCHAR 1973 | STARTCHAR 195 1974 | ENCODING 195 1975 | SWIDTH 360 0 1976 | DWIDTH 5 0 1977 | BBX 5 8 0 0 1978 | BITMAP 1979 | 50 1980 | A0 1981 | 60 1982 | 90 1983 | 90 1984 | F0 1985 | 90 1986 | 90 1987 | ENDCHAR 1988 | STARTCHAR 196 1989 | ENCODING 196 1990 | SWIDTH 360 0 1991 | DWIDTH 5 0 1992 | BBX 5 8 0 0 1993 | BITMAP 1994 | 90 1995 | 00 1996 | 60 1997 | 90 1998 | 90 1999 | F0 2000 | 90 2001 | 90 2002 | ENDCHAR 2003 | STARTCHAR 197 2004 | ENCODING 197 2005 | SWIDTH 360 0 2006 | DWIDTH 5 0 2007 | BBX 5 8 0 0 2008 | BITMAP 2009 | 60 2010 | 90 2011 | 60 2012 | 90 2013 | 90 2014 | F0 2015 | 90 2016 | 90 2017 | ENDCHAR 2018 | STARTCHAR 198 2019 | ENCODING 198 2020 | SWIDTH 576 0 2021 | DWIDTH 8 0 2022 | BBX 8 8 0 0 2023 | BITMAP 2024 | 00 2025 | 7E 2026 | 90 2027 | 90 2028 | FC 2029 | 90 2030 | 90 2031 | 9E 2032 | ENDCHAR 2033 | STARTCHAR 199 2034 | ENCODING 199 2035 | SWIDTH 504 0 2036 | DWIDTH 7 0 2037 | BBX 7 8 0 0 2038 | BITMAP 2039 | 00 2040 | 78 2041 | 84 2042 | 80 2043 | 80 2044 | 84 2045 | 78 2046 | 20 2047 | ENDCHAR 2048 | STARTCHAR 200 2049 | ENCODING 200 2050 | SWIDTH 360 0 2051 | DWIDTH 5 0 2052 | BBX 5 8 0 0 2053 | BITMAP 2054 | 40 2055 | 20 2056 | 70 2057 | 80 2058 | E0 2059 | 80 2060 | 80 2061 | 70 2062 | ENDCHAR 2063 | STARTCHAR 201 2064 | ENCODING 201 2065 | SWIDTH 360 0 2066 | DWIDTH 5 0 2067 | BBX 5 8 0 0 2068 | BITMAP 2069 | 20 2070 | 40 2071 | 70 2072 | 80 2073 | E0 2074 | 80 2075 | 80 2076 | 70 2077 | ENDCHAR 2078 | STARTCHAR 202 2079 | ENCODING 202 2080 | SWIDTH 360 0 2081 | DWIDTH 5 0 2082 | BBX 5 8 0 0 2083 | BITMAP 2084 | 60 2085 | 90 2086 | 70 2087 | 80 2088 | E0 2089 | 80 2090 | 80 2091 | 70 2092 | ENDCHAR 2093 | STARTCHAR 203 2094 | ENCODING 203 2095 | SWIDTH 360 0 2096 | DWIDTH 5 0 2097 | BBX 5 8 0 0 2098 | BITMAP 2099 | 90 2100 | 00 2101 | 70 2102 | 80 2103 | E0 2104 | 80 2105 | 80 2106 | 70 2107 | ENDCHAR 2108 | STARTCHAR 204 2109 | ENCODING 204 2110 | SWIDTH 288 0 2111 | DWIDTH 4 0 2112 | BBX 4 8 0 0 2113 | BITMAP 2114 | 80 2115 | 40 2116 | E0 2117 | 40 2118 | 40 2119 | 40 2120 | 40 2121 | E0 2122 | ENDCHAR 2123 | STARTCHAR 205 2124 | ENCODING 205 2125 | SWIDTH 288 0 2126 | DWIDTH 4 0 2127 | BBX 4 8 0 0 2128 | BITMAP 2129 | 20 2130 | 40 2131 | E0 2132 | 40 2133 | 40 2134 | 40 2135 | 40 2136 | E0 2137 | ENDCHAR 2138 | STARTCHAR 206 2139 | ENCODING 206 2140 | SWIDTH 288 0 2141 | DWIDTH 4 0 2142 | BBX 4 8 0 0 2143 | BITMAP 2144 | 40 2145 | A0 2146 | E0 2147 | 40 2148 | 40 2149 | 40 2150 | 40 2151 | E0 2152 | ENDCHAR 2153 | STARTCHAR 207 2154 | ENCODING 207 2155 | SWIDTH 288 0 2156 | DWIDTH 4 0 2157 | BBX 4 8 0 0 2158 | BITMAP 2159 | A0 2160 | 00 2161 | E0 2162 | 40 2163 | 40 2164 | 40 2165 | 40 2166 | E0 2167 | ENDCHAR 2168 | STARTCHAR 208 2169 | ENCODING 208 2170 | SWIDTH 432 0 2171 | DWIDTH 6 0 2172 | BBX 6 8 0 0 2173 | BITMAP 2174 | 00 2175 | 70 2176 | 48 2177 | 48 2178 | E8 2179 | 48 2180 | 48 2181 | 70 2182 | ENDCHAR 2183 | STARTCHAR 209 2184 | ENCODING 209 2185 | SWIDTH 360 0 2186 | DWIDTH 5 0 2187 | BBX 5 8 0 0 2188 | BITMAP 2189 | 50 2190 | A0 2191 | E0 2192 | 90 2193 | 90 2194 | 90 2195 | 90 2196 | 90 2197 | ENDCHAR 2198 | STARTCHAR 210 2199 | ENCODING 210 2200 | SWIDTH 360 0 2201 | DWIDTH 5 0 2202 | BBX 5 8 0 0 2203 | BITMAP 2204 | 80 2205 | 40 2206 | 60 2207 | 90 2208 | 90 2209 | 90 2210 | 90 2211 | 60 2212 | ENDCHAR 2213 | STARTCHAR 211 2214 | ENCODING 211 2215 | SWIDTH 360 0 2216 | DWIDTH 5 0 2217 | BBX 5 8 0 0 2218 | BITMAP 2219 | 10 2220 | 20 2221 | 60 2222 | 90 2223 | 90 2224 | 90 2225 | 90 2226 | 60 2227 | ENDCHAR 2228 | STARTCHAR 212 2229 | ENCODING 212 2230 | SWIDTH 360 0 2231 | DWIDTH 5 0 2232 | BBX 5 8 0 0 2233 | BITMAP 2234 | 60 2235 | 90 2236 | 60 2237 | 90 2238 | 90 2239 | 90 2240 | 90 2241 | 60 2242 | ENDCHAR 2243 | STARTCHAR 213 2244 | ENCODING 213 2245 | SWIDTH 360 0 2246 | DWIDTH 5 0 2247 | BBX 5 8 0 0 2248 | BITMAP 2249 | 50 2250 | A0 2251 | 60 2252 | 90 2253 | 90 2254 | 90 2255 | 90 2256 | 60 2257 | ENDCHAR 2258 | STARTCHAR 214 2259 | ENCODING 214 2260 | SWIDTH 360 0 2261 | DWIDTH 5 0 2262 | BBX 5 8 0 0 2263 | BITMAP 2264 | 90 2265 | 00 2266 | 60 2267 | 90 2268 | 90 2269 | 90 2270 | 90 2271 | 60 2272 | ENDCHAR 2273 | STARTCHAR 215 2274 | ENCODING 215 2275 | SWIDTH 432 0 2276 | DWIDTH 6 0 2277 | BBX 6 8 0 0 2278 | BITMAP 2279 | 00 2280 | 00 2281 | 88 2282 | 50 2283 | 20 2284 | 50 2285 | 88 2286 | 00 2287 | ENDCHAR 2288 | STARTCHAR 216 2289 | ENCODING 216 2290 | SWIDTH 576 0 2291 | DWIDTH 8 0 2292 | BBX 8 8 0 0 2293 | BITMAP 2294 | 00 2295 | 02 2296 | 3C 2297 | 4C 2298 | 54 2299 | 64 2300 | 78 2301 | 80 2302 | ENDCHAR 2303 | STARTCHAR 217 2304 | ENCODING 217 2305 | SWIDTH 360 0 2306 | DWIDTH 5 0 2307 | BBX 5 8 0 0 2308 | BITMAP 2309 | 40 2310 | 20 2311 | 90 2312 | 90 2313 | 90 2314 | 90 2315 | 90 2316 | 60 2317 | ENDCHAR 2318 | STARTCHAR 218 2319 | ENCODING 218 2320 | SWIDTH 360 0 2321 | DWIDTH 5 0 2322 | BBX 5 8 0 0 2323 | BITMAP 2324 | 20 2325 | 40 2326 | 90 2327 | 90 2328 | 90 2329 | 90 2330 | 90 2331 | 60 2332 | ENDCHAR 2333 | STARTCHAR 219 2334 | ENCODING 219 2335 | SWIDTH 360 0 2336 | DWIDTH 5 0 2337 | BBX 5 8 0 0 2338 | BITMAP 2339 | 60 2340 | 90 2341 | 00 2342 | 90 2343 | 90 2344 | 90 2345 | 90 2346 | 60 2347 | ENDCHAR 2348 | STARTCHAR 220 2349 | ENCODING 220 2350 | SWIDTH 360 0 2351 | DWIDTH 5 0 2352 | BBX 5 8 0 0 2353 | BITMAP 2354 | 90 2355 | 00 2356 | 90 2357 | 90 2358 | 90 2359 | 90 2360 | 90 2361 | 60 2362 | ENDCHAR 2363 | STARTCHAR 221 2364 | ENCODING 221 2365 | SWIDTH 432 0 2366 | DWIDTH 6 0 2367 | BBX 6 8 0 0 2368 | BITMAP 2369 | 10 2370 | 20 2371 | 88 2372 | 50 2373 | 20 2374 | 20 2375 | 20 2376 | 20 2377 | ENDCHAR 2378 | STARTCHAR 222 2379 | ENCODING 222 2380 | SWIDTH 360 0 2381 | DWIDTH 5 0 2382 | BBX 5 8 0 0 2383 | BITMAP 2384 | 00 2385 | 80 2386 | E0 2387 | 90 2388 | E0 2389 | 80 2390 | 80 2391 | 80 2392 | ENDCHAR 2393 | STARTCHAR 223 2394 | ENCODING 223 2395 | SWIDTH 432 0 2396 | DWIDTH 5 0 2397 | BBX 5 8 0 0 2398 | BITMAP 2399 | 00 2400 | 60 2401 | 90 2402 | 90 2403 | A0 2404 | 90 2405 | A0 2406 | 80 2407 | ENDCHAR 2408 | STARTCHAR 224 2409 | ENCODING 224 2410 | SWIDTH 360 0 2411 | DWIDTH 5 0 2412 | BBX 5 8 0 0 2413 | BITMAP 2414 | 40 2415 | 20 2416 | 00 2417 | 60 2418 | 10 2419 | 70 2420 | 90 2421 | 70 2422 | ENDCHAR 2423 | STARTCHAR 225 2424 | ENCODING 225 2425 | SWIDTH 360 0 2426 | DWIDTH 5 0 2427 | BBX 5 8 0 0 2428 | BITMAP 2429 | 20 2430 | 40 2431 | 00 2432 | 60 2433 | 10 2434 | 70 2435 | 90 2436 | 70 2437 | ENDCHAR 2438 | STARTCHAR 226 2439 | ENCODING 226 2440 | SWIDTH 360 0 2441 | DWIDTH 5 0 2442 | BBX 5 8 0 0 2443 | BITMAP 2444 | 60 2445 | 90 2446 | 00 2447 | 60 2448 | 10 2449 | 70 2450 | 90 2451 | 70 2452 | ENDCHAR 2453 | STARTCHAR 227 2454 | ENCODING 227 2455 | SWIDTH 360 0 2456 | DWIDTH 5 0 2457 | BBX 5 8 0 0 2458 | BITMAP 2459 | 50 2460 | A0 2461 | 00 2462 | 60 2463 | 10 2464 | 70 2465 | 90 2466 | 70 2467 | ENDCHAR 2468 | STARTCHAR 228 2469 | ENCODING 228 2470 | SWIDTH 360 0 2471 | DWIDTH 5 0 2472 | BBX 5 8 0 0 2473 | BITMAP 2474 | 00 2475 | 90 2476 | 00 2477 | 60 2478 | 10 2479 | 70 2480 | 90 2481 | 70 2482 | ENDCHAR 2483 | STARTCHAR 229 2484 | ENCODING 229 2485 | SWIDTH 360 0 2486 | DWIDTH 5 0 2487 | BBX 5 8 0 0 2488 | BITMAP 2489 | 00 2490 | 60 2491 | 90 2492 | 60 2493 | 10 2494 | 70 2495 | 90 2496 | 70 2497 | ENDCHAR 2498 | STARTCHAR 230 2499 | ENCODING 230 2500 | SWIDTH 576 0 2501 | DWIDTH 8 0 2502 | BBX 8 8 0 0 2503 | BITMAP 2504 | 00 2505 | 00 2506 | 00 2507 | 6C 2508 | 12 2509 | 7E 2510 | 90 2511 | 7E 2512 | ENDCHAR 2513 | STARTCHAR 231 2514 | ENCODING 231 2515 | SWIDTH 432 0 2516 | DWIDTH 6 0 2517 | BBX 6 8 0 0 2518 | BITMAP 2519 | 00 2520 | 00 2521 | 00 2522 | 78 2523 | 80 2524 | 80 2525 | 78 2526 | 20 2527 | ENDCHAR 2528 | STARTCHAR 232 2529 | ENCODING 232 2530 | SWIDTH 360 0 2531 | DWIDTH 5 0 2532 | BBX 5 8 0 0 2533 | BITMAP 2534 | 40 2535 | 20 2536 | 00 2537 | 60 2538 | 90 2539 | F0 2540 | 80 2541 | 70 2542 | ENDCHAR 2543 | STARTCHAR 233 2544 | ENCODING 233 2545 | SWIDTH 360 0 2546 | DWIDTH 5 0 2547 | BBX 5 8 0 0 2548 | BITMAP 2549 | 20 2550 | 40 2551 | 00 2552 | 60 2553 | 90 2554 | F0 2555 | 80 2556 | 70 2557 | ENDCHAR 2558 | STARTCHAR 234 2559 | ENCODING 234 2560 | SWIDTH 360 0 2561 | DWIDTH 5 0 2562 | BBX 5 8 0 0 2563 | BITMAP 2564 | 60 2565 | 90 2566 | 00 2567 | 60 2568 | 90 2569 | F0 2570 | 80 2571 | 70 2572 | ENDCHAR 2573 | STARTCHAR 235 2574 | ENCODING 235 2575 | SWIDTH 360 0 2576 | DWIDTH 5 0 2577 | BBX 5 8 0 0 2578 | BITMAP 2579 | 00 2580 | 90 2581 | 00 2582 | 60 2583 | 90 2584 | F0 2585 | 80 2586 | 70 2587 | ENDCHAR 2588 | STARTCHAR 236 2589 | ENCODING 236 2590 | SWIDTH 216 0 2591 | DWIDTH 3 0 2592 | BBX 3 8 0 0 2593 | BITMAP 2594 | 80 2595 | 40 2596 | 00 2597 | 80 2598 | 80 2599 | 80 2600 | 80 2601 | 80 2602 | ENDCHAR 2603 | STARTCHAR 237 2604 | ENCODING 237 2605 | SWIDTH 216 0 2606 | DWIDTH 3 0 2607 | BBX 3 8 0 0 2608 | BITMAP 2609 | 40 2610 | 80 2611 | 00 2612 | 80 2613 | 80 2614 | 80 2615 | 80 2616 | 80 2617 | ENDCHAR 2618 | STARTCHAR 238 2619 | ENCODING 238 2620 | SWIDTH 288 0 2621 | DWIDTH 4 0 2622 | BBX 4 8 0 0 2623 | BITMAP 2624 | 40 2625 | A0 2626 | 00 2627 | 40 2628 | 40 2629 | 40 2630 | 40 2631 | 40 2632 | ENDCHAR 2633 | STARTCHAR 239 2634 | ENCODING 239 2635 | SWIDTH 288 0 2636 | DWIDTH 4 0 2637 | BBX 4 8 0 0 2638 | BITMAP 2639 | 00 2640 | A0 2641 | 00 2642 | 40 2643 | 40 2644 | 40 2645 | 40 2646 | 40 2647 | ENDCHAR 2648 | STARTCHAR 240 2649 | ENCODING 240 2650 | SWIDTH 360 0 2651 | DWIDTH 5 0 2652 | BBX 5 8 0 0 2653 | BITMAP 2654 | 40 2655 | C0 2656 | 20 2657 | 60 2658 | 90 2659 | 90 2660 | 90 2661 | 60 2662 | ENDCHAR 2663 | STARTCHAR 241 2664 | ENCODING 241 2665 | SWIDTH 360 0 2666 | DWIDTH 5 0 2667 | BBX 5 8 0 0 2668 | BITMAP 2669 | 50 2670 | A0 2671 | 00 2672 | E0 2673 | 90 2674 | 90 2675 | 90 2676 | 90 2677 | ENDCHAR 2678 | STARTCHAR 242 2679 | ENCODING 242 2680 | SWIDTH 360 0 2681 | DWIDTH 5 0 2682 | BBX 5 8 0 0 2683 | BITMAP 2684 | 80 2685 | 40 2686 | 00 2687 | 60 2688 | 90 2689 | 90 2690 | 90 2691 | 60 2692 | ENDCHAR 2693 | STARTCHAR 243 2694 | ENCODING 243 2695 | SWIDTH 360 0 2696 | DWIDTH 5 0 2697 | BBX 5 8 0 0 2698 | BITMAP 2699 | 10 2700 | 20 2701 | 00 2702 | 60 2703 | 90 2704 | 90 2705 | 90 2706 | 60 2707 | ENDCHAR 2708 | STARTCHAR 244 2709 | ENCODING 244 2710 | SWIDTH 360 0 2711 | DWIDTH 5 0 2712 | BBX 5 8 0 0 2713 | BITMAP 2714 | 60 2715 | 90 2716 | 00 2717 | 60 2718 | 90 2719 | 90 2720 | 90 2721 | 60 2722 | ENDCHAR 2723 | STARTCHAR 245 2724 | ENCODING 245 2725 | SWIDTH 360 0 2726 | DWIDTH 5 0 2727 | BBX 5 8 0 0 2728 | BITMAP 2729 | 50 2730 | A0 2731 | 00 2732 | 60 2733 | 90 2734 | 90 2735 | 90 2736 | 60 2737 | ENDCHAR 2738 | STARTCHAR 246 2739 | ENCODING 246 2740 | SWIDTH 360 0 2741 | DWIDTH 5 0 2742 | BBX 5 8 0 0 2743 | BITMAP 2744 | 00 2745 | 90 2746 | 00 2747 | 60 2748 | 90 2749 | 90 2750 | 90 2751 | 60 2752 | ENDCHAR 2753 | STARTCHAR 247 2754 | ENCODING 247 2755 | SWIDTH 432 0 2756 | DWIDTH 6 0 2757 | BBX 6 8 0 0 2758 | BITMAP 2759 | 00 2760 | 00 2761 | 20 2762 | 00 2763 | F8 2764 | 00 2765 | 20 2766 | 00 2767 | ENDCHAR 2768 | STARTCHAR 248 2769 | ENCODING 248 2770 | SWIDTH 504 0 2771 | DWIDTH 7 0 2772 | BBX 7 8 0 0 2773 | BITMAP 2774 | 00 2775 | 00 2776 | 74 2777 | 88 2778 | 94 2779 | A4 2780 | 44 2781 | B8 2782 | ENDCHAR 2783 | STARTCHAR 249 2784 | ENCODING 249 2785 | SWIDTH 360 0 2786 | DWIDTH 5 0 2787 | BBX 5 8 0 0 2788 | BITMAP 2789 | 40 2790 | 20 2791 | 00 2792 | 90 2793 | 90 2794 | 90 2795 | 90 2796 | 60 2797 | ENDCHAR 2798 | STARTCHAR 250 2799 | ENCODING 250 2800 | SWIDTH 360 0 2801 | DWIDTH 5 0 2802 | BBX 5 8 0 0 2803 | BITMAP 2804 | 20 2805 | 40 2806 | 00 2807 | 90 2808 | 90 2809 | 90 2810 | 90 2811 | 60 2812 | ENDCHAR 2813 | STARTCHAR 251 2814 | ENCODING 251 2815 | SWIDTH 360 0 2816 | DWIDTH 5 0 2817 | BBX 5 8 0 0 2818 | BITMAP 2819 | 60 2820 | 90 2821 | 00 2822 | 90 2823 | 90 2824 | 90 2825 | 90 2826 | 60 2827 | ENDCHAR 2828 | STARTCHAR 252 2829 | ENCODING 252 2830 | SWIDTH 360 0 2831 | DWIDTH 5 0 2832 | BBX 5 8 0 0 2833 | BITMAP 2834 | 00 2835 | 90 2836 | 00 2837 | 90 2838 | 90 2839 | 90 2840 | 90 2841 | 60 2842 | ENDCHAR 2843 | STARTCHAR 253 2844 | ENCODING 253 2845 | SWIDTH 360 0 2846 | DWIDTH 5 0 2847 | BBX 5 8 0 0 2848 | BITMAP 2849 | 40 2850 | 20 2851 | 00 2852 | 90 2853 | 90 2854 | 70 2855 | 10 2856 | 60 2857 | ENDCHAR 2858 | STARTCHAR 254 2859 | ENCODING 254 2860 | SWIDTH 504 0 2861 | DWIDTH 7 0 2862 | BBX 7 8 0 0 2863 | BITMAP 2864 | 00 2865 | 80 2866 | B8 2867 | C4 2868 | 84 2869 | C4 2870 | B8 2871 | 80 2872 | ENDCHAR 2873 | STARTCHAR 255 2874 | ENCODING 255 2875 | SWIDTH 360 0 2876 | DWIDTH 5 0 2877 | BBX 5 8 0 0 2878 | BITMAP 2879 | 00 2880 | 90 2881 | 00 2882 | 90 2883 | 90 2884 | 70 2885 | 10 2886 | 60 2887 | ENDCHAR 2888 | STARTCHAR emdash 2889 | ENCODING 8212 2890 | SWIDTH 432 0 2891 | DWIDTH 6 0 2892 | BBX 6 8 0 0 2893 | BITMAP 2894 | 00 2895 | 00 2896 | 00 2897 | 00 2898 | F8 2899 | 00 2900 | 00 2901 | 00 2902 | ENDCHAR 2903 | STARTCHAR euro 2904 | ENCODING 8364 2905 | SWIDTH 685 0 2906 | DWIDTH 7 0 2907 | BBX 7 8 0 0 2908 | BITMAP 2909 | 00 2910 | 1C 2911 | 20 2912 | F8 2913 | 40 2914 | F8 2915 | 20 2916 | 1C 2917 | ENDCHAR 2918 | STARTCHAR arrowright 2919 | ENCODING 8594 2920 | SWIDTH 360 0 2921 | DWIDTH 6 0 2922 | BBX 6 8 0 0 2923 | BITMAP 2924 | 00 2925 | 00 2926 | 00 2927 | 10 2928 | F8 2929 | 10 2930 | 00 2931 | 00 2932 | ENDCHAR 2933 | STARTCHAR whitearrowleft 2934 | ENCODING 8678 2935 | SWIDTH 360 0 2936 | DWIDTH 13 0 2937 | BBX 13 8 0 0 2938 | BITMAP 2939 | 0000 2940 | 1000 2941 | 3000 2942 | 7FF0 2943 | FFF0 2944 | 7FF0 2945 | 3000 2946 | 1000 2947 | ENDCHAR 2948 | STARTCHAR whitearrowright 2949 | ENCODING 8680 2950 | SWIDTH 360 0 2951 | DWIDTH 13 0 2952 | BBX 13 8 0 0 2953 | BITMAP 2954 | 0000 2955 | 0080 2956 | 00C0 2957 | FFE0 2958 | FFF0 2959 | FFE0 2960 | 00C0 2961 | 0080 2962 | ENDCHAR 2963 | STARTCHAR longarrowleft 2964 | ENCODING 10229 2965 | SWIDTH 360 0 2966 | DWIDTH 13 0 2967 | BBX 13 8 0 0 2968 | BITMAP 2969 | 0000 2970 | 1000 2971 | 2000 2972 | 4000 2973 | FFF0 2974 | 4000 2975 | 2000 2976 | 1000 2977 | ENDCHAR 2978 | STARTCHAR longarrowright 2979 | ENCODING 10230 2980 | SWIDTH 360 0 2981 | DWIDTH 13 0 2982 | BBX 13 8 0 0 2983 | BITMAP 2984 | 0000 2985 | 0080 2986 | 0040 2987 | 0020 2988 | FFF0 2989 | 0020 2990 | 0040 2991 | 0080 2992 | ENDCHAR 2993 | STARTCHAR replacement 2994 | ENCODING 65533 2995 | SWIDTH 360 0 2996 | DWIDTH 5 0 2997 | BBX 5 8 0 0 2998 | BITMAP 2999 | 00 3000 | 00 3001 | 00 3002 | F0 3003 | 90 3004 | 90 3005 | 90 3006 | F0 3007 | ENDCHAR 3008 | ENDFONT 3009 | -------------------------------------------------------------------------------- /res/hstcolors.json: -------------------------------------------------------------------------------- 1 | { 2 | "bus": { 3 | "510": { "fg": "#fff", "bg": "#b06520" } 4 | , "511": { "fg": "#fff", "bg": "#15b6b9" } 5 | , "512": { "fg": "#fff", "bg": "#b06520" } 6 | , "513": { "fg": "#fff", "bg": "#7f4984" } 7 | , "514": { "fg": "#fff", "bg": "#f49b00" } 8 | , "515": { "fg": "#fff", "bg": "#c10004" } 9 | , "516": { "fg": "#fff", "bg": "#7eaf49" } 10 | , "517": { "fg": "#fff", "bg": "#619f4e" } 11 | , "518": { "fg": "#fff", "bg": "#007bc1" } 12 | , "519": { "fg": "#fff", "bg": "#007bc1" } 13 | , "520": { "fg": "#fff", "bg": "#e63758" } 14 | , "521": { "fg": "#fff", "bg": "#df0008" } 15 | , "524": { "fg": "#fff", "bg": "#a36501" } 16 | , "525": { "fg": "#fff", "bg": "#df0008" } 17 | , "527": { "fg": "#fff", "bg": "#7c277d" } 18 | , "528": { "fg": "#fff", "bg": "#1784c1" } 19 | , "530": { "fg": "#fff", "bg": "#e60253" } 20 | , "532": { "fg": "#fff", "bg": "#364a9c" } 21 | , "534": { "fg": "#fff", "bg": "#567b3e" } 22 | , "535": { "fg": "#fff", "bg": "#e14c25" } 23 | , "536": { "fg": "#fff", "bg": "#7fceef" } 24 | , "538": { "fg": "#fff", "bg": "#006cb6" } 25 | , "539": { "fg": "#fff", "bg": "#897300" } 26 | , "541": { "fg": "#fff", "bg": "#9c590f" } 27 | , "542": { "fg": "#fff", "bg": "#71c837" } 28 | , "543": { "fg": "#fff", "bg": "#f49b00" } 29 | , "SB71": { "fg": "#fff", "bg": "#15b6b9" } 30 | , "SB72": { "fg": "#fff", "bg": "#0c919c" } 31 | , "NE1": { "fg": "#fff", "bg": "#ff2a2a" } 32 | , "NE2": { "fg": "#fff", "bg": "#ff6600" } 33 | , "NE3": { "fg": "#000", "bg": "#ffcc00" } 34 | , "NE4": { "fg": "#fff", "bg": "#2ca02c" } 35 | , "NE5": { "fg": "#fff", "bg": "#5f8dd3" } 36 | , "NE6": { "fg": "#fff", "bg": "#7137c8" } 37 | , "NE7": { "fg": "#fff", "bg": "#a05a2c" } 38 | , "NE9": { "fg": "#fff", "bg": "#800080" } 39 | , "NE19": { "fg": "#fff", "bg": "#a02c2c" } 40 | , "NE22": { "fg": "#fff", "bg": "#006cb6" } 41 | , "NE31": { "fg": "#fff", "bg": "#803300" } 42 | , "NE32": { "fg": "#fff", "bg": "#364a9c" } 43 | , "1": { "fg": "#fff", "bg": "#999999" } 44 | , "9": { "fg": "#fff", "bg": "#999999" } 45 | , "57": { "fg": "#fff", "bg": "#999999" } 46 | , "84": { "fg": "#fff", "bg": "#999999" } 47 | , "376": { "fg": "#fff", "bg": "#999999" } 48 | , "432": { "fg": "#fff", "bg": "#999999" } 49 | , "442": { "fg": "#fff", "bg": "#999999" } 50 | , "523": { "fg": "#fff", "bg": "#999999" } 51 | , "529": { "fg": "#fff", "bg": "#999999" } 52 | , "553": { "fg": "#fff", "bg": "#999999" } 53 | , "555": { "fg": "#fff", "bg": "#999999" } 54 | , "556": { "fg": "#fff", "bg": "#999999" } 55 | , "591": { "fg": "#fff", "bg": "#999999" } 56 | , "594": { "fg": "#fff", "bg": "#999999" } 57 | } 58 | } -------------------------------------------------------------------------------- /res/ppm/dbkeks.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/dbkeks.ppm -------------------------------------------------------------------------------- /res/ppm/icon-ad.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-ad.ppm -------------------------------------------------------------------------------- /res/ppm/icon-delay.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-delay.ppm -------------------------------------------------------------------------------- /res/ppm/icon-earlyterm.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-earlyterm.ppm -------------------------------------------------------------------------------- /res/ppm/icon-fhswf.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-fhswf.ppm -------------------------------------------------------------------------------- /res/ppm/icon-ic6.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-ic6.ppm -------------------------------------------------------------------------------- /res/ppm/icon-ic7.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-ic7.ppm -------------------------------------------------------------------------------- /res/ppm/icon-ice6.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-ice6.ppm -------------------------------------------------------------------------------- /res/ppm/icon-ice7.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-ice7.ppm -------------------------------------------------------------------------------- /res/ppm/icon-info.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-info.ppm -------------------------------------------------------------------------------- /res/ppm/icon-ne-thin6.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-ne-thin6.ppm -------------------------------------------------------------------------------- /res/ppm/icon-ne-thin7.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-ne-thin7.ppm -------------------------------------------------------------------------------- /res/ppm/icon-ne6.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-ne6.ppm -------------------------------------------------------------------------------- /res/ppm/icon-ne7.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-ne7.ppm -------------------------------------------------------------------------------- /res/ppm/icon-no-deps.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-no-deps.ppm -------------------------------------------------------------------------------- /res/ppm/icon-no-rt.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-no-rt.ppm -------------------------------------------------------------------------------- /res/ppm/icon-smile.ppm: -------------------------------------------------------------------------------- 1 | P6 2 | # CREATOR: GIMP PNM Filter Version 1.1 3 | 7 7 4 | 255 5 | Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z<Z< -------------------------------------------------------------------------------- /res/ppm/icon-stop.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-stop.ppm -------------------------------------------------------------------------------- /res/ppm/icon-warn.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/icon-warn.ppm -------------------------------------------------------------------------------- /res/ppm/matrix11x11sun.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/matrix11x11sun.ppm -------------------------------------------------------------------------------- /res/ppm/matrix13x13vrr-engebuchstaben-2.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/matrix13x13vrr-engebuchstaben-2.ppm -------------------------------------------------------------------------------- /res/ppm/red-ausfall-long.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/red-ausfall-long.ppm -------------------------------------------------------------------------------- /res/ppm/red-ausfall.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/red-ausfall.ppm -------------------------------------------------------------------------------- /res/ppm/sonne.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/sonne.ppm -------------------------------------------------------------------------------- /res/ppm/white-bus6.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-bus6.ppm -------------------------------------------------------------------------------- /res/ppm/white-bus7.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-bus7.ppm -------------------------------------------------------------------------------- /res/ppm/white-hanging6.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-hanging6.ppm -------------------------------------------------------------------------------- /res/ppm/white-hanging7.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-hanging7.ppm -------------------------------------------------------------------------------- /res/ppm/white-hispeed6.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-hispeed6.ppm -------------------------------------------------------------------------------- /res/ppm/white-hispeed7.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-hispeed7.ppm -------------------------------------------------------------------------------- /res/ppm/white-min.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-min.ppm -------------------------------------------------------------------------------- /res/ppm/white-sofort-high.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-sofort-high.ppm -------------------------------------------------------------------------------- /res/ppm/white-sofort.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-sofort.ppm -------------------------------------------------------------------------------- /res/ppm/white-train6.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-train6.ppm -------------------------------------------------------------------------------- /res/ppm/white-train7.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-train7.ppm -------------------------------------------------------------------------------- /res/ppm/white-tram6.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-tram6.ppm -------------------------------------------------------------------------------- /res/ppm/white-tram7.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/white-tram7.ppm -------------------------------------------------------------------------------- /res/ppm/wolke mit regen.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/wolke mit regen.ppm -------------------------------------------------------------------------------- /res/ppm/wolke mit sonne.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/wolke mit sonne.ppm -------------------------------------------------------------------------------- /res/ppm/wolke.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3d9/dm_tomatrixled/99ef934216101be416b8a1a3b69346de52537e4e/res/ppm/wolke.ppm -------------------------------------------------------------------------------- /service/matrix.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Python DFI LED-Matrix 3 | After=network-online.target 4 | Wants=network-online.target 5 | [Service] 6 | Type=simple 7 | WorkingDirectory=/home/pi/dm_tomatrixled 8 | EnvironmentFile=/home/pi/dm_tomatrixled/service/run.env 9 | ExecStart=/bin/bash /home/pi/dm_tomatrixled/service/run.sh 10 | KillSignal=SIGINT 11 | Restart=on-failure 12 | [Install] 13 | WantedBy=default.target 14 | -------------------------------------------------------------------------------- /service/run.env.example: -------------------------------------------------------------------------------- 1 | # für den service 2 | 3 | selection=emilienplatz 4 | sleeptime=30 5 | shutdowntime="" 6 | brightness=15 7 | 8 | # https://dfi.d3d9.xyz/ 9 | config_system_url="https://.../admin-ajax.php" 10 | config_system_id=0 11 | config_system_key="123abc..." 12 | ext_data_url="https://.../admin-ajax.php?action=dfi_data&id[]=..." 13 | -------------------------------------------------------------------------------- /service/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | hagenreplace='--place-string ", Hagen (Westf)" --place-string "Hagen " --place-string "HA-" --keep-place-string "Hagen Hauptbahnhof" --dest-replacement "Hagen Hauptbahnhof%Hagen Hbf"' 4 | brightness=${brightness:-20} 5 | 6 | if [ ! $(id -u) -eq 0 ]; then 7 | echo "muss als root ausgeführt werden" 8 | exit 1 9 | fi 10 | 11 | if [ -z "$selection" ]; then 12 | echo "keine Auswahl angegeben.." 13 | exit 1 14 | fi 15 | 16 | # warten wegen Netzwerk usw. 17 | # besser wäre es, wenn systemd-time-wait-sync.service verfügbar wäre 18 | if [[ ! ( -z "$sleeptime" || $sleeptime -eq 0 )]]; then 19 | echo "sleeping $sleeptime s" 20 | sleep $sleeptime 21 | addsleep=3 22 | echo "sleeping for additional $addsleep s" 23 | sleep $addsleep 24 | fi 25 | 26 | if [ ! -z "$shutdowntime" ]; then 27 | echo "shutdown $shutdowntime" 28 | shutdown --no-wall $shutdowntime 29 | fi 30 | 31 | echo "selection: $selection" 32 | case $selection in 33 | feuerwache) 34 | echo $hagenreplace | xargs ./dm_tomatrixled.py -s de:05914:2216 -b$brightness -er0 -w16 -l8 -f8 --led-slowdown-gpio 2 --update-steps 330 --sleep-interval 0.025 --ext-data-url $ext_data_url --hst-colors --platform-width 13 --local-deps "./feuerwache.csv" --nina-url "https://warnung.bund.de/api31/dashboard/" --nina-ags "059140000000" --nina-ignore-msgType "Update" --nina-ignore-msgType "Cancel" --nina-ignore-id "lhp.HOCHWASSERZENTRALEN.DE.NW" 35 | ;; 36 | emilienplatz) 37 | echo $hagenreplace | xargs ./dm_tomatrixled.py -s de:05914:2075:0:1 -b$brightness -er1 -l8 -f8 --update-steps 330 --ignore-infoid 45828_HST --ignore-infoid 54354_HST 38 | ;; 39 | emilienplatz3) 40 | echo $hagenreplace | xargs ./dm_tomatrixled.py -s de:05914:2075:0:1 -b$brightness -er3 -l8 -f8 --update-steps 330 --ignore-infoid 45828_HST --ignore-infoid 54354_HST -w15 41 | ;; 42 | hagenhbfefa) 43 | echo $hagenreplace | xargs ./dm_tomatrixled.py -s de:05914:2007 -b$brightness -er1 -l8 -f8 --update-steps 330 44 | ;; 45 | systemexample) 46 | ./dm_tomatrixled.py -s de:05914:2007 -b$brightness -er1 -l8 -f8 --update-steps 330 --config-system-url $config_system_url --config-system-id $config_system_id --config-system-key $config_system_key --ext-data-url $ext_data_url 47 | ;; 48 | hagenhbf) 49 | echo $hagenreplace | xargs ./dm_tomatrixled.py -s de:05914:2007 -b$brightness -er1 -l8 -f8 --update-steps 330 --ibnr "08000142" 50 | ;; 51 | essenhbfefa) 52 | ./dm_tomatrixled.py -s de:05113:9289 -b$brightness -er1 -l8 -f8 --update-steps 330 --place-string "Essen " --place-string "E-" 53 | ;; 54 | essenhbf) 55 | ./dm_tomatrixled.py -s de:05113:9289 -b$brightness -er1 -l8 -f8 --update-steps 330 --place-string ", Essen (Ruhr)" --place-string "Essen " --place-string "E-" --ibnr "08000098" 56 | ;; 57 | *) 58 | echo "ungültige Auswahl $selection" 59 | exit 1 60 | ;; 61 | esac 62 | --------------------------------------------------------------------------------