# rename.py à enregistrer dans XXX_LATEX/
"""
Arborescence à respecter
|_ isbn_IMAGES/
|_ isbn_LATEX/
"""

import os
import shutil

encoding_files = 'utf-8'
isbn = '095023355'
book = 'ILTM'
rep_images = '../'+isbn+'_IMAGES/'
rep_images_old = '../'+isbn+'_IMAGES-OLD/'
rep_tex = 'src/'
exec = True # (simulation : False)

"""
Création du fichier logdvi
"""

create_logdvi = 'dvips -o ' + isbn + '_' + book + '.ps ' + isbn + '_' + book + '.dvi 2> logdvi.txt'
os.system(create_logdvi)

"""
On ouvre le fichier et on supprime les sauts de lignes
"""

fichier = open("logdvi.txt", "r")
all_lines = fichier.readlines()
fic = ""

for i in range(len(all_lines)):
    line = all_lines[i].replace('\n','')
    fic += line
    
fichier.close()

# 'fic' contient tout le fichier logdvi.txt

"""
On dresse la liste des images
"""

crochetOuvrant = False
liste_des_images = [] # va contenir tout le contenu dans des crochets; ex : [23<../091575438_IMAGES/0_NathanLive.eps>]

for c in fic:
    if c == "[":
        crochetOuvrant = True
        container = ""
    else:
        if c == "]":
            crochetOuvrant = False
            liste_des_images.append(container)
        else:
            if crochetOuvrant == True:
                container += c
                
"""
Construction d'un dictionnaire <illus> : <page>
"""

dico_illus = dict()
for entree in liste_des_images:
    if len(entree) > 3:
        p = entree.find('<')
        page = entree[0:p]
        start = False
        for i in entree:
            if i == '<':
                start = True
                container = ""
            elif i == '>':
                start = False
                key = container.replace(rep_images,'').replace('.eps','')
                if len(page) == 1:
                    page = '00'+page
                elif len(page) == 2:
                    page = '0'+page
                if key[0:2] != '0_':
                    dico_illus[key] = page
            elif i != '<' and i != '>' and start == True:
                container += i
        
# dico_illus de la forme :  { 'illus' : 'page' }

"""
Copie des illus
"""

# on crée un rep temporaire pour les illus

if not os.path.isdir('../tmp_figures/'):
    os.mkdir('../tmp_figures/')

# on copie

for root, dirs, files in os.walk(rep_images):
    for fic in files:
        # copie des illus dédiées 'Picto'
        if fic[0:5] == 'Picto':
            if exec == True:
                shutil.copy(rep_images+fic,'../tmp_figures/'+fic)
            print('Copie de '+rep_images+fic+' vers ../tmp_figures/'+fic)
            
        else:
            for key in dico_illus:
                illus = key + '.eps'
                illus = illus[1:]
                if illus == fic:
                    new_name = dico_illus[key] + key[4:] + '.eps'
                    if exec == True:
                        shutil.copy(rep_images+fic,'../tmp_figures/'+new_name)
                    print('Copie de '+rep_images+fic+' vers ../tmp_figures/'+new_name)
            
# on renomme les répertoires IMAGES

if not os.path.isdir(rep_images_old):
    os.rename(rep_images, rep_images_old)
    print('Renommage du répertoire {} en {}'.format(rep_images,rep_images_old))

if not os.path.isdir(rep_images):
    os.rename('../tmp_figures/', rep_images)
    print('Renommage du répertoire {} en {}'.format('../tmp_figures/',rep_images))


###### Copie des fichiers TEX #######

# on crée un rep temporaire

if not os.path.isdir('tmp_src/'):
    os.mkdir('tmp_src/')


# Modifications des sources & copie des nouveaux vers tmp_src/

for root, dirs, files in os.walk('src/'):
    for fic in files:
        if fic[-4:] == '.tex':
            contenu = ''
            with open('src/'+fic, mode = 'r', encoding = encoding_files ) as f:
                for line in f:
                    line = line.replace('.eps','')
                    found = False
                    for name,page in dico_illus.items(): # on parcourt la liste des illus
                        if name[1:] in line: #si l'illus. est trouvée dans la ligne, on la remplace par le nouveau nom
                            newname = page + '_' + name[5:]
                            # on teste si c'est exactement le nom:
                            p_end = line.find(name[1:]) + len(name[1:])
                            p_start = line.find(name[1:]) - 1
                            if line[p_end] == '}' and line[p_start] == '{':
                                #print('Remplacement de ' + name + ' par ' + newname + ' dans '+fic)
                                contenu += line.replace(name[1:],newname)
                                found = True
                                break
                    if found == False:
                            contenu += line
            ficnew = open('tmp_src/'+fic,mode = 'w', encoding = encoding_files)
            ficnew.write(contenu)
            print('Copie de '+fic+' vers tmp_src/')
            ficnew.close()
            
# on renomme les répertoires TEX

if not os.path.isdir('src-OLD/'):
    os.rename('src/', 'src-OLD/')
    print('Renommage du répertoire src/ en src-OLD/')

if not os.path.isdir('src/'):
    os.rename('tmp_src/', 'src/')
    print('Renommage du répertoire tmp_src/ en src/')
