dotstrings 0.1.1 → 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/.github/workflows/ci.yml +1 -0
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +18 -0
- data/Gemfile.lock +1 -1
- data/lib/dotstrings/file.rb +6 -2
- data/lib/dotstrings/item.rb +2 -2
- data/lib/dotstrings/parser.rb +21 -5
- data/lib/dotstrings/version.rb +1 -1
- data/test/test_file.rb +17 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 605ff8ed35fcfcbd91f2fc33a4b53e69b614aab962de1c32c1d616f957ee1916
|
4
|
+
data.tar.gz: dddf00d461a893a4ff4e97c04fcc87617241e42189d0284b22e4ab98313ed25a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a47fbb334a228e6642d7d6b3250b81ab7c7e239be8fb6ca92ba7877dfe9eb6ac0d3ba2bebe4176477afa9b825e4ce61af4a8d555b83e2a29ed6c176a6d392c90
|
7
|
+
data.tar.gz: fa824b2c3c59bee05bb64d59508a6bff112a551d37d6bbc198913433fc8b332a75a17af84a5524a944126fd6e38df8bef008615df303565e729556169eb21bc8
|
data/.github/workflows/ci.yml
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## [v0.2.0] - 2022-07-17
|
4
|
+
### Changed
|
5
|
+
* Made some state transitions more strict.
|
6
|
+
* Added option to ignore comments when serializing.
|
7
|
+
|
8
|
+
## [v0.1.1] - 2022-07-12
|
9
|
+
### Changed
|
10
|
+
* Escaping single quotes is now optional.
|
11
|
+
|
12
|
+
## [v0.1.0] - 2022-07-06
|
13
|
+
### Added
|
14
|
+
* Initial release.
|
15
|
+
|
16
|
+
[v0.2.0]: https://github.com/raymondjavaxx/dotstrings/releases/tag/v0.2.0
|
17
|
+
[v0.1.1]: https://github.com/raymondjavaxx/dotstrings/releases/tag/v0.1.1
|
18
|
+
[v0.1.0]: https://github.com/raymondjavaxx/dotstrings/releases/tag/v0.1.0
|
data/Gemfile.lock
CHANGED
data/lib/dotstrings/file.rb
CHANGED
@@ -48,11 +48,15 @@ module DotStrings
|
|
48
48
|
@items.delete_if { |item| item.key == key }
|
49
49
|
end
|
50
50
|
|
51
|
-
def to_s(escape_single_quotes: false)
|
51
|
+
def to_s(escape_single_quotes: false, comments: true)
|
52
52
|
result = []
|
53
53
|
|
54
54
|
@items.each do |item|
|
55
|
-
result << item.to_s(
|
55
|
+
result << item.to_s(
|
56
|
+
escape_single_quotes: escape_single_quotes,
|
57
|
+
include_comment: comments
|
58
|
+
)
|
59
|
+
|
56
60
|
result << ''
|
57
61
|
end
|
58
62
|
|
data/lib/dotstrings/item.rb
CHANGED
@@ -10,10 +10,10 @@ module DotStrings
|
|
10
10
|
@value = value
|
11
11
|
end
|
12
12
|
|
13
|
-
def to_s(escape_single_quotes: false)
|
13
|
+
def to_s(escape_single_quotes: false, include_comment: true)
|
14
14
|
result = []
|
15
15
|
|
16
|
-
result << "/* #{comment} */" unless comment.nil?
|
16
|
+
result << "/* #{comment} */" unless comment.nil? || !include_comment
|
17
17
|
result << format('"%<key>s" = "%<value>s";', {
|
18
18
|
key: serialize_string(key, escape_single_quotes: escape_single_quotes),
|
19
19
|
value: serialize_string(value, escape_single_quotes: escape_single_quotes)
|
data/lib/dotstrings/parser.rb
CHANGED
@@ -95,19 +95,27 @@ module DotStrings
|
|
95
95
|
@buffer << ch
|
96
96
|
end
|
97
97
|
when STATE_COMMENT_END
|
98
|
-
|
98
|
+
if ch == TOK_QUOTE
|
99
|
+
@state = STATE_KEY
|
100
|
+
else
|
101
|
+
raise_error("Unexpected character '#{ch}'") unless whitespace?(ch)
|
102
|
+
end
|
99
103
|
when STATE_KEY
|
100
104
|
parse_string(ch) do |key|
|
101
105
|
@current_key = key
|
102
106
|
@state = STATE_KEY_END
|
103
107
|
end
|
104
108
|
when STATE_KEY_END
|
105
|
-
|
109
|
+
if ch == TOK_EQUALS
|
110
|
+
@state = STATE_VALUE_SEPARATOR
|
111
|
+
else
|
112
|
+
raise_error("Unexpected character '#{ch}', expecting '#{TOK_EQUALS}'") unless whitespace?(ch)
|
113
|
+
end
|
106
114
|
when STATE_VALUE_SEPARATOR
|
107
115
|
if ch == TOK_QUOTE
|
108
116
|
@state = STATE_VALUE
|
109
117
|
else
|
110
|
-
raise_error("Unexpected character '#{ch}'") unless ch
|
118
|
+
raise_error("Unexpected character '#{ch}'") unless whitespace?(ch)
|
111
119
|
end
|
112
120
|
when STATE_VALUE
|
113
121
|
parse_string(ch) do |value|
|
@@ -121,7 +129,11 @@ module DotStrings
|
|
121
129
|
))
|
122
130
|
end
|
123
131
|
when STATE_VALUE_END
|
124
|
-
|
132
|
+
if ch == TOK_SEMICOLON
|
133
|
+
@state = STATE_START
|
134
|
+
else
|
135
|
+
raise_error("Unexpected character '#{ch}', expecting '#{TOK_SEMICOLON}'") unless whitespace?(ch)
|
136
|
+
end
|
125
137
|
when STATE_UNICODE
|
126
138
|
parse_unicode(ch) do |unicode_ch|
|
127
139
|
@buffer << unicode_ch
|
@@ -236,7 +248,7 @@ module DotStrings
|
|
236
248
|
@state = STATE_KEY
|
237
249
|
reset_state
|
238
250
|
else
|
239
|
-
raise_error("Unexpected character '#{ch}'") unless ch
|
251
|
+
raise_error("Unexpected character '#{ch}'") unless whitespace?(ch)
|
240
252
|
end
|
241
253
|
end
|
242
254
|
|
@@ -245,6 +257,10 @@ module DotStrings
|
|
245
257
|
@current_key = nil
|
246
258
|
@current_value = nil
|
247
259
|
end
|
260
|
+
|
261
|
+
def whitespace?(ch)
|
262
|
+
ch.strip.empty?
|
263
|
+
end
|
248
264
|
end
|
249
265
|
# rubocop:enable Metrics/ClassLength
|
250
266
|
end
|
data/lib/dotstrings/version.rb
CHANGED
data/test/test_file.rb
CHANGED
@@ -38,14 +38,12 @@ class TestFile < MiniTest::Test
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_to_string
|
41
|
-
|
41
|
+
file = DotStrings::File.new([
|
42
42
|
DotStrings::Item.new(comment: 'Comment 1', key: 'key 1', value: 'value 1'),
|
43
43
|
DotStrings::Item.new(comment: 'Comment 2', key: 'key 2', value: 'value 2'),
|
44
44
|
DotStrings::Item.new(comment: 'Comment 3', key: 'key 3', value: '👻'),
|
45
45
|
DotStrings::Item.new(comment: 'Comment 4', key: "\"'\t\n\r\0", value: "\"'\t\n\r\0")
|
46
|
-
]
|
47
|
-
|
48
|
-
file = DotStrings::File.new(items)
|
46
|
+
])
|
49
47
|
|
50
48
|
expected = <<~'END_OF_DOCUMENT'
|
51
49
|
/* Comment 1 */
|
@@ -64,6 +62,21 @@ class TestFile < MiniTest::Test
|
|
64
62
|
assert_equal expected, file.to_s
|
65
63
|
end
|
66
64
|
|
65
|
+
def test_to_string_no_comments
|
66
|
+
file = DotStrings::File.new([
|
67
|
+
DotStrings::Item.new(comment: 'Comment 1', key: 'key 1', value: 'value 1'),
|
68
|
+
DotStrings::Item.new(comment: 'Comment 2', key: 'key 2', value: 'value 2')
|
69
|
+
])
|
70
|
+
|
71
|
+
expected = <<~'END_OF_DOCUMENT'
|
72
|
+
"key 1" = "value 1";
|
73
|
+
|
74
|
+
"key 2" = "value 2";
|
75
|
+
END_OF_DOCUMENT
|
76
|
+
|
77
|
+
assert_equal expected, file.to_s(comments: false)
|
78
|
+
end
|
79
|
+
|
67
80
|
def test_to_string_can_escape_single_quotes
|
68
81
|
items = [
|
69
82
|
DotStrings::Item.new(comment: 'Comment', key: "key'", value: "value'")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dotstrings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ramon Torres
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- ".github/workflows/ci.yml"
|
107
107
|
- ".gitignore"
|
108
108
|
- ".rubocop.yml"
|
109
|
+
- CHANGELOG.md
|
109
110
|
- Gemfile
|
110
111
|
- Gemfile.lock
|
111
112
|
- LICENSE
|
@@ -154,8 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
155
|
- !ruby/object:Gem::Version
|
155
156
|
version: '0'
|
156
157
|
requirements: []
|
157
|
-
|
158
|
-
rubygems_version: 2.7.6
|
158
|
+
rubygems_version: 3.0.1
|
159
159
|
signing_key:
|
160
160
|
specification_version: 4
|
161
161
|
summary: Parse and create .strings files used in localization of iOS and macOS apps.
|