108 lines
4.5 KiB
Plaintext
108 lines
4.5 KiB
Plaintext
Metadata-Version: 2.1
|
|
Name: Hershey-Fonts
|
|
Version: 2.1.0
|
|
Summary: Vector font package with built-in fonts and font rendering iterators
|
|
Home-page: https://github.com/apshu/HersheyFonts
|
|
Author: Attila
|
|
Author-email: attila.kolinger@gmail.com
|
|
License: MIT License
|
|
Platform: all
|
|
Classifier: Programming Language :: Python :: 3
|
|
Classifier: Programming Language :: Python :: 2.7
|
|
Classifier: Topic :: Text Processing :: Fonts
|
|
Classifier: Topic :: Multimedia :: Graphics
|
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
Classifier: Topic :: Scientific/Engineering
|
|
Classifier: Intended Audience :: Developers
|
|
Classifier: Development Status :: 5 - Production/Stable
|
|
Classifier: License :: OSI Approved :: MIT License
|
|
Classifier: Operating System :: OS Independent
|
|
Requires-Python: >=2.7
|
|
Description-Content-Type: text/markdown
|
|
License-File: LICENSE
|
|
|
|
# Hershey Font
|
|
<br/>Hershey font is a python library with built in fonts and low level line and stroke iterators.
|
|
|
|
## What is Hershey Font?
|
|
Hershey font is a vector font, designed many years ago.
|
|
The main use today if for generating text for CNC engraving.
|
|
|
|
[Read more on Wikipedia](https://en.wikipedia.org/wiki/Hershey_fonts)
|
|
|
|
[Font samples](http://soft9000.com/HersheyShowcase/)
|
|
## Overview
|
|
Hershey font consists of _glyphs_, each _glyph_ is assigned to an ASCII value from 32 (`'space'`) until 32+number of _glyphs_.<br/>Each _glyph_ consits of array of **strokes**.<br/>A **stroke** is an array of zero or more continous lines (points of an openend or closed ploygon).
|
|
## The Python module
|
|
The Hershey-Font package is providing the `HersheyFonts` class.<br/>
|
|
Great care was taken to be compatible with defulat installation of python 2.7 and python 3.<br/>
|
|
The `HersheyFonts` instance is handling only one font at a time. If you need to use multiple type faces as the same time, you can load a new typeface anytime (even during rendering) or create another `HersheyFonts` instance.
|
|
### Installing
|
|
Sources available on [GitHub](https://github.com/apshu/HersheyFonts)
|
|
Installation is available through pip and pip3
|
|
```ShellSession
|
|
#python 3
|
|
pip3 install Hershey-Fonts
|
|
|
|
#python 2.7
|
|
pip install Hershey-Fonts
|
|
```
|
|
### Demo
|
|
After successfully installing the Hershey-Font package, you can run the module for a simple demonstration.
|
|
```ShellSession
|
|
#python 3
|
|
python3 -m HersheyFonts
|
|
|
|
#python 2.7
|
|
python -m HersheyFonts
|
|
```
|
|
|
|
### Built-in fonts
|
|
The python module 1.0.0 has **32 fonts included in the source code** as a compressed base64 encoded variable.
|
|
The module can also load default fonts or from file and iterable string lines.
|
|
When you make your own font and want to include in the package, please contact me.
|
|
You can get the list of built-in fonts by looking at
|
|
```Python
|
|
from HersheyFonts import HersheyFonts
|
|
|
|
print(HersheyFonts().default_font_names)
|
|
```
|
|
The order and elements of the list may totally vary with any package release.
|
|
### Loading a font
|
|
To access one of the built-in fonts, use the `.load_default_font()` method. To read custome fonts you can call the `.load_font_file(file_name)` or `.read_from_string_lines(stringlines)` methods. The constructor also gives opportunity to read built-in or external font.
|
|
```Python
|
|
from HersheyFonts import HersheyFonts
|
|
thefont = HersheyFonts()
|
|
thefont.load_default_font('gothiceng')
|
|
thefont.load_default_font(thefont.default_font_names[0])
|
|
thefont.load_default_font() #Returns the name of the loaded font
|
|
thefont.load_font_file('cyrillic.jhf')
|
|
thefont.read_from_string_lines(arrayofstrings)
|
|
```
|
|
For more details and all options see doc comments in the sources.
|
|
### Renderig the loaded font
|
|
There are several options to convert a text to font data. The simplest way is to read endpoints of the lines returned by renderer method `.lines_for_text(sometext)`<br/>
|
|
There are renderer methods returning list of glyps, list of strokes and list of line endpoints.
|
|
> The renderers in version 1.0.0 support only single line texts.
|
|
> Rendering is also affected by `.render_options` property.<br/>
|
|
> There is a `.normalize_rendering()` method to automatically set the scaling and offsets for easy rendering.
|
|
```Python
|
|
# Minimalistic code for easy start
|
|
from HersheyFonts import HersheyFonts
|
|
def draw_line(x1, y1, x2, y2):
|
|
︙
|
|
︙
|
|
|
|
thefont = HersheyFonts()
|
|
thefont.load_default_font()
|
|
thefont.normalize_rendering(100)
|
|
for (x1, y1), (x2, y2) in thefont.lines_for_text('Hello'):
|
|
draw_line(x1, y1 ,x2 ,y2)
|
|
```
|
|
## The Hershey-Font API
|
|
The API is documented in the source code.
|
|
# Thank you
|
|
Big thanks to all people working on maintaining this old format for the modern age.
|
|
|
|
|