-
Notifications
You must be signed in to change notification settings - Fork 183
/
ResXCodeBuilder.cs
86 lines (69 loc) · 3.01 KB
/
ResXCodeBuilder.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// ResXCodeBuilder.cs
// Script#/Core/Build
// This source code is subject to terms and conditions of the Apache License, Version 2.0.
//
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace ScriptSharp.Generators {
public sealed class ResXCodeBuilder {
private static readonly string ResourcesHeader =
@"//------------------------------------------------------------------------------
// <auto-generated>
// Resources.g.cs
// Do not edit directly. This file has been auto-generated from .resx resources.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.CodeDom.Compiler;
using System.Runtime.CompilerServices;
namespace {0} {{
";
private static readonly string ResourcesFooter =
@"}";
private StringBuilder _codeBuilder;
public void Start(string namespaceName) {
_codeBuilder = new StringBuilder();
_codeBuilder.AppendFormat(ResourcesHeader, namespaceName);
}
public string End() {
_codeBuilder.AppendLine(ResourcesFooter);
return _codeBuilder.ToString();
}
public void GenerateCode(string resourceFileName, string resourceFileContent) {
if (IsLocalizedResourceFile(resourceFileName)) {
return;
}
List<ResXItem> resourceItems = ResXParser.ParseResxMarkup(resourceFileContent);
if (resourceItems.Count == 0) {
return;
}
string className = Path.GetFileNameWithoutExtension(resourceFileName);
_codeBuilder.AppendLine();
_codeBuilder.AppendFormat(" /// <summary>{0} resources class</summary>", className);
_codeBuilder.AppendLine();
_codeBuilder.AppendLine(" [Resources]");
_codeBuilder.AppendFormat(" [GeneratedCodeAttribute(\"{0}\", \"{1}\")]",
this.GetType().Name,
typeof(ResXCodeBuilder).Assembly.GetName().Version.ToString());
_codeBuilder.AppendLine();
_codeBuilder.AppendFormat(" internal static class {0} {{", className);
_codeBuilder.AppendLine();
foreach (ResXItem resourceItem in resourceItems) {
_codeBuilder.AppendLine();
if (resourceItem.Comment.Length != 0) {
_codeBuilder.AppendFormat(" /// <summary>{0}</summary>", resourceItem.Comment);
_codeBuilder.AppendLine();
}
_codeBuilder.AppendFormat(" public static readonly string {0} = null;", resourceItem.Name);
_codeBuilder.AppendLine();
}
_codeBuilder.AppendLine(" }");
}
private static bool IsLocalizedResourceFile(string resourceFileName) {
string locale = ResourceFile.GetLocale(resourceFileName);
return (String.IsNullOrEmpty(locale) == false);
}
}
}