mml 2.2.0 → 2.3.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.
Files changed (159) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +14 -4
  3. data/CLAUDE.md +79 -0
  4. data/README.adoc +226 -83
  5. data/lib/mml/base/deprecated_font_attributes.rb +31 -0
  6. data/lib/mml/base/maction.rb +28 -0
  7. data/lib/mml/base/maligngroup.rb +26 -0
  8. data/lib/mml/base/malignmark.rb +26 -0
  9. data/lib/mml/base/math.rb +23 -0
  10. data/lib/mml/base/menclose.rb +27 -0
  11. data/lib/mml/base/merror.rb +25 -0
  12. data/lib/mml/base/mfenced.rb +34 -0
  13. data/lib/mml/base/mfrac.rb +33 -0
  14. data/lib/mml/base/mfraction.rb +33 -0
  15. data/lib/mml/base/mglyph.rb +42 -0
  16. data/lib/mml/base/mi.rb +32 -0
  17. data/lib/mml/base/mlabeledtr.rb +37 -0
  18. data/lib/mml/base/mlongdiv.rb +31 -0
  19. data/lib/mml/base/mmultiscripts.rb +31 -0
  20. data/lib/mml/base/mn.rb +32 -0
  21. data/lib/mml/base/mo.rb +76 -0
  22. data/lib/mml/base/mover.rb +29 -0
  23. data/lib/mml/base/mpadded.rb +35 -0
  24. data/lib/mml/base/mphantom.rb +25 -0
  25. data/lib/mml/base/mprescripts.rb +24 -0
  26. data/lib/mml/base/mroot.rb +25 -0
  27. data/lib/mml/base/mrow.rb +29 -0
  28. data/lib/mml/base/ms.rb +37 -0
  29. data/lib/mml/base/mscarries.rb +33 -0
  30. data/lib/mml/base/mscarry.rb +29 -0
  31. data/lib/mml/base/msgroup.rb +31 -0
  32. data/lib/mml/base/msline.rb +34 -0
  33. data/lib/mml/base/mspace.rb +52 -0
  34. data/lib/mml/base/msqrt.rb +25 -0
  35. data/lib/mml/base/msrow.rb +27 -0
  36. data/lib/mml/base/mstack.rb +33 -0
  37. data/lib/mml/base/mstyle.rb +189 -0
  38. data/lib/mml/base/msub.rb +27 -0
  39. data/lib/mml/base/msubsup.rb +29 -0
  40. data/lib/mml/base/msup.rb +27 -0
  41. data/lib/mml/base/mtable.rb +57 -0
  42. data/lib/mml/base/mtd.rb +29 -0
  43. data/lib/mml/base/mtext.rb +32 -0
  44. data/lib/mml/base/mtr.rb +35 -0
  45. data/lib/mml/base/munder.rb +31 -0
  46. data/lib/mml/base/munderover.rb +31 -0
  47. data/lib/mml/base/none.rb +24 -0
  48. data/lib/mml/base/semantics.rb +23 -0
  49. data/lib/mml/base/v3_only/operator_attrs.rb +24 -0
  50. data/lib/mml/base/v3_only/style_attrs.rb +31 -0
  51. data/lib/mml/base/v3_only/table_attrs.rb +28 -0
  52. data/lib/mml/base/v3_only.rb +11 -0
  53. data/lib/mml/base/v4_attributes.rb +30 -0
  54. data/lib/mml/base.rb +51 -0
  55. data/lib/mml/common_elements.rb +85 -0
  56. data/lib/mml/context_configuration.rb +118 -0
  57. data/lib/mml/context_options.rb +64 -0
  58. data/lib/mml/namespace.rb +10 -0
  59. data/lib/mml/v3/common_elements.rb +8 -0
  60. data/lib/mml/v3/configuration.rb +4 -96
  61. data/lib/mml/v3/maction.rb +2 -14
  62. data/lib/mml/v3/maligngroup.rb +2 -12
  63. data/lib/mml/v3/malignmark.rb +2 -12
  64. data/lib/mml/v3/math.rb +3 -10
  65. data/lib/mml/v3/menclose.rb +3 -14
  66. data/lib/mml/v3/merror.rb +3 -12
  67. data/lib/mml/v3/mfenced.rb +3 -21
  68. data/lib/mml/v3/mfrac.rb +3 -20
  69. data/lib/mml/v3/mfraction.rb +3 -20
  70. data/lib/mml/v3/mglyph.rb +3 -38
  71. data/lib/mml/v3/mi.rb +3 -30
  72. data/lib/mml/v3/mlabeledtr.rb +2 -23
  73. data/lib/mml/v3/mlongdiv.rb +3 -18
  74. data/lib/mml/v3/mmultiscripts.rb +3 -20
  75. data/lib/mml/v3/mn.rb +3 -30
  76. data/lib/mml/v3/mo.rb +4 -78
  77. data/lib/mml/v3/mover.rb +3 -16
  78. data/lib/mml/v3/mpadded.rb +3 -22
  79. data/lib/mml/v3/mphantom.rb +3 -12
  80. data/lib/mml/v3/mprescripts.rb +2 -10
  81. data/lib/mml/v3/mroot.rb +3 -12
  82. data/lib/mml/v3/mrow.rb +3 -18
  83. data/lib/mml/v3/ms.rb +4 -36
  84. data/lib/mml/v3/mscarries.rb +3 -20
  85. data/lib/mml/v3/mscarry.rb +3 -16
  86. data/lib/mml/v3/msgroup.rb +3 -18
  87. data/lib/mml/v3/msline.rb +2 -20
  88. data/lib/mml/v3/mspace.rb +3 -50
  89. data/lib/mml/v3/msqrt.rb +3 -12
  90. data/lib/mml/v3/msrow.rb +3 -14
  91. data/lib/mml/v3/mstack.rb +3 -20
  92. data/lib/mml/v3/mstyle.rb +5 -204
  93. data/lib/mml/v3/msub.rb +3 -14
  94. data/lib/mml/v3/msubsup.rb +3 -16
  95. data/lib/mml/v3/msup.rb +3 -14
  96. data/lib/mml/v3/mtable.rb +3 -53
  97. data/lib/mml/v3/mtd.rb +3 -16
  98. data/lib/mml/v3/mtext.rb +3 -30
  99. data/lib/mml/v3/mtr.rb +2 -21
  100. data/lib/mml/v3/munder.rb +3 -18
  101. data/lib/mml/v3/munderover.rb +3 -18
  102. data/lib/mml/v3/namespace.rb +1 -4
  103. data/lib/mml/v3/none.rb +2 -10
  104. data/lib/mml/v3/semantics.rb +3 -12
  105. data/lib/mml/v3.rb +51 -77
  106. data/lib/mml/v4/a.rb +4 -13
  107. data/lib/mml/v4/common_elements.rb +13 -0
  108. data/lib/mml/v4/configuration.rb +4 -97
  109. data/lib/mml/v4/maction.rb +4 -19
  110. data/lib/mml/v4/maligngroup.rb +4 -17
  111. data/lib/mml/v4/malignmark.rb +4 -17
  112. data/lib/mml/v4/math.rb +4 -14
  113. data/lib/mml/v4/menclose.rb +4 -18
  114. data/lib/mml/v4/merror.rb +4 -16
  115. data/lib/mml/v4/mfenced.rb +4 -25
  116. data/lib/mml/v4/mfrac.rb +4 -24
  117. data/lib/mml/v4/mfraction.rb +4 -20
  118. data/lib/mml/v4/mglyph.rb +4 -35
  119. data/lib/mml/v4/mi.rb +4 -30
  120. data/lib/mml/v4/mlabeledtr.rb +6 -23
  121. data/lib/mml/v4/mlongdiv.rb +4 -18
  122. data/lib/mml/v4/mmultiscripts.rb +4 -24
  123. data/lib/mml/v4/mn.rb +4 -29
  124. data/lib/mml/v4/mo.rb +4 -75
  125. data/lib/mml/v4/mover.rb +4 -20
  126. data/lib/mml/v4/mpadded.rb +4 -26
  127. data/lib/mml/v4/mphantom.rb +4 -16
  128. data/lib/mml/v4/mprescripts.rb +4 -11
  129. data/lib/mml/v4/mroot.rb +4 -16
  130. data/lib/mml/v4/mrow.rb +4 -20
  131. data/lib/mml/v4/ms.rb +4 -34
  132. data/lib/mml/v4/mscarries.rb +4 -20
  133. data/lib/mml/v4/mscarry.rb +4 -16
  134. data/lib/mml/v4/msgroup.rb +4 -18
  135. data/lib/mml/v4/msline.rb +4 -21
  136. data/lib/mml/v4/mspace.rb +4 -49
  137. data/lib/mml/v4/msqrt.rb +4 -16
  138. data/lib/mml/v4/msrow.rb +4 -18
  139. data/lib/mml/v4/mstack.rb +4 -24
  140. data/lib/mml/v4/mstyle.rb +4 -186
  141. data/lib/mml/v4/msub.rb +4 -18
  142. data/lib/mml/v4/msubsup.rb +4 -20
  143. data/lib/mml/v4/msup.rb +4 -18
  144. data/lib/mml/v4/mtable.rb +4 -55
  145. data/lib/mml/v4/mtd.rb +4 -20
  146. data/lib/mml/v4/mtext.rb +4 -29
  147. data/lib/mml/v4/mtr.rb +4 -25
  148. data/lib/mml/v4/munder.rb +4 -22
  149. data/lib/mml/v4/munderover.rb +4 -22
  150. data/lib/mml/v4/namespace.rb +1 -4
  151. data/lib/mml/v4/none.rb +6 -11
  152. data/lib/mml/v4/semantics.rb +4 -12
  153. data/lib/mml/v4.rb +52 -74
  154. data/lib/mml/version.rb +1 -1
  155. data/lib/mml/versioned_parser.rb +46 -0
  156. data/lib/mml.rb +33 -25
  157. metadata +60 -4
  158. data/lib/mml/v3/common_attributes.rb +0 -22
  159. data/lib/mml/v4/common_attributes.rb +0 -26
data/lib/mml.rb CHANGED
@@ -1,38 +1,46 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "mml/v3"
3
+ require "lutaml/model"
4
4
 
5
5
  module Mml
6
6
  class Error < StandardError; end
7
7
 
8
- # Delegate undefined constants to Mml::V3 for backward compatibility.
9
- # Lazily loads Mml::V4 when referenced.
10
- def self.const_missing(name)
11
- if name == :V4
12
- require "mml/v4"
13
- Mml::V4
14
- elsif Mml::V3.const_defined?(name)
15
- Mml::V3.const_get(name)
16
- else
17
- raise NameError, "uninitialized constant Mml::#{name}"
18
- end
19
- end
8
+ DEFAULT_ADAPTER = RUBY_ENGINE == "opal" ? :oga : :ox
9
+ SUPPORTED_VERSIONS = [3, 4].freeze
10
+ UNSPECIFIED_CONTEXT = Object.new.freeze
11
+
12
+ autoload :Namespace, "mml/namespace"
13
+ autoload :CommonElements, "mml/common_elements"
14
+ autoload :ContextOptions, "mml/context_options"
15
+ autoload :Base, "mml/base"
16
+ autoload :V3, "mml/v3"
17
+ autoload :V4, "mml/v4"
20
18
 
21
19
  module_function
22
20
 
23
- def parse(input, namespace_exist: true, version: 3)
24
- case version
25
- when 3 then Mml::V3.parse(input, namespace_exist: namespace_exist)
26
- when 4
27
- require "mml/v4"
28
- Mml::V4.parse(input, namespace_exist: namespace_exist)
29
- else raise Error, "Unsupported MathML version: #{version}"
30
- end
21
+ def parse(
22
+ input,
23
+ namespace_exist: true,
24
+ version: 3,
25
+ context: UNSPECIFIED_CONTEXT,
26
+ register: nil
27
+ )
28
+ parser_for(version).parse(
29
+ input,
30
+ namespace_exist: namespace_exist,
31
+ context: Mml::ContextOptions.normalize_context_option(
32
+ context: context,
33
+ register: register,
34
+ default_context: nil,
35
+ warning_source: "Mml.parse",
36
+ ),
37
+ )
31
38
  end
32
39
 
33
- # Backward compatibility: Mml aliases Mml::V3
34
- Configuration = Mml::V3::Configuration
40
+ def parser_for(version)
41
+ return Mml::V3 if version == 3
42
+ return Mml::V4 if version == 4
35
43
 
36
- # Explicitly define Math to avoid collision with Ruby built-in Math module
37
- Math = Mml::V3::Math
44
+ raise Error, "Unsupported MathML version: #{version}"
45
+ end
38
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mml
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-03-31 00:00:00.000000000 Z
11
+ date: 2026-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lutaml-model
@@ -53,6 +53,7 @@ files:
53
53
  - ".rspec"
54
54
  - ".rubocop.yml"
55
55
  - ".rubocop_todo.yml"
56
+ - CLAUDE.md
56
57
  - CODE_OF_CONDUCT.md
57
58
  - Gemfile
58
59
  - README.adoc
@@ -60,8 +61,62 @@ files:
60
61
  - bin/console
61
62
  - bin/setup
62
63
  - lib/mml.rb
64
+ - lib/mml/base.rb
65
+ - lib/mml/base/deprecated_font_attributes.rb
66
+ - lib/mml/base/maction.rb
67
+ - lib/mml/base/maligngroup.rb
68
+ - lib/mml/base/malignmark.rb
69
+ - lib/mml/base/math.rb
70
+ - lib/mml/base/menclose.rb
71
+ - lib/mml/base/merror.rb
72
+ - lib/mml/base/mfenced.rb
73
+ - lib/mml/base/mfrac.rb
74
+ - lib/mml/base/mfraction.rb
75
+ - lib/mml/base/mglyph.rb
76
+ - lib/mml/base/mi.rb
77
+ - lib/mml/base/mlabeledtr.rb
78
+ - lib/mml/base/mlongdiv.rb
79
+ - lib/mml/base/mmultiscripts.rb
80
+ - lib/mml/base/mn.rb
81
+ - lib/mml/base/mo.rb
82
+ - lib/mml/base/mover.rb
83
+ - lib/mml/base/mpadded.rb
84
+ - lib/mml/base/mphantom.rb
85
+ - lib/mml/base/mprescripts.rb
86
+ - lib/mml/base/mroot.rb
87
+ - lib/mml/base/mrow.rb
88
+ - lib/mml/base/ms.rb
89
+ - lib/mml/base/mscarries.rb
90
+ - lib/mml/base/mscarry.rb
91
+ - lib/mml/base/msgroup.rb
92
+ - lib/mml/base/msline.rb
93
+ - lib/mml/base/mspace.rb
94
+ - lib/mml/base/msqrt.rb
95
+ - lib/mml/base/msrow.rb
96
+ - lib/mml/base/mstack.rb
97
+ - lib/mml/base/mstyle.rb
98
+ - lib/mml/base/msub.rb
99
+ - lib/mml/base/msubsup.rb
100
+ - lib/mml/base/msup.rb
101
+ - lib/mml/base/mtable.rb
102
+ - lib/mml/base/mtd.rb
103
+ - lib/mml/base/mtext.rb
104
+ - lib/mml/base/mtr.rb
105
+ - lib/mml/base/munder.rb
106
+ - lib/mml/base/munderover.rb
107
+ - lib/mml/base/none.rb
108
+ - lib/mml/base/semantics.rb
109
+ - lib/mml/base/v3_only.rb
110
+ - lib/mml/base/v3_only/operator_attrs.rb
111
+ - lib/mml/base/v3_only/style_attrs.rb
112
+ - lib/mml/base/v3_only/table_attrs.rb
113
+ - lib/mml/base/v4_attributes.rb
114
+ - lib/mml/common_elements.rb
115
+ - lib/mml/context_configuration.rb
116
+ - lib/mml/context_options.rb
117
+ - lib/mml/namespace.rb
63
118
  - lib/mml/v3.rb
64
- - lib/mml/v3/common_attributes.rb
119
+ - lib/mml/v3/common_elements.rb
65
120
  - lib/mml/v3/configuration.rb
66
121
  - lib/mml/v3/maction.rb
67
122
  - lib/mml/v3/maligngroup.rb
@@ -111,7 +166,7 @@ files:
111
166
  - lib/mml/v3/version.rb
112
167
  - lib/mml/v4.rb
113
168
  - lib/mml/v4/a.rb
114
- - lib/mml/v4/common_attributes.rb
169
+ - lib/mml/v4/common_elements.rb
115
170
  - lib/mml/v4/configuration.rb
116
171
  - lib/mml/v4/maction.rb
117
172
  - lib/mml/v4/maligngroup.rb
@@ -160,6 +215,7 @@ files:
160
215
  - lib/mml/v4/semantics.rb
161
216
  - lib/mml/v4/version.rb
162
217
  - lib/mml/version.rb
218
+ - lib/mml/versioned_parser.rb
163
219
  - mml.gemspec
164
220
  - sig/mml.rbs
165
221
  homepage: https://github.com/plurimath/mml
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Mml
4
- module V3
5
- Mml::V3::Configuration::SUPPORTED_TAGS.each do |tag|
6
- autoload(tag.to_s.capitalize.to_sym, "mml/v3/#{tag}.rb")
7
- end
8
-
9
- class CommonAttributes < Lutaml::Model::Serializable
10
- Mml::V3::Configuration::SUPPORTED_TAGS.each do |tag|
11
- attribute :"#{tag}_value", Mml::V3.const_get(tag.to_s.capitalize),
12
- collection: true
13
- end
14
-
15
- xml do
16
- Mml::V3::Configuration::SUPPORTED_TAGS.each do |tag|
17
- map_element tag, to: :"#{tag}_value"
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Mml
4
- module V4
5
- Mml::V4::Configuration::SUPPORTED_TAGS.each do |tag|
6
- autoload(tag.to_s.capitalize.to_sym, "mml/v4/#{tag}.rb")
7
- end
8
-
9
- class CommonAttributes < Mml::V3::CommonAttributes
10
- Mml::V4::Configuration::SUPPORTED_TAGS.each do |tag|
11
- tag_class = if Mml::V3.const_defined?(tag.to_s.capitalize)
12
- Mml::V3.const_get(tag.to_s.capitalize)
13
- else
14
- Mml::V4.const_get(tag.to_s.capitalize)
15
- end
16
- attribute :"#{tag}_value", tag_class, collection: true
17
- end
18
-
19
- xml do
20
- Mml::V4::Configuration::SUPPORTED_TAGS.each do |tag|
21
- map_element tag, to: :"#{tag}_value"
22
- end
23
- end
24
- end
25
- end
26
- end