Example #1
0
        public string CreateLinkToType(Parser parser, string type)
        {
            IEnumerable<APIInterface> interfaces = parser.Interfaces.Where(apiInterface => apiInterface.Name == type);
            if (interfaces.Count() == 0)
                return type;

            // create a link to that type.
            string result = string.Format("<a href=\"?page=com_object_{0}\">{1}</a>", type.ToLower(), type);

            return result;
        }
Example #2
0
        static void Main(string[] args)
        {
            // Make sure that the output directory exists.
            if (!Directory.Exists(outputDirectory))
                Directory.CreateDirectory(outputDirectory);

            string fileContent = File.ReadAllText(inputFile);

            string[] lines = fileContent.SplitString(Environment.NewLine);

            Parser parser = new Parser();
            foreach (string line in lines)
            {
                parser.ParseLine(line);
            }

            HTMLGenerator generator = new HTMLGenerator();
            generator.Generate(parser, outputDirectory);
        }
Example #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();
                }

            }
        }