/// <summary> /// Retourne l'élément identifié par la chaine /// </summary> /// <param name="ident">chaine identifiant</param> /// <returns>Retourne l'élément identifié si réussi et null sinon</returns> public PropertyElement GetElement(string ident) { if (ident == name) { return(this); } if (ident.Length < name.Length) { return(null); } string tmp = ident.Substring(0, name.Length); if (tmp != name) { return(null); } ident = ident.Substring(name.Length); if (IsList) { if (ident[0] == '.') { ident = ident.Substring(1); string var_name = PropertyRegex.GetVariable(ident); foreach (PropertyElement e in (List <PropertyElement>)value) { if (e.Name == var_name) { return(e.GetElement(ident)); } } return(null); } else if (ident[0] == '[') { ident = ident.Substring(1); int idx = PropertyRegex.GetUint(ident); ident = ident.Substring((idx / 10) + 2); int it = 0; foreach (PropertyElement e in (List <PropertyElement>)value) { if (e.Name == "" && (it++) == idx) { return(e.GetElement(ident)); } } return(null); } else { return(null); } } else { return(null); } }
/// <summary> /// Permet de récupérer un élément par son nom /// </summary> /// <param name="name">nom de l'élément à identifier</param> /// <returns>Retourne l'élément s'il existe et null sinon</returns> public PropertyElement GetElement(string name) { string var_name = PropertyRegex.GetVariable(name); foreach (PropertyElement e in this.E) { if (var_name == e.Name) { return((PropertyElement)e.GetElement(name)); } } return(null); }
/// <summary> /// Constructeur de la class PropertyElement /// </summary> /// <param name="syntax">une structure FIFO contenant les lignes du fichier à lire</param> public PropertyElement(ref Queue <string> syntax) { int space_level; // Initialisation valid = false; while (syntax.Count > 0 && !PropertyRegex.IsUseful(syntax.Peek())) { syntax.Dequeue(); } if (syntax.Count == 0) { return; } // Assignation du niveau d'espacement et du nom string peek = syntax.Dequeue(); space_level = PropertyRegex.GetSpaceLevel(peek); peek = peek.Substring(space_level); if (!PropertyRegex.IsVariable(peek)) { // C'est un élément de liste name = ""; } else { name = PropertyRegex.GetVariable(peek); } // Assignation si présente de la valeur sur la ligne peek = peek.Substring(name.Length); peek = peek.Substring(PropertyRegex.GetSpaceLevel(peek) + 1); if (PropertyRegex.IsValue(peek)) { value = PropertyRegex.GetValue(peek); valid = true; return; } // Vérification d'une valeur valide après while (syntax.Count > 0 && !PropertyRegex.IsUseful(syntax.Peek())) { syntax.Dequeue(); } if (syntax.Count == 0) { return; } // On ajoute les éléments List <PropertyElement> elems = new List <PropertyElement>(); PropertyElement tmp; do { peek = syntax.Peek(); if (PropertyRegex.GetSpaceLevel(peek) > space_level) { tmp = new PropertyElement(ref syntax); if (!tmp.Valid) { break; } elems.Add(tmp); valid = true; } else { break; } while (syntax.Count > 0 && !PropertyRegex.IsUseful(syntax.Peek())) { syntax.Dequeue(); } } while (syntax.Count > 0); // On met les éléments dans la valeur if (valid) { value = elems; } }