private static void writeGenericGetter(TextWriter writer, ModificationField field) { CodeGenerationStatics.AddSummaryDocComment(writer, getFormItemGetterSummary(field, "", new string[0])); var parameters = new List <CSharpParameter>(); parameters.Add(new CSharpParameter("System.Func<{0},IReadOnlyCollection<FlowComponent>>".FormatWith(field.NullableTypeName), "contentGetter")); parameters.Add(new CSharpParameter("FormItemSetup", "setup", "null")); parameters.Add(new CSharpParameter("IReadOnlyCollection<PhrasingComponent>", "label", "null")); parameters.Add( new CSharpParameter( field.TypeIs(typeof(string)) ? field.NullableTypeName : "SpecifiedValue<{0}>".FormatWith(field.NullableTypeName), "value", "null")); parameters.Add(new CSharpParameter("System.Func<System.Action<{0}>,EwfValidation>".FormatWith(field.TypeName), "validationGetter", "null")); writer.WriteLine( "public FormItem " + EwlStatics.GetCSharpIdentifier("Get" + field.PascalCasedName + "FormItem") + "( " + parameters.Select(i => i.MethodSignatureDeclaration).GetCommaDelimitedStringFromCollection() + " ) {"); writer.WriteLine("label = label ?? \"{0}\".ToComponents();".FormatWith(getDefaultLabel(field))); writer.WriteLine( "return {0}.ToFormItem( setup: setup, label: label, validation: {1} );".FormatWith( "contentGetter( {0} )".FormatWith( field.TypeIs(typeof(string)) ? "value ?? {0}".FormatWith(EwlStatics.GetCSharpIdentifier(field.Name)) : "value != null ? value.Value : {0}".FormatWith(EwlStatics.GetCSharpIdentifier(field.Name))), "validationGetter?.Invoke( v => {0} = v )".FormatWith(EwlStatics.GetCSharpIdentifier(field.Name)))); writer.WriteLine("}"); }
internal static void Generate(string rootPath, string nameSpace, TextWriter writer) { var cssClasses = new HashSet <string>(); foreach (var fileInfo in new DirectoryInfo(rootPath).GetFiles("*.css", SearchOption.AllDirectories)) { new FileReader(fileInfo.FullName).ExecuteInStreamReader( delegate(StreamReader reader) { // Remove comments and styles. // NOTE: We need to find a way to also throw out media query expressions. var text = reader.ReadToEnd().RemoveTextBetweenStrings("/*", "*/").RemoveTextBetweenStrings("{", "}"); foreach (Match match in Regex.Matches(text, @"\.(\w+)")) { cssClasses.Add(match.Groups[1].Value); } }); } if (cssClasses.Any()) { writer.WriteLine("namespace " + nameSpace + " {"); CodeGenerationStatics.AddSummaryDocComment(writer, "This class provides typesafe access to css classes present in *.css files."); writer.WriteLine("public class ElementClasses {"); var identifiers = new HashSet <string>(); foreach (var elementClass in cssClasses) { writer.WriteLine("/// <summary>"); writer.WriteLine("/// Constant for the '{0}' class.".FormatWith(elementClass)); writer.WriteLine("/// </summary>"); var identifier = EwlStatics.GetCSharpIdentifier(elementClass.CapitalizeString()); if (identifiers.Contains(identifier)) { var uniqueIdentifier = identifier; var i = 0; while (identifiers.Contains(uniqueIdentifier)) { uniqueIdentifier = identifier + i++; } identifier = uniqueIdentifier; } identifiers.Add(identifier); writer.WriteLine("public static readonly ElementClass {0} = new ElementClass( \"{1}\" );".FormatWith(identifier, elementClass)); } writer.WriteLine("}"); // class writer.WriteLine("}"); // namespace } // Web Forms compatibility. Remove when EnduraCode goal 790 is complete. generateLegacy(rootPath, nameSpace, writer); }
private static void writeFormItemGetter( TextWriter writer, ModificationField field, string controlTypeForName, IEnumerable <CSharpParameter> requiredParams, bool controlIsLabeled, IEnumerable <CSharpParameter> preValueOptionalParams, string valueParamTypeName, IEnumerable <CSharpParameter> postValueOptionalParams, bool includeAdditionalValidationMethodParam, Func <string, string> formControlExpressionGetter, string preFormItemStatements = "", string postFormItemStatements = "", IEnumerable <string> additionalSummarySentences = null) { var parameters = new List <CSharpParameter>(); parameters.AddRange(requiredParams); parameters.Add(new CSharpParameter("FormItemSetup", "formItemSetup", "null")); parameters.Add(new CSharpParameter("IReadOnlyCollection<PhrasingComponent>", "label", "null")); if (controlIsLabeled) { parameters.Add(new CSharpParameter("IReadOnlyCollection<PhrasingComponent>", "formItemLabel", "null")); } parameters.AddRange(preValueOptionalParams); parameters.Add(new CSharpParameter(valueParamTypeName, "value", "null")); parameters.AddRange(postValueOptionalParams); if (includeAdditionalValidationMethodParam) { parameters.Add( new CSharpParameter( "System.Action<Validator>", "additionalValidationMethod", defaultValue: "null", description: "A method that takes the form control’s validator and performs additional validation.")); } CodeGenerationStatics.AddSummaryDocComment( writer, getFormItemGetterSummary(field, controlTypeForName, additionalSummarySentences ?? new string[0])); foreach (var i in parameters) { CodeGenerationStatics.AddParamDocComment(writer, i.Name, i.Description); } writer.WriteLine( "public FormItem " + EwlStatics.GetCSharpIdentifier("Get" + field.PascalCasedName + controlTypeForName + "FormItem") + "( " + parameters.Select(i => i.MethodSignatureDeclaration).GetCommaDelimitedStringFromCollection() + " ) {"); writer.WriteLine("label = label ?? \"{0}\".ToComponents();".FormatWith(getDefaultLabel(field))); writer.WriteLine( StringTools.ConcatenateWithDelimiter( Environment.NewLine, preFormItemStatements, "var formItem = {0}.ToFormItem( setup: formItemSetup, label: {1} );".FormatWith( formControlExpressionGetter(EwlStatics.GetCSharpIdentifier(field.PrivateFieldName)), controlIsLabeled ? "formItemLabel" : "label"), postFormItemStatements, "return formItem;")); writer.WriteLine("}"); }
private static void writeFormItemGetter( TextWriter writer, string controlType, ModificationField field, string controlTypeForName, string valueParamTypeName, IEnumerable <CSharpParameter> requiredControlParams, IEnumerable <CSharpParameter> requiredValidationParams, string valueParamDefaultValue, IEnumerable <CSharpParameter> optionalControlParams, bool includeValidationParams, IEnumerable <CSharpParameter> optionalValidationParams, string body, IEnumerable <string> additionalSummarySentences) { CodeGenerationStatics.AddSummaryDocComment(writer, getFormItemGetterSummary(field, controlTypeForName, additionalSummarySentences)); CodeGenerationStatics.AddParamDocComment(writer, "additionalValidationMethod", "Passes the labelAndSubject and a validator to the function."); CodeGenerationStatics.AddParamDocComment(writer, "validationList", validationListParamDocComment); var parameters = new List <CSharpParameter>(); if (valueParamTypeName.Length > 0) { parameters.Add(new CSharpParameter("bool", "useValueParameter")); } parameters.AddRange(requiredControlParams); parameters.AddRange(requiredValidationParams); parameters.Add(new CSharpParameter("string", "labelAndSubject", "\"" + getDefaultLabelAndSubject(field) + "\"")); parameters.Add(new CSharpParameter("FormItemLabel", "labelOverride", "null")); if (valueParamTypeName.Length > 0) { parameters.Add(new CSharpParameter(valueParamTypeName, "value", valueParamDefaultValue)); } parameters.AddRange(optionalControlParams); parameters.Add(new CSharpParameter("int?", "cellSpan", "null")); parameters.Add(new CSharpParameter("TextAlignment", "textAlignment", "TextAlignment.NotSpecified")); if (includeValidationParams) { parameters.Add(new CSharpParameter("System.Func<bool>", "validationPredicate", "null")); } parameters.AddRange(optionalValidationParams); if (includeValidationParams) { parameters.Add(new CSharpParameter("System.Action", "validationErrorNotifier", "null")); parameters.Add(new CSharpParameter("System.Action<string,Validator>", "additionalValidationMethod", "null")); parameters.Add(new CSharpParameter("ValidationList", "validationList", "null")); } writer.WriteLine( "public FormItem<" + controlType + "> " + StandardLibraryMethods.GetCSharpIdentifierSimple("Get" + field.PascalCasedName + controlTypeForName + "FormItem") + "( " + parameters.Select(i => i.MethodSignatureDeclaration).GetCommaDelimitedStringFromCollection() + " ) {"); writer.WriteLine(body); writer.WriteLine("}"); }
private static void writeGenericGetter( TextWriter writer, ModificationField field, bool includeValueParams, bool?includeValidationMethodReturnValue, string body) { CodeGenerationStatics.AddSummaryDocComment(writer, getFormItemGetterSummary(field, "", new string[0])); CodeGenerationStatics.AddParamDocComment(writer, "additionalValidationMethod", "Passes the labelAndSubject and a validator to the function."); CodeGenerationStatics.AddParamDocComment(writer, "validationList", validationListParamDocComment); var parameters = new List <CSharpParameter>(); if (includeValueParams) { parameters.Add(new CSharpParameter("bool", "useValueParameter")); } parameters.Add( new CSharpParameter("System.Func<" + (includeValueParams ? field.NullableTypeName : field.TypeName) + ",string,ControlType>", "controlGetter")); if (includeValidationMethodReturnValue.HasValue) { parameters.Add( includeValidationMethodReturnValue.Value ? new CSharpParameter("System.Func<ControlType,PostBackValueDictionary,string,Validator," + field.TypeName + ">", "validationMethod") : new CSharpParameter("System.Action<ControlType,PostBackValueDictionary,string,Validator>", "validationMethod")); } parameters.Add(new CSharpParameter("string", "labelAndSubject", "\"" + getDefaultLabelAndSubject(field) + "\"")); parameters.Add(new CSharpParameter("FormItemLabel", "labelOverride", "null")); if (includeValueParams) { parameters.Add(new CSharpParameter(field.NullableTypeName, "value", field.TypeIs(typeof(string)) ? "\"\"" : "null")); } parameters.Add(new CSharpParameter("int?", "cellSpan", "null")); parameters.Add(new CSharpParameter("TextAlignment", "textAlignment", "TextAlignment.NotSpecified")); if (includeValidationMethodReturnValue.HasValue) { parameters.Add(new CSharpParameter("System.Func<bool>", "validationPredicate", "null")); parameters.Add(new CSharpParameter("System.Action", "validationErrorNotifier", "null")); parameters.Add(new CSharpParameter("System.Action<string,Validator>", "additionalValidationMethod", "null")); parameters.Add(new CSharpParameter("ValidationList", "validationList", "null")); } writer.WriteLine( "public FormItem<ControlType> " + StandardLibraryMethods.GetCSharpIdentifierSimple("Get" + field.PascalCasedName + "FormItem") + "<ControlType>( " + parameters.Select(i => i.MethodSignatureDeclaration).GetCommaDelimitedStringFromCollection() + " ) where ControlType: Control {"); writer.WriteLine(body); writer.WriteLine("}"); }