/// <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); }
/// <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); }