mml 2.3.2 → 2.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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +5 -42
- data/lib/mml/v2/annotation.rb +4 -0
- data/lib/mml/v2/annotation_xml.rb +4 -0
- data/lib/mml/v2/arith.rb +88 -0
- data/lib/mml/v2/ci.rb +4 -0
- data/lib/mml/v2/cn.rb +4 -0
- data/lib/mml/v2/constants.rb +60 -0
- data/lib/mml/v2/csymbol.rb +4 -0
- data/lib/mml/v2/functions.rb +20 -0
- data/lib/mml/v2/logic.rb +28 -0
- data/lib/mml/v2/mfraction.rb +4 -0
- data/lib/mml/v2/mi.rb +4 -0
- data/lib/mml/v2/mn.rb +4 -0
- data/lib/mml/v2/ms.rb +4 -0
- data/lib/mml/v2/relations.rb +36 -0
- data/lib/mml/v2/statistics.rb +24 -0
- data/lib/mml/v2/vector_calculus.rb +16 -0
- data/lib/mml/v2.rb +0 -2
- data/lib/mml/v3/arith.rb +88 -0
- data/lib/mml/v3/cbytes.rb +4 -0
- data/lib/mml/v3/ci.rb +4 -0
- data/lib/mml/v3/cn.rb +4 -0
- data/lib/mml/v3/constants.rb +60 -0
- data/lib/mml/v3/cs.rb +4 -0
- data/lib/mml/v3/csymbol.rb +4 -0
- data/lib/mml/v3/elementary_functions.rb +108 -0
- data/lib/mml/v3/functions.rb +20 -0
- data/lib/mml/v3/linear_algebra.rb +24 -0
- data/lib/mml/v3/logic.rb +28 -0
- data/lib/mml/v3/maligngroup.rb +4 -0
- data/lib/mml/v3/malignmark.rb +4 -0
- data/lib/mml/v3/mglyph.rb +4 -0
- data/lib/mml/v3/mi.rb +4 -0
- data/lib/mml/v3/mlabeledtr.rb +4 -0
- data/lib/mml/v3/mn.rb +4 -0
- data/lib/mml/v3/mo.rb +4 -0
- data/lib/mml/v3/mprescripts.rb +4 -0
- data/lib/mml/v3/msline.rb +4 -0
- data/lib/mml/v3/mspace.rb +4 -0
- data/lib/mml/v3/mtable.rb +4 -0
- data/lib/mml/v3/mtext.rb +4 -0
- data/lib/mml/v3/mtr.rb +4 -0
- data/lib/mml/v3/none.rb +4 -0
- data/lib/mml/v3/relations.rb +36 -0
- data/lib/mml/v3/sets.rb +44 -0
- data/lib/mml/v3/statistics.rb +24 -0
- data/lib/mml/v3/vector_calculus.rb +16 -0
- data/lib/mml/v3.rb +0 -2
- data/lib/mml/v4/arith.rb +66 -0
- data/lib/mml/v4/calculus.rb +15 -0
- data/lib/mml/v4/cbytes.rb +3 -0
- data/lib/mml/v4/ci.rb +3 -0
- data/lib/mml/v4/cn.rb +3 -0
- data/lib/mml/v4/constants.rb +45 -0
- data/lib/mml/v4/cs.rb +3 -0
- data/lib/mml/v4/csymbol.rb +3 -0
- data/lib/mml/v4/elementary_functions.rb +81 -0
- data/lib/mml/v4/factorof.rb +3 -0
- data/lib/mml/v4/functions.rb +15 -0
- data/lib/mml/v4/limit.rb +3 -0
- data/lib/mml/v4/linear_algebra.rb +27 -0
- data/lib/mml/v4/logic.rb +21 -0
- data/lib/mml/v4/maligngroup.rb +3 -0
- data/lib/mml/v4/malignmark.rb +3 -0
- data/lib/mml/v4/mglyph.rb +3 -0
- data/lib/mml/v4/mi.rb +4 -0
- data/lib/mml/v4/mlabeledtr.rb +3 -0
- data/lib/mml/v4/mn.rb +4 -0
- data/lib/mml/v4/mo.rb +3 -0
- data/lib/mml/v4/mprescripts.rb +3 -0
- data/lib/mml/v4/msline.rb +3 -0
- data/lib/mml/v4/mspace.rb +3 -0
- data/lib/mml/v4/mtable.rb +3 -0
- data/lib/mml/v4/mtext.rb +3 -0
- data/lib/mml/v4/mtr.rb +3 -0
- data/lib/mml/v4/none.rb +3 -0
- data/lib/mml/v4/relations.rb +24 -0
- data/lib/mml/v4/sets.rb +39 -0
- data/lib/mml/v4/statistics.rb +21 -0
- data/lib/mml/v4/tendsto.rb +3 -0
- data/lib/mml/v4/vector_calculus.rb +12 -0
- data/lib/mml/v4.rb +0 -2
- data/lib/mml/version.rb +1 -1
- data/lib/mml/versioned_parser.rb +18 -11
- data/lib/mml.rb +14 -3
- metadata +2 -2
data/lib/mml/v4/statistics.rb
CHANGED
|
@@ -3,30 +3,51 @@
|
|
|
3
3
|
module Mml
|
|
4
4
|
module V4
|
|
5
5
|
class Mean < Lutaml::Model::Serializable
|
|
6
|
+
def self.lutaml_default_register
|
|
7
|
+
:mml_v4
|
|
8
|
+
end
|
|
6
9
|
include Base::Content::Mean
|
|
7
10
|
end
|
|
8
11
|
|
|
9
12
|
class Sdev < Lutaml::Model::Serializable
|
|
13
|
+
def self.lutaml_default_register
|
|
14
|
+
:mml_v4
|
|
15
|
+
end
|
|
10
16
|
include Base::Content::Sdev
|
|
11
17
|
end
|
|
12
18
|
|
|
13
19
|
class Variance < Lutaml::Model::Serializable
|
|
20
|
+
def self.lutaml_default_register
|
|
21
|
+
:mml_v4
|
|
22
|
+
end
|
|
14
23
|
include Base::Content::Variance
|
|
15
24
|
end
|
|
16
25
|
|
|
17
26
|
class Median < Lutaml::Model::Serializable
|
|
27
|
+
def self.lutaml_default_register
|
|
28
|
+
:mml_v4
|
|
29
|
+
end
|
|
18
30
|
include Base::Content::Median
|
|
19
31
|
end
|
|
20
32
|
|
|
21
33
|
class Mode < Lutaml::Model::Serializable
|
|
34
|
+
def self.lutaml_default_register
|
|
35
|
+
:mml_v4
|
|
36
|
+
end
|
|
22
37
|
include Base::Content::Mode
|
|
23
38
|
end
|
|
24
39
|
|
|
25
40
|
class Moment < Lutaml::Model::Serializable
|
|
41
|
+
def self.lutaml_default_register
|
|
42
|
+
:mml_v4
|
|
43
|
+
end
|
|
26
44
|
include Base::Content::Moment
|
|
27
45
|
end
|
|
28
46
|
|
|
29
47
|
class Momentabout < Lutaml::Model::Serializable
|
|
48
|
+
def self.lutaml_default_register
|
|
49
|
+
:mml_v4
|
|
50
|
+
end
|
|
30
51
|
include Base::Content::Momentabout
|
|
31
52
|
end
|
|
32
53
|
end
|
data/lib/mml/v4/tendsto.rb
CHANGED
|
@@ -3,18 +3,30 @@
|
|
|
3
3
|
module Mml
|
|
4
4
|
module V4
|
|
5
5
|
class Divergence < Lutaml::Model::Serializable
|
|
6
|
+
def self.lutaml_default_register
|
|
7
|
+
:mml_v4
|
|
8
|
+
end
|
|
6
9
|
include Base::Content::Divergence
|
|
7
10
|
end
|
|
8
11
|
|
|
9
12
|
class Grad < Lutaml::Model::Serializable
|
|
13
|
+
def self.lutaml_default_register
|
|
14
|
+
:mml_v4
|
|
15
|
+
end
|
|
10
16
|
include Base::Content::Grad
|
|
11
17
|
end
|
|
12
18
|
|
|
13
19
|
class Curl < Lutaml::Model::Serializable
|
|
20
|
+
def self.lutaml_default_register
|
|
21
|
+
:mml_v4
|
|
22
|
+
end
|
|
14
23
|
include Base::Content::Curl
|
|
15
24
|
end
|
|
16
25
|
|
|
17
26
|
class Laplacian < Lutaml::Model::Serializable
|
|
27
|
+
def self.lutaml_default_register
|
|
28
|
+
:mml_v4
|
|
29
|
+
end
|
|
18
30
|
include Base::Content::Laplacian
|
|
19
31
|
end
|
|
20
32
|
end
|
data/lib/mml/v4.rb
CHANGED
data/lib/mml/version.rb
CHANGED
data/lib/mml/versioned_parser.rb
CHANGED
|
@@ -5,7 +5,6 @@ module Mml
|
|
|
5
5
|
# Shared parse entrypoint for versioned modules.
|
|
6
6
|
def parse(input, namespace_exist: true,
|
|
7
7
|
context: Mml::UNSPECIFIED_CONTEXT, register: nil)
|
|
8
|
-
self::Configuration.adapter ||= Mml::DEFAULT_ADAPTER
|
|
9
8
|
context_id = parse_context_id(context, register)
|
|
10
9
|
root_class = Lutaml::Model::GlobalContext.resolve_type(
|
|
11
10
|
:math,
|
|
@@ -18,14 +17,6 @@ module Mml
|
|
|
18
17
|
)
|
|
19
18
|
end
|
|
20
19
|
|
|
21
|
-
# Namespace-less MathML is normalized before handing it to lutaml-model.
|
|
22
|
-
def parse_with_no_namespace(input)
|
|
23
|
-
adapter = self::Configuration.adapter || Mml::DEFAULT_ADAPTER
|
|
24
|
-
Moxml.new(adapter).parse(input).tap do |doc|
|
|
25
|
-
doc.root.add_namespace(nil, self::Namespace.uri)
|
|
26
|
-
end.to_xml
|
|
27
|
-
end
|
|
28
|
-
|
|
29
20
|
# Version modules keep their own default context id.
|
|
30
21
|
def parse_context_id(context, register)
|
|
31
22
|
Mml::ContextOptions.normalize_context_option(
|
|
@@ -36,11 +27,27 @@ module Mml
|
|
|
36
27
|
)
|
|
37
28
|
end
|
|
38
29
|
|
|
39
|
-
#
|
|
30
|
+
# Inject the MathML namespace into the raw XML string before parsing.
|
|
31
|
+
# This avoids a double parse-serialize cycle (previously the code used
|
|
32
|
+
# Moxml to parse → add namespace → serialize → parse again).
|
|
33
|
+
#
|
|
34
|
+
# String-level injection is safe for well-formed MathML: the root element
|
|
35
|
+
# is always <math>. For malformed input, the subsequent from_xml parse will
|
|
36
|
+
# raise a proper error.
|
|
40
37
|
def xml_input(input, namespace_exist)
|
|
41
38
|
return input if namespace_exist
|
|
42
39
|
|
|
43
|
-
|
|
40
|
+
inject_namespace(input, self::Namespace.uri)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def inject_namespace(xml_string, namespace_uri)
|
|
46
|
+
# Add xmlns attribute to the <math> root element in the raw XML string.
|
|
47
|
+
# Handles both <math> and <math ...> (with existing attributes).
|
|
48
|
+
xml_string.sub(/<math([\s>])/) do
|
|
49
|
+
"<math xmlns=\"#{namespace_uri}\"#{::Regexp.last_match(1)}"
|
|
50
|
+
end
|
|
44
51
|
end
|
|
45
52
|
end
|
|
46
53
|
end
|
data/lib/mml.rb
CHANGED
|
@@ -5,10 +5,23 @@ require "lutaml/model"
|
|
|
5
5
|
module Mml
|
|
6
6
|
class Error < StandardError; end
|
|
7
7
|
|
|
8
|
-
DEFAULT_ADAPTER = RUBY_ENGINE == "opal" ? :oga : :ox
|
|
9
8
|
SUPPORTED_VERSIONS = [2, 3, 4].freeze
|
|
10
9
|
UNSPECIFIED_CONTEXT = Object.new.freeze
|
|
11
10
|
|
|
11
|
+
# Returns the appropriate XML adapter, respecting the host application's
|
|
12
|
+
# configuration. Opal always uses Oga; CRuby delegates to
|
|
13
|
+
# Lutaml::Model::Config.xml_adapter_type so that users control the adapter
|
|
14
|
+
# from a single configuration point.
|
|
15
|
+
module_function
|
|
16
|
+
|
|
17
|
+
def default_adapter
|
|
18
|
+
if RUBY_ENGINE == "opal"
|
|
19
|
+
:oga
|
|
20
|
+
else
|
|
21
|
+
Lutaml::Model::Config.xml_adapter_type
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
12
25
|
autoload :Namespace, "mml/namespace"
|
|
13
26
|
autoload :CommonElements, "mml/common_elements"
|
|
14
27
|
autoload :ContextOptions, "mml/context_options"
|
|
@@ -17,8 +30,6 @@ module Mml
|
|
|
17
30
|
autoload :V3, "mml/v3"
|
|
18
31
|
autoload :V4, "mml/v4"
|
|
19
32
|
|
|
20
|
-
module_function
|
|
21
|
-
|
|
22
33
|
def parse(
|
|
23
34
|
input,
|
|
24
35
|
namespace_exist: true,
|
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.3.
|
|
4
|
+
version: 2.3.4
|
|
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-04-
|
|
11
|
+
date: 2026-04-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: lutaml-model
|