コード例 #1
0
            /// <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);
                }
            }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
            /// <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;
                }
            }