android-xml 1.2.3 → 1.2.4
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/android-xml/exts.rb +16 -0
- data/lib/android-xml/string.rb +25 -1
- data/lib/android-xml/tag.rb +29 -6
- data/lib/android-xml/version.rb +1 -1
- data/spec/attrs_spec.rb +26 -0
- data/spec/string_spec.rb +36 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4509fa336291a4bd13e096f37d9b23f8b745bd07
|
4
|
+
data.tar.gz: 6ddf6a6eba7193d428d49c7c6a7dfe2f8f802596
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d50edfc8f5555fe8a8bc8b6c68c80ea3a3c2ad717ddebd90e0d69ccde953d8fff36b44e718facb895d938a8e120de9c64a8e5629ff4c9c448c7f9d4896c4bf2
|
7
|
+
data.tar.gz: f655177e4243493085c021fe585abd379b706b08ce5f8b6dd9b56d94ebdd7bc09f0867f92fef286d54879208563bd336fed31ed13c97500d20ad78dc6742456c
|
data/lib/android-xml/exts.rb
CHANGED
@@ -4,6 +4,14 @@ class Numeric
|
|
4
4
|
"#{self}pt"
|
5
5
|
end
|
6
6
|
|
7
|
+
def mm
|
8
|
+
"#{self}mm"
|
9
|
+
end
|
10
|
+
|
11
|
+
def in
|
12
|
+
"#{self}in"
|
13
|
+
end
|
14
|
+
|
7
15
|
def px
|
8
16
|
"#{self}px"
|
9
17
|
end
|
@@ -12,4 +20,12 @@ class Numeric
|
|
12
20
|
"#{self}dp"
|
13
21
|
end
|
14
22
|
|
23
|
+
def dip
|
24
|
+
"#{self}dip"
|
25
|
+
end
|
26
|
+
|
27
|
+
def sp
|
28
|
+
"#{self}sp"
|
29
|
+
end
|
30
|
+
|
15
31
|
end
|
data/lib/android-xml/string.rb
CHANGED
@@ -26,6 +26,30 @@ module AndroidXml
|
|
26
26
|
tag
|
27
27
|
end
|
28
28
|
|
29
|
+
def run_block(&block)
|
30
|
+
text = instance_exec(&block)
|
31
|
+
if text.is_a?(String)
|
32
|
+
text = Tag.format_string(text)
|
33
|
+
end
|
34
|
+
text
|
35
|
+
end
|
36
|
+
|
37
|
+
# isn't there a method that does this for me!?
|
38
|
+
def self.format_string(text)
|
39
|
+
text = text.dup
|
40
|
+
{
|
41
|
+
'\\' => '\\\\',
|
42
|
+
"\n" => '\n',
|
43
|
+
"\t" => '\t',
|
44
|
+
"\b" => '\b',
|
45
|
+
'"' => '\"',
|
46
|
+
"'" => "\\\\'",
|
47
|
+
}.each do |find, replace|
|
48
|
+
text.gsub!(find, replace)
|
49
|
+
end
|
50
|
+
text
|
51
|
+
end
|
52
|
+
|
29
53
|
end
|
30
54
|
|
31
55
|
module_function
|
@@ -34,7 +58,7 @@ module AndroidXml
|
|
34
58
|
diff = Tag.found_strings - Tag.registered_strings
|
35
59
|
unless diff.empty?
|
36
60
|
diff.each do |name|
|
37
|
-
puts " string(name='#{name}') { '#{name}' }"
|
61
|
+
puts " string(name='#{Tag.format_string(name)}') { '#{Tag.format_string(name)}' }"
|
38
62
|
end
|
39
63
|
end
|
40
64
|
end
|
data/lib/android-xml/tag.rb
CHANGED
@@ -50,15 +50,18 @@ module AndroidXml
|
|
50
50
|
attrs.merge!(Setup.tags[@raw_tag][:defaults])
|
51
51
|
attrs.merge!(@attrs)
|
52
52
|
|
53
|
+
format_attrs(@tag, attrs, whitespace)
|
54
|
+
end
|
55
|
+
|
56
|
+
def format_attrs(tag, attrs, whitespace, is_first=true)
|
53
57
|
output = ''
|
54
|
-
is_first = true
|
55
58
|
attrs.each do |key, value|
|
56
59
|
next if value.nil?
|
57
60
|
|
58
61
|
key = key.to_s
|
59
62
|
|
60
|
-
if Setup.tags[
|
61
|
-
xml_key = Setup.tags[
|
63
|
+
if Setup.tags[tag][:attrs].key?(key)
|
64
|
+
xml_key = Setup.tags[tag][:attrs][key]
|
62
65
|
elsif Setup.all_tag[:attrs].key?(key)
|
63
66
|
xml_key = Setup.all_tag[:attrs][key]
|
64
67
|
elsif key.to_s.include?(':')
|
@@ -71,16 +74,32 @@ module AndroidXml
|
|
71
74
|
Tag.found_strings << $1
|
72
75
|
end
|
73
76
|
|
77
|
+
quoted_value = Tag.quote_attr_value(value)
|
74
78
|
if is_first
|
75
|
-
output << " #{xml_key}=\"#{
|
79
|
+
output << " #{xml_key}=\"#{quoted_value}\""
|
76
80
|
is_first = false
|
77
81
|
else
|
78
|
-
output << "\n#{whitespace}#{xml_key}=\"#{
|
82
|
+
output << "\n#{whitespace}#{xml_key}=\"#{quoted_value}\""
|
79
83
|
end
|
80
84
|
end
|
85
|
+
|
81
86
|
output
|
82
87
|
end
|
83
88
|
|
89
|
+
def self.quote_attr_value(value)
|
90
|
+
value = value.to_s.dup
|
91
|
+
{
|
92
|
+
'&' => '&',
|
93
|
+
'\'' => ''',
|
94
|
+
'"' => '"',
|
95
|
+
'<' => '<',
|
96
|
+
'>' => '>',
|
97
|
+
}.each do |find, replace|
|
98
|
+
value.gsub!(find, replace)
|
99
|
+
end
|
100
|
+
value
|
101
|
+
end
|
102
|
+
|
84
103
|
def generate(tab='')
|
85
104
|
whitespace = "#{tab} #{' ' * @tag.length}"
|
86
105
|
output = "#{tab}<#{@tag}#{attrs(whitespace)}"
|
@@ -108,7 +127,7 @@ module AndroidXml
|
|
108
127
|
|
109
128
|
output = ''
|
110
129
|
if @generate
|
111
|
-
text =
|
130
|
+
text = run_block(&@generate)
|
112
131
|
@buffer.each do |tag|
|
113
132
|
output << tag.generate(tab)
|
114
133
|
end
|
@@ -124,6 +143,10 @@ module AndroidXml
|
|
124
143
|
@block_output = output
|
125
144
|
end
|
126
145
|
|
146
|
+
def run_block(&block)
|
147
|
+
instance_exec(&block)
|
148
|
+
end
|
149
|
+
|
127
150
|
def to_s
|
128
151
|
generate
|
129
152
|
end
|
data/lib/android-xml/version.rb
CHANGED
data/spec/attrs_spec.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'android-xml'
|
2
|
+
|
3
|
+
|
4
|
+
describe 'tag attributes' do
|
5
|
+
|
6
|
+
before do
|
7
|
+
AndroidXml.reset
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should generate <any-tag tag="value" />' do
|
11
|
+
xml = AndroidXml.file('tmp/test.xml') do
|
12
|
+
any_tag(tag: "value")
|
13
|
+
end
|
14
|
+
|
15
|
+
expect(xml.to_s).to match %r{<any-tag android:tag="value" />}
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should generate <any-tag tag="value-with-quotes" />' do
|
19
|
+
xml = AndroidXml.file('tmp/test.xml') do
|
20
|
+
any_tag(tag: %q{value-"'<>&-with-quoted})
|
21
|
+
end
|
22
|
+
|
23
|
+
expect(xml.to_s).to match %r{<any-tag android:tag="value-"'<>&-with-quoted" />}
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/spec/string_spec.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'android-xml'
|
2
|
+
|
3
|
+
|
4
|
+
describe AndroidXml do
|
5
|
+
|
6
|
+
before do
|
7
|
+
AndroidXml.reset
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should quote strings' do
|
11
|
+
xml = AndroidXml.file('tmp/test.xml') do
|
12
|
+
string(name: 'registered_string') { "newline \nsingle-quote ' double-quote \" tab\t"}
|
13
|
+
end
|
14
|
+
|
15
|
+
expect(xml.to_s).to include('newline \\nsingle-quote \\\' double-quote \\" tab\\t')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should register strings' do
|
19
|
+
xml = AndroidXml.file('tmp/test.xml') do
|
20
|
+
string(name: 'registered_string') { 'registered'}
|
21
|
+
end
|
22
|
+
|
23
|
+
xml.generate
|
24
|
+
expect(AndroidXml::Tag.registered_strings).to eql(['registered_string'])
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should find strings' do
|
28
|
+
xml = AndroidXml.file('tmp/test.xml') do
|
29
|
+
any_tag(tag: '@string/found_string')
|
30
|
+
end
|
31
|
+
|
32
|
+
xml.generate
|
33
|
+
expect(AndroidXml::Tag.found_strings).to eql(['found_string'])
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: android-xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Colin T.A. Gray
|
@@ -47,11 +47,13 @@ files:
|
|
47
47
|
- spec/android_manifest_spec.rb
|
48
48
|
- spec/android_menu_spec.rb
|
49
49
|
- spec/android_resources_spec.rb
|
50
|
+
- spec/attrs_spec.rb
|
50
51
|
- spec/clone_tag_spec.rb
|
51
52
|
- spec/create_tag_spec.rb
|
52
53
|
- spec/factory_spec.rb
|
53
54
|
- spec/generate_spec.rb
|
54
55
|
- spec/inc_tag_spec.rb
|
56
|
+
- spec/string_spec.rb
|
55
57
|
- spec/write_to_file_spec.rb
|
56
58
|
homepage: https://github.com/colinta/android-xml
|
57
59
|
licenses:
|
@@ -81,9 +83,11 @@ test_files:
|
|
81
83
|
- spec/android_manifest_spec.rb
|
82
84
|
- spec/android_menu_spec.rb
|
83
85
|
- spec/android_resources_spec.rb
|
86
|
+
- spec/attrs_spec.rb
|
84
87
|
- spec/clone_tag_spec.rb
|
85
88
|
- spec/create_tag_spec.rb
|
86
89
|
- spec/factory_spec.rb
|
87
90
|
- spec/generate_spec.rb
|
88
91
|
- spec/inc_tag_spec.rb
|
92
|
+
- spec/string_spec.rb
|
89
93
|
- spec/write_to_file_spec.rb
|