Ejemplo n.º 1
0
 private static string AplicaMacros(string linia, CanviaString canvis)
 {
     String inici = "";
     String resta = linia;
     while (true)
     {
         Match match = CercaMacro.Match(resta);
         if (!match.Success)
             break;
         inici = inici + match.Groups[1].Value + canvis(match.Groups[2].Value);
         resta = match.Groups[3].Value;
     }
     return inici + resta;
 }
Ejemplo n.º 2
0
 private static String AdaptaFitxer(String fitxer, CanviaString canvis, string finalLinia, Encoding encoding)
 {
     return String.Join(finalLinia, AdaptaFitxer(fitxer, canvis, encoding));
 }
Ejemplo n.º 3
0
 private static string[] AdaptaFitxer(String fitxer, CanviaString canvis, Encoding encoding)
 {
     String[] linies = File.ReadAllLines(fitxer, encoding);
     for (int i = 0; i < linies.Length; i++)
         linies[i] = AplicaMacros(linies[i], canvis);
     return linies;
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Afegeix una variant d'aspell.
 /// Genera un fitxer de paraules amb les entrades que no apareixen al fitxer de base.
 /// Els casos de les regles específiques per a aquesta variant no estan inclosos dins
 /// el fitxer d'afixos. Per tant (ja que només hi pot haver un fitxer d'afixos) s'han
 /// de posar totes les entrades desplegades emprant aquests casos.
 /// </summary>
 /// <param name="dirResultats">El directori base dels resultats.</param>
 /// <param name="nom">El nom base dels fitxers.</param>
 /// <param name="canvis">Els canvis que s'han aplicar als macros que apareixen als noms
 /// i als continguts dels fitxers</param>
 /// <param name="nomComuns">El nom dels fitxer amb les entrades comunes</param>
 /// <param name="filtre">Les marques que han de tenir les entrades i els casos de les regles per 
 /// ser incloses dins el fitxer de paraules.</param>
 public static void VariantAspell(string dirResultats, string nom, CanviaString canvis, string nomComuns, Marques filtre)
 {
     StreamReader sr;
     sr = new StreamReader(dirResultats + @"myspell\" + nomComuns + @".myspell.dic", Encoding.Default);
     Dictionary<string, int> comuns = new Dictionary<string, int>(int.Parse(sr.ReadLine()));
     while (!sr.EndOfStream)
         comuns.Add(sr.ReadLine(), 1);
     sr.Close();
     string affVar = Path.GetFullPath(dirResultats + @"myspell\" + nom + @".myspell.aff");
     string affCom = Path.GetFullPath(dirResultats + @"myspell\" + nomComuns + @".myspell.aff");
     Regles reglesDiff = Regles.Diferencia(Regles.LlegeixAff(affVar), Regles.LlegeixAff(affCom));
     string[] ids = new string[reglesDiff.regles.Count];
     reglesDiff.regles.Keys.CopyTo(ids, 0);
     Regex cercaReglesDiff = new Regex("/.*((" + String.Join(")|(", ids) + "))");
     Regex arrelIFlags = new Regex("^(.*)/(.*)$");
     Marques totesMarques = new Marques(true);
     List<string> nous = new List<string>();
     sr = new StreamReader(dirResultats + @"myspell\" + nom + @".myspell.dic", Encoding.Default);
     sr.ReadLine();
     while (!sr.EndOfStream)
     {
         string lin = sr.ReadLine();
         if (cercaReglesDiff.IsMatch(lin))
         {
             Match match = arrelIFlags.Match(lin);
             string arrel = match.Groups[1].Value, flags = match.Groups[2].Value;
             foreach (string id in reglesDiff.regles.Keys)
                 if (flags.Contains(id))
                     foreach(CasRegla cas in reglesDiff.regles[id].Casos)
                         if (cas.EsAplicable(arrel))
                         {
                             List<Mot> arrels = new List<Mot>();
                             cas.Genera(arrel, ref arrels, null, reglesDiff, totesMarques, false);
                             string nousFlags = (flags == id) ? "" : "/" + flags.Replace(id, "");
                             foreach (Mot novaArrel in arrels)
                                 nous.Add(novaArrel.Forma + nousFlags);
                         }
         }
         if (!comuns.ContainsKey(lin))
             nous.Add(lin);
     }
     sr.Close();
     string nomDiff = AplicaMacros(Path.GetFullPath(dirResultats + @"aspell\%as_lang%.diff.txt"), canvis);
     string nomAwl = AplicaMacros(Path.GetFullPath(dirResultats + @"aspell\%as_lang%-mes.wl"), canvis);
     StreamWriter sw = new StreamWriter(nomDiff, false, Encoding.Default);
     foreach (string lin in nous)
         if (lin.Length > 0)
             sw.WriteLine(lin);
     sw.Close();
     CreaFitxerCwl(nomDiff, nomAwl, Encoding.Default, false, 1);
     File.Delete(nomDiff);
     infoAspell.Add("");
     infoAspell.Add("dict:");
     infoAspell.Add(AplicaMacros("  name %as_lang%", canvis));
     infoAspell.Add("  add " + baseAspell);
     infoAspell.Add(AplicaMacros("  add %as_lang%-mes", canvis));
     string[] dat = AdaptaFitxer(dirResultats + @"..\aspell\%as_lng%.dat", canvis, Encoding.UTF8);
     string nomDat = AplicaMacros(Path.GetFullPath(dirResultats + @"aspell\%as_lng%.dat"), canvis);
     EscriuLinies(nomDat, dat, Encoding.Default, "\n");
 }
Ejemplo n.º 5
0
 public static void GeneraOXT(Regles regles, string dirFitxer, string nomFitxer, CanviaString canvis)
 {
     // genera .oxt
     String path = dirFitxer + nomFitxer + ".oxt";
     File.Delete(path);
     using (ZipFile zip = new ZipFile(path))
     {
         zip.AddFile(dirFitxer + nomFitxer + ".dic", "dictionaries");
         zip.AddFile(dirFitxer + nomFitxer + ".aff", "dictionaries");
         zip.AddFile(dirFitxer + @"..\..\OXT\" + "LICENSES-en.txt","");
         zip.AddFile(dirFitxer + @"..\..\OXT\" + "LLICENCIES-ca.txt", "");
         zip.AddStringAsFile(AdaptaFitxer(dirFitxer + @"..\..\OXT\" + nomFitxer + "\dictionaries.xcu", canvis, "\r\n", Encoding.UTF8), "dictionaries.xcu", "");
         zip.AddStringAsFile(AdaptaFitxer(dirFitxer + @"..\..\OXT\" + nomFitxer + "\description.xml", canvis, "\r\n", Encoding.UTF8), "description.xml", "");
         //zip.AddStringAsFile(AdaptaFitxer(dirFitxer + @"..\..\OXT\" + "release-notes_en.txt", canvia), "release-notes_en.txt", "");
         //zip.AddStringAsFile(AdaptaFitxer(dirFitxer + @"..\..\OXT\" + "release-notes_ca.txt", canvia), "release-notes_ca.txt", "");
         zip.AddFile(dirFitxer + @"..\..\OXT\META-INF\" + "manifest.xml", "META-INF/");
         zip.AddFile(dirFitxer + @"..\..\OXT\" + "SC-logo.png","");
         zip.Save();
     }
     // genera update.xml, release-notes_en.txt i release-notes_ca.txt
     path = dirFitxer + nomFitxer + ".update.xml";
     using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8)) {
         sw.Write(AdaptaFitxer(dirFitxer + @"..\..\OXT\update.xml", canvis, "\r\n", Encoding.UTF8));
     }
     string[] llengues = { "ca", "en" };
     foreach (string llengua in llengues)
     {
         path = dirFitxer + "release-notes_" + llengua + ".html";
         using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8))
         {
             sw.Write(AdaptaFitxer(dirFitxer + @"..\..\OXT\" + "release-notes_" + llengua + ".html", canvis, "\r\n", Encoding.UTF8));
         }
     }
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Prepara per generar el fitxer d'aspell
 /// </summary>
 public static void BaseAspell(string dirResultats, string nom, CanviaString canvis, List<string> copyright)
 {
     NetejaDirAspell(dirResultats, true);
     // Posa les dades del fitxer info
     infoAspell = new List<string>();
     baseAspell = AplicaMacros("%as_lng%-common", canvis);
     infoAspell.Add("name_english Catalan");
     infoAspell.Add("lang ca");
     string nomAffix = "ca_affix.dat";
     infoAspell.Add("data-file " + nomAffix);
     string[] linies = File.ReadAllLines(dirResultats + @"myspell\" + nom + ".myspell.aff", Encoding.Default);
     EscriuLinies(dirResultats + @"aspell\" + nomAffix, linies, Encoding.Default, "\n");
     infoAspell.Add("copyright GPLv2");
     infoAspell.Add(AplicaMacros("version %VERSION%", canvis));
     infoAspell.Add("complete true");
     infoAspell.Add("accurate true");
     infoAspell.Add("author:");
     infoAspell.Add("  name Joan Moratinos");
     infoAspell.Add("  email jmo at softcatala org");
     infoAspell.Add("url http://www.softcatala.org/wiki/Projectes/Corrector_ortografic");
     CreaFitxerCwl(dirResultats + @"myspell\" + nom + ".myspell.dic",
         AplicaMacros(dirResultats + @"aspell\%as_lng%-common.wl", canvis), Encoding.Default, false, 1);
     infoAspell.Add("");
     infoAspell.Add("alias ca catalan");
     infoAspell.Add("dict:");
     infoAspell.Add(AplicaMacros("  name %as_lang%", canvis));
     infoAspell.Add(AplicaMacros("  alias %as_lng%", canvis));
     infoAspell.Add(AplicaMacros("  add %as_lng%-common", canvis));
     string[] dat = AdaptaFitxer(dirResultats + @"..\aspell\%as_lng%.dat", canvis, Encoding.Default);
     //string nomDat = AplicaMacros(Path.GetFullPath(dirResultats + @"aspell\%as_lang%.dat"), canvis);
     string nomDat = Path.GetFullPath(AplicaMacros(dirResultats + @"aspell\%as_lng%.dat", canvis));
     EscriuLinies(nomDat, dat, Encoding.Default, "\n");
     //string[] readme = AdaptaFitxer(dirResultats + @"..\aspell\README", canvis);
     //EscriuLinies(dirResultats + @"aspell\README", readme, Encoding.Default, "\n");
     EscriuLinies(dirResultats + @"aspell\Copyright", copyright.ToArray(), Encoding.Default, "\n");
     string[] changes = AdaptaFitxer(dirResultats + @"..\aspell\CHANGES", canvis, Encoding.Default);
     string dirDoc = Path.GetFullPath(dirResultats + @"aspell\doc");
     if (!Directory.Exists(dirDoc))
         Directory.CreateDirectory(dirDoc);
     EscriuLinies(dirDoc + @"\ChangeLog", changes, Encoding.Default, "\n");
 }