@@ -13,12 +13,12 @@ struct LocalizableStrings : WhiteListedExtensionsResourceType {
13
13
14
14
let filename : String
15
15
let locale : Locale
16
- let dictionary : [ String : ( params : [ StringParam ] , commentValue : String ) ]
16
+ let entries : [ Entry ]
17
17
18
- init ( filename: String , locale: Locale , dictionary : [ String : ( params : [ StringParam ] , commentValue : String ) ] ) {
18
+ init ( filename: String , locale: Locale , entries : [ Entry ] ) {
19
19
self . filename = filename
20
20
self . locale = locale
21
- self . dictionary = dictionary
21
+ self . entries = entries
22
22
}
23
23
24
24
init ( url: NSURL ) throws {
@@ -37,45 +37,56 @@ struct LocalizableStrings : WhiteListedExtensionsResourceType {
37
37
}
38
38
39
39
// Parse dicts from NSDictionary
40
- let dictionary : [ String : ( params : [ StringParam ] , commentValue : String ) ]
40
+ let entries : [ Entry ]
41
41
switch url. pathExtension {
42
42
case " strings " ? :
43
- dictionary = try parseStrings ( String ( contentsOfURL: url) , source: locale. withFilename ( " \( filename) .strings " ) )
43
+ entries = try parseStrings ( String ( contentsOfURL: url) , source: locale. withFilename ( " \( filename) .strings " ) )
44
44
case " stringsdict " ? :
45
- dictionary = try parseStringsdict ( nsDictionary, source: locale. withFilename ( " \( filename) .stringsdict " ) )
45
+ entries = try parseStringsdict ( nsDictionary, source: locale. withFilename ( " \( filename) .stringsdict " ) )
46
46
default :
47
47
throw ResourceParsingError . UnsupportedExtension ( givenExtension: url. pathExtension, supportedExtensions: LocalizableStrings . supportedExtensions)
48
48
}
49
49
50
50
self . filename = filename
51
51
self . locale = locale
52
- self . dictionary = dictionary
52
+ self . entries = entries
53
+ }
54
+
55
+ var keys : [ String ] {
56
+ return entries. map { $0. key }
57
+ }
58
+
59
+ struct Entry {
60
+ let key : String
61
+ let val : String
62
+ let params : [ StringParam ]
63
+ let comment : String ?
53
64
}
54
65
}
55
66
56
- private func parseStrings( stringsFile: String , source: String ) throws -> [ String : ( params: [ StringParam ] , commentValue: String ) ] {
57
- var dictionary : [ String : ( params: [ StringParam ] , commentValue: String ) ] = [ : ]
58
-
59
- for entry in StringsEntry . parse ( stringsFile) {
60
- var params : [ StringParam ] = [ ]
61
-
62
- for part in FormatPart . formatParts ( formatString: entry. val) {
63
- switch part {
64
- case . Reference:
65
- throw ResourceParsingError . ParsingFailed ( " Non-specifier reference in \( source) : \( entry. key) = \( entry. val) " )
66
-
67
- case . Spec( let formatSpecifier) :
68
- params. append ( StringParam ( name: nil , spec: formatSpecifier) )
69
- }
67
+ private func parseStrings( stringsFile: String , source: String ) throws -> [ LocalizableStrings . Entry ] {
68
+ var entries : [ LocalizableStrings . Entry ] = [ ]
69
+
70
+ for parsed in StringsFileEntry . parse ( stringsFile) {
71
+ var params : [ StringParam ] = [ ]
72
+
73
+ for part in FormatPart . formatParts ( formatString: parsed. val) {
74
+ switch part {
75
+ case . Reference:
76
+ throw ResourceParsingError . ParsingFailed ( " Non-specifier reference in \( source) : \( parsed. key) = \( parsed. val) " )
77
+
78
+ case . Spec( let formatSpecifier) :
79
+ params. append ( StringParam ( name: nil , spec: formatSpecifier) )
70
80
}
71
-
72
- dictionary [ entry. key] = ( params, entry. val)
81
+ }
82
+
83
+ entries. append ( LocalizableStrings . Entry ( key: parsed. key, val: parsed. val, params: params, comment: parsed. comment) )
73
84
}
74
-
75
- return dictionary
85
+
86
+ return entries
76
87
}
77
88
78
- private struct StringsEntry {
89
+ private struct StringsFileEntry {
79
90
let comment : String ?
80
91
let key : String
81
92
let val : String
@@ -113,15 +124,15 @@ private struct StringsEntry {
113
124
val = extract ( match. rangeAtIndex ( 4 ) , unescape: true ) !
114
125
}
115
126
116
- static func parse( stringsFileContents: String ) -> [ StringsEntry ] {
127
+ static func parse( stringsFileContents: String ) -> [ StringsFileEntry ] {
117
128
return regex. matchesInString ( stringsFileContents, options: [ ] , range: NSRange ( 0 ..< stringsFileContents. utf16. count) )
118
- . map { StringsEntry ( source: stringsFileContents, match: $0) }
129
+ . map { StringsFileEntry ( source: stringsFileContents, match: $0) }
119
130
}
120
131
}
121
132
122
- private func parseStringsdict( nsDictionary: NSDictionary , source: String ) throws -> [ String : ( params : [ StringParam ] , commentValue : String ) ] {
133
+ private func parseStringsdict( nsDictionary: NSDictionary , source: String ) throws -> [ LocalizableStrings . Entry ] {
123
134
124
- var dictionary : [ String : ( params : [ StringParam ] , commentValue : String ) ] = [ : ]
135
+ var entries : [ LocalizableStrings . Entry ] = [ ]
125
136
126
137
for ( key, obj) in nsDictionary {
127
138
if let
@@ -134,7 +145,7 @@ private func parseStringsdict(nsDictionary: NSDictionary, source: String) throws
134
145
135
146
do {
136
147
let params = try parseStringsdictParams ( localizedFormat, dict: dict)
137
- dictionary [ key] = ( params, localizedFormat )
148
+ entries . append ( LocalizableStrings . Entry ( key: key , val : localizedFormat , params: params , comment : nil ) )
138
149
}
139
150
catch ResourceParsingError . ParsingFailed( let message) {
140
151
warn ( " \( message) in ' \( key) ' \( source) " )
@@ -145,7 +156,7 @@ private func parseStringsdict(nsDictionary: NSDictionary, source: String) throws
145
156
}
146
157
}
147
158
148
- return dictionary
159
+ return entries
149
160
}
150
161
151
162
private func parseStringsdictParams( format: String, dict: [ String: AnyObject] ) throws -> [ StringParam] {
0 commit comments