# -*- coding: utf-8 -*- # # libcaca Colour ASCII-Art library # Python language bindings # Copyright (c) 2010 Alex Foulon # All Rights Reserved # # This library is free software. It comes without any warranty, to # the extent permitted by applicable law. You can redistribute it # and/or modify it under the terms of the Do What the Fuck You Want # to Public License, Version 2, as published by Sam Hocevar. See # http://www.wtfpl.net/ for more details. # """ Libcaca Python bindings """ import ctypes import errno from caca import _lib, _PYTHON3, _str_to_bytes class _Font(object): """ Model for Font object. """ def __init__(self): self._font = 0 def from_param(self): """ Required by ctypes module to call object as parameter of a C function. """ return self._font def __del__(self): if hasattr(self, "_font"): if self._font > 0: self._free() def __str__(self): return "" def _free(self): """ Free a libcaca font. """ _lib.caca_free_font.argtypes = [_Font] _lib.caca_free_font.restype = ctypes.c_int return _lib.caca_free_font(self) class Font(_Font): """ Font object, methods are libcaca functions with caca_font_t as first argument. """ def __init__(self, font, size=0): """ Font constructor font -- the memory area containing the font or its name size -- the size of the memory area, or 0 if the font name is given """ if size == 0: _lib.caca_load_font.argtypes = [ctypes.c_char_p, ctypes.c_int] else: raise FontError("Unsupported method") _lib.caca_load_font.restype = ctypes.c_int if _PYTHON3: font = _str_to_bytes(font) self._font = _lib.caca_load_font(font, size) if self._font == 0: err = ctypes.c_int.in_dll(_lib, "errno") if err.value == errno.ENOENT: raise FontError("Requested built-in font does not exist") elif err.value == errno.EINVAL: raise FontError("Invalid font data in memory area") elif err.value == errno.ENOMEM: raise FontError("Not enough memory to allocate font structure") def get_width(self): """ Get a font's standard glyph width. """ _lib.caca_get_font_width.argtypes = [_Font] _lib.caca_get_font_width.restype = ctypes.c_int return _lib.caca_get_font_width(self) def get_height(self): """ Get a font's standard glyph height. """ _lib.caca_get_font_height.argtypes = [_Font] _lib.caca_get_font_height.restype = ctypes.c_int return _lib.caca_get_font_height(self) def get_blocks(self): """ Get a font's list of supported glyphs. """ raise FontError("Not Implemented") class FontError(Exception): pass