Esempio n. 1
0
        private void FunctionsGUI()
        {
            if (m_ScriptPrescription.m_Functions == null)
            {
                GUILayout.FlexibleSpace();
                return;
            }

            EditorGUILayout.BeginHorizontal();
            {
                GUILayout.Label("Functions", GUILayout.Width(kLabelWidth - 4));

                EditorGUILayout.BeginVertical(m_Styles.m_LoweredBox);
                m_OptionsScroll = EditorGUILayout.BeginScrollView(m_OptionsScroll);
                {
                    bool expanded = FunctionHeader("General", true);

                    for (int i = 0; i < m_ScriptPrescription.m_Functions.Length; i++)
                    {
                        FunctionData func = m_ScriptPrescription.m_Functions[i];

                        if (func.name == null)
                        {
                            expanded = FunctionHeader(func.comment, false);
                        }
                        else if (expanded)
                        {
                            Rect toggleRect = GUILayoutUtility.GetRect(GUIContent.none, EditorStyles.toggle);
                            toggleRect.x     += 15;
                            toggleRect.width -= 15;
                            bool include = GUI.Toggle(toggleRect, func.include, new GUIContent(func.name, func.comment));
                            if (include != func.include)
                            {
                                m_ScriptPrescription.m_Functions[i].include = include;
                                SetFunctionIsIncluded(m_BaseClass, func.name, include);
                            }
                        }
                    }
                }
                EditorGUILayout.EndScrollView();
                EditorGUILayout.EndVertical();
            }
            EditorGUILayout.EndHorizontal();
        }
		private void WriteFunction(FunctionData function) {
			string paramString = string.Empty;
			string overrideString;
			string returnTypeString;
			string functionContentString;
			string paramStringWithoutTypes = string.Empty;
			
			switch (m_ScriptPrescription.m_Lang) {
			/*case Language.JavaScript:
				// Comment
				WriteComment (function.comment);
				
				// Function header
				for (int i=0; i<function.parameters.Length; i++)
				{
					paramString += function.parameters[i].name + " : " + TranslateTypeToJavascript (function.parameters[i].type);
					if (i < function.parameters.Length-1)
						paramString += ", ";
				}
				overrideString = (function.isVirtual ? "override " : string.Empty);
				returnTypeString = (function.returnType == null ? " " : " : " + TranslateTypeToJavascript (function.returnType) + " ");
				m_Writer.WriteLine (m_Indentation + overrideString + "function " + function.name + " (" + paramString + ")" + returnTypeString + "{");
				
				// Function content
				IndentLevel++;
				functionContentString = (function.returnType == null ? string.Empty : function.returnDefault + ";");
				m_Writer.WriteLine (m_Indentation + functionContentString);
				IndentLevel--;
				m_Writer.WriteLine (m_Indentation + "}");
				
				break;*/
				
				case Language.CSharp:
					
					// Comment
					WriteComment(function.comment);
				
					// Function header
					for (int i = 0; i < function.parameters.Length; i++) {
						
						paramString += function.parameters[i].type + " " + function.parameters[i].name;
						paramStringWithoutTypes += function.parameters[i].name;
						if (i < function.parameters.Length - 1) {

							paramString += ", ";
							paramStringWithoutTypes += ", ";

						}

					}
					overrideString = (function.isVirtual ? "public override " : string.Empty);
					returnTypeString = (function.returnType == null ? "void " : function.returnType + " ");
					m_Writer.WriteLine(m_Indentation + overrideString + returnTypeString + function.name + "(" + paramString + ") {");
				
					// Function content
					IndentLevel++;
					{

						if (function.isVirtual == true) {

							WriteBlankLine();
							m_Writer.WriteLine(m_Indentation + "base." + function.name + "(" + paramStringWithoutTypes + ");");
							WriteBlankLine();

						}

						functionContentString = (function.returnType == null ? string.Empty : function.returnDefault + ";");
						m_Writer.WriteLine(m_Indentation + functionContentString);
						WriteBlankLine();

					}
					IndentLevel--;
					m_Writer.WriteLine(m_Indentation + "}");
				
					break;
				
			/*case Language.Boo:
				// Comment
				WriteComment (function.comment);
				
				// Function header
				for (int i=0; i<function.parameters.Length; i++)
				{
					paramString += function.parameters[i].name + " as " + TranslateTypeToBoo (function.parameters[i].type);
					if (i < function.parameters.Length-1)
						paramString += ", ";
				}
				overrideString = (function.isVirtual ? "public override " : string.Empty);
				returnTypeString = (function.returnType == null ? string.Empty : " as " + TranslateTypeToJavascript (function.returnType));
				m_Writer.WriteLine (m_Indentation + overrideString + "def " + function.name + " (" + paramString + ")" + returnTypeString + ":");
				
				// Function content
				IndentLevel++;
				functionContentString = (function.returnType == null ? "pass" : function.returnDefault);
				m_Writer.WriteLine (m_Indentation + functionContentString);
				IndentLevel--;
				
				break;*/
			}
		}
Esempio n. 3
0
        private void HandleBaseClass()
        {
            if (m_TemplateNames.Length == 0)
            {
                m_BaseClass = null;
                return;
            }

            // Get base class
            m_BaseClass = GetBaseClass(m_ScriptPrescription.m_Template);

            // If base class was found, strip first line from template
            if (m_BaseClass != null)
            {
                m_ScriptPrescription.m_Template =
                    m_ScriptPrescription.m_Template.Substring(m_ScriptPrescription.m_Template.IndexOf("\n") + 1);
            }

            m_IsEditorClass  = IsEditorClass(m_BaseClass);
            m_IsCustomEditor = (m_BaseClass == kCustomEditorClassName);
            m_ScriptPrescription.m_StringReplacements.Clear();

            // Try to find function file first in custom templates folder and then in built-in
            //string functionDataFilePath = Path.Combine(GetAbsoluteCustomTemplatePath(), m_BaseClass + ".functions.txt");
            //if (!File.Exists(functionDataFilePath)) functionDataFilePath = Path.Combine(GetAbsoluteBuiltinTemplatePath(), m_BaseClass + ".functions.txt");
            var functionDataFilePath = GetFunctionsPath(m_BaseClass);

            if (!File.Exists(functionDataFilePath))
            {
                m_ScriptPrescription.m_Functions = null;
            }
            else
            {
                StreamReader        reader       = new StreamReader(functionDataFilePath);
                List <FunctionData> functionList = new List <FunctionData>();
                int lineNr = 1;
                while (!reader.EndOfStream)
                {
                    string functionLine      = reader.ReadLine();
                    string functionLineWhole = functionLine;
                    try {
                        if (functionLine.Substring(0, 7).ToLower() == "header ")
                        {
                            functionList.Add(new FunctionData(functionLine.Substring(7)));
                            continue;
                        }

                        FunctionData function = new FunctionData();

                        bool defaultInclude = false;
                        if (functionLine.Substring(0, 8) == "DEFAULT ")
                        {
                            defaultInclude = true;
                            functionLine   = functionLine.Substring(8);
                        }

                        if (functionLine.Substring(0, 9) == "override ")
                        {
                            function.isVirtual = true;
                            functionLine       = functionLine.Substring(9);
                        }

                        string returnTypeString = GetStringUntilSeperator(ref functionLine, " ");
                        function.returnType = (returnTypeString == "void" ? null : returnTypeString);
                        function.name       = GetStringUntilSeperator(ref functionLine, "(");
                        string parameterString = GetStringUntilSeperator(ref functionLine, ")");
                        if (function.returnType != null)
                        {
                            function.returnDefault = GetStringUntilSeperator(ref functionLine, ";");
                        }
                        function.comment = functionLine;

                        string[]             parameterStrings = parameterString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        List <ParameterData> parameterList    = new List <ParameterData>();
                        for (int i = 0; i < parameterStrings.Length; i++)
                        {
                            string[] paramSplit = parameterStrings[i].Trim().Split(' ');
                            parameterList.Add(new ParameterData(paramSplit[1], paramSplit[0]));
                        }
                        function.parameters = parameterList.ToArray();

                        function.include = GetFunctionIsIncluded(m_BaseClass, function.name, defaultInclude);

                        functionList.Add(function);
                    } catch (Exception e) {
                        Debug.LogWarning("Malformed function line: \"" + functionLineWhole + "\"\n  at " + functionDataFilePath + ":" + lineNr + "\n" + e);
                    }
                    lineNr++;
                }
                m_ScriptPrescription.m_Functions = functionList.ToArray();
            }
        }
Esempio n. 4
0
        private void WriteFunction(FunctionData function)
        {
            string paramString = string.Empty;
            string overrideString;
            string returnTypeString;
            string functionContentString;
            string paramStringWithoutTypes = string.Empty;

            switch (m_ScriptPrescription.m_Lang)
            {
            /*case Language.JavaScript:
             *      // Comment
             *      WriteComment (function.comment);
             *
             *      // Function header
             *      for (int i=0; i<function.parameters.Length; i++)
             *      {
             *              paramString += function.parameters[i].name + " : " + TranslateTypeToJavascript (function.parameters[i].type);
             *              if (i < function.parameters.Length-1)
             *                      paramString += ", ";
             *      }
             *      overrideString = (function.isVirtual ? "override " : string.Empty);
             *      returnTypeString = (function.returnType == null ? " " : " : " + TranslateTypeToJavascript (function.returnType) + " ");
             *      m_Writer.WriteLine (m_Indentation + overrideString + "function " + function.name + " (" + paramString + ")" + returnTypeString + "{");
             *
             *      // Function content
             *      IndentLevel++;
             *      functionContentString = (function.returnType == null ? string.Empty : function.returnDefault + ";");
             *      m_Writer.WriteLine (m_Indentation + functionContentString);
             *      IndentLevel--;
             *      m_Writer.WriteLine (m_Indentation + "}");
             *
             *      break;*/

            case Language.CSharp:

                // Comment
                WriteComment(function.comment);

                // Function header
                for (int i = 0; i < function.parameters.Length; i++)
                {
                    paramString             += function.parameters[i].type + " " + function.parameters[i].name;
                    paramStringWithoutTypes += function.parameters[i].name;
                    if (i < function.parameters.Length - 1)
                    {
                        paramString             += ", ";
                        paramStringWithoutTypes += ", ";
                    }
                }
                overrideString   = (function.isVirtual ? "public override " : string.Empty);
                returnTypeString = (function.returnType == null ? "void " : function.returnType + " ");
                m_Writer.WriteLine(m_Indentation + overrideString + returnTypeString + function.name + "(" + paramString + ") {");

                // Function content
                IndentLevel++;
                {
                    if (function.isVirtual == true)
                    {
                        WriteBlankLine();
                        m_Writer.WriteLine(m_Indentation + "base." + function.name + "(" + paramStringWithoutTypes + ");");
                        WriteBlankLine();
                    }

                    functionContentString = (function.returnType == null ? string.Empty : function.returnDefault + ";");
                    m_Writer.WriteLine(m_Indentation + functionContentString);
                    WriteBlankLine();
                }
                IndentLevel--;
                m_Writer.WriteLine(m_Indentation + "}");

                break;

                /*case Language.Boo:
                 *      // Comment
                 *      WriteComment (function.comment);
                 *
                 *      // Function header
                 *      for (int i=0; i<function.parameters.Length; i++)
                 *      {
                 *              paramString += function.parameters[i].name + " as " + TranslateTypeToBoo (function.parameters[i].type);
                 *              if (i < function.parameters.Length-1)
                 *                      paramString += ", ";
                 *      }
                 *      overrideString = (function.isVirtual ? "public override " : string.Empty);
                 *      returnTypeString = (function.returnType == null ? string.Empty : " as " + TranslateTypeToJavascript (function.returnType));
                 *      m_Writer.WriteLine (m_Indentation + overrideString + "def " + function.name + " (" + paramString + ")" + returnTypeString + ":");
                 *
                 *      // Function content
                 *      IndentLevel++;
                 *      functionContentString = (function.returnType == null ? "pass" : function.returnDefault);
                 *      m_Writer.WriteLine (m_Indentation + functionContentString);
                 *      IndentLevel--;
                 *
                 *      break;*/
            }
        }