private static Dictionary <Object, List <Object> > doc2Win; // key is document, value is list of windows // -------------------------------------- Public Static Methods ------------------------------------------------------- /// <summary> /// Initialise la partie statique de la classe (la gestion du mapping entre documents, fenêtres et configurations). /// Appelle les <c>Init()</c> statiques des autres classes de configuration. /// </summary> /// <remarks> Est responsable de la création du répertoire où seront sauvegardées les configs.</remarks> /// <param name="errMsgs">Si une erreur se produit, un message est ajouté à la liste. /// La liste n'est pas touchée si tout se passe bien. <c>null</c> indique que le message /// n'est pas souhaité par l'appelant.</param> public static new void Init(List <string> errMsgs = null) { logger.ConditionalDebug("Init"); ColConfWin.Init(); // Ensure that ConfigDirPath folder does exist if (!System.IO.Directory.Exists(ConfigDirPath)) { try { System.IO.Directory.CreateDirectory(ConfigDirPath); logger.Info("Dossier \'{0}\' créé.", ConfigDirPath); } catch (Exception e) when(e is IOException || e is UnauthorizedAccessException) { errMsgs?.Add("Impossible de créer le répertoire" + ConfigDirPath); logger.Error("Impossible de créer le répertoire {0}. Erreur {1}", ConfigDirPath, e.Message); } } theConfs = new Dictionary <object, Config>(); doc2Win = new Dictionary <object, List <object> >(); }
public void TestFireRuleI() { AutomLetter al; int pos; string tstAL; TheText tt; List <PhonWord> pws; int wordI; string rTxt; ColConfWin.Init(); TheText.Init(); Config conf = new Config(); tstAL = @"'i' : [['ing','n','m','nm','prec_2cons','lldeb','vill','mill','tranquille', 'ill','@ill','@il','ll','ui','ient_1','ient_2','ie','i_voyelle', '*'], {'ing':[{'-':/[bcçdfghjklmnpqrstvwxz]/i,'+':/ng$/i},'i',1], 'n':[{'+':/n[bcçdfghjklmpqrstvwxz]/i},'e_tilda',2], 'm':[{'+':/m[bcçdfghjklnpqrstvwxz]/i},'e_tilda',2], 'nm':[{'+':/[n|m]$/i},'e_tilda',2], 'prec_2cons':[{'-':/[ptkcbdgfv][lr]/i, '+':/[aäâeéèêëoôöuù]/i},'i_j',1], // précédé de 2 consonnes (en position 3), doit apparaître comme [ij] PAE: rajouté les voyelles 'lldeb':[{'-':/^/i,'+':/ll/i},'i',1], 'vill':[{'-':/v/i,'+':/ll/i},'i',1], 'mill':[{'-':/m/i,'+':/ll/i},'i',1], 'tranquille':[{'-':/tranqu/i,'+':/ll/i},'i',1], 'ill':[{'+':/ll/i,'-':/[bcçdfghjklmnpqrstvwxz](u?)/i},'i',1], // précédé éventuellement d'un u et d'une consonne, donne le son [i] '@ill':[{'-':/[aeo]/i,'+':/ll/i},'j',3], // par défaut précédé d'une voyelle et suivi de 'll' donne le son [j] '@il':[{'-':/[aeou]/i,'+':/l(s?)$/i},'j',2], // par défaut précédé d'une voyelle et suivi de 'l' donne le son [j] 'll':[{'+':/ll/i},'j',3], // par défaut avec ll donne le son [j] 'ui':[{'-':/u/i,'+':/ent/i},'i',1], // essuient, appuient 'ient_1':[this.Regle_ient,'i',1], // règle spécifique pour différencier les verbes du premier groupe 3ème pers pluriel 'ient_2':[{'+':/ent(s)?$/i},'j',1], // si la règle précédente ne fonctionne pas 'ie':[{'+':/e(s|nt)?$/i},'i',1], // mots terminés par -ie(s|nt) 'i_voyelle':[{'+':/[aäâeéèêëoôöuù]/i},'j',1], // i suivi d'une voyelle donne [j] '*':[{},'i',1]}]" ; pos = 0; al = new AutomLetter(tstAL, ref pos); tt = new TheText(@"briefing, berlingot, sapin, imbécile, limbe, afin, prier, ville, paille, triage, appartient, amplifient, glorifient"); pws = tt.GetPhonWordList(conf); foreach (PhonWord pw in pws) { pw.ClearPhons(); } // briefing wordI = 0; pos = 5; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(6, pos); Assert.AreEqual("i", pws[wordI].Phonetique()); // berlingot wordI = 1; pos = 4; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(6, pos); Assert.AreEqual("5", pws[wordI].Phonetique()); // sapin wordI = 2; pos = 3; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(5, pos); Assert.AreEqual("5", pws[wordI].Phonetique()); // imbécile wordI = 3; pos = 0; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(2, pos); Assert.AreEqual("5", pws[wordI].Phonetique()); // limbe wordI = 4; pos = 1; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(3, pos); Assert.AreEqual("5", pws[wordI].Phonetique()); // afin wordI = 5; pos = 2; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(4, pos); Assert.AreEqual("5", pws[wordI].Phonetique()); // prier wordI = 6; pos = 2; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(3, pos); Assert.AreEqual("ij", pws[wordI].Phonetique()); // ville wordI = 7; pos = 1; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(2, pos); Assert.AreEqual("i", pws[wordI].Phonetique()); // paille wordI = 8; pos = 2; al.FireRule(pws[wordI], ref pos, conf); rTxt = pws[wordI].AllStringInfo(); StringAssert.Matches(rTxt, new Regex(@"Rule: @ill")); Assert.AreEqual(5, pos); Assert.AreEqual("j", pws[wordI].Phonetique()); // triage wordI = 9; pos = 2; al.FireRule(pws[wordI], ref pos, conf); rTxt = pws[wordI].AllStringInfo(); StringAssert.Matches(rTxt, new Regex(@"Rule: prec_2cons")); Assert.AreEqual(3, pos); Assert.AreEqual("ij", pws[wordI].Phonetique()); // appartient wordI = 10; pos = 6; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(7, pos); Assert.AreEqual("j", pws[wordI].Phonetique()); // amplifient wordI = 11; pos = 6; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(7, pos); Assert.AreEqual("i", pws[wordI].Phonetique()); // glorifient wordI = 12; pos = 4; al.FireRule(pws[wordI], ref pos, conf); Assert.AreEqual(5, pos); Assert.AreEqual("i", pws[wordI].Phonetique()); }