/// /////////////////////////////////////////////////////////
 public void AfterEval(C2iExpression formule, CResultAErreur result)
 {
     if (m_debugger != null)
     {
         m_debugger.AfterEval(formule, result);
     }
 }
        /// //////////////////////////////////////////
        private CResultAErreur GetSourceEtChampFinal(C2iExpression expression, CContexteEvaluationExpression ctx, ref object source, ref C2iExpressionChamp expressionChamp)
        {
            CResultAErreur result = CResultAErreur.True;

            expressionChamp = expression as C2iExpressionChamp;
            if (expressionChamp != null)
            {
                return(result);
            }
            C2iExpressionObjet expObjet = expression as C2iExpressionObjet;

            if (expObjet == null)
            {
                result.EmpileErreur(I.T("Impossible to affect a value to @1|133", expression.GetString()));
            }
            result = expObjet.Parametres2i[0].Eval(ctx);
            if (!result || result == null)
            {
                return(result);
            }
            ctx.PushObjetSource(result.Data, false);
            source = result.Data;
            result = GetSourceEtChampFinal(expObjet.Parametres2i[1], ctx, ref source, ref expressionChamp);
            ctx.PopObjetSource(false);
            return(result);
        }
Exemple #3
0
 public static void SetInfo(C2iExpression formule, CInfo2iExpression info)
 {
     if (formule != null)
     {
         m_cache[formule.GetType()] = info;
     }
 }
Exemple #4
0
        //-----------------------------------------------
        protected override CResultAErreur ProtectedEval(CContexteEvaluationExpression ctx)
        {
            CResultAErreur result = CResultAErreur.True;

            if (FormuleFinale == null)
            {
                result = RefreshFormuleFinale();
                if (!result)
                {
                    return(result);
                }
            }
            if (FormuleFinale != null)
            {
                C2iExpression formuleToEval = FormuleFinale;
                if (Debug)
                {
                    formuleToEval = new C2iExpressionDebug();
                    formuleToEval.Parametres.Add(FormuleFinale);
                }
                return(formuleToEval.Eval(ctx));
            }
            result.EmpileErreur(I.T("Can not create formula from graphical|20086"));
            return(result);
        }
        /// //////////////////////////////////////////
        public override CResultAErreur VerifieParametres()
        {
            CResultAErreur result = base.VerifieParametres();

            if (!result)
            {
                return(result);
            }
            if (Parametres.Count < 2)
            {
                result.EmpileErreur(I.T("Incorrect number of parameters|161"));
                return(result);
            }
            C2iExpression expType = Parametres2i[1];

            if (expType is C2iExpressionConstante)
            {
                string strType = ((C2iExpressionConstante)expType).Valeur.ToString();
                if (CActivatorSurChaine.GetType(strType, true) == null)
                {
                    result.EmpileErreur(I.T("The type @1 doesn't exist|162", strType));
                }
            }
            if (Parametres.Count >= 3)
            {
                if (!(Parametres2i[2] is C2iExpressionVrai) &&
                    !(Parametres2i[2] is C2iExpressionFaux))
                {
                    result.EmpileErreur(I.T("The third parameter must be 'true()' or 'false()'|163"));
                }
            }
            return(result);
        }
Exemple #6
0
 /// ///////////////////////////////////////////////////////////
 public void SetParametre(int nParametre, C2iExpression parametre)
 {
     while (nParametre >= m_listeParametres.Count)
     {
         m_listeParametres.Add(null);
     }
     m_listeParametres[nParametre] = parametre;
 }
 /// /////////////////////////////////////////////////////////
 public bool BeforeEval(C2iExpression formule)
 {
     if (m_debugger != null)
     {
         return(m_debugger.BeforeEval(formule));
     }
     return(false);
 }
Exemple #8
0
 public static CInfo2iExpression GetCache(C2iExpression formule)
 {
     if (formule != null)
     {
         CInfo2iExpression info = null;
         m_cache.TryGetValue(formule.GetType(), out info);
         return(info);
     }
     return(null);
 }
Exemple #9
0
        ///////////////////////////////////////////////////
        public static string GetPseudoCode(C2iExpression exp)
        {
            if (exp == null)
            {
                return("");
            }
            CStringSerializer ser = new CStringSerializer(ModeSerialisation.Ecriture);

            exp.GetPseudoCode(ser);
            string strRetour = new CStringSerializerCompresseur().Compress(ser.String);

            return(strRetour);
        }
Exemple #10
0
        /// ///////////////////////////////////////////////////////////
        public static void RegisterAllInAssembly()
        {
            foreach (Type tp in typeof(C2iExpression).Assembly.GetTypes())
            {
                if (tp.IsSubclassOf(typeof(C2iExpression)) && !tp.IsAbstract)
                {
#if PDA
                    C2iExpression exp = (C2iExpression)Activator.CreateInstance(tp);
#else
                    C2iExpression exp = (C2iExpression)Activator.CreateInstance(tp, new object[0]);
#endif
                    CAllocateur2iExpression.Register2iExpression(exp.IdExpression, tp);
                }
            }
        }
 public static CDessineurExpressionGraphique GetDessineur(CRepresentationExpressionGraphique expression)
 {
     C2iExpression formule = expression.Formule;
     CDessineurExpressionGraphique dessineur = null;
     if (formule != null)
     {
         Type tp = formule.GetType();
         while (tp != null)
         {
             if (m_dicDessineurs.TryGetValue(tp, out dessineur))
                 return dessineur;
             tp = tp.BaseType;
         }
     }
     return DefaultInstance;
 }
Exemple #12
0
        //-----------------------------------------------
        public CRepresentationExpressionGraphique FindFormule(C2iExpression formule)
        {
            if (formule == null)
            {
                return(null);
            }
            string strSearch = formule.GetString().ToUpper().Trim();

            foreach (CRepresentationExpressionGraphique r in m_listeRepresentations)
            {
                if (r.Formule != null && r.Formule.GetString().ToUpper().Trim() == strSearch)
                {
                    return(r);
                }
            }
            return(null);
        }
Exemple #13
0
        //-----------------------------------------------
        public CResultAErreur RefreshFormuleFinale()
        {
            m_formuleFinale = null;
            CResultAErreur     result  = CResultAErreur.True;
            C2iExpressionBegin formule = new C2iExpressionBegin();

            foreach (CDefinitionProprieteDynamiqueVariableFormule def in m_listeVariables)
            {
                C2iExpressionVariable var = new C2iExpressionVariable();
                C2iExpression         exp = new C2iExpressionChamp();
                ((C2iExpressionChamp)exp).DefinitionPropriete = def;
                var.Parametres.Add(exp);
                exp = new C2iExpressionConstante(def.TypeDonnee.TypeDotNetNatif.ToString());
                var.Parametres.Add(exp);
                if (def.TypeDonnee.IsArrayOfTypeNatif)
                {
                    exp = new C2iExpressionVrai();
                    var.Parametres.Add(exp);
                }
                formule.Parametres.Add(var);
            }
            CRepresentationExpressionGraphique graf = StartPoint;

            if (graf == null)
            {
                result.EmpileErreur(I.T("No start point|20103"));
                return(result);
            }

            while (graf != null)
            {
                result = graf.RefreshParametres();
                if (!result)
                {
                    return(result);
                }
                if (graf.Formule != null)
                {
                    formule.Parametres.Add(graf.Formule);
                }
                graf = graf.Next;
            }
            m_formuleFinale = formule;
            return(CResultAErreur.True);
        }
Exemple #14
0
        /// /////////////////////////////////////////////////
        public override CResultAErreur AnalyseChaine(string strChaine)
        {
            CResultAErreur result = base.AnalyseChaine(strChaine);

            if (result)
            {
                C2iExpression expression = (C2iExpression)result.Data;
                if (expression != null)
                {
                    expression.SetTypeObjetInterroge(
                        m_contexteAnalyse.ObjetAnalyse,
                        m_contexteAnalyse);
                }
                //Vérifie que tous les champs ont un type de donnée connu
                //(ce qui indique que les champs sont connus)
                foreach (C2iExpressionChamp expChamp in expression.ExtractExpressionsType(typeof(C2iExpressionChamp)))
                {
                    if (expChamp.DefinitionPropriete == null)
                    {
                        result.EmpileErreur(I.T("One field of formula doesn't exist|141"));
                    }
                    else if (expChamp.TypeDonnee == null)
                    {
                        if (m_contexteAnalyse != null && m_contexteAnalyse.GetVariable(expChamp.DefinitionPropriete.NomPropriete) == null)
                        {
                            result.EmpileErreur(I.T("The @1 field doesn't exist|107", expChamp.DefinitionPropriete.Nom));
                        }
                        else
                        {
                            expChamp.DefinitionPropriete = m_contexteAnalyse.GetVariable(expChamp.DefinitionPropriete.NomPropriete);
                        }
                    }
                }
                result = expression.VerifieParametres();
                if (!result)
                {
                    return(result);
                }
                result.Data = expression;
            }
            return(result);
        }
Exemple #15
0
        /// ///////////////////////////////////////////////////////////
        public virtual CResultAErreur Serialize(C2iSerializer serializer)
        {
            int            nVersion = GetNumVersion();
            CResultAErreur result   = serializer.TraiteVersion(ref nVersion);

            if (!result)
            {
                return(result);
            }
            int nNb = Parametres.Count;

            serializer.TraiteInt(ref nNb);
            switch (serializer.Mode)
            {
            case ModeSerialisation.Ecriture:
                foreach (C2iExpression expression in Parametres2i)
                {
                    expression.GetPseudoCode(serializer);
                }
                break;

            case ModeSerialisation.Lecture:
                m_listeParametres.Clear();
                for (int n = 0; n < nNb; n++)
                {
                    C2iExpression expression = FromPseudoCode(serializer);
                    m_listeParametres.Add(expression);
                }
                break;
            }
            if (nVersion >= 1)
            {
                serializer.TraiteString(ref m_strCaracteresControlesAvantString);
                if (m_strCaracteresControlesAvantString.Length > 3)
                {
                    m_strCaracteresControlesAvantString = m_strCaracteresControlesAvantString.Substring(0, 3);
                }
            }
            return(result);
        }
Exemple #16
0
        ///////////////////////////////////////////////////
        protected static C2iExpression FromPseudoCode(C2iSerializer serializer)
        {
            string strType = "";

            try
            {
                serializer.TraiteString(ref strType);
                C2iExpression exp = (C2iExpression) new CAllocateur2iExpression().GetExpression(strType);
                if (exp == null)
                {
                    return(null);
                }
                if (!exp.Serialize(serializer))
                {
                    return(null);
                }
                return(exp);
            }
            catch
            {
                return(null);
            }
        }
        /// //////////////////////////////////// /////////////////////////////////
        private CResultAErreur GetValeurObjet(CContexteEvaluationExpression ctx, object source, C2iExpression expressionAEvaluer)
        {
            CResultAErreur result = CResultAErreur.True;

            ctx.PushObjetSource(source, false);
            try
            {
                result = expressionAEvaluer.Eval(ctx);
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            finally
            {
                ctx.PopObjetSource(false);
            }
            return(result);
        }
Exemple #18
0
 public CFormuleNommee(string strLibelle, C2iExpression formule)
     : this()
 {
     Libelle   = strLibelle;
     m_formule = formule;
 }
Exemple #19
0
 //----------------------------------
 public CRepresentationExpressionGraphique(C2iExpression formule)
 {
     Size      = new Size(80, 50);
     m_formule = formule;
 }
        /// ///////////////////////////////////////////////////////////
        public override CResultAErreur VerifieParametres()
        {
            CResultAErreur result = CResultAErreur.True;

            if (m_definitionMethode != null)
            {
                if (ObjetPourAnalyseSourceConnu == null)
                {
                    return(result);
                }
                CInfoMethodeDynamique            info       = new CInfoMethodeDynamique(ObjetPourAnalyseSourceConnu.TypeResultatExpression.TypeDotNetNatif, DefinitionMethode.NomProprieteSansCleTypeChamp);
                CInfoParametreMethodeDynamique[] parametres = info.InfosParametres;
                if (parametres.Length != Parametres.Count)
                {
                    result.EmpileErreur(I.T("The number parameters @1 method is incorrect|121", DefinitionMethode.NomProprieteSansCleTypeChamp));
                    return(result);
                }
                int nParam = 0;
                foreach (CInfoParametreMethodeDynamique defPar in parametres)
                {
                    C2iExpression expression = Parametres2i[nParam];
                    if (expression != null && expression.TypeDonnee == null)
                    {
                        result.EmpileErreur(I.T("the @1 parameter is invalide in method @2|20125",
                                                expression.GetString(),
                                                DefinitionMethode.NomProprieteSansCleTypeChamp));
                    }
                    else if (expression == null ||
                             expression.GetType() != typeof(C2iExpressionNull) &&
                             !expression.TypeDonnee.CanConvertTo(new CTypeResultatExpression(defPar.TypeParametre, false)))
                    {
                        result.EmpileErreur(I.T("The @1 method parameters doesn't correspond|122", DefinitionMethode.NomProprieteSansCleTypeChamp));
                        break;
                    }
                    nParam++;
                }
            }
            else if (DefinitionFonction != null)
            {
                IEnumerable <CParametreFonctionDynamique> parametres = DefinitionFonction.ParametresDeLaFonction;
                if (parametres.Count() != Parametres.Count)
                {
                    result.EmpileErreur(I.T("The number parameters @1 method is incorrect|121", DefinitionFonction.NomProprieteSansCleTypeChamp));
                    return(result);
                }
                int nParam = 0;
                foreach (CParametreFonctionDynamique defPar in parametres)
                {
                    C2iExpression expression = Parametres2i[nParam];
                    if (expression != null && expression.TypeDonnee == null)
                    {
                        result.EmpileErreur(I.T("the @1 parameter is invalide in method @2|20125",
                                                expression.GetString(),
                                                defPar.Nom));
                    }
                    else if (expression == null ||
                             expression.GetType() != typeof(C2iExpressionNull) &&
                             !expression.TypeDonnee.CanConvertTo(defPar.TypeResultatExpression))
                    {
                        result.EmpileErreur(I.T("The @1 method parameters doesn't correspond|122", DefinitionFonction.NomProprieteSansCleTypeChamp));
                        break;
                    }
                    nParam++;
                }
            }
            else if (m_strNomMethode.Length > 0)
            {
                result.EmpileErreur(I.T("Unknown method @1|20126", m_strNomMethode));
            }
            else
            {
                result.EmpileErreur(I.T("Unknown method @1|20126", DefinitionFonction.NomProprieteSansCleTypeChamp));
            }
            return(result);
        }
Exemple #21
0
        private void ShowInterfaceLienParametre(
            CRepresentationExpressionGraphique source,
            CRepresentationExpressionGraphique dest)
        {
            Dictionary <int, CMenuNumero> dicMenus = new Dictionary <int, CMenuNumero>();

            if (source == null || dest == null)
            {
                return;
            }
            if (m_menuNumeroParametre.Items.Count == 0)
            {
                //Création initiale des sous menus
                for (int n = 0; n < 20; n++)
                {
                    CMenuNumero menu = new CMenuNumero(n.ToString(), n);
                    m_menuNumeroParametre.Items.Add(menu);
                    menu.Click += new EventHandler(menuNumero_Click);
                }
            }
            foreach (ToolStripMenuItem item in m_menuNumeroParametre.Items)
            {
                CMenuNumero num = item as CMenuNumero;
                if (num != null)
                {
                    dicMenus[num.Numero] = num;
                }
            }

            C2iExpressionAnalysable expAn = dest.Formule == null ? null : dest.Formule as C2iExpressionAnalysable;

            if (expAn != null)
            {
                CInfo2iExpression info = null;
                info = expAn.GetInfos();
                CInfo2iDefinitionParametres[] infosParams = info.InfosParametres;
                for (int n = 0; n < 20; n++)
                {
                    string strNom = info.GetNomParametre(n);
                    if (strNom.Trim() == "")
                    {
                        dicMenus[n].Visible = false;
                    }
                    else
                    {
                        dicMenus[n].Visible = true;
                        dicMenus[n].Text    = strNom;
                    }
                }

                sc2i.expression.C2iExpression[] parametres = dest.Formule.Parametres2i;
                foreach (ToolStripMenuItem item in m_menuNumeroParametre.Items)
                {
                    int nPos = item.Text.IndexOf('(');
                    if (nPos > 0)
                    {
                        item.Text = item.Text.Substring(0, nPos).Trim();
                    }
                    CMenuNumero numero = item as CMenuNumero;
                    if (numero != null)
                    {
                        if (numero.Numero < parametres.Length)
                        {
                            sc2i.expression.C2iExpression exp = parametres[numero.Numero];
                            if (exp != null)
                            {
                                item.Text += " (" + exp.GetString() + ")";
                            }
                        }
                    }
                }
                m_sourceLienParametre = source;
                m_destLienParametre   = dest;
                m_menuNumeroParametre.Show(Cursor.Position);
            }
        }
Exemple #22
0
        //--------------------------------------------------
        /// <summary>
        /// crée les éléments graphiques d'une formule
        /// </summary>
        /// <param name="formule"></param>
        public void InitFromFormule(C2iExpression formule)
        {
            m_listeRepresentations.Clear();
            m_listeVariables.Clear();
            if (formule == null)
            {
                return;
            }
            ArrayList lst = formule.ExtractExpressionsType(typeof(C2iExpressionVariable));

            foreach (C2iExpressionVariable variable in lst)
            {
                if (variable.Parametres.Count > 0)
                {
                    C2iExpressionChamp champ = variable.Parametres[0] as C2iExpressionChamp;
                    if (champ != null)
                    {
                        CDefinitionProprieteDynamiqueVariableFormule def = champ.DefinitionPropriete as CDefinitionProprieteDynamiqueVariableFormule;
                        if (def != null)
                        {
                            m_listeVariables.Add(def);
                        }
                    }
                }
            }
            C2iExpressionBegin begin = formule as C2iExpressionBegin;

            m_strIdStartPoint = "";
            int nX = 100;
            int nY = 20;

            if (begin != null)
            {
                CRepresentationExpressionGraphique previous = null;
                foreach (C2iExpression action in begin.Parametres)
                {
                    if (!(action is C2iExpressionVariable))
                    {
                        CRepresentationExpressionGraphique rep = new CRepresentationExpressionGraphique();
                        rep.Position = new Point(nX, nY);
                        AddChild(rep);
                        rep.Parent  = this;
                        rep.Formule = action;
                        nY          = rep.RectangleAbsolu.Bottom;
                        foreach (CRepresentationExpressionGraphique repTmp in m_listeRepresentations)
                        {
                            if (repTmp.RectangleAbsolu.Bottom > nY)
                            {
                                nY = rep.RectangleAbsolu.Bottom;
                            }
                        }
                        nY += 20;
                        if (previous == null)
                        {
                            StartPoint = rep;
                        }
                        else
                        {
                            previous.Next = rep;
                        }
                        previous = rep;
                    }
                }
            }
            else
            {
                CRepresentationExpressionGraphique rep = new CRepresentationExpressionGraphique();
                rep.Position = new Point(nX, nY);
                AddChild(rep);
                rep.Parent  = this;
                rep.Formule = formule;
                StartPoint  = rep;
            }
        }