swift_twine_formatter 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/formatter.rb +103 -0
- data/lib/swift_twine_formatter.rb +1 -0
- metadata +11 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5af7fc7a12fbf3bd74e7528d479d82f944c6e1739d9680fee8f20a41f9aefd59
|
4
|
+
data.tar.gz: ff42a10cd9f7b34d6b061a2ea24872b2a6d8d174aba80ab44f4cbfb1dbc544e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a229f26a7c1f6f90c7d3ec18d051feaf646b0361b24b5cccfc7cc2818f6b76793103d77e570586ddec232aa5e26d58fcbaa751094e6067a3eed93d1eb09e01e7
|
7
|
+
data.tar.gz: 255b479da399d1d0219adcfd40d7e6f07729628e32c1183df0850e4f371f5b95d9e4254b891269856d5e1fcb3eea207664381f0c700776d5a08b55014ef6509e
|
data/lib/formatter.rb
CHANGED
@@ -6,6 +6,11 @@
|
|
6
6
|
module Twine
|
7
7
|
module Formatters
|
8
8
|
class SwiftFormatter < Abstract
|
9
|
+
|
10
|
+
PLACEHOLDER_FLAGS_WIDTH_PRECISION_LENGTH = '([-+0#])?(\d+|\*)?(\.(\d+|\*))?(hh?|ll?|L|z|j|t|q)?'
|
11
|
+
PLACEHOLDER_PARAMETER_FLAGS_WIDTH_PRECISION_LENGTH = '(\d+\$)?' + PLACEHOLDER_FLAGS_WIDTH_PRECISION_LENGTH
|
12
|
+
PLACEHOLDER_TYPES = '[diufFeEgGxXoscpaA@]'
|
13
|
+
|
9
14
|
def format_name
|
10
15
|
'swift'
|
11
16
|
end
|
@@ -89,6 +94,104 @@ module Twine
|
|
89
94
|
end
|
90
95
|
|
91
96
|
def format_value(value)
|
97
|
+
escape_quotes(value)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class SwiftEscapingFormatter < Abstract
|
102
|
+
|
103
|
+
PLACEHOLDER_FLAGS_WIDTH_PRECISION_LENGTH = '([-+0#])?(\d+|\*)?(\.(\d+|\*))?(hh?|ll?|L|z|j|t|q)?'
|
104
|
+
PLACEHOLDER_PARAMETER_FLAGS_WIDTH_PRECISION_LENGTH = '(\d+\$)?' + PLACEHOLDER_FLAGS_WIDTH_PRECISION_LENGTH
|
105
|
+
PLACEHOLDER_TYPES = '[diufFeEgGxXoscpaA@]'
|
106
|
+
|
107
|
+
def format_name
|
108
|
+
'swift-escaping'
|
109
|
+
end
|
110
|
+
|
111
|
+
def extension
|
112
|
+
'.strings'
|
113
|
+
end
|
114
|
+
|
115
|
+
def can_handle_directory?(path)
|
116
|
+
Dir.entries(path).any? { |item| /^.+\.lproj$/.match(item) }
|
117
|
+
end
|
118
|
+
|
119
|
+
def default_file_name
|
120
|
+
'Localizable.strings'
|
121
|
+
end
|
122
|
+
|
123
|
+
def determine_language_given_path(path)
|
124
|
+
path_arr = path.split(File::SEPARATOR)
|
125
|
+
path_arr.each do |segment|
|
126
|
+
match = /^(.+)\.lproj$/.match(segment)
|
127
|
+
if match
|
128
|
+
if match[1] == "Base"
|
129
|
+
return @options[:developer_language]
|
130
|
+
else
|
131
|
+
return match[1]
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
return super
|
137
|
+
end
|
138
|
+
|
139
|
+
def output_path_for_language(lang)
|
140
|
+
"#{lang}.lproj"
|
141
|
+
end
|
142
|
+
|
143
|
+
def read(io, lang)
|
144
|
+
last_comment = nil
|
145
|
+
while line = io.gets
|
146
|
+
# matches a `key = "value"` line, where key may be quoted or unquoted. The former may also contain escaped characters
|
147
|
+
match = /^\s*((?:"(?:[^"\\]|\\.)+")|(?:[^"\s=]+))\s*=\s*"((?:[^"\\]|\\.)*)"/.match(line)
|
148
|
+
if match
|
149
|
+
key = match[1]
|
150
|
+
key = key[1..-2] if key[0] == '"' and key[-1] == '"'
|
151
|
+
key.gsub!('\\"', '"')
|
152
|
+
value = match[2]
|
153
|
+
value.gsub!('\\"', '"')
|
154
|
+
set_translation_for_key(key, lang, value)
|
155
|
+
if last_comment
|
156
|
+
set_comment_for_key(key, last_comment)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
match = /\/\* (.*) \*\//.match(line)
|
161
|
+
if match
|
162
|
+
last_comment = match[1]
|
163
|
+
else
|
164
|
+
last_comment = nil
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def format_header(lang)
|
170
|
+
"//\n// Apple Strings File\n// Generated by Twine #{Twine::VERSION}\n//\n// Language: #{lang}\n//"
|
171
|
+
end
|
172
|
+
|
173
|
+
def format_section_header(section)
|
174
|
+
"// MARK: - #{section.name}\n"
|
175
|
+
end
|
176
|
+
|
177
|
+
def key_value_pattern
|
178
|
+
"\"%{key}\" = \"%{value}\";"
|
179
|
+
end
|
180
|
+
|
181
|
+
def format_comment(definition, lang)
|
182
|
+
"/* #{definition.comment.gsub('*/', '* /')} */\n" if definition.comment
|
183
|
+
end
|
184
|
+
|
185
|
+
def format_key(key)
|
186
|
+
escape_quotes(key)
|
187
|
+
end
|
188
|
+
|
189
|
+
def format_value(value)
|
190
|
+
# added escaping for % (% -> %%) to support SwiftGen
|
191
|
+
placeholder_syntax = PLACEHOLDER_PARAMETER_FLAGS_WIDTH_PRECISION_LENGTH + PLACEHOLDER_TYPES
|
192
|
+
single_percent_regex = /([^%])(%)(?!(%|#{placeholder_syntax}))/
|
193
|
+
value.gsub! single_percent_regex, '\1%%'
|
194
|
+
|
92
195
|
escape_quotes(value)
|
93
196
|
end
|
94
197
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swift_twine_formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergei Romashenko
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: twine
|
@@ -24,7 +24,8 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.1.3
|
27
|
-
description: Plugin to generate .strings files with
|
27
|
+
description: Plugin to generate .strings files with swift (SwiftGen compatible) comments
|
28
|
+
and marks format, and escaping percent symbol.
|
28
29
|
email:
|
29
30
|
- romashenko.sergey@gmail.com
|
30
31
|
executables: []
|
@@ -33,11 +34,11 @@ extra_rdoc_files: []
|
|
33
34
|
files:
|
34
35
|
- lib/formatter.rb
|
35
36
|
- lib/swift_twine_formatter.rb
|
36
|
-
homepage:
|
37
|
+
homepage: https://github.com/sergeirr/swift_twine_formatter
|
37
38
|
licenses:
|
38
39
|
- MIT
|
39
40
|
metadata: {}
|
40
|
-
post_install_message:
|
41
|
+
post_install_message:
|
41
42
|
rdoc_options: []
|
42
43
|
require_paths:
|
43
44
|
- lib
|
@@ -52,8 +53,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
52
53
|
- !ruby/object:Gem::Version
|
53
54
|
version: '0'
|
54
55
|
requirements: []
|
55
|
-
rubygems_version: 3.4.
|
56
|
-
signing_key:
|
56
|
+
rubygems_version: 3.4.13
|
57
|
+
signing_key:
|
57
58
|
specification_version: 4
|
58
|
-
summary: Plugin to generate .strings files with
|
59
|
+
summary: Plugin to generate .strings files with swift (SwiftGen compatible) comments
|
60
|
+
and marks format, and escaping percent symbol
|
59
61
|
test_files: []
|