duxml 0.8.8 → 0.8.9

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/bin/validate_xml +30 -30
  3. data/lib/duxml.rb +76 -76
  4. data/lib/duxml/doc.rb +108 -91
  5. data/lib/duxml/doc/element.rb +250 -250
  6. data/lib/duxml/doc/lazy_ox.rb +167 -167
  7. data/lib/duxml/doc/node_set.rb +38 -38
  8. data/lib/duxml/meta.rb +72 -72
  9. data/lib/duxml/meta/grammar.rb +133 -133
  10. data/lib/duxml/meta/grammar/pattern.rb +111 -111
  11. data/lib/duxml/meta/grammar/pattern/attr_name_pattern.rb +36 -36
  12. data/lib/duxml/meta/grammar/pattern/attr_val_pattern.rb +36 -36
  13. data/lib/duxml/meta/grammar/pattern/child_pattern.rb +60 -60
  14. data/lib/duxml/meta/grammar/pattern/text_pattern.rb +31 -31
  15. data/lib/duxml/meta/grammar/pattern_maker.rb +68 -68
  16. data/lib/duxml/meta/grammar/relax_ng.rb +39 -39
  17. data/lib/duxml/meta/grammar/relax_ng/attrs_rule.rb +58 -58
  18. data/lib/duxml/meta/grammar/relax_ng/children_rule.rb +82 -82
  19. data/lib/duxml/meta/grammar/relax_ng/value_rule.rb +44 -44
  20. data/lib/duxml/meta/grammar/rule.rb +58 -58
  21. data/lib/duxml/meta/grammar/rule/attrs_rule.rb +77 -77
  22. data/lib/duxml/meta/grammar/rule/children_rule.rb +135 -135
  23. data/lib/duxml/meta/grammar/rule/text_rule.rb +39 -39
  24. data/lib/duxml/meta/grammar/rule/value_rule.rb +110 -110
  25. data/lib/duxml/meta/grammar/spreadsheet.rb +34 -34
  26. data/lib/duxml/meta/history.rb +88 -88
  27. data/lib/duxml/meta/history/add.rb +30 -30
  28. data/lib/duxml/meta/history/change.rb +70 -70
  29. data/lib/duxml/meta/history/change_attr.rb +33 -33
  30. data/lib/duxml/meta/history/change_text.rb +32 -32
  31. data/lib/duxml/meta/history/error.rb +24 -24
  32. data/lib/duxml/meta/history/new_attr.rb +32 -32
  33. data/lib/duxml/meta/history/new_text.rb +36 -36
  34. data/lib/duxml/meta/history/qualify_error.rb +21 -21
  35. data/lib/duxml/meta/history/remove.rb +27 -27
  36. data/lib/duxml/meta/history/undo.rb +23 -23
  37. data/lib/duxml/meta/history/validate_error.rb +20 -20
  38. data/lib/duxml/reportable.rb +28 -28
  39. data/lib/duxml/ruby_ext/fixnum.rb +55 -55
  40. data/lib/duxml/ruby_ext/module.rb +11 -11
  41. data/lib/duxml/ruby_ext/object.rb +13 -13
  42. data/lib/duxml/ruby_ext/regexp.rb +19 -19
  43. data/lib/duxml/ruby_ext/string.rb +37 -37
  44. data/lib/duxml/saxer.rb +75 -75
  45. metadata +12 -12
@@ -1,14 +1,14 @@
1
- # Copyright (c) 2016 Freescale Semiconductor Inc.
2
-
3
- require File.expand_path(File.dirname(__FILE__) + '/string')
4
-
5
- class Object
6
- def simple_name
7
- self.class.to_s.split('::').last
8
- end
9
-
10
- def simple_module
11
- a = self.class.to_s.split('::')
12
- a.size > 1 ? a[-2] : 'Module'
13
- end
1
+ # Copyright (c) 2016 Freescale Semiconductor Inc.
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + '/string')
4
+
5
+ class Object
6
+ def simple_name
7
+ self.class.to_s.split('::').last
8
+ end
9
+
10
+ def simple_module
11
+ a = self.class.to_s.split('::')
12
+ a.size > 1 ? a[-2] : 'Module'
13
+ end
14
14
  end
@@ -1,20 +1,20 @@
1
- # Copyright (c) 2016 Freescale Semiconductor Inc.
2
-
3
- class Regexp
4
- class << self
5
- # @return [Regexp] C identifier e.g. ident_ifier0, excluding 'true' and 'false'
6
- def identifier
7
- /(?:(?!true|false))\b([a-zA-Z_][a-zA-Z0-9_]*)\b/
8
- end
9
-
10
- # @return [Regexp] XML NMTOKEN e.g xml:attribute, also-valid, CDATA
11
- def nmtoken
12
- /(?!\s)([a-zA-Z0-9_\-.:]*)(?!\s)/
13
- end
14
-
15
- # @return [Regexp] Ruby constant e.g. Constant, CONSTANT
16
- def constant
17
- /\b([A-Z][a-zA-Z0-9_]*)\b/
18
- end
19
- end
1
+ # Copyright (c) 2016 Freescale Semiconductor Inc.
2
+
3
+ class Regexp
4
+ class << self
5
+ # @return [Regexp] C identifier e.g. ident_ifier0, excluding 'true' and 'false'
6
+ def identifier
7
+ /(?:(?!true|false))\b([a-zA-Z_][a-zA-Z0-9_]*)\b/
8
+ end
9
+
10
+ # @return [Regexp] XML NMTOKEN e.g xml:attribute, also-valid, CDATA
11
+ def nmtoken
12
+ /(?!\s)([a-zA-Z0-9_\-.:]*)(?!\s)/
13
+ end
14
+
15
+ # @return [Regexp] Ruby constant e.g. Constant, CONSTANT
16
+ def constant
17
+ /\b([A-Z][a-zA-Z0-9_]*)\b/
18
+ end
19
+ end
20
20
  end
@@ -1,37 +1,37 @@
1
- # Copyright (c) 2016 Freescale Semiconductor Inc.
2
- require File.expand_path(File.dirname(__FILE__) + '/regexp')
3
-
4
- class String
5
- # @return [String] converts string into Ruby constant. self must be String with no whitespaces and match Regexp.nmtoken
6
- # 'foo-bar'.constantize => 'Foo_bar'
7
- # 'foo_bar'.constantize => 'FooBar'
8
- # 'fooBar'.constantize => 'FooBar'
9
- def constantize
10
- return self if Regexp.constant.match(self)
11
- raise Exception unless Regexp.nmtoken.match(self)
12
- s = split('_').collect do |word| word[0] = word[0].upcase; word unless word == '_' end.join.gsub('-', '_')
13
- raise Exception unless s.match(Regexp.constant)
14
- s
15
- end
16
-
17
- # @param sym [Symbol] optional setting for what type of nmtoken desired: either :snakeCase or :under_score
18
- # @return [String] does reverse of #constantize e.g.
19
- # 'Foo_b'.nmtokenize => 'foo-bar'
20
- # 'FooBar'.nmtokenize => 'foo_bar'
21
- def nmtokenize(sym = :under_score)
22
- split('::').collect do |word|
23
- s = word.gsub(/(?!^)[A-Z_]/) do |match|
24
- case
25
- when match == '_' then '-'
26
- when sym == :snakeCase
27
- match
28
- when sym == :under_score
29
- "_#{match.downcase}"
30
- else
31
- end
32
- end
33
- s[0] = s[0].downcase
34
- s
35
- end.join(':')
36
- end
37
- end # class String
1
+ # Copyright (c) 2016 Freescale Semiconductor Inc.
2
+ require File.expand_path(File.dirname(__FILE__) + '/regexp')
3
+
4
+ class String
5
+ # @return [String] converts string into Ruby constant. self must be String with no whitespaces and match Regexp.nmtoken
6
+ # 'foo-bar'.constantize => 'Foo_bar'
7
+ # 'foo_bar'.constantize => 'FooBar'
8
+ # 'fooBar'.constantize => 'FooBar'
9
+ def constantize
10
+ return self if Regexp.constant.match(self)
11
+ raise Exception unless Regexp.nmtoken.match(self)
12
+ s = split('_').collect do |word| word[0] = word[0].upcase; word unless word == '_' end.join.gsub('-', '_')
13
+ raise Exception unless s.match(Regexp.constant)
14
+ s
15
+ end
16
+
17
+ # @param sym [Symbol] optional setting for what type of nmtoken desired: either :snakeCase or :under_score
18
+ # @return [String] does reverse of #constantize e.g.
19
+ # 'Foo_b'.nmtokenize => 'foo-bar'
20
+ # 'FooBar'.nmtokenize => 'foo_bar'
21
+ def nmtokenize(sym = :under_score)
22
+ split('::').collect do |word|
23
+ s = word.gsub(/(?!^)[A-Z_]/) do |match|
24
+ case
25
+ when match == '_' then '-'
26
+ when sym == :snakeCase
27
+ match
28
+ when sym == :under_score
29
+ "_#{match.downcase}"
30
+ else
31
+ end
32
+ end
33
+ s[0] = s[0].downcase
34
+ s
35
+ end.join(':')
36
+ end
37
+ end # class String
@@ -1,76 +1,76 @@
1
- # Copyright (c) 2016 Freescale Semiconductor Inc.
2
-
3
- require File.expand_path(File.dirname(__FILE__) + '/doc')
4
-
5
- module Duxml
6
- module Saxer
7
- @io
8
-
9
- attr_accessor :io
10
- # @param path_or_xml [String] path of file to parse or XML as String
11
- # @return [Doc, Element] finished document with each Element's line and column info added
12
- def sax(path_or_xml, obs=nil)
13
- doc_or_no = File.exists?(path_or_xml)
14
- io = doc_or_no ? File.open(path_or_xml): path_or_xml
15
- saxer = DocuLiner.new(Duxml::Doc.new, obs)
16
- Ox.sax_parse(saxer, io, {convert_special: true, symbolize: false})
17
- doc = saxer.cursor
18
- return doc.root unless doc_or_no
19
- doc.add_observer obs if obs and doc.count_observers < 1
20
- doc.path = path_or_xml
21
- doc
22
- end
23
-
24
- alias_method :parse, :sax
25
-
26
- class DocuLiner < ::Ox::Sax
27
- # @param doc [Ox::Document] document that is being constructed as XML is parsed
28
- # @param _observer [Object] object that will observe this document's content
29
- def initialize(doc, _observer)
30
- @cursor_stack = [doc]
31
- @line = 0
32
- @column = 0
33
- @observer = _observer
34
- end
35
-
36
- attr_reader :line, :column, :observer
37
-
38
- def cursor
39
- cursor_stack.last
40
- end
41
-
42
- attr_accessor :cursor_stack
43
-
44
- def start_element(name)
45
- cursor.nodes.insert(-1, Duxml::Element.new(name, line, column))
46
- cursor_stack << cursor.nodes.last.set_doc!(cursor_stack.first)
47
- end
48
-
49
- def attr(name, val)
50
- cursor[name] = val
51
- end
52
-
53
- def text(str)
54
- cursor.nodes.insert(-1, str)
55
- end
56
-
57
- def end_element(name)
58
- cursor.add_observer(observer) if observer
59
- @cursor_stack.pop
60
- end
61
-
62
- private
63
-
64
- def doc
65
- cursor_stack.first
66
- end
67
-
68
- def location_key
69
- @alocation.inject do |a, index|
70
- a ||= ""
71
- a << index.to_s
72
- end
73
- end
74
- end # class DocuLiner < ::Ox::Sax
75
- end # module Saxer
1
+ # Copyright (c) 2016 Freescale Semiconductor Inc.
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + '/doc')
4
+
5
+ module Duxml
6
+ module Saxer
7
+ @io
8
+
9
+ attr_accessor :io
10
+ # @param path_or_xml [String] path of file to parse or XML as String
11
+ # @return [Doc, Element] finished document with each Element's line and column info added
12
+ def sax(path_or_xml, obs=nil)
13
+ doc_or_no = File.exists?(path_or_xml)
14
+ io = doc_or_no ? File.open(path_or_xml): path_or_xml
15
+ saxer = DocuLiner.new(Duxml::Doc.new, obs)
16
+ Ox.sax_parse(saxer, io, {convert_special: true, symbolize: false})
17
+ doc = saxer.cursor
18
+ return doc.root unless doc_or_no
19
+ doc.add_observer obs if obs and doc.count_observers < 1
20
+ doc.path = path_or_xml
21
+ doc
22
+ end
23
+
24
+ alias_method :parse, :sax
25
+
26
+ class DocuLiner < ::Ox::Sax
27
+ # @param doc [Ox::Document] document that is being constructed as XML is parsed
28
+ # @param _observer [Object] object that will observe this document's content
29
+ def initialize(doc, _observer)
30
+ @cursor_stack = [doc]
31
+ @line = 0
32
+ @column = 0
33
+ @observer = _observer
34
+ end
35
+
36
+ attr_reader :line, :column, :observer
37
+
38
+ def cursor
39
+ cursor_stack.last
40
+ end
41
+
42
+ attr_accessor :cursor_stack
43
+
44
+ def start_element(name)
45
+ cursor.nodes.insert(-1, Duxml::Element.new(name, line, column))
46
+ cursor_stack << cursor.nodes.last.set_doc!(cursor_stack.first)
47
+ end
48
+
49
+ def attr(name, val)
50
+ cursor[name] = val
51
+ end
52
+
53
+ def text(str)
54
+ cursor.nodes.insert(-1, str)
55
+ end
56
+
57
+ def end_element(name)
58
+ cursor.add_observer(observer) if observer
59
+ @cursor_stack.pop
60
+ end
61
+
62
+ private
63
+
64
+ def doc
65
+ cursor_stack.first
66
+ end
67
+
68
+ def location_key
69
+ @alocation.inject do |a, index|
70
+ a ||= ""
71
+ a << index.to_s
72
+ end
73
+ end
74
+ end # class DocuLiner < ::Ox::Sax
75
+ end # module Saxer
76
76
  end # module Duxml
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duxml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.8
4
+ version: 0.8.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Kong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-02 00:00:00.000000000 Z
11
+ date: 2016-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ox
@@ -46,27 +46,31 @@ executables:
46
46
  extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
+ - bin/validate_xml
50
+ - lib/duxml.rb
51
+ - lib/duxml/doc.rb
49
52
  - lib/duxml/doc/element.rb
50
53
  - lib/duxml/doc/lazy_ox.rb
51
54
  - lib/duxml/doc/node_set.rb
52
- - lib/duxml/doc.rb
55
+ - lib/duxml/meta.rb
56
+ - lib/duxml/meta/grammar.rb
57
+ - lib/duxml/meta/grammar/pattern.rb
53
58
  - lib/duxml/meta/grammar/pattern/attr_name_pattern.rb
54
59
  - lib/duxml/meta/grammar/pattern/attr_val_pattern.rb
55
60
  - lib/duxml/meta/grammar/pattern/child_pattern.rb
56
61
  - lib/duxml/meta/grammar/pattern/text_pattern.rb
57
- - lib/duxml/meta/grammar/pattern.rb
58
62
  - lib/duxml/meta/grammar/pattern_maker.rb
63
+ - lib/duxml/meta/grammar/relax_ng.rb
59
64
  - lib/duxml/meta/grammar/relax_ng/attrs_rule.rb
60
65
  - lib/duxml/meta/grammar/relax_ng/children_rule.rb
61
66
  - lib/duxml/meta/grammar/relax_ng/value_rule.rb
62
- - lib/duxml/meta/grammar/relax_ng.rb
67
+ - lib/duxml/meta/grammar/rule.rb
63
68
  - lib/duxml/meta/grammar/rule/attrs_rule.rb
64
69
  - lib/duxml/meta/grammar/rule/children_rule.rb
65
70
  - lib/duxml/meta/grammar/rule/text_rule.rb
66
71
  - lib/duxml/meta/grammar/rule/value_rule.rb
67
- - lib/duxml/meta/grammar/rule.rb
68
72
  - lib/duxml/meta/grammar/spreadsheet.rb
69
- - lib/duxml/meta/grammar.rb
73
+ - lib/duxml/meta/history.rb
70
74
  - lib/duxml/meta/history/add.rb
71
75
  - lib/duxml/meta/history/change.rb
72
76
  - lib/duxml/meta/history/change_attr.rb
@@ -78,8 +82,6 @@ files:
78
82
  - lib/duxml/meta/history/remove.rb
79
83
  - lib/duxml/meta/history/undo.rb
80
84
  - lib/duxml/meta/history/validate_error.rb
81
- - lib/duxml/meta/history.rb
82
- - lib/duxml/meta.rb
83
85
  - lib/duxml/reportable.rb
84
86
  - lib/duxml/ruby_ext/fixnum.rb
85
87
  - lib/duxml/ruby_ext/module.rb
@@ -87,8 +89,6 @@ files:
87
89
  - lib/duxml/ruby_ext/regexp.rb
88
90
  - lib/duxml/ruby_ext/string.rb
89
91
  - lib/duxml/saxer.rb
90
- - lib/duxml.rb
91
- - bin/validate_xml
92
92
  homepage: http://www.github.com/Ludocracy/duxml
93
93
  licenses:
94
94
  - MIT
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  version: 1.8.11
110
110
  requirements: []
111
111
  rubyforge_project:
112
- rubygems_version: 2.0.14.1
112
+ rubygems_version: 2.5.1
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: Dynamic Universal XML