rng 0.1.2 → 0.3.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.
Files changed (180) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docs.yml +63 -0
  3. data/.github/workflows/release.yml +8 -3
  4. data/.gitignore +11 -0
  5. data/.rubocop.yml +10 -7
  6. data/.rubocop_todo.yml +229 -23
  7. data/CHANGELOG.md +317 -0
  8. data/CLAUDE.md +139 -0
  9. data/Gemfile +11 -12
  10. data/README.adoc +1538 -11
  11. data/Rakefile +11 -3
  12. data/docs/Gemfile +8 -0
  13. data/docs/_config.yml +23 -0
  14. data/docs/getting-started/index.adoc +75 -0
  15. data/docs/guides/error-handling.adoc +137 -0
  16. data/docs/guides/external-references.adoc +128 -0
  17. data/docs/guides/index.adoc +24 -0
  18. data/docs/guides/parsing-rnc.adoc +141 -0
  19. data/docs/guides/parsing-rng-xml.adoc +81 -0
  20. data/docs/guides/rng-to-rnc.adoc +101 -0
  21. data/docs/guides/validation.adoc +85 -0
  22. data/docs/index.adoc +52 -0
  23. data/docs/reference/api.adoc +126 -0
  24. data/docs/reference/cli.adoc +182 -0
  25. data/docs/understanding/architecture.adoc +58 -0
  26. data/docs/understanding/rng-vs-rnc.adoc +118 -0
  27. data/exe/rng +5 -0
  28. data/lib/rng/any_name.rb +10 -8
  29. data/lib/rng/attribute.rb +28 -26
  30. data/lib/rng/choice.rb +24 -24
  31. data/lib/rng/cli.rb +607 -0
  32. data/lib/rng/data.rb +10 -10
  33. data/lib/rng/datatype_declaration.rb +26 -0
  34. data/lib/rng/define.rb +44 -41
  35. data/lib/rng/div.rb +36 -0
  36. data/lib/rng/documentation.rb +9 -0
  37. data/lib/rng/element.rb +39 -37
  38. data/lib/rng/empty.rb +7 -7
  39. data/lib/rng/except.rb +25 -25
  40. data/lib/rng/external_ref.rb +8 -8
  41. data/lib/rng/external_ref_resolver.rb +602 -0
  42. data/lib/rng/foreign_attribute.rb +26 -0
  43. data/lib/rng/foreign_element.rb +33 -0
  44. data/lib/rng/grammar.rb +14 -12
  45. data/lib/rng/group.rb +26 -24
  46. data/lib/rng/include.rb +5 -6
  47. data/lib/rng/include_processor.rb +461 -0
  48. data/lib/rng/interleave.rb +23 -23
  49. data/lib/rng/list.rb +22 -22
  50. data/lib/rng/mixed.rb +23 -23
  51. data/lib/rng/name.rb +6 -7
  52. data/lib/rng/namespace_declaration.rb +47 -0
  53. data/lib/rng/namespaces.rb +15 -0
  54. data/lib/rng/not_allowed.rb +7 -7
  55. data/lib/rng/ns_name.rb +9 -9
  56. data/lib/rng/one_or_more.rb +23 -23
  57. data/lib/rng/optional.rb +23 -23
  58. data/lib/rng/param.rb +7 -8
  59. data/lib/rng/parent_ref.rb +8 -8
  60. data/lib/rng/parse_tree_processor.rb +695 -0
  61. data/lib/rng/pattern.rb +7 -7
  62. data/lib/rng/ref.rb +8 -8
  63. data/lib/rng/rnc_builder.rb +927 -0
  64. data/lib/rng/rnc_parser.rb +605 -305
  65. data/lib/rng/rnc_to_rng_converter.rb +1408 -0
  66. data/lib/rng/schema_preamble.rb +73 -0
  67. data/lib/rng/schema_validator.rb +1622 -0
  68. data/lib/rng/start.rb +27 -25
  69. data/lib/rng/test_suite_parser.rb +168 -0
  70. data/lib/rng/text.rb +11 -8
  71. data/lib/rng/to_rnc.rb +4 -35
  72. data/lib/rng/value.rb +6 -7
  73. data/lib/rng/version.rb +1 -1
  74. data/lib/rng/zero_or_more.rb +23 -23
  75. data/lib/rng.rb +68 -17
  76. data/rng.gemspec +18 -19
  77. data/scripts/extract_spectest_resources.rb +96 -0
  78. data/spec/fixtures/compacttest.xml +2511 -0
  79. data/spec/fixtures/external/circular_a.rng +7 -0
  80. data/spec/fixtures/external/circular_b.rng +7 -0
  81. data/spec/fixtures/external/circular_main.rng +7 -0
  82. data/spec/fixtures/external/external_ref_lib.rng +7 -0
  83. data/spec/fixtures/external/external_ref_main.rng +7 -0
  84. data/spec/fixtures/external/include_lib.rng +7 -0
  85. data/spec/fixtures/external/include_main.rng +3 -0
  86. data/spec/fixtures/external/nested_chain.rng +6 -0
  87. data/spec/fixtures/external/nested_leaf.rng +7 -0
  88. data/spec/fixtures/external/nested_mid.rng +8 -0
  89. data/spec/fixtures/metanorma/3gpp.rnc +35 -0
  90. data/spec/fixtures/metanorma/3gpp.rng +105 -0
  91. data/spec/fixtures/metanorma/basicdoc.rnc +11 -0
  92. data/spec/fixtures/metanorma/bipm.rnc +148 -0
  93. data/spec/fixtures/metanorma/bipm.rng +376 -0
  94. data/spec/fixtures/metanorma/bsi.rnc +104 -0
  95. data/spec/fixtures/metanorma/bsi.rng +332 -0
  96. data/spec/fixtures/metanorma/csa.rnc +45 -0
  97. data/spec/fixtures/metanorma/csa.rng +131 -0
  98. data/spec/fixtures/metanorma/csd.rnc +43 -0
  99. data/spec/fixtures/metanorma/csd.rng +132 -0
  100. data/spec/fixtures/metanorma/gbstandard.rnc +99 -0
  101. data/spec/fixtures/metanorma/gbstandard.rng +316 -0
  102. data/spec/fixtures/metanorma/iec.rnc +49 -0
  103. data/spec/fixtures/metanorma/iec.rng +193 -0
  104. data/spec/fixtures/metanorma/ietf.rnc +275 -0
  105. data/spec/fixtures/metanorma/ietf.rng +925 -0
  106. data/spec/fixtures/metanorma/iho.rnc +58 -0
  107. data/spec/fixtures/metanorma/iho.rng +179 -0
  108. data/spec/fixtures/metanorma/isodoc.rnc +873 -0
  109. data/spec/fixtures/metanorma/isodoc.rng +2704 -0
  110. data/spec/fixtures/metanorma/isostandard-amd.rnc +43 -0
  111. data/spec/fixtures/metanorma/isostandard-amd.rng +108 -0
  112. data/spec/fixtures/metanorma/isostandard.rnc +166 -0
  113. data/spec/fixtures/metanorma/isostandard.rng +494 -0
  114. data/spec/fixtures/metanorma/itu.rnc +122 -0
  115. data/spec/fixtures/metanorma/itu.rng +377 -0
  116. data/spec/fixtures/metanorma/m3d.rnc +41 -0
  117. data/spec/fixtures/metanorma/m3d.rng +122 -0
  118. data/spec/fixtures/metanorma/mpfd.rnc +36 -0
  119. data/spec/fixtures/metanorma/mpfd.rng +95 -0
  120. data/spec/fixtures/metanorma/nist.rnc +77 -0
  121. data/spec/fixtures/metanorma/nist.rng +216 -0
  122. data/spec/fixtures/metanorma/ogc.rnc +51 -0
  123. data/spec/fixtures/metanorma/ogc.rng +151 -0
  124. data/spec/fixtures/metanorma/reqt.rnc +6 -0
  125. data/spec/fixtures/metanorma/rsd.rnc +36 -0
  126. data/spec/fixtures/metanorma/rsd.rng +95 -0
  127. data/spec/fixtures/metanorma/un.rnc +103 -0
  128. data/spec/fixtures/metanorma/un.rng +367 -0
  129. data/spec/fixtures/rnc/base.rnc +4 -0
  130. data/spec/fixtures/rnc/grammar_with_trailing.rnc +8 -0
  131. data/spec/fixtures/rnc/main_include_trailing.rnc +3 -0
  132. data/spec/fixtures/rnc/main_with_include.rnc +5 -0
  133. data/spec/fixtures/rnc/test_augment.rnc +10 -0
  134. data/spec/fixtures/rnc/test_isodoc_simple.rnc +9 -0
  135. data/spec/fixtures/rnc/top_level_include.rnc +8 -0
  136. data/spec/fixtures/spectest_external/case_10_4.7/x +3 -0
  137. data/spec/fixtures/spectest_external/case_10_4.7/y +7 -0
  138. data/spec/fixtures/spectest_external/case_11_4.7/x +3 -0
  139. data/spec/fixtures/spectest_external/case_12_4.7/x +3 -0
  140. data/spec/fixtures/spectest_external/case_13_4.7/x +3 -0
  141. data/spec/fixtures/spectest_external/case_13_4.7/y +3 -0
  142. data/spec/fixtures/spectest_external/case_14_4.7/x +7 -0
  143. data/spec/fixtures/spectest_external/case_15_4.7/x +7 -0
  144. data/spec/fixtures/spectest_external/case_16_4.7/x +5 -0
  145. data/spec/fixtures/spectest_external/case_17_4.7/x +5 -0
  146. data/spec/fixtures/spectest_external/case_18_4.7/x +7 -0
  147. data/spec/fixtures/spectest_external/case_19_4.7/level1.rng +9 -0
  148. data/spec/fixtures/spectest_external/case_19_4.7/level2.rng +7 -0
  149. data/spec/fixtures/spectest_external/case_1_4.5/sub1/x +3 -0
  150. data/spec/fixtures/spectest_external/case_1_4.5/sub3/x +3 -0
  151. data/spec/fixtures/spectest_external/case_1_4.5/x +3 -0
  152. data/spec/fixtures/spectest_external/case_20_4.6/x +3 -0
  153. data/spec/fixtures/spectest_external/case_2_4.5/x +3 -0
  154. data/spec/fixtures/spectest_external/case_3_4.6/x +3 -0
  155. data/spec/fixtures/spectest_external/case_4_4.6/x +3 -0
  156. data/spec/fixtures/spectest_external/case_5_4.6/x +1 -0
  157. data/spec/fixtures/spectest_external/case_6_4.6/x +5 -0
  158. data/spec/fixtures/spectest_external/case_7_4.6/x +1 -0
  159. data/spec/fixtures/spectest_external/case_7_4.6/y +1 -0
  160. data/spec/fixtures/spectest_external/case_8_4.7/x +7 -0
  161. data/spec/fixtures/spectest_external/case_9_4.7/x +7 -0
  162. data/spec/fixtures/spectest_external/resources.json +149 -0
  163. data/spec/rng/advanced_rnc_spec.rb +101 -0
  164. data/spec/rng/compacttest_spec.rb +197 -0
  165. data/spec/rng/datatype_declaration_spec.rb +28 -0
  166. data/spec/rng/div_spec.rb +207 -0
  167. data/spec/rng/external_ref_resolver_spec.rb +122 -0
  168. data/spec/rng/metanorma_conversion_spec.rb +159 -0
  169. data/spec/rng/namespace_declaration_spec.rb +60 -0
  170. data/spec/rng/namespace_support_spec.rb +199 -0
  171. data/spec/rng/rnc_parser_spec.rb +498 -22
  172. data/spec/rng/rnc_roundtrip_spec.rb +96 -82
  173. data/spec/rng/rng_generation_spec.rb +288 -0
  174. data/spec/rng/roundtrip_spec.rb +342 -0
  175. data/spec/rng/schema_preamble_spec.rb +145 -0
  176. data/spec/rng/schema_spec.rb +68 -64
  177. data/spec/rng/spectest_spec.rb +168 -90
  178. data/spec/rng_spec.rb +2 -2
  179. data/spec/spec_helper.rb +7 -42
  180. metadata +141 -8
data/exe/rng ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'rng/cli'
5
+ Rng::CLI.start(ARGV)
data/lib/rng/any_name.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "lutaml/model"
4
-
5
3
  module Rng
6
4
  class AnyName < Lutaml::Model::Serializable
7
5
  attribute :name, :string
@@ -11,16 +9,20 @@ module Rng
11
9
  attribute :except, Except
12
10
 
13
11
  xml do
14
- root "anyName", ordered: true
15
- map_attribute "name", to: :name
16
- map_attribute "id", to: :id
17
- map_attribute "ns", to: :ns, value_map: {
12
+ element 'anyName'
13
+ namespace ::Rng::Namespaces::RngNamespace
14
+
15
+ ordered
16
+
17
+ map_attribute 'name', to: :name
18
+ map_attribute 'id', to: :id
19
+ map_attribute 'ns', to: :ns, value_map: {
18
20
  from: { empty: :empty, omitted: :omitted, nil: :nil },
19
21
  to: { empty: :empty, omitted: :omitted, nil: :nil }
20
22
  }
21
- map_attribute "datatypeLibrary", to: :datatypeLibrary
23
+ map_attribute 'datatypeLibrary', to: :datatypeLibrary
22
24
 
23
- map_element "except", to: :except
25
+ map_element 'except', to: :except
24
26
  end
25
27
  end
26
28
  end
data/lib/rng/attribute.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "lutaml/model"
4
-
5
3
  module Rng
6
4
  class Attribute < Lutaml::Model::Serializable
7
5
  attribute :name, Name
@@ -26,42 +24,46 @@ module Rng
26
24
  attribute :list, List
27
25
  attribute :notAllowed, NotAllowed
28
26
  attribute :attribute, Attribute
27
+ attribute :documentation, Documentation
29
28
 
30
29
  xml do
31
- root "attribute", ordered: true
32
- namespace "http://relaxng.org/ns/structure/1.0"
30
+ element 'attribute'
31
+ ordered
32
+
33
+ namespace ::Rng::Namespaces::RngNamespace
33
34
 
34
- map_element "name", to: :name
35
- map_attribute "name", to: :attr_name
36
- map_attribute "ns", to: :ns, value_map: {
35
+ map_element 'name', to: :name
36
+ map_attribute 'name', to: :attr_name
37
+ map_attribute 'ns', to: :ns, value_map: {
37
38
  from: { empty: :empty, omitted: :omitted, nil: :nil },
38
39
  to: { empty: :empty, omitted: :omitted, nil: :nil }
39
40
  }
40
- map_attribute "datatypeLibrary", to: :datatypeLibrary, value_map: {
41
+ map_attribute 'datatypeLibrary', to: :datatypeLibrary, value_map: {
41
42
  from: { empty: :empty, omitted: :omitted, nil: :nil },
42
43
  to: { empty: :empty, omitted: :omitted, nil: :nil }
43
44
  }
44
- map_attribute "id", to: :id
45
- map_element "ref", to: :ref
46
- map_element "choice", to: :choice
47
- map_element "group", to: :group
48
- map_element "interleave", to: :interleave
49
- map_element "mixed", to: :mixed
50
- map_element "optional", to: :optional
51
- map_element "zeroOrMore", to: :zeroOrMore
52
- map_element "oneOrMore", to: :oneOrMore
53
- map_element "anyName", to: :anyName
54
- map_element "text", to: :text, value_map: {
45
+ map_attribute 'id', to: :id
46
+ map_element 'ref', to: :ref
47
+ map_element 'choice', to: :choice
48
+ map_element 'group', to: :group
49
+ map_element 'interleave', to: :interleave
50
+ map_element 'mixed', to: :mixed
51
+ map_element 'optional', to: :optional
52
+ map_element 'zeroOrMore', to: :zeroOrMore
53
+ map_element 'oneOrMore', to: :oneOrMore
54
+ map_element 'anyName', to: :anyName
55
+ map_element 'text', to: :text, value_map: {
55
56
  from: { empty: :empty, omitted: :omitted, nil: :nil },
56
57
  to: { empty: :empty, omitted: :omitted, nil: :nil }
57
58
  }
58
- map_element "empty", to: :empty
59
- map_element "value", to: :value
60
- map_element "data", to: :data
61
- map_element "list", to: :list
62
- map_element "notAllowed", to: :notAllowed
63
- map_element "attribute", to: :attribute
64
- map_element "nsName", to: :ns_name
59
+ map_element 'empty', to: :empty
60
+ map_element 'value', to: :value
61
+ map_element 'data', to: :data
62
+ map_element 'list', to: :list
63
+ map_element 'notAllowed', to: :notAllowed
64
+ map_element 'attribute', to: :attribute
65
+ map_element 'nsName', to: :ns_name
66
+ map_element 'documentation', to: :documentation
65
67
  end
66
68
  end
67
69
  end
data/lib/rng/choice.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "lutaml/model"
4
-
5
3
  module Rng
6
4
  class Choice < Lutaml::Model::Serializable
7
5
  attribute :id, :string
@@ -26,35 +24,37 @@ module Rng
26
24
  attribute :name, Name, collection: true, initialize_empty: true
27
25
 
28
26
  xml do
29
- root "choice", ordered: true
30
- namespace "http://relaxng.org/ns/structure/1.0"
27
+ element 'choice'
28
+ ordered
29
+
30
+ namespace ::Rng::Namespaces::RngNamespace
31
31
 
32
- map_attribute "id", to: :id
33
- map_attribute "ns", to: :ns, value_map: {
32
+ map_attribute 'id', to: :id
33
+ map_attribute 'ns', to: :ns, value_map: {
34
34
  from: { empty: :empty, omitted: :omitted, nil: :nil },
35
35
  to: { empty: :empty, omitted: :omitted, nil: :nil }
36
36
  }
37
- map_attribute "datatypeLibrary", to: :datatypeLibrary, value_map: {
37
+ map_attribute 'datatypeLibrary', to: :datatypeLibrary, value_map: {
38
38
  from: { empty: :empty, omitted: :omitted, nil: :nil },
39
39
  to: { empty: :empty, omitted: :omitted, nil: :nil }
40
40
  }
41
- map_element "element", to: :element
42
- map_element "attribute", to: :attribute
43
- map_element "ref", to: :ref
44
- map_element "choice", to: :choice
45
- map_element "group", to: :group
46
- map_element "interleave", to: :interleave
47
- map_element "mixed", to: :mixed
48
- map_element "optional", to: :optional
49
- map_element "zeroOrMore", to: :zeroOrMore
50
- map_element "oneOrMore", to: :oneOrMore
51
- map_element "text", to: :text
52
- map_element "empty", to: :empty
53
- map_element "value", to: :value
54
- map_element "data", to: :data
55
- map_element "list", to: :list
56
- map_element "notAllowed", to: :notAllowed
57
- map_element "name", to: :name
41
+ map_element 'element', to: :element
42
+ map_element 'attribute', to: :attribute
43
+ map_element 'ref', to: :ref
44
+ map_element 'choice', to: :choice
45
+ map_element 'group', to: :group
46
+ map_element 'interleave', to: :interleave
47
+ map_element 'mixed', to: :mixed
48
+ map_element 'optional', to: :optional
49
+ map_element 'zeroOrMore', to: :zeroOrMore
50
+ map_element 'oneOrMore', to: :oneOrMore
51
+ map_element 'text', to: :text
52
+ map_element 'empty', to: :empty
53
+ map_element 'value', to: :value
54
+ map_element 'data', to: :data
55
+ map_element 'list', to: :list
56
+ map_element 'notAllowed', to: :notAllowed
57
+ map_element 'name', to: :name
58
58
  end
59
59
  end
60
60
  end