Source code for psprint.mark_types

#!/usr/bin/env python3
# -*- coding:utf-8; mode:python -*-
#
# Copyright 2020 Pradyumna Paranjape
# This file is part of psprint.
#
# psprint is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# psprint 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 Lesser General Public License for more details. #
# You should have received a copy of the GNU Lesser General Public License
# along with psprint.  If not, see <https://www.gnu.org/licenses/>.
#
'''
Information Marker

'''

import warnings
from typing import Dict, Union

from .ansi import ANSI
from .errors import ValueWarning
from .text_types import AnsiEffect, PrintPref

DEFAULT_STYLE: Dict[str, int] = {'color': 16, 'gloss': 1, 'bgcol': 16}
'''
Terminal-determined color, black background, normal gloss

'''


[docs]class InfoMark(): ''' Prefix Mark information Attributes: pref: PrintPref: Prefix text properties text: PrintText: Text properties Args: parent: Inherit information from- pref_max: pad prefix to reach length **kwargs: * pref: prefix string * pref_s: prefix short string * code: * color: {[0-15],[[l]krgybmcw],[[light] <color_name>]} * gloss: {[0-3],[rcdb],{reset,normal,dim,bright}} * for- * pref_color: color of of prefix * pref_gloss: gloss of prefix * pref_bgcol: background color of prefix * text_color: color of of text * text_gloss: gloss of text * text_bgcol: background color of text ''' def __init__(self, parent: 'InfoMark' = None, pref_max: int = None, **kwargs: Union[str, str]) -> None: if pref_max is None: pref_max = 7 # default # categorise kwargs pref_args = {} for key in DEFAULT_STYLE: if f'pref_{key}' in kwargs: pref_args[key] = kwargs[f'pref_{key}'] text_args = {} for key in DEFAULT_STYLE: if f'text_{key}' in kwargs: text_args[key] = kwargs[f'text_{key}'] # Determine prefixes pref = [kwargs.get('pref', ''), kwargs.get('pref_s', '>')] if pref[0] is not None and len(pref[0]) > pref_max: trim = pref[0][:pref_max] warnings.warn(f"Prefix string '{pref[0]}'" + f" is too long (length>{pref_max}) " + f"trimming to {trim}", category=ValueWarning) pref[0] = trim if pref[1] is not None and len(pref[1]) > 1: trim = pref[1][:1] warnings.warn("Prefix string '{pref[1]}'" + f" is too long (length>1) trimming to {trim}", category=ValueWarning) pref[1] = trim parent_pref = parent.pref if parent else None parent_text = parent.text if parent else None self.pref = PrintPref(parent=parent_pref, pref=pref, pref_max=pref_max, **pref_args) self.text = AnsiEffect(parent=parent_text, **text_args) def __repr__(self) -> str: ''' String format of available information ''' return "\t".join( (str(self.pref.style), self.pref.pref[0], self.pref.pref[1], self.text.style + "<CUSTOM>" + ANSI.RESET_ALL))
[docs] def get_info(self) -> str: # pragma: no cover ''' Print information about ``InfoMark`` ''' info = str(self) print(info) return info