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; }
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); }
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(); } } }