diff options
Diffstat (limited to 'Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py')
-rw-r--r-- | Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py new file mode 100644 index 00000000000..645296d4b14 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/gnu-freefont/tools/utility/special-purpose/makeBraille.py @@ -0,0 +1,80 @@ +__license__ = """ +This file is part of Gnu FreeFont. + +Gnu FreeFont is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +Gnu FreeFont is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +Gnu FreeFont. If not, see <http://www.gnu.org/licenses/>. +""" +__author__ = "Stevan White" +__email__ = "stevan.white@googlemail.com" +__copyright__ = "Copyright 2010, Stevan White" +__date__ = "$Date: 2010/09/18 08:50:42 $" +__version__ = "$Revision: 1.6 $" + +import fontforge +import psMat +from sys import stdout + +__doc__ = """ +Replaces the Braille Pattern range in a font. There must already be +characters defined there. + +Two auxiliar glyphs, in variables glyphOff and glyphOn below, represent the +off and on state of the Braille dots, respectively. + +One also needs to set the font file path, the width between columns of dots, +and the width between rows of dots, as well as the width of the glyphs. + +The first 64 Braille Patterns consist of two columns of four dots, +the bottom two of which are all zero. The other 6 dots are represented +by the bit patterns of the octal digits of the offset from the range start. + +The remaining three sets of 64 patterns repeat the first set, with +the bottom two dots being the bit pattern for the numbers 1 to 4 in binary. +""" + +font = fontforge.open( '../../sfd/FreeMono.sfd' ) + +glyphOff = 'braille_off' +glyphOn = 'braille_on' +colwidth = 220 +rowheight = -220 +glyphwidth = 600 + +def drawdot( g, col, row, on ): + move = psMat.translate( col * colwidth, row * rowheight ) + if on: + g.addReference( glyphOn, move ) + else: + g.addReference( glyphOff, move ) + +def createAndName( font, off ): + return font.createChar( 0x2800 + off, 'braille%0.2X' % off ) + +def drawtopsix( g, off ): + print 'created', 'braille%0.2X' % off + g.clear() + g.right_side_bearing = glyphwidth + for col in range ( 0, 2 ): + for row in range ( 0, 3 ): + print 'shift', ( 3 * col + row ) + state = ( 1 << ( 3 * col + row ) ) & off + drawdot( g, col, row, state ) + +# Contrary to the FontForge docs, font.createChar does *not* create a +# glyph if one doesn't exist, but *does* re-name it if it already exists. +for off in range ( 0, 0x0100 ): + g = createAndName( font, off ) + drawtopsix( g, off ) + drawdot( g, 0, 3, ( off / 0x40 ) % 2 != 0 ) + drawdot( g, 1, 3, off / 0x80 != 0 ) + +font.save() |