multisplit
[iramuteq] / textcheckcorpus.py
1 # -*- coding: utf-8 -*-
2 #Author: Pierre Ratinaud
3 #Copyright (c) 2008-2020 Pierre Ratinaud
4 #modification pour python 3 : Laurent Mérat, 6x7 - mai 2020
5 #License: GNU/GPL
6
7 #------------------------------------
8 # import des modules wx
9 #------------------------------------
10 import wx
11 import wx.lib.dialogs
12
13 #------------------------------------
14 # import des fichiers du projet
15 #------------------------------------
16 from corpus import Corpus
17
18
19 def checkline(line, lnb) :
20     if line.startswith('****') or (line[0:4].isdigit() and '*' in line) :
21         if ' * ' in line :
22             return [False, 1, lnb]
23         else :
24             lp = line.split()
25             lp.pop(0)
26             gv = [val for val in lp if not val.startswith('*') or ('-' in val)]
27             if len(gv) != 0 :
28                 return [False, 4, lnb]
29             else :
30                 return [True]
31     elif line.startswith('-*') :
32         if ' ' in line.strip() :
33             return [False, 2, lnb]
34         else :
35             return [True]
36     elif '*' in line :
37         return [False, 3, lnb]
38     else :
39         return [True]
40
41
42 class checkcorpus :
43
44     def __init__(self, parent):
45         self.parent = parent
46         self.corpus = Corpus(parent)
47         self.corpus.parametre['encodage'] = parent.corpus_encodage
48         self.corpus.parametre['filename'] = parent.filename
49         self.corpus.content = parent.content
50         res = [checkline(line, i) for i, line in enumerate(self.corpus.content.strip().splitlines())]
51         res_nok = [val for val in res if not val[0]]
52         if len(res_nok) != 0 :
53             erreur_label = {1 : "une variable étoilée contient un espace",
54                             2 : "une thématique contient un espace",
55                             3 : "étoile dans ligne de texte",
56                             4 : "une variable étoilée contient un espace ou un -"
57                             }
58             erreur = [['ligne %i' % val[2], erreur_label[val[1]]] for val in res_nok]
59             txt = '\n----------------\n'.join(['\t'.join(line) for line in erreur])
60             for val in res_nok :
61                 deb = self.parent.text_ctrl_txt.XYToPosition(0,val[2])
62                 fin = deb + self.parent.text_ctrl_txt.GetLineLength(val[2])
63                 self.parent.text_ctrl_txt.SetStyle(deb, fin, wx.TextAttr("#ff9c00", "#000000"))
64             msg = "Veuillez corriger les fautes suivantes dans un éditeur de texte\npuis rechargez le corpus :\n\n" + txt
65             win = wx.lib.dialogs.ScrolledMessageDialog(self.parent, msg, "Erreurs")
66             win.CenterOnParent()
67             win.ShowModal()
68             win.Destroy()
69         else :
70             win = wx.MessageDialog(parent, "Pas de fautes !", "Corpus ok", wx.OK | wx.ICON_INFORMATION)
71             win.CenterOnParent()
72             win.ShowModal()
73             win.Destroy()