android-xml 1.2.3 → 1.2.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|