public static void GenerateMIDICode(ICodeGenerator generator, MidiSequence sequence, string midiName, TextWriter writer)
 {
     CodeNamespace e = new CodeNamespace("AutoGenerated");
     CodeTypeDeclaration declaration = new CodeTypeDeclaration(midiName);
     declaration.Members.Add(CreateSequenceMethod(sequence));
     for (int i = 0; i < sequence.NumberOfTracks; i++)
     {
         int num2 = i + 1;
         declaration.Members.Add(CreateTrackMethod("CreateTrack" + num2.ToString(), sequence[i]));
     }
     e.Types.Add(declaration);
     generator.GenerateCodeFromNamespace(e, writer, new CodeGeneratorOptions());
 }
Exemplo n.º 2
0
        /// <summary>Creates code from a MIDI sequence.</summary>
        /// <param name="generator">Generator used to generate the actual code.</param>
        /// <param name="sequence">The sequence to translate.</param>
        /// <param name="midiName">The name of the MIDI sequence to be used as the class name.</param>
        /// <param name="writer">The writer to which the text is written.</param>
        public static void GenerateMIDICode(
			ICodeGenerator generator, MidiSequence sequence, 
			string midiName, TextWriter writer)
        {
            // Create a new namespace
            CodeNamespace ns = new CodeNamespace("AutoGenerated");

            // Create the new class
            CodeTypeDeclaration midiType = new CodeTypeDeclaration(midiName);

            // Add a method to it to create the sequence
            midiType.Members.Add(CreateSequenceMethod(sequence));
            for(int i=0; i<sequence.NumberOfTracks; i++)
            {
                midiType.Members.Add(CreateTrackMethod("CreateTrack" + (i+1).ToString(), sequence[i]));
            }

            // Add the class to the namespace
            ns.Types.Add(midiType);

            // Generate the code
            generator.GenerateCodeFromNamespace(ns, writer, new CodeGeneratorOptions());
        }
Exemplo n.º 3
0
        private static void PopulateNamespace(ICodeGenerator itfCG, TextWriter w)
        {
            // Add a code comment.
            CodeCommentStatement c = new CodeCommentStatement("This is the wicked cool Hello class");
            itfCG.GenerateCodeFromStatement(c, w, null);

            // Build root namespace.
            CodeNamespace cnamespace = new CodeNamespace("SimpleCodeDOMHelloClass");

            // Reference other namespaces.
            cnamespace.Imports.Add(new CodeNamespaceImport ("System") );
            cnamespace.Imports.Add(new CodeNamespaceImport ("System.Windows.Forms") );

            // Insert the HelloClass.
            CodeTypeDeclaration co = new CodeTypeDeclaration ("HelloClass");
            co.IsClass = true;
            cnamespace.Types.Add(co);
            co.BaseTypes.Add (typeof (System.Object) );
            co.TypeAttributes  = TypeAttributes.Public;

            // Make a custom construcor.
            CodeConstructor ctor = new CodeConstructor();
            ctor.Attributes = MemberAttributes.Public;
            ctor.Parameters.Add(new CodeParameterDeclarationExpression
                (new CodeTypeReference(typeof(string)), "msg"));
            ctor.Statements.Add((new CodeAssignStatement(new CodeArgumentReferenceExpression("mMsg"),
                new CodeArgumentReferenceExpression("msg"))));
            co.Members.Add(ctor);

            // Add the default construcor.
            ctor = new CodeConstructor();
            ctor.Attributes = MemberAttributes.Public;
            co.Members.Add(ctor);

            // Insert a String field (mMsg).
            CodeMemberField cf = new CodeMemberField("System.String", "mMsg");
            cf.Comments.Add(new CodeCommentStatement("The state data..."));
            cf.Attributes = MemberAttributes.Private;
            co.Members.Add(cf);

            // Add the Message property.
            CodeMemberProperty  cp = new CodeMemberProperty();
            cp.Name = "Message";
            cp.Attributes = MemberAttributes.Public | MemberAttributes.Final ;
            cp.Type = new CodeTypeReference("System.String");
            cp.Comments.Add(new CodeCommentStatement("The Message property"));
            // Getter.
            cp.GetStatements.Add(new CodeMethodReturnStatement
                (new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "mMsg")));
            // Setter.
            cp.SetStatements.Add(new CodeAssignStatement(new CodeArgumentReferenceExpression("mMsg"),
                new CodeArgumentReferenceExpression("value")));
            co.Members.Add (cp);

            // Add the Display() message.
            CodeMemberMethod cm = new CodeMemberMethod();
            cm.Name = "Display";
            cm.Attributes = MemberAttributes.Public | MemberAttributes.Final ;
            cm.Comments.Add(new CodeCommentStatement("Show 'em what we got!"));
            cm.Statements.Add (new CodeMethodInvokeExpression
                (new CodeTypeReferenceExpression("MessageBox"), "Show",
                new CodeExpression []
                {new CodeArgumentReferenceExpression  ("mMsg")}));
            co.Members.Add(cm);

            // Generate the code!
            itfCG.GenerateCodeFromNamespace (cnamespace, w, null);
        }
Exemplo n.º 4
0
  } //Main()

  public  static void SpitList (TextWriter w, string typeName, ICodeGenerator  baseCompiler, string ns) 
  {

    CodeCommentStatement c = new CodeCommentStatement  (string.Format ("List of {0}", typeName));
    baseCompiler.GenerateCodeFromStatement (c, w, null);

    CodeNamespace cnamespace = new CodeNamespace("Microsoft.Samples");
    cnamespace.Imports.Add (new CodeNamespaceImport ("System") );
    cnamespace.Imports.Add (new CodeNamespaceImport ("System.Collections") );
    if (ns != null &&  ns != "") cnamespace.Imports.Add (new CodeNamespaceImport (ns) );
    CodeTypeDeclaration co = new CodeTypeDeclaration (typeName +"List");
    co.IsClass = true;
    cnamespace.Types.Add (co);
    co.BaseTypes.Add (typeof (CollectionBase) );
    co.TypeAttributes  = TypeAttributes.Public;


//Generates: public <TYPE> this[int index] {
    //      get {
    //         return ((<TYPE>)List[index]);
    //      }
    //      set {
    //          List[index] = value;
    //      }
    //  }
    CodeMemberProperty  cp = new CodeMemberProperty ();
    cp.Name = "Item";
    cp.Attributes = MemberAttributes.Public | MemberAttributes.Final ;
    cp.Type = new CodeTypeReference(typeName);
    cp.Parameters.Add (new CodeParameterDeclarationExpression (new CodeTypeReference(typeof(int)), "index"));
    cp.GetStatements.Add (new CodeMethodReturnStatement (new CodeCastExpression (typeName, new CodeIndexerExpression (new CodeFieldReferenceExpression  (new CodeThisReferenceExpression(), "List"), new CodeArgumentReferenceExpression   ("index")))));
    cp.SetStatements.Add (new CodeAssignStatement (new CodeIndexerExpression (new CodeFieldReferenceExpression  (new CodeThisReferenceExpression(),"List"), new CodeArgumentReferenceExpression   ("index")), new CodeArgumentReferenceExpression  ("value")));
    co.Members.Add (cp);


    //Gen: public int Add(<TYPE> value) {
    //        return List.Add(value);
    //      }
    CodeMemberMethod cm = new CodeMemberMethod ();
    cm.Name = "Add";
    cm.ReturnType = new CodeTypeReference(typeof(int));
    cm.Parameters.Add (new CodeParameterDeclarationExpression (typeName, "value"));
    cm.Attributes = MemberAttributes.Public | MemberAttributes.Final ;
    cm.Statements.Add (new CodeMethodReturnStatement (new CodeMethodInvokeExpression (new CodeFieldReferenceExpression  (new CodeThisReferenceExpression(),"List"), "Add", 
      new CodeArgumentReferenceExpression  ("value"))));
    co.Members.Add (cm);

    //Gen: public void Insert(int index, <TYPE> value)
    //    {
    //         List.Insert(index, info);
    //     }
    cm = new CodeMemberMethod ();
    cm.Name = "Insert";
    cm.ReturnType = new CodeTypeReference(typeof(void));
    cm.Parameters.Add (new CodeParameterDeclarationExpression (new CodeTypeReference(typeof(int)), "index"));
    cm.Parameters.Add (new CodeParameterDeclarationExpression (typeName, "value"));
    cm.Attributes = MemberAttributes.Public | MemberAttributes.Final ;
    cm.Statements.Add (new CodeMethodInvokeExpression (new CodeFieldReferenceExpression  (new CodeThisReferenceExpression(),"List"), "Insert", 
      new CodeArgumentReferenceExpression  ("index"), new CodeArgumentReferenceExpression  ("value")));
    co.Members.Add (cm);


    //Gen: public int IndexOf(<TYPE> value) 
    //      {
    //        return List.IndexOf(value);
    //      }
    cm = new CodeMemberMethod ();
    cm.Name = "IndexOf";
    cm.ReturnType = new CodeTypeReference(typeof(int));
    cm.Parameters.Add (new CodeParameterDeclarationExpression (typeName, "value"));
    cm.Attributes = MemberAttributes.Public | MemberAttributes.Final ;
    cm.Statements.Add (new CodeMethodReturnStatement (new CodeMethodInvokeExpression (new CodeFieldReferenceExpression  (new CodeThisReferenceExpression(),"List"), "IndexOf", new CodeExpression []
                {new CodeArgumentReferenceExpression  ("value")})));
    co.Members.Add (cm);

    //Gen: public bool Contains(<TYPE> value) 
    //      {
    //        return List.Contains(value);
    //      }
    cm = new CodeMemberMethod ();
    cm.Name = "Contains";
    cm.ReturnType = new CodeTypeReference(typeof(bool));
    cm.Parameters.Add (new CodeParameterDeclarationExpression (typeName, "value"));
    cm.Attributes = MemberAttributes.Public | MemberAttributes.Final ;
    cm.Statements.Add (new CodeMethodReturnStatement (new CodeMethodInvokeExpression (new CodeFieldReferenceExpression  (new CodeThisReferenceExpression(),"List"), "Contains", new CodeExpression []
                {new CodeArgumentReferenceExpression  ("value")})));
    co.Members.Add (cm);

    //Gen: public void Remove(<TYPE> value) 
    //      {
    //       List.Remove(value);
    //      }
    cm = new CodeMemberMethod ();
    cm.Name = "Remove";
    cm.Parameters.Add (new CodeParameterDeclarationExpression (typeName, "value"));
    cm.Attributes = MemberAttributes.Public | MemberAttributes.Final ;
    cm.Statements.Add (new CodeMethodInvokeExpression (new CodeFieldReferenceExpression  (new CodeThisReferenceExpression(),"List"), "Remove", new CodeExpression []
                {new CodeArgumentReferenceExpression  ("value")}));
    co.Members.Add (cm);

    //Gen: public void CopyTo(<Type>[] array, int index) 
    //     {
    //         List.CopyTo(array, index);
    //     }
    cm = new CodeMemberMethod ();
    cm.Name = "CopyTo";
    cm.Parameters.Add (new CodeParameterDeclarationExpression (new CodeTypeReference(typeName, 1), "array"));
    cm.Parameters.Add (new CodeParameterDeclarationExpression (new CodeTypeReference(typeof(int)), "index"));
    cm.Attributes = MemberAttributes.Public | MemberAttributes.Final ;
    cm.Statements.Add (new CodeMethodInvokeExpression (new CodeFieldReferenceExpression  (new CodeThisReferenceExpression(),"List"), "CopyTo", new CodeExpression []
                {new CodeArgumentReferenceExpression  ("array"), new CodeArgumentReferenceExpression ("index")}));
    co.Members.Add (cm);

    baseCompiler.GenerateCodeFromNamespace (cnamespace, w, null);
  } //SpitList()
Exemplo n.º 5
0
 /// <summary>
 /// ���ɴ���
 /// </summary>
 /// <param name="CodeGenerator"></param>
 /// <param name="CurrentNameSpace"></param>
 /// <returns></returns>
 private static string GenerateCode(ICodeGenerator CodeGenerator,
     CodeNamespace CurrentNameSpace)
 {
     // CodeGeneratorOptions��������ָ�����ֹ�����������
     // ʹ�õĸ�ʽ��ѡ��
     CodeGeneratorOptions cop = new CodeGeneratorOptions();
     // ָ����ʽ�������ŵ�λ��
     cop.BracingStyle = "C";
     // ָ����ʽ��������������ʽ
     cop.IndentString = " ";
     StringBuilder sbCode = new StringBuilder();
     StringWriter sw = new StringWriter(sbCode);
     CodeGenerator.GenerateCodeFromNamespace(CurrentNameSpace, sw, cop);
     return sbCode.ToString();
 }
        private string CreationClassePersistable(ICodeGenerator codeGenerator, Langage langageChoice)
        {
            // namespace DB + nom de la base de données
            CodeNamespace monNamespace = new CodeNamespace("DB_" + (trvSqlServerSchema.SelectedNode.Parent.Tag as SQLDMO._Database).Name);

            // ajout des imports de namespace
            monNamespace.Imports.Add(new CodeNamespaceImport("System"));
            monNamespace.Imports.Add(new CodeNamespaceImport("System.Data"));
            monNamespace.Imports.Add(new CodeNamespaceImport("SableFin.SfinX.SimplePersistance"));

            // creation de la classe
            SQLDMO._Table tab=trvSqlServerSchema.SelectedNode.Tag as SQLDMO._Table;

            CodeTypeDeclaration maClasse = new CodeTypeDeclaration(tab.Name);
            //maClasse.BaseTypes.Add(tab.Name);
            maClasse.Attributes = MemberAttributes.Public;
            maClasse.IsClass = true;
            maClasse.Comments.Add(new CodeCommentStatement("Persistable classes for the " + tab.Name + " table.", false));

            // creation de l'attribut [PersistConnectionString]
            CodeAttributeDeclaration attr=new CodeAttributeDeclaration();
            attr.Name="PersistConnectionString";
            maClasse.CustomAttributes.Add(attr);
            if ((ConnectionStringIn)cboCnxStrIn.SelectedItem==ConnectionStringIn.ApplicationSettings)
                attr.Arguments.Add(new CodeAttributeArgument("AppSettingsName",new CodePrimitiveExpression("cnxstr")));
            else attr.Arguments.Add(new CodeAttributeArgument("SessionVariable",new CodePrimitiveExpression("cnxstr")));

            if ((DatasourceType)cboPDSA.SelectedItem==DatasourceType.SQLServerStoredProc)
            {
                // creation de l'attribut [PersistStoredProc]
                attr=new CodeAttributeDeclaration();
                attr.Name="PersistStoredProc";
                attr.Arguments.Add(new CodeAttributeArgument(new CodePrimitiveExpression("spS_" + tab.Name)));
                attr.Arguments.Add(new CodeAttributeArgument("INSERTStoredProc",new CodePrimitiveExpression("spI_" + tab.Name)));
                attr.Arguments.Add(new CodeAttributeArgument("DELETEStoredProc",new CodePrimitiveExpression("spD_" + tab.Name)));
                attr.Arguments.Add(new CodeAttributeArgument("UPDATEStoredProc",new CodePrimitiveExpression("spU_" + tab.Name)));
                attr.Arguments.Add(new CodeAttributeArgument("TableName",new CodePrimitiveExpression(tab.Name)));
            }
            else if ((DatasourceType)cboPDSA.SelectedItem==DatasourceType.DynamicSQL)
            {
                // creation de l'attribut [PersistDynamicSQL]
                attr=new CodeAttributeDeclaration();
                attr.Name="PersistDynamicSQL";
                attr.Arguments.Add(new CodeAttributeArgument(new CodePrimitiveExpression(tab.Name)));

            }
            maClasse.CustomAttributes.Add(attr);
            monNamespace.Types.Add(maClasse); // ajout de la classe dans le namespace

            for(int n=1;n<=tab.Columns.Count;n++)
            {
                SQLDMO._Column col=tab.Columns.Item(n);

                Type dotNetType=GetDotNetType(col.PhysicalDatatype);

                // private string
                CodeMemberField priv_var = new CodeMemberField(dotNetType, "p_" + col.Name);
                maClasse.Members.Add(priv_var );

                // private bool si Nullable col
                CodeMemberField null_var=null;
                if (col.AllowNulls)
                {
                    null_var=new CodeMemberField(typeof(bool),col.Name + "ISNULL");
                    null_var.Attributes=MemberAttributes.Public | MemberAttributes.Final;
                    null_var.InitExpression=new CodePrimitiveExpression(true);
                    maClasse.Members.Add(null_var);
                }

                // definition d'une reference a une variable
                CodeFieldReferenceExpression ref_var = null;
                ref_var = new CodeFieldReferenceExpression();
                ref_var.TargetObject = new CodeThisReferenceExpression();
                ref_var.FieldName = priv_var.Name;

                CodeFieldReferenceExpression ref_null_var=null;
                if (col.AllowNulls)
                {
                    ref_null_var = new CodeFieldReferenceExpression();
                    ref_null_var.TargetObject = new CodeThisReferenceExpression();
                    ref_null_var.FieldName = null_var.Name;
                }

                CodeMemberProperty champDB = new CodeMemberProperty();
                champDB.Attributes = MemberAttributes.Public | MemberAttributes.Final;
                champDB.Type = new CodeTypeReference(dotNetType);
                champDB.Name = col.Name;
                champDB.HasGet = true;
                champDB.HasSet = true;
                CodeMethodReturnStatement returnRefThis = new CodeMethodReturnStatement(ref_var);
                champDB.GetStatements.Add(returnRefThis);

                CodeAssignStatement setField=new CodeAssignStatement(ref_var,new CodePropertySetValueReferenceExpression());
                champDB.SetStatements.Add(setField);
                if (col.AllowNulls)
                {
                    CodeAssignStatement setFieldIsNullToFalse=new CodeAssignStatement(ref_null_var,new CodePrimitiveExpression(false));
                    champDB.SetStatements.Add(setFieldIsNullToFalse);
                }

                // création de l'attribut pour la propriété en cours
                attr=new CodeAttributeDeclaration();
                attr.Name="DBField";
                attr.Arguments.Add(new CodeAttributeArgument(new CodePrimitiveExpression(col.Name)));
                if (col.InPrimaryKey)
                {
                    attr.Arguments.Add(new CodeAttributeArgument("PrimaryKey", new CodePrimitiveExpression(true)));
                }
                if (col.Identity)
                {
                    attr.Arguments.Add(new CodeAttributeArgument("Identity", new CodePrimitiveExpression(true)));
                }
                if (col.AllowNulls)
                {
                    attr.Arguments.Add(new CodeAttributeArgument("IsNullable", new CodePrimitiveExpression(true)));
                    //attr.Arguments.Add(new CodeAttributeArgument("NullValue", new CodePrimitiveExpression(GetDefaultValueForNull(col.PhysicalDatatype))));
                }

                champDB.CustomAttributes.Add(attr); // ajout de l'attribut sur la prop

                maClasse.Members.Add(champDB);	// ajout de la propriété dans la classe
            }

            // On génère finalement le code
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            TextWriter textWriter = new StringWriter(stringBuilder);

            try
            {
                codeGenerator.GenerateCodeFromNamespace(monNamespace, textWriter, null);
            }
            catch (Exception exception)
            {
                return(exception.ToString());
            }
            finally
            {
                textWriter.Close();
            }

            return(stringBuilder.ToString());
        }
Exemplo n.º 7
0
        /// <summary>
        /// Main driving routine for building a class
        /// </summary>
        public static void BuildClass(string expression)
        {
            // need a string to put the code into
            _source = new StringBuilder();
            StringWriter sw = new StringWriter(_source);

            //Declare your provider and generator
            CSharpCodeProvider   codeProvider = new CSharpCodeProvider();
            ICodeGenerator       generator    = codeProvider.CreateGenerator(sw);
            CodeGeneratorOptions codeOpts     = new CodeGeneratorOptions();

            CodeNamespace myNamespace = new CodeNamespace("ExpressionEvaluator");

            myNamespace.Imports.Add(new CodeNamespaceImport("System"));
            myNamespace.Imports.Add(new CodeNamespaceImport("System.Windows.Forms"));

            myNamespace.Imports.Add(new CodeNamespaceImport("ArdupilotMega"));

            //Build the class declaration and member variables
            CodeTypeDeclaration classDeclaration = new CodeTypeDeclaration();

            classDeclaration.IsClass    = true;
            classDeclaration.Name       = "Calculator";
            classDeclaration.Attributes = MemberAttributes.Public;
            classDeclaration.Members.Add(FieldVariable("answer", typeof(object), MemberAttributes.Private));

            //default constructor
            CodeConstructor defaultConstructor = new CodeConstructor();

            defaultConstructor.Attributes = MemberAttributes.Public;
            defaultConstructor.Comments.Add(new CodeCommentStatement("Default Constructor for class", true));
            defaultConstructor.Statements.Add(new CodeSnippetStatement("//TODO: implement default constructor"));

            classDeclaration.Members.Add(defaultConstructor);



            //property
            classDeclaration.Members.Add(MakeProperty("Answer", "answer", typeof(object)));

            //Our Calculate Method

            /*
             * CodeMemberMethod myMethod = new CodeMemberMethod();
             * myMethod.Name = "Calculate";
             * myMethod.ReturnType = new CodeTypeReference(typeof(object));
             * myMethod.Comments.Add(new CodeCommentStatement("Calculate an expression", true));
             * myMethod.Attributes = MemberAttributes.Public;
             * myMethod.Statements.Add(new CodeAssignStatement(new CodeSnippetExpression("Object obj"), new CodeSnippetExpression(expression)));
             * //myMethod.Statements.Add(new CodeAssignStatement(new CodeSnippetExpression("Answer"), new CodeSnippetExpression("obj.ToString()")));
             * myMethod.Statements.Add(
             *             new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "Answer")));
             * classDeclaration.Members.Add(myMethod);
             */

            classDeclaration.Members.Add(FieldVariable("customforusenumber", typeof(double), MemberAttributes.Public));
            classDeclaration.Members.Add(FieldVariable("customforuseobject", typeof(object), MemberAttributes.Public));

            CodeSnippetTypeMember myMethod = new CodeSnippetTypeMember();

            myMethod.Text = expression;

            classDeclaration.Members.Add(myMethod);

            //write code
            myNamespace.Types.Add(classDeclaration);
            generator.GenerateCodeFromNamespace(myNamespace, sw, codeOpts);
            sw.Flush();
            sw.Close();

            Console.Write(sw.ToString());
        }
Exemplo n.º 8
0
        /// <summary>
        /// Main driving routine for building a class
        /// </summary>
        public void BuildFunctionClass(string expression, string strReturnType, string dllName)
        {
            //if( expression == "29487*[AREA]" )
            //{
            //}
            _dllName = dllName;
            bool bCalculate = true;

            m_bCalculate = bCalculate;
            m_expression = expression;
            // expression = RefineEvaluationString(expression);
            //  expression = expression.ToUpper();


            // need a string to put the code into
            _source = new StringBuilder();
            StringWriter sw = new StringWriter(_source);

            //Declare your provider and generator
            CSharpCodeProvider   codeProvider = new CSharpCodeProvider();
            ICodeGenerator       generator    = codeProvider.CreateGenerator(sw);
            CodeGeneratorOptions codeOpts     = new CodeGeneratorOptions();

            CodeNamespace myNamespace = new CodeNamespace("ExpressionEvaluator");

            myNamespace.Imports.Add(new CodeNamespaceImport("System"));
            myNamespace.Imports.Add(new CodeNamespaceImport("System.Windows.Forms"));

            //Build the class declaration and member variables
            CodeTypeDeclaration classDeclaration = new CodeTypeDeclaration();

            classDeclaration.IsClass    = true;
            classDeclaration.Name       = "Calculator";
            classDeclaration.Attributes = MemberAttributes.Public;

            switch (strReturnType)
            {
            case "String":
                classDeclaration.Members.Add(FieldVariable("answer", typeof(String), MemberAttributes.Private));
                break;

            case "double":
                classDeclaration.Members.Add(FieldVariable("answer", typeof(double), MemberAttributes.Private));
                break;

            case "Boolean":
                classDeclaration.Members.Add(FieldVariable("answer", typeof(Boolean), MemberAttributes.Private));
                break;

            default:
                return;
                //break;
            }
            //default constructor
            CodeConstructor defaultConstructor = new CodeConstructor();

            defaultConstructor.Attributes = MemberAttributes.Public;
            defaultConstructor.Comments.Add(new CodeCommentStatement("Default Constructor for class", true));
            //   defaultConstructor.Statements.Add(new CodeSnippetStatement("//TODO: implement default constructor"));
            classDeclaration.Members.Add(defaultConstructor);

            switch (strReturnType)
            {
            case "String":
                classDeclaration.Members.Add(this.MakeProperty("Answer", "answer", typeof(String)));
                break;

            case "double":
                classDeclaration.Members.Add(this.MakeProperty("Answer", "answer", typeof(double)));
                break;

            case "Boolean":
                classDeclaration.Members.Add(this.MakeProperty("Answer", "answer", typeof(Boolean)));
                break;

            default:
                return;
                //break;
            }



            //Our Calculate Method
            CodeMemberMethod myMethod = new CodeMemberMethod();

            myMethod.Name = "Calculate";
            switch (strReturnType)
            {
            case "String":
                myMethod.ReturnType = new CodeTypeReference(typeof(String));
                break;

            case "double":
                myMethod.ReturnType = new CodeTypeReference(typeof(double));
                break;

            case "Boolean":
                myMethod.ReturnType = new CodeTypeReference(typeof(Boolean));
                break;

            default:
                return;
                //break;
            }

            myMethod.Comments.Add(new CodeCommentStatement("Calculate an expression", true));
            myMethod.Attributes = MemberAttributes.Public;
            myMethod.Parameters.AddRange(GetParametersFromBracketedItems(expression));
            int nLastSemiColon = expression.LastIndexOf(";");

            if (nLastSemiColon > 0)
            {
                expression = expression.Substring(0, nLastSemiColon);
            }
            expression = expression.Replace("[", "");
            expression = expression.Replace("@", "");
            expression = expression.Replace("]", "");
            myMethod.Statements.Add(new CodeSnippetExpression(expression));
            classDeclaration.Members.Add(myMethod);

            //write code
            myNamespace.Types.Add(classDeclaration);
            generator.GenerateCodeFromNamespace(myNamespace, sw, codeOpts);
            sw.Flush();
            sw.Close();
        }
Exemplo n.º 9
0
        public void BuildClass(string expression, bool bCalculate, string dllName)
        {
            _originalInput = expression.Replace("[$", "[").Replace("[@", "[");;
            _dllName       = dllName;
            m_bCalculate   = bCalculate;
            m_expression   = expression;
            expression     = RefineEvaluationString(expression);
            Regex expressionWhiteSpaceMechanic = new Regex(@"\s");

            if (!bCalculate) //Calculating equations only use numbers.  No need for any manipulation.  The expression is already to be compiled.
            {
                //This can't happen because it ToUpper() the string literals
                //expression = expression.ToUpper();

                expression = expression.Replace("||", "OR");
                expression = expression.Replace("!=", "<>");
                expression = expression.Replace("==", "=");
                expression = expression.Replace("|", "'");
                expression = expression.Replace(">=", ">>"); //This is so we can replace = with double ==
                expression = expression.Replace("<=", "<<"); //This is so we can replace = with double ==

                //we keep missing non-space whitespace...
                expression = expressionWhiteSpaceMechanic.Replace(expression, " ");
                expression = expression.Replace(" AND ", " && ");
                expression = expression.Replace(" OR ", " || ");


                expression = expression.Replace("=", "==");
                expression = expression.Replace("<>", "!=");
                expression = expression.Replace("<<", "<=");
                expression = expression.Replace(">>", ">=");

                int  nOpen           = -1;
                bool bStringVariable = false;
                bool bDateVariable   = false;

                for (int i = 0; i < expression.Length; i++)
                {
                    if (expression.Substring(i, 1) == "[")
                    {
                        if (expression.Substring(i + 1, 1) == "@")
                        {
                            bStringVariable = true;
                            bDateVariable   = false;
                        }
                        else if (expression.Substring(i + 1, 1) == "$")
                        {
                            bStringVariable = false;
                            bDateVariable   = true;
                        }
                        else
                        {
                            bStringVariable = false;
                            bDateVariable   = false;
                        }
                    }


                    if (expression.Substring(i, 1) == "'" && nOpen < 0)
                    {
                        nOpen = i;
                        continue;
                    }


                    if (expression.Substring(i, 1) == "'" && nOpen > -1)
                    {
                        //Get the value between open and (i)
                        //
                        String strValueWithQuotes = expression.Substring(nOpen, i - nOpen + 1);
                        String strValue           = expression.Substring(nOpen + 1, i - nOpen - 1);

                        if (bStringVariable)
                        {
                            strValue = strValueWithQuotes.Replace("'", "\"");
                        }
                        else if (bDateVariable)
                        {
                            strValue = strValueWithQuotes.Replace("'", "\"");
                            strValue = " Convert.ToDateTime(" + strValue + ") ";
                        }
                        else
                        {
                            try
                            {
                                float fValue = float.Parse(strValue);
                            }
                            catch
                            {
                                strValue = strValueWithQuotes.Replace("'", "\"");
                            }
                        }
                        //expression = expression.Replace(strValueWithQuotes, strValue);
                        expression = expression.Remove(nOpen, i - nOpen + 1).Insert(nOpen, strValue);
                        nOpen      = -1;
                        i          = 0;
                    }
                }
            }


            // need a string to put the code into
            _source = new StringBuilder();
            StringWriter sw = new StringWriter(_source);

            //Declare your provider and generator
            CSharpCodeProvider   codeProvider = new CSharpCodeProvider();
            ICodeGenerator       generator    = codeProvider.CreateGenerator(sw);
            CodeGeneratorOptions codeOpts     = new CodeGeneratorOptions();

            CodeNamespace myNamespace = new CodeNamespace("ExpressionEvaluator");

            myNamespace.Imports.Add(new CodeNamespaceImport("System"));
            myNamespace.Imports.Add(new CodeNamespaceImport("System.Windows.Forms"));

            //Build the class declaration and member variables
            CodeTypeDeclaration classDeclaration = new CodeTypeDeclaration();

            classDeclaration.IsClass = true;
            if (bCalculate)
            {
                classDeclaration.Name = "Calculator";
            }
            else
            {
                classDeclaration.Name = "Evaluator";
            }

            classDeclaration.Attributes = MemberAttributes.Public;

            if (bCalculate)
            {
                classDeclaration.Members.Add(FieldVariable("answer", typeof(double), MemberAttributes.Private));
            }
            else
            {
                classDeclaration.Members.Add(FieldVariable("answer", typeof(bool), MemberAttributes.Private));
            }



            //default constructor
            CodeConstructor defaultConstructor = new CodeConstructor();

            defaultConstructor.Attributes = MemberAttributes.Public;
            defaultConstructor.Comments.Add(new CodeCommentStatement("Default Constructor for class", true));
            defaultConstructor.Statements.Add(new CodeSnippetStatement("//TODO: implement default constructor"));
            classDeclaration.Members.Add(defaultConstructor);

            //property
            if (bCalculate)
            {
                classDeclaration.Members.Add(this.MakeProperty("Answer", "answer", typeof(double)));
            }
            else
            {
                classDeclaration.Members.Add(this.MakeProperty("Answer", "answer", typeof(bool)));
            }

            //Our Calculate Method
            CodeMemberMethod myMethod = new CodeMemberMethod();

            if (bCalculate)
            {
                myMethod.Name       = "Calculate";
                myMethod.ReturnType = new CodeTypeReference(typeof(double));
                myMethod.Comments.Add(new CodeCommentStatement("Calculate an expression", true));
                myMethod.Attributes = MemberAttributes.Public;
                myMethod.Parameters.AddRange(GetParametersFromBracketedItems(expression));

                myMethod.Statements.Add(new CodeAssignStatement(new CodeSnippetExpression("Answer"), new CodeSnippetExpression(System.Text.RegularExpressions.Regex.Replace(expression, "[[\\]]", ""))));
                //            myMethod.Statements.Add(new CodeSnippetExpression("MessageBox.Show(String.Format(\"Answer = {0}\", Answer))"));
                myMethod.Statements.Add(
                    new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "Answer")));
                classDeclaration.Members.Add(myMethod);
            }
            else
            {
                myMethod.Name       = "Evaluate";
                myMethod.ReturnType = new CodeTypeReference(typeof(bool));
                myMethod.Comments.Add(new CodeCommentStatement("Evaluate an expression", true));
                myMethod.Attributes = MemberAttributes.Public;
                myMethod.Parameters.AddRange(GetParametersFromBracketedItems(expression));
                expression = expression.Replace("@", "").Replace("$", "");
                myMethod.Statements.Add(new CodeConditionStatement(new CodeVariableReferenceExpression(System.Text.RegularExpressions.Regex.Replace(expression, "[[\\]]", "")), new CodeStatement[] { new CodeSnippetStatement("this.Answer = true;") }, new CodeStatement[] { new CodeSnippetStatement("this.Answer = false;") }));

                myMethod.Statements.Add(
                    new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "Answer")));

                classDeclaration.Members.Add(myMethod);
            }



            //write code
            myNamespace.Types.Add(classDeclaration);
            generator.GenerateCodeFromNamespace(myNamespace, sw, codeOpts);
            sw.Flush();
            sw.Close();
        }
Exemplo n.º 10
0
 public override void GenerateCodeFromNamespace(CodeNamespace e, TextWriter w, CodeGeneratorOptions o)
 {
     generator.GenerateCodeFromNamespace(e, w, o);
 }
Exemplo n.º 11
0
        /// <summary>
        /// Builds the assembly from WSDL.
        /// </summary>
        /// <param name="strWsdl">STR WSDL.</param>
        /// <returns></returns>
        private Assembly BuildAssemblyFromWsdl(string strWsdl)
        {
            // Use an XmlTextReader to get the Web Service description
            StringReader  wsdlStringReader = new StringReader(strWsdl);
            XmlTextReader tr = new XmlTextReader(wsdlStringReader);

            ServiceDescription.Read(tr);
            tr.Close();

            // WSDL service description importer
            CodeNamespace cns = new CodeNamespace(CodeConstants.CODENAMESPACE);

            sdi = new ServiceDescriptionImporter();
            //sdi.AddServiceDescription(sd, null, null);

            // check for optional imports in the root WSDL
            CheckForImports(wsdl);

            sdi.ProtocolName = protocolName;
            sdi.Import(cns, null);

            // change the base class
            // get all available Service classes - not only the default one
            ArrayList newCtr = new ArrayList();

            foreach (CodeTypeDeclaration ctDecl in cns.Types)
            {
                if (ctDecl.BaseTypes.Count > 0)
                {
                    if (ctDecl.BaseTypes[0].BaseType == CodeConstants.DEFAULTBASETYPE)
                    {
                        newCtr.Add(ctDecl);
                    }
                }
            }

            foreach (CodeTypeDeclaration ctDecl in newCtr)
            {
                cns.Types.Remove(ctDecl);
                ctDecl.BaseTypes[0] = new CodeTypeReference(CodeConstants.CUSTOMBASETYPE);
                cns.Types.Add(ctDecl);
            }

            // source code generation
            CSharpCodeProvider cscp             = new CSharpCodeProvider();
            ICodeGenerator     icg              = cscp.CreateGenerator();
            StringBuilder      srcStringBuilder = new StringBuilder();
            StringWriter       sw = new StringWriter(srcStringBuilder, CultureInfo.CurrentCulture);

            if (schemas != null)
            {
                foreach (XmlSchema xsd in schemas)
                {
                    if (XmlSchemas.IsDataSet(xsd))
                    {
                        MemoryStream mem = new MemoryStream();
                        mem.Position = 0;
                        xsd.Write(mem);
                        mem.Position = 0;
                        DataSet dataSet1 = new DataSet();
                        dataSet1.Locale = CultureInfo.InvariantCulture;
                        dataSet1.ReadXmlSchema(mem);
                        TypedDataSetGenerator.Generate(dataSet1, cns, icg);
                    }
                }
            }

            icg.GenerateCodeFromNamespace(cns, sw, null);
            proxySource = srcStringBuilder.ToString();
            sw.Close();

            // assembly compilation
            string location = "";

            if (HttpContext.Current != null)
            {
                location  = HttpContext.Current.Server.MapPath(".");
                location += @"\bin\";
            }

            CompilerParameters cp = new CompilerParameters();

            cp.ReferencedAssemblies.Add("System.dll");
            cp.ReferencedAssemblies.Add("System.Xml.dll");
            cp.ReferencedAssemblies.Add("System.Web.Services.dll");
            cp.ReferencedAssemblies.Add("System.Data.dll");
            cp.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location);
            cp.ReferencedAssemblies.Add(location + "Thinktecture.Tools.Web.Services.Extensions.Messages.dll");

            cp.GenerateExecutable      = false;
            cp.GenerateInMemory        = false;
            cp.IncludeDebugInformation = false;
            cp.TempFiles = new TempFileCollection(CompiledAssemblyCache.GetLibTempPath());

            ICodeCompiler   icc = cscp.CreateCompiler();
            CompilerResults cr  = icc.CompileAssemblyFromSource(cp, proxySource);

            if (cr.Errors.Count > 0)
            {
                throw new DynamicCompilationException(string.Format(CultureInfo.CurrentCulture, @"Building dynamic assembly failed: {0} errors", cr.Errors.Count));
            }

            Assembly compiledAssembly = cr.CompiledAssembly;

            //rename temporary assembly in order to cache it for later use
            CompiledAssemblyCache.RenameTempAssembly(cr.PathToAssembly, wsdl);

            return(compiledAssembly);
        }
Exemplo n.º 12
0
        /// <summary>
        /// Main driving routine for building a class
        /// </summary>
        void BuildClass(string expression, Dictionary <string, double> vars, bool bSimpleAssign, bool bRetArray, int arrayLen)
        {
            // need a string to put the code into
            _source = new StringBuilder();
            StringWriter sw = new StringWriter(_source);

            //Declare provider and generator
            CSharpCodeProvider   codeProvider = new CSharpCodeProvider();
            ICodeGenerator       generator    = codeProvider.CreateGenerator(sw);
            CodeGeneratorOptions codeOpts     = new CodeGeneratorOptions();

            CodeNamespace myNamespace = new CodeNamespace("ExpressionEvaluator");

            myNamespace.Imports.Add(new CodeNamespaceImport("System"));
            //myNamespace.Imports.Add(new CodeNamespaceImport("System.Windows.Forms"));

            //Build the class declaration and member variables
            CodeTypeDeclaration classDeclaration = new CodeTypeDeclaration();

            classDeclaration.IsClass    = true;
            classDeclaration.Name       = "Calculator";
            classDeclaration.Attributes = MemberAttributes.Public;
            classDeclaration.Members.Add(FieldVariable("ans", typeof(double), MemberAttributes.Private));
            classDeclaration.Members.Add(FieldVariable("arrAns", typeof(double[]), MemberAttributes.Private));
            foreach (KeyValuePair <string, double> k in vars)
            {
                classDeclaration.Members.Add(FieldVariable(k.Key, typeof(double), MemberAttributes.Private));
            }

            //default constructor
            CodeConstructor defaultConstructor = new CodeConstructor();

            defaultConstructor.Attributes = MemberAttributes.Public;
            defaultConstructor.Comments.Add(new CodeCommentStatement("Default Constructor for class", true));
            classDeclaration.Members.Add(defaultConstructor);

            CodeTypeDelegate dg = new CodeTypeDelegate("FN1");

            dg.ReturnType = new CodeTypeReference(typeof(double));
            dg.Parameters.Add(new CodeParameterDeclarationExpression(typeof(double), "p0"));
            classDeclaration.Members.Add(dg);
            dg            = new CodeTypeDelegate("FN2");
            dg.ReturnType = new CodeTypeReference(typeof(double));
            dg.Parameters.Add(new CodeParameterDeclarationExpression(typeof(double), "p0"));
            dg.Parameters.Add(new CodeParameterDeclarationExpression(typeof(double), "p1"));
            classDeclaration.Members.Add(dg);
            dg            = new CodeTypeDelegate("FN3");
            dg.ReturnType = new CodeTypeReference(typeof(double));
            dg.Parameters.Add(new CodeParameterDeclarationExpression(typeof(double), "p0"));
            dg.Parameters.Add(new CodeParameterDeclarationExpression(typeof(double), "p1"));
            dg.Parameters.Add(new CodeParameterDeclarationExpression(typeof(double), "p2"));
            classDeclaration.Members.Add(dg);

            //property
            classDeclaration.Members.Add(this.MakeProperty("Ans", "ans", typeof(double)));
            classDeclaration.Members.Add(this.MakeProperty("ArrAns", "arrAns", typeof(double[])));

            //Our Calculate Method
            CodeMemberMethod myMethod = new CodeMemberMethod();

            myMethod.Name       = "Calculate";
            myMethod.Attributes = MemberAttributes.Public;
            if (bRetArray)
            {
                myMethod.Statements.Add(new CodeAssignStatement(new CodeSnippetExpression("arrAns"), new CodeSnippetExpression("new double[" + arrayLen.ToString(CultureInfo.InvariantCulture) + "]")));
                myMethod.ReturnType = new CodeTypeReference(typeof(double[]));
            }
            else
            {
                myMethod.Statements.Add(new CodeAssignStatement(new CodeSnippetExpression("ans"), new CodeSnippetExpression("0.0")));
                myMethod.ReturnType = new CodeTypeReference(typeof(double));
            }


            foreach (KeyValuePair <string, double> k in vars)
            {
                myMethod.Statements.Add(new CodeAssignStatement(new CodeSnippetExpression(k.Key), new CodeSnippetExpression(k.Value.ToString(CultureInfo.InvariantCulture))));
            }

            if (bSimpleAssign) //require a full statement?
            {
                myMethod.Statements.Add(new CodeAssignStatement(new CodeSnippetExpression(bRetArray?"arrAns":"ans"), new CodeSnippetExpression(expression)));
            }
            else
            {
                myMethod.Statements.Add(new CodeSnippetExpression(expression));
            }


            if (bRetArray)
            {
                myMethod.Statements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "arrAns")));
            }
            else
            {
                myMethod.Statements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "Ans")));
            }

            classDeclaration.Members.Add(myMethod);
            //write code
            myNamespace.Types.Add(classDeclaration);
            generator.GenerateCodeFromNamespace(myNamespace, sw, codeOpts);
            sw.Flush();
            sw.Close();
        }