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