@levels = ('Log', 'Trace','Debug','Info','Warn','Error','Fatal'); @clitypes = ('bool','char','byte','string','int','long','float','double','decimal','object'); @nonclstypes = ('sbyte','uint','ulong'); $loggercs = "../src/NLog/Logger.v1.cs"; open(IN, "<$loggercs"); open(OUT, ">$loggercs.tmp"); while () { print OUT; last if (m/the following code has been automatically generated by a PERL/); } for $level (@levels) { if ($level eq "Log") { $level2 = "level"; $level3 = "specified"; $isenabled = "this.IsEnabled(level)"; $arg0 = "LogLevel level, "; $param0 = qq!\n /// The log level.!; } else { $level2 = "LogLevel.$level"; $level3 = "$level"; $isenabled = "this.Is${level}Enabled"; $arg0 = ""; $param0 = ""; } print OUT < /// Writes the diagnostic message at the $level3 level. /// $param0 /// A to be written. [EditorBrowsable(EditorBrowsableState.Never)] public void $level(${arg0}object obj) { if ($isenabled) { this.WriteToTargets($level2, "{0}", new object[] { obj }); } } /// /// Writes the diagnostic message at the $level3 level. /// $param0 /// An IFormatProvider that supplies culture-specific formatting information. /// A to be written. [EditorBrowsable(EditorBrowsableState.Never)] public void $level(${arg0}IFormatProvider formatProvider, object obj) { if ($isenabled) { this.WriteToTargets($level2, formatProvider, "{0}", new[] { obj }); } } /// /// Writes the diagnostic message at the $level3 level using the specified parameters. /// $param0 /// A containing format items. /// First argument to format. /// Second argument to format. [EditorBrowsable(EditorBrowsableState.Never)] public void $level(${arg0}string message, object arg1, object arg2) { if ($isenabled) { this.WriteToTargets($level2, message, new[] { arg1, arg2 }); } } /// /// Writes the diagnostic message at the $level3 level using the specified parameters. /// $param0 /// A containing format items. /// First argument to format. /// Second argument to format. /// Third argument to format. [EditorBrowsable(EditorBrowsableState.Never)] public void $level(${arg0}string message, object arg1, object arg2, object arg3) { if ($isenabled) { this.WriteToTargets($level2, message, new[] { arg1, arg2, arg3 }); } } EOT for $t (@clitypes) { print OUT < /// Writes the diagnostic message at the $level3 level using the specified value as a parameter and formatting it with the supplied format provider. /// $param0 /// An IFormatProvider that supplies culture-specific formatting information. /// A containing one format item. /// The argument to format. [EditorBrowsable(EditorBrowsableState.Never)] public void $level(${arg0}IFormatProvider formatProvider, string message, $t argument) { if ($isenabled) { this.WriteToTargets($level2, formatProvider, message, new object[] { argument }); } } /// /// Writes the diagnostic message at the $level3 level using the specified value as a parameter. /// $param0 /// A containing one format item. /// The argument to format. [EditorBrowsable(EditorBrowsableState.Never)] public void $level(${arg0}string message, $t argument) { if ($isenabled) { this.WriteToTargets($level2, message, new object[] { argument }); } } EOT } for $t (@nonclstypes) { print OUT < /// Writes the diagnostic message at the $level3 level using the specified value as a parameter and formatting it with the supplied format provider. /// $param0 /// An IFormatProvider that supplies culture-specific formatting information. /// A containing one format item. /// The argument to format. [CLSCompliant(false)] [EditorBrowsable(EditorBrowsableState.Never)] public void $level(${arg0}IFormatProvider formatProvider, string message, $t argument) { if ($isenabled) { this.WriteToTargets($level2, formatProvider, message, new object[] { argument }); } } /// /// Writes the diagnostic message at the $level3 level using the specified value as a parameter. /// $param0 /// A containing one format item. /// The argument to format. [CLSCompliant(false)] [EditorBrowsable(EditorBrowsableState.Never)] public void $level(${arg0}string message, $t argument) { if ($isenabled) { this.WriteToTargets($level2, message, new object[] { argument }); } } EOT } print OUT <) { if (m/end of generated code/) { print OUT; last; } } while () { print OUT; } close(OUT); close(IN); unlink($loggercs); rename("$loggercs.tmp", "$loggercs");