r""" Code Python 3.12, encod早 en UTF-8, CRLF, test OK : 2024-07-10

NB : L'affichage des caractères accentués et spéciaux de ce code, via un navigateur web,
 peut être incorrect. Préférez via un éditeur de texte.

Ce programme liste, dans le terminal,
- les balises différentes utilisées dans le fichier HTML sélectionné
- et les balises différentes utilisées dans tous les fichiers sélectionnés

Exemple de résultat :

  ...\mini_cours_html\index.htm

  Les 33 balises différentes, utilisées sur cette page, sont :
    ['a', 'aside', 'body', 'br', 'code', 'details',..., 'title', 'u', 'ul']

  Les 33 balises différentes, dans toutes les pages sélectionnées, sont :
    ['a', 'aside', 'body', 'br', 'code', 'details',..., 'title', 'u', 'ul']

À Â Ç É È Ê Ë Î Ï Ô Ù Û Ü Ÿ Æ Œ æ œ
version 1 - 2024-07-10 10:21 """

import os; import platform; from tkinter import *
from tkinter import filedialog; from tkinter import messagebox
from html.parser import HTMLParser

gPath = os.path.abspath("."); SEP="/"
if platform.system() == "Windows": SEP="\\"

gFileTypes = (('HTML files','*.htm'),('HTML files','*.html'),('HTML files','*.php'))

# Création de l'interface
fP = Tk (); fP.withdraw()

lst_tags = []; lst_allTags = []

class MyHTMLParser(HTMLParser):
  def handle_starttag(self, tag, attrs):
    if tag not in lst_tags: lst_tags.append(tag)
    if tag not in lst_allTags: lst_allTags.append(tag)

parser = MyHTMLParser()

while True :

  cc = filedialog.askopenfilename(initialdir = gPath,
          title = "Sélection d'un fichier HTML", filetypes = gFileTypes)
  if cc == "": exit("FIN DU PROGRAMME - Pas de fichier à traiter")
  
  cc = cc.replace("/",SEP)
  gPath, tail = os.path.split(cc)

  lst_tags.clear() 

  with open(cc, encoding = 'utf-8') as f:
    codeHTML = f.read()

  parser.feed(codeHTML)
  lst_tags.sort()

  print(cc)
  print("Les",str(len(lst_tags)),
        "balises différentes, utilisées sur cette page, sont :", str(lst_tags))
  print()

  if not messagebox.askyesno("Encore ?",
           "Faut-il analyser un autre fichier HTML ?"): break

lst_allTags.sort()
print("Les",str(len(lst_allTags)),
      "balises différentes, dans toutes les pages sélectionnées, sont :", str(lst_allTags))
