14 gennaio, 2020

Help (solo per me) - testo a colori


Continuo quanto iniziato nel post Help (solo per me) - format di Python, voglio rendere più leggibile l'output, chissà se...

L'idea è di usare le sequenze di escape ANSI, la Wiki la fa lunga ma quel che serve è molto meno, ecco il mio codice (txtco):

#!/usr/bin/python3

from sys import argv

dico = {'_bk' : '\033[030m', '_re' : '\033[031m', '_gr' : '\033[032m', \
        '_ye' : '\033[033m', '_bl' : '\033[034m', '_ma' : '\033[035m', \
        '_cy' : '\033[036m', '_wh' : '\033[037m',                      \
        '_BK' : '\033[040m', '_RE' : '\033[041m', '_GR' : '\033[042m', \
        '_YE' : '\033[043m', '_BL' : '\033[044m', '_MA' : '\033[040m', \
        '_CY' : '\033[046m', '_WH' : '\033[047m',                      \
        '_Bo': '\033[01m', '_Da': '\033[02m', '_Ul': '\033[04m',       \
        '_Bl': '\033[05m',  '_Re': '\033[07m', '_Co': '\033[08m',      \
        '_ec' : '\033[0m', '_##' : ''}


# for c in dico:
#     print(c, str(dico[c]), dico[c], '***', dico['_ec'])


if len(argv) == 1:
    print('ARRGGH!!!')
    exit(2)
idat = argv[1]

with open(idat, 'r') as finp:
    txt = finp.read()

for c in dico:
    txt = txt.replace(c, dico[c])

if len(argv) >= 2:
    ocol = argv[2]
else:
    ocol = '_' + idat

with open(ocol, 'w') as fout:
    print('#!/bin/bash', file = fout)
    print('cat << *EOC*', file = fout)
    print(txt, file = fout)
    print('*EOC*', file = fout)


Semplice e chiaro, vero? Si tratta di inserire codice di colore e attributi del testo nella forma _XX. I codici si possono sommare e restano attivi fino all'azzeramento con _ec. C'è anche il codice nullo, _## da inserire all'interno di una sequenza di caratteri che altrimenti sarebbe considerata codice; funziona anche con se stesso come si vede nell'esempio che costituisce l'help, questo (color-map):

_RE_BoMappa dei codici ANSI per colori e attributi del testo_ec
premettere _ al codice, così: _XX
lisci
_bk bk nero _re re rosso _gr gr verde _ye ye giallo _bl bl blu _ma ma magenta _cy cy cyan _wh wh bianco _ec

gasati
_BK BK nero _RE RE rosso _GR GR verde _YE YE giallo _BL BL blu _MA MA magenta _CY CY cyan _WH WH bianco _ec

attributi
_Bo Bo bold_ec _Da Da dark_ec _Ul Ul sottolineato_ec _Bl Bl blink_ec _Re Re reverse_ec _Co Co concealed _ec

codice neutro-spezza seq: _RE_#_###_ec


OK, non resta che provarlo:


Nota: ormai ci ho rinunciato, il sig. Blogspot spezza le righe troppo lunghe anche quando la loro lunghezza è considerata ragionevole da chiunque.

🔴🔵

Nessun commento:

Posta un commento