# ==============================================================================
"""NUMLINES : print a list of text files with line numbering"""
# ==============================================================================
__author__  = "Christophe Schlick modified by Philippe Blasi"
__version__ = "1.0"
__date__    = "2022-11-12"
__usage__   = """
User input : <filename> [filename ...]
App output : content of all provided files with line numbering"""
# ==============================================================================
from ezCLI import *
# ------------------------------------------------------------------------------
def numlines(name:str) -> str:
  """add line numbering to all lines of file 'name'"""
  # lire le fichier name dans une chaine de caractère
  try:
    txt = read_txt(name)
  except OSError:
    return f"{name} : cannot read file"

  # séparer chaque ligne pour obtenir un tableau de ligne  ==> split
  tab_line = txt.split('\n')

  # parcourir le tableau et ajouter à chaque case son numéro de ligne
  for i in range(len(tab_line)):
    tab_line[i] = f'{i+1} - {tab_line[i]}'

  # fusionner le tableau pour avoir une seule chaine de caractère ==> join
  result = "\n".join(tab_line)

  # ajouter le nom du fichier et les lignes de séparation
  separator = "\n────────────────────────────────────────────────────────────────────────────────"
  result = f'{name}:' + separator + result + separator

  # renvoyer le resultat
  return result
# ------------------------------------------------------------------------------
def parser(command:str) -> str:
  """parse 'command' and return content of provided files with line numbering"""
  tuple_name = parse(command) ;# inspect()
  if type(tuple_name) is str:
    res = numlines(tuple_name)
  else:
    result = ''
    # pour chaque fichier, appeler count et ajouter le résultat à une chaine
    # de caractère en revenant à la ligne ('\n') entre chaque appel
    for name in tuple_name:
      result += numlines(name) + '\n'

    # version avec création d'un tableau de chaines de charactère
    #tab_res=[numlines(name) for name in tuple_name] ; inspect()
    #result = "\n".join(tab_res)

  return result 
# ==============================================================================
if __name__ == '__main__':
  userloop(parser, "Enter <filename> [filename ...]")
# ==============================================================================
