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