/// <summary>
 /// Crea un conjunt.
 /// </summary>
 /// <param name="defecte">El valor de pertinença al conjunt per a les marques no especificades.</param>
 /// <param name="excepcio0">La primera marca que no segueix el defecte</param>
 /// <param name="excepcions">Les marques que no segueixen el defecte.</param>
 public Marques(bool defecte, Marca excepcio0, params Marca[] excepcions)
     : this(defecte)
 {
     this.excepcions |= excepcio0.Mascara;
     foreach (Marca exc in excepcions)
         this.excepcions |= exc.Mascara;
 }
 /// <summary>
 /// Crea un cas per a una regla.
 /// </summary>
 /// <param name="regla">La regla a la qual pertany aquest cas.</param>
 /// <param name="suprimir">Els caràcters que s'han de suprimir. S'eliminen del principi
 /// o del final, segons si és prefix o sufix. Si és "0", no se suprimeix res.</param>
 /// <param name="afegir">El que s'ha d'afegir a l'arrel després de suprimir-ne caràcters, si cal.
 /// Se suprimeix del principi o del final, segons si és prefix o sufix.</param>
 /// <param name="condicio">La condició que ha de complir l'arrel perquè aquest cas sigui aplicable.</param>
 /// <param name="sufix">Si és true, es modifica el començament de l'arrel. Si és false, es
 /// modifica el final de l'arrel.</param>
 /// <param name="marca">La marca dialectal associada a aquest cas.</param>
 /// <param name="info">Informació morfològica i gramatical.</param>
 /// <param name="mesRegles">Regles que es poden aplicar després d'haver aplicat aquest cas.
 /// Correspon al "twofold" introduït per Hunspell.</param>
 public CasRegla(Regla regla, string suprimir, string afegir, string condicio, bool sufix, Marca marca, MorfoGram info, List<string> mesRegles)
 {
     this.regla = regla;
     this.sSuprimir = suprimir;
     this.suprimir = (suprimir == "0") ? 0 : suprimir.Length;
     this.afegir = afegir;
     sCondicio = condicio;
     if (condicio == ".")
         this.condicio = null;
     else if (sufix)
         this.condicio = new Regex(condicio + "$");
     else
         this.condicio = new Regex("^" + condicio);
     this.sufix = sufix;
     this.marca = marca;
     this.info = info;
     if (mesRegles != null)
     {
         this.mesRegles = new List<string>(mesRegles);
         this.mesRegles.Sort(string.Compare);
     }
     else
         this.mesRegles = null;
 }
 /// <summary>
 /// Afegeix una marca com si una part de la línia la contingués.
 /// Serveix per si hi ha una marca que no estigui representada per cap tros.
 /// </summary>
 public void PosaMarca(Marca marca)
 {
     totes.Mes(marca);
 }
 /// <summary>
 /// Torna true si alguna part de la línia conté la marca.
 /// </summary>
 public bool Conte(Marca marca)
 {
     return totes.Conte(marca);
 }
Beispiel #5
0
 /// <summary>
 /// Crea una marca amb un identificador i una descripció.
 /// Si ja existia, torna la preexistent.
 /// </summary>
 /// <param name="id">L'identificador de la marca.</param>
 /// <param name="descripcio">La descripció de la marca.</param>
 /// <returns>Una marca amb l'identificador i la descripció donats.</returns>
 public static Marca Crea(string id, string descripcio)
 {
     if (marques == null)
     {
         marques = new Dictionary<string, Marca>();
         mascares = new Dictionary<uint, Marca>();
     }
     if (marques.ContainsKey(id))
     {
         if (marques[id].Descripcio != descripcio) throw new Exception("Marca redefinida: " + id);
         return marques[id];
     }
     if (marques.Count > sizeof(int) * 8) throw new Exception("Massa marques!");
     Marca marca = new Marca(id, descripcio);
     return marca;
 }
 public Marques Mes(Marca marca)
 {
     if (defecte)
         excepcions &= ~marca.Mascara;
     else
         excepcions |= marca.Mascara;
     return this;
 }
 /// <summary>
 /// Diu si una marca pertany al conjunt.
 /// </summary>
 /// <param name="marca">La marca de la qual volem saber si pertany al conjunt.</param>
 /// <returns>true si la marca pertany al conjunt.</returns>
 public bool Conte(Marca marca)
 {
     return Conte(marca.Mascara);
 }