예제 #1
0
        private void ParseGetPropertyParameters(string parameters, out List<APIParameter> objectParameters)
        {
            objectParameters = new List<APIParameter>();

            if (parameters.Trim().Length == 0)
                return;
            if (parameters.Trim().ToLower() == "void")
                return;

            int parameterPosition = 0;
            while (parameterPosition >= 0)
            {
                string definition = "";
                int definitionEnd = parameters.IndexOf("]", parameterPosition) +1;
                if (definitionEnd > 0)
                {
                    int definitionLength = definitionEnd - parameterPosition;
                    definition = parameters.Substring(parameterPosition, definitionLength);
                }

                if (string.IsNullOrEmpty(definition))
                {
                    definition = "[in]";
                    definitionEnd = parameterPosition-1;
                }

                int typeStart = definitionEnd + 1;
                int typeEnd = parameters.IndexOf(" ", typeStart+1);
                int typeLen = typeEnd - typeStart;
                string type = parameters.Substring(typeStart, typeLen).Trim();

                int nameStart = typeEnd + 1;
                int nameEnd = parameters.IndexOf(",", nameStart);
                int nameLength = nameEnd - nameStart;
                if (nameLength <= 0)
                    nameLength = parameters.Length - nameStart;
                string name = parameters.Substring(nameStart, nameLength);

                type = RemoveIDLTokens(type);
                name = RemoveIDLTokens(name);

                APIParameter parameter = new APIParameter();
                parameter.Type = type;
                parameter.Name = name;

                if (definition.StartsWith("[in"))
                    parameter.Input = true;
                else if (definition.StartsWith("[out"))
                    parameter.Input = false;
                else
                    throw new Exception("Unknown type");

                objectParameters.Add(parameter);

                parameterPosition = parameters.IndexOf("[", typeEnd);
                if (parameterPosition < 0)
                {
                    parameterPosition = parameters.IndexOf(",", typeEnd);
                    if (parameterPosition > 0)
                    {
                        parameterPosition++;
                    }
                }
            }
        }
예제 #2
0
        private void ParseGetPropertyParameters(string parameters, out List <APIParameter> objectParameters)
        {
            objectParameters = new List <APIParameter>();

            if (parameters.Trim().Length == 0)
            {
                return;
            }
            if (parameters.Trim().ToLower() == "void")
            {
                return;
            }

            int parameterPosition = 0;

            while (parameterPosition >= 0)
            {
                string definition    = "";
                int    definitionEnd = parameters.IndexOf("]", parameterPosition) + 1;
                if (definitionEnd > 0)
                {
                    int definitionLength = definitionEnd - parameterPosition;
                    definition = parameters.Substring(parameterPosition, definitionLength);
                }

                if (string.IsNullOrEmpty(definition))
                {
                    definition    = "[in]";
                    definitionEnd = parameterPosition - 1;
                }

                int    typeStart = definitionEnd + 1;
                int    typeEnd   = parameters.IndexOf(" ", typeStart + 1);
                int    typeLen   = typeEnd - typeStart;
                string type      = parameters.Substring(typeStart, typeLen).Trim();

                int nameStart  = typeEnd + 1;
                int nameEnd    = parameters.IndexOf(",", nameStart);
                int nameLength = nameEnd - nameStart;
                if (nameLength <= 0)
                {
                    nameLength = parameters.Length - nameStart;
                }
                string name = parameters.Substring(nameStart, nameLength);

                type = RemoveIDLTokens(type);
                name = RemoveIDLTokens(name);

                APIParameter parameter = new APIParameter();
                parameter.Type = type;
                parameter.Name = name;

                if (definition.StartsWith("[in"))
                {
                    parameter.Input = true;
                }
                else if (definition.StartsWith("[out"))
                {
                    parameter.Input = false;
                }
                else
                {
                    throw new Exception("Unknown type");
                }

                objectParameters.Add(parameter);

                parameterPosition = parameters.IndexOf("[", typeEnd);
                if (parameterPosition < 0)
                {
                    parameterPosition = parameters.IndexOf(",", typeEnd);
                    if (parameterPosition > 0)
                    {
                        parameterPosition++;
                    }
                }
            }
        }
예제 #3
0
        public void Generate(Parser parser, string destinationFolder)
        {
            const string connectionString = "Database=hmailserver_webpage;Data Source=hmailserver.com;User Id=user;Password=password;CharSet=utf8";

            using (MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connectionString))
            {
                conn.Open();

                foreach (APIInterface apiInterface in parser.Interfaces)
                {
                    // do some pre-sorting...
                    IEnumerable <APIMethod>   methods    = apiInterface.Methods.OrderBy(method => method.Name);
                    IEnumerable <APIProperty> properties = apiInterface.Properties.OrderBy(prop => prop.Name);

                    string fileName = Path.Combine(destinationFolder, "com_object_" + apiInterface.Name + ".html");
                    fileName = fileName.ToLower();

                    string outputCode = "";

                    outputCode  = "<h3>Description</h3>";
                    outputCode += apiInterface.HelpString + "<br/>";

                    if (methods.Count() > 0)
                    {
                        outputCode += "<h3>Methods</h3>";

                        foreach (APIMethod method in methods)
                        {
                            string outputLine = string.Format("<div class=\"api_method_name\">{0}(", method.Name);

                            string parameters = "";
                            foreach (APIParameter parameter in method.Parameters)
                            {
                                if (!parameter.Input)
                                {
                                    continue;
                                }

                                string parameterItem = string.Format("{0} {1}", CreateLinkToType(parser, FriendlynizeType(parameter.Type)), parameter.Name);

                                if (parameters.Length > 0)
                                {
                                    parameters += ", ";
                                }

                                parameters += parameterItem;
                            }

                            outputLine += parameters;
                            outputLine += ")";

                            outputLine += "</div>";
                            outputCode += outputLine;

                            if (method.HelpString.Length > 0)
                            {
                                outputLine = string.Format("<br/><div class=\"api_description\">{0}</div>", method.HelpString);

                                outputCode += outputLine;
                            }

                            outputCode += "<br/>";
                        }
                    }

                    if (properties.Count() > 0)
                    {
                        outputCode += "<h3>Properties</h3>";

                        List <string> printedProperties = new List <string>();

                        foreach (APIProperty property in properties)
                        {
                            string outputLine = string.Format("<div class=\"api_method_name\">");

                            if (printedProperties.Contains(property.Name))
                            {
                                continue;
                            }

                            printedProperties.Add(property.Name);

                            foreach (APIParameter parameter in property.Parameters)
                            {
                                if (parameter.Input && property.Parameters.Count > 1)
                                {
                                    continue;
                                }

                                outputLine += CreateLinkToType(parser, FriendlynizeType(parameter.Type)) + " ";
                            }

                            outputLine += string.Format("{0}", property.Name);

                            string parameters = "";
                            if (property.Parameters.Count > 1)
                            {
                                for (int i = 0; i < property.Parameters.Count; i++)
                                {
                                    APIParameter parameter = property.Parameters[i];
                                    if (!parameter.Input)
                                    {
                                        continue;
                                    }

                                    string parameterItem = string.Format("{0} {1}", CreateLinkToType(parser, FriendlynizeType(parameter.Type)), parameter.Name);

                                    if (parameters.Length > 0)
                                    {
                                        parameters += ", ";
                                    }

                                    parameters += parameterItem;
                                }

                                if (parameters.Length > 0)
                                {
                                    outputLine += "(";
                                    outputLine += parameters;
                                    outputLine += ")";
                                }
                            }

                            outputLine += "</div>";
                            outputCode += outputLine;

                            if (property.HelpString.Length > 0)
                            {
                                outputLine = string.Format("<br/><div class=\"api_description\">{0}<br/>", property.HelpString);

                                if (!property.HasSet)
                                {
                                    // check if there's a set-property with same name.
                                    IEnumerable <APIProperty> setProperties = properties.Where(prop => prop.Name == property.Name && prop.HasSet == true);
                                    if (setProperties.Count() == 0)
                                    {
                                        outputLine += " <i>(read-only)</i>";
                                    }
                                }

                                outputLine += "</div>";
                                outputCode += outputLine;
                            }

                            outputCode += "<br/>";
                        }
                    }


                    File.WriteAllText(fileName, outputCode);

                    UploadDocument(conn, apiInterface, outputCode);
                }


                // remove old documents.
                string       sql           = "select documentid, documentname from hm_documents where documentname like 'com\\_object\\_%'";
                MySqlCommand selectCommand = new MySqlCommand(sql, conn);

                List <int> documentsToRemove = new List <int>();
                using (MySqlDataReader reader = selectCommand.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        int    documentID   = Convert.ToInt32(reader["documentid"]);
                        string documentName = Convert.ToString(reader["documentname"]);

                        IEnumerable <APIInterface> interfaces = parser.Interfaces.Where(apiInterface => "com_object_" + apiInterface.Name.ToLower() == documentName);
                        if (interfaces.Count() == 0)
                        {
                            documentsToRemove.Add(documentID);
                        }
                    }

                    reader.Close();
                }

                foreach (int documentToRemove in documentsToRemove)
                {
                    sql = string.Format("delete from hm_documents where documentid = {0}", documentToRemove);
                    MySqlCommand deleteCommand = new MySqlCommand(sql, conn);
                    deleteCommand.ExecuteNonQuery();
                }
            }
        }