Commit
parameters
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,11 +22,12 @@ | |
var projectDirectory = Path.GetDirectoryName(templateProjectItem.ContainingProject.FullName); | ||
var ttDirectory = Path.Combine(projectDirectory, "Properties"); | ||
var projectName = Path.GetFileName(projectDirectory.TrimEnd('/')); | ||
var namedParameterMatcher = new Regex(@"\{([a-z]\w+)\}", RegexOptions.IgnoreCase); | ||
var numberParameterMatcher = new Regex(@"\{(\d+)\}"); | ||
|
||
foreach (var resxFile in Directory.EnumerateFiles(projectDirectory, "*.resx", SearchOption.AllDirectories)) | ||
{ | ||
var fileName = Path.GetFileNameWithoutExtension(resxFile); | ||
var parameterMatcher = new Regex(@"\{([a-z]\w+)\}"); | ||
var resourceStrings = new List<ResourceData>(); | ||
|
||
using (var resxReader = new ResXResourceReader(resxFile)) | ||
|
@@ -38,20 +39,29 @@ | |
var node = (ResXDataNode)entry.Value; | ||
var value = (string)node.GetValue((System.ComponentModel.Design.ITypeResolutionService)null); | ||
|
||
var arguments | ||
= parameterMatcher | ||
.Matches(value) | ||
.Cast<Match>() | ||
.Select(m => m.Groups[1].Value) | ||
.Distinct() | ||
.ToList(); | ||
bool usingNamedArgs = true; | ||
var match = namedParameterMatcher.Matches(value); | ||
if (match.Count == 0) | ||
This comment has been minimized.
Sorry, something went wrong. |
||
{ | ||
usingNamedArgs = false; | ||
match = numberParameterMatcher.Matches(value); | ||
} | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
pranavkm
Author
Contributor
|
||
|
||
var arguments = match.Cast<Match>() | ||
This comment has been minimized.
Sorry, something went wrong.
dougbu
Member
|
||
.Select(m => m.Groups[1].Value) | ||
.Distinct(); | ||
if (!usingNamedArgs) | ||
{ | ||
arguments = arguments.OrderBy(Convert.ToInt32); | ||
} | ||
|
||
resourceStrings.Add( | ||
new ResourceData | ||
{ | ||
Name = node.Name, | ||
Value = value, | ||
Arguments = arguments | ||
Arguments = arguments.ToList(), | ||
UsingNamedArgs = usingNamedArgs | ||
}); | ||
} | ||
} | ||
|
@@ -94,24 +104,29 @@ namespace {0} | |
else | ||
{ | ||
GenerationEnvironment.AppendFormat( | ||
@" return string.Format(CultureInfo.CurrentCulture, GetString(""{0}"", {2}), {1});", | ||
resourceString.Name, resourceString.FormatArguments, resourceString.ArgumentNames); | ||
@" return string.Format(CultureInfo.CurrentCulture, GetString(""{0}""{1}), {2});", | ||
resourceString.Name, | ||
resourceString.UsingNamedArgs ? ", " + resourceString.FormatArguments : null, | ||
resourceString.ArgumentNames); | ||
} | ||
|
||
GenerationEnvironment.AppendLine().Append( | ||
@" }").AppendLine(); | ||
} | ||
|
||
GenerationEnvironment.Append(@" | ||
private static string GetString(string name, params string[] argumentNames) | ||
private static string GetString(string name, params string[] formatterNames) | ||
{ | ||
var value = _resourceManager.GetString(name); | ||
|
||
System.Diagnostics.Debug.Assert(value != null); | ||
|
||
for (var i = 0; i < argumentNames.Length; i++) | ||
if (formatterNames != null) | ||
{ | ||
value = value.Replace(""{"" + argumentNames[i] + ""}"", ""{"" + i + ""}""); | ||
for (var i = 0; i < formatterNames.Length; i++) | ||
{ | ||
value = value.Replace(""{"" + formatterNames[i] + ""}"", ""{"" + i + ""}""); | ||
} | ||
} | ||
|
||
return value; | ||
|
@@ -136,20 +151,27 @@ private class ResourceData | |
public string Name { get; set; } | ||
public string Value { get; set; } | ||
public List<string> Arguments { get; set; } | ||
|
||
public bool UsingNamedArgs { get; set; } | ||
|
||
public string FormatArguments | ||
{ | ||
get { return string.Join(", ", Arguments); } | ||
get { return string.Join(", ", Arguments.Select(a => "\"" + a + "\"")); } | ||
} | ||
|
||
public string ArgumentNames | ||
{ | ||
get { return string.Join(", ", Arguments.Select(a => "\"" + a + "\"")); } | ||
get { return string.Join(", ", Arguments.Select(GetArgName)); } | ||
} | ||
|
||
public string Parameters | ||
{ | ||
get { return "(" + string.Join(", ", Arguments.Select(a => "object " + a)) + ")"; } | ||
get { return "(" + string.Join(", ", Arguments.Select(a => "object " + GetArgName(a))) + ")"; } | ||
} | ||
|
||
public string GetArgName(string name) | ||
{ | ||
return UsingNamedArgs ? name : 'p' + name; | ||
} | ||
} | ||
|
||
|
Believe match.Count can be >0 when match.Success is false. Probably best to check both.