mml 2.4.2 → 2.4.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c77b2ef21dc7f5b7c41d642d3501b45c1ea2c6fb9c02ffe4994d854def2387ed
4
- data.tar.gz: 4be1c2a88c5643bc242d8d5ea4cacd6902e7fb68bb2cb2baba40cc9ad4c151d7
3
+ metadata.gz: f2ceed2663265e233553c9545d55aba20fd2c3d6b35e6ee3b7fdd2649d9ea779
4
+ data.tar.gz: 9c2e6fe91813bf181b968be1f2470f03c93e88dbadd0755da50d782066777b10
5
5
  SHA512:
6
- metadata.gz: 9f83c302a2ad241e04601c7ff70e2b44719e94d649ad0e808203d6ce3f6241db04ec373212a63b1ce96d82b959736690a3d2fa6e93f904812678dd41060b0ec0
7
- data.tar.gz: aa52ac71ca819d8426d89fd061a32ad9822ae05ac875b3c0bb2e42c08d731f739d5e440368128f67e34531dce80d0c5044f3a2241ea02d20b1e4612e6e39ed3d
6
+ metadata.gz: 887114641a9b57f242302c3d75bd40bb6911d41d427d3afa5d09505dcb73cc06c061c3e56c48df4d3507eb7cf8edca0dae59b5f32d91b3b46af00de14029c60f
7
+ data.tar.gz: d01b619568ccc20403c313aa44f1c2c97461fdc3d014f21189ce28d138659b7d6f56eb7fd81127a37ea6648503df4dad65213380487290ed1d900d4e890b967c
@@ -0,0 +1,127 @@
1
+ # Hand-maintained cross-repo trigger.
2
+ name: notify-mml-js
3
+
4
+ # After each successful release, dispatch do-release to plurimath/mml-js,
5
+ # which compiles that version with Opal and publishes it to npm as
6
+ # @plurimath/mml.
7
+ #
8
+ # Runs on workflow_run, not on push: the release pushes its version bump
9
+ # with GITHUB_TOKEN, which starts no push-triggered workflows.
10
+ #
11
+ # Dispatches only a commit tagged v<VERSION> for its own
12
+ # lib/mml/version.rb, and only if that commit is:
13
+ # - the child of head_sha on main's first-parent line (normal run), or
14
+ # - head_sha itself, on main, with no later v* tag on main (recovery run:
15
+ # a release with next_version=skip after a run that tagged and failed).
16
+ # Fails if lib/mml/version.rb cannot be read or does not have exactly one
17
+ # `VERSION = "..."` line.
18
+ #
19
+ # Limits: the release commits and tags its bump on top of the main tip it
20
+ # checks out, which is head_sha only if main has not moved. If it moved,
21
+ # this run's release is not dispatched. If head_sha's child is a release
22
+ # commit tagged by another run, or by the first attempt of a re-run (which
23
+ # keeps head_sha), that version is dispatched instead. A run that made no
24
+ # bump also dispatches such a child. A version can be dispatched more than
25
+ # once; mml-js must treat an already-published version as done. To send a
26
+ # missed release, run release with next_version=skip while main is at that
27
+ # release's commit.
28
+
29
+ on:
30
+ workflow_run:
31
+ workflows: [release]
32
+ types: [completed]
33
+ branches: [main]
34
+
35
+ permissions:
36
+ contents: read
37
+
38
+ jobs:
39
+ dispatch:
40
+ if: github.event.workflow_run.conclusion == 'success'
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - uses: actions/checkout@v6
44
+ with:
45
+ ref: main
46
+ fetch-depth: 0
47
+ fetch-tags: true
48
+
49
+ - name: Find the version this release run tagged
50
+ id: ver
51
+ env:
52
+ HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
53
+ run: |
54
+ set -euo pipefail
55
+ if ! printf '%s' "$HEAD_SHA" | grep -qxE '[0-9a-f]{40}'; then
56
+ printf '::error::unexpected head_sha: %q\n' "$HEAD_SHA"
57
+ exit 1
58
+ fi
59
+ # Sets V to VERSION in lib/mml/version.rb at commit $1.
60
+ read_version() {
61
+ local source
62
+ if ! source=$(git show "$1:lib/mml/version.rb"); then
63
+ printf '::error::cannot read lib/mml/version.rb at %s\n' "$1"
64
+ exit 1
65
+ fi
66
+ local lines
67
+ lines=$(printf '%s\n' "$source" \
68
+ | { grep -E '^[[:space:]]*VERSION = "[^"]+"' || true; })
69
+ V=$(printf '%s\n' "$lines" | sed -n '1s/^[^"]*"\([^"]*\)".*$/\1/p')
70
+ if [ -z "$V" ] || [ "$(printf '%s\n' "$lines" | wc -l)" -ne 1 ]; then
71
+ printf '::error::no VERSION = "..." line in lib/mml/version.rb at %s\n' "$1"
72
+ exit 1
73
+ fi
74
+ }
75
+ tag_commit() { git rev-parse -q --verify "refs/tags/v$1^{commit}" || true; }
76
+ RELEASE=""
77
+ NEW=""
78
+ # Normal run: the bump commit is head_sha's child on main's
79
+ # first-parent line.
80
+ BUMP=$(git rev-list --first-parent --parents origin/main \
81
+ | awk -v h="$HEAD_SHA" '!found && $2 == h { print $1; found = 1 }')
82
+ if [ -n "$BUMP" ]; then
83
+ read_version "$BUMP"
84
+ if [ "$(tag_commit "$V")" = "$BUMP" ]; then
85
+ RELEASE=$BUMP
86
+ NEW=$V
87
+ fi
88
+ fi
89
+ # Recovery run: head_sha is on main, is the tagged release commit,
90
+ # and no later v* tag is on main.
91
+ if [ -z "$RELEASE" ] && git merge-base --is-ancestor "$HEAD_SHA" origin/main 2>/dev/null \
92
+ && [ -z "$(git tag -l 'v*' --merged origin/main --no-merged "$HEAD_SHA")" ]; then
93
+ read_version "$HEAD_SHA"
94
+ if [ "$(tag_commit "$V")" = "$HEAD_SHA" ]; then
95
+ RELEASE=$HEAD_SHA
96
+ NEW=$V
97
+ fi
98
+ fi
99
+ if [ -z "$RELEASE" ]; then
100
+ echo "no release commit for this run; not dispatching"
101
+ echo "dispatch=false" >> "$GITHUB_OUTPUT"
102
+ exit 0
103
+ fi
104
+ # Accept only npm semver (2.5.0.rc1 is not).
105
+ # Reject newlines before grep's per-line check.
106
+ if [[ "$NEW" == *$'\n'* ]] || ! printf '%s' "$NEW" \
107
+ | grep -qE '^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-((0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*))*))?(\+([0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*))?$'; then
108
+ printf '::error::VERSION %q is not a semver version mml-js can publish\n' "$NEW"
109
+ exit 1
110
+ fi
111
+ echo "release commit $RELEASE is tagged v$NEW; dispatching"
112
+ echo "dispatch=true" >> "$GITHUB_OUTPUT"
113
+ echo "version=$NEW" >> "$GITHUB_OUTPUT"
114
+
115
+ - name: Dispatch do-release to plurimath/mml-js
116
+ if: steps.ver.outputs.dispatch == 'true'
117
+ # v4.0.1
118
+ uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697
119
+ with:
120
+ token: ${{ secrets.PLURIMATH_CI_PAT_TOKEN }}
121
+ repository: plurimath/mml-js
122
+ event-type: do-release
123
+ client-payload: |
124
+ {
125
+ "version": "${{ steps.ver.outputs.version }}",
126
+ "ruby_ref": "v${{ steps.ver.outputs.version }}"
127
+ }
@@ -0,0 +1,25 @@
1
+ name: opal
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ boot-file-spec:
13
+ name: Opal boot file verification
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v6
17
+
18
+ - name: Set up Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: '3.3'
22
+ bundler-cache: true
23
+
24
+ - name: Run opal boot file spec
25
+ run: bundle exec rspec spec/mml/opal_boot_spec.rb
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ gemspec
6
6
  gem "canon"
7
7
  gem "lutaml-model", github: "lutaml/lutaml-model", branch: "main"
8
8
  gem "nokogiri"
9
+ gem "opal", "~> 1.8"
9
10
  gem "ox"
10
11
  gem "pry"
11
12
  gem "rake", "~> 12.0"
data/README.adoc CHANGED
@@ -630,6 +630,33 @@ bundle exec rubocop # Lint
630
630
  bin/console # Interactive IRB
631
631
  ----
632
632
 
633
+ === Opal build
634
+
635
+ `lib/mml/opal.rb` is the Opal entry point. It requires every file under
636
+ `lib/mml` in load order and registers the V2, V3 and V4 models at its end.
637
+ `spec/mml/opal_boot_spec.rb` checks it on MRI and compiles it with
638
+ `Opal::Builder`; the `opal` workflow runs that spec.
639
+
640
+ `spec/opal/` holds a runtime smoke test that runs only locally. It compiles
641
+ the boot file with Opal, loads it in Node after `@lutaml/opal-runtime` and
642
+ `@lutaml/lutaml-model`, and round-trips one document through
643
+ `Mml::V2::Math.from_xml`, `Mml::V3::Math.from_xml` and
644
+ `Mml::V4::Math.from_xml`:
645
+
646
+ [source,bash]
647
+ ----
648
+ bundle exec ruby spec/opal/build_smoke.rb /tmp/mml-opal.js
649
+ cd <directory whose node_modules has both packages>
650
+ node /path/to/mml/spec/opal/smoke.js /tmp/mml-opal.js
651
+ ----
652
+
653
+ There is no CI job for it, because no published `@lutaml/lutaml-model`
654
+ works with this gem: `0.1.0` (`latest`) contains no `dist/` files, and the
655
+ `next` dev build is older than the lutaml-model version this gem requires.
656
+ Locally it needs an `@lutaml/lutaml-model` compiled with Opal from a
657
+ lutaml-model version this gem accepts, for example a local build of
658
+ https://github.com/lutaml/lutaml-model-js[lutaml-model-js].
659
+
633
660
  == Contributing
634
661
 
635
662
  Bug reports and pull requests are welcome on GitHub at
@@ -210,7 +210,7 @@ module Mml
210
210
  attribute :moment_value, :moment, collection: true
211
211
  attribute :momentabout_value, :momentabout, collection: true
212
212
 
213
- # rubocop:disable Metrics/BlockLength
213
+ # rubocop:disable-next Metrics/BlockLength
214
214
  xml do
215
215
  # Presentation elements
216
216
  map_element "mmultiscripts", to: :mmultiscripts_value
@@ -416,6 +416,5 @@ module Mml
416
416
  map_element "moment", to: :moment_value
417
417
  map_element "momentabout", to: :momentabout_value
418
418
  end
419
- # rubocop:enable Metrics/BlockLength
420
419
  end
421
420
  end
data/lib/mml/opal.rb ADDED
@@ -0,0 +1,371 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Opal entry point for mml.
4
+ #
5
+ # Requires every file under lib/mml in dependency order, then registers
6
+ # each version's models once. Mml.opal_boot! keeps the version files from
7
+ # registering at load time, before their element files are loaded.
8
+ #
9
+ # Ordering:
10
+ # - Each version's Configuration, Namespace and CommonElements load
11
+ # before its element files.
12
+ # - The first `module Mml::VN` autoloads mml/vN.rb. The later
13
+ # `require "mml/vN"` is a no-op.
14
+ # - Mml::VN.register_models! runs after the last element file. It skips
15
+ # a version whose models are already registered.
16
+
17
+ require "lutaml/model"
18
+
19
+ require "mml"
20
+ Mml.opal_boot!
21
+ require "mml/version"
22
+ require "mml/namespace"
23
+ require "mml/context_options"
24
+ require "mml/context_configuration"
25
+ require "mml/versioned_parser"
26
+
27
+ require "mml/base"
28
+ require "mml/common_elements"
29
+
30
+ # Base attribute modules
31
+ require "mml/base/common_attributes"
32
+ require "mml/base/universal_presentation_attributes"
33
+ require "mml/base/v3_common"
34
+ require "mml/base/v3_presentation_attributes"
35
+ require "mml/base/v4_attributes"
36
+ require "mml/base/deprecated_font_attributes"
37
+ require "mml/base/v3_only"
38
+
39
+ # Base v3_only nested files
40
+ require "mml/base/v3_only/operator_attrs"
41
+ require "mml/base/v3_only/style_attrs"
42
+ require "mml/base/v3_only/table_attrs"
43
+
44
+ # Base content loader + content modules
45
+ require "mml/base/content_loader"
46
+ require "mml/base/content/annotation"
47
+ require "mml/base/content/annotation_xml"
48
+ require "mml/base/content/apply"
49
+ require "mml/base/content/arith"
50
+ require "mml/base/content/bind"
51
+ require "mml/base/content/bvar"
52
+ require "mml/base/content/calculus"
53
+ require "mml/base/content/cbytes"
54
+ require "mml/base/content/cerror"
55
+ require "mml/base/content/ci"
56
+ require "mml/base/content/cn"
57
+ require "mml/base/content/condition"
58
+ require "mml/base/content/constants"
59
+ require "mml/base/content/cs"
60
+ require "mml/base/content/csymbol"
61
+ require "mml/base/content/declare"
62
+ require "mml/base/content/degree"
63
+ require "mml/base/content/elementary_functions"
64
+ require "mml/base/content/fn"
65
+ require "mml/base/content/functions"
66
+ require "mml/base/content/interval"
67
+ require "mml/base/content/inverse"
68
+ require "mml/base/content/lambda"
69
+ require "mml/base/content/linear_algebra"
70
+ require "mml/base/content/logic"
71
+ require "mml/base/content/otherwise"
72
+ require "mml/base/content/piece"
73
+ require "mml/base/content/piecewise"
74
+ require "mml/base/content/relations"
75
+ require "mml/base/content/reln"
76
+ require "mml/base/content/semantics"
77
+ require "mml/base/content/sep"
78
+ require "mml/base/content/sets"
79
+ require "mml/base/content/share"
80
+ require "mml/base/content/statistics"
81
+ require "mml/base/content/vector_calculus"
82
+
83
+ # Base presentation modules
84
+ require "mml/base/maction"
85
+ require "mml/base/maligngroup"
86
+ require "mml/base/malignmark"
87
+ require "mml/base/math"
88
+ require "mml/base/menclose"
89
+ require "mml/base/merror"
90
+ require "mml/base/mfenced"
91
+ require "mml/base/mfrac"
92
+ require "mml/base/mfraction"
93
+ require "mml/base/mglyph"
94
+ require "mml/base/mi"
95
+ require "mml/base/mlabeledtr"
96
+ require "mml/base/mlongdiv"
97
+ require "mml/base/mmultiscripts"
98
+ require "mml/base/mn"
99
+ require "mml/base/mo"
100
+ require "mml/base/mover"
101
+ require "mml/base/mpadded"
102
+ require "mml/base/mphantom"
103
+ require "mml/base/mprescripts"
104
+ require "mml/base/mroot"
105
+ require "mml/base/mrow"
106
+ require "mml/base/ms"
107
+ require "mml/base/mscarries"
108
+ require "mml/base/mscarry"
109
+ require "mml/base/msgroup"
110
+ require "mml/base/msline"
111
+ require "mml/base/mspace"
112
+ require "mml/base/msqrt"
113
+ require "mml/base/msrow"
114
+ require "mml/base/mstack"
115
+ require "mml/base/mstyle"
116
+ require "mml/base/msub"
117
+ require "mml/base/msubsup"
118
+ require "mml/base/msup"
119
+ require "mml/base/mtable"
120
+ require "mml/base/mtd"
121
+ require "mml/base/mtext"
122
+ require "mml/base/mtr"
123
+ require "mml/base/munder"
124
+ require "mml/base/munderover"
125
+ require "mml/base/none"
126
+ require "mml/base/semantics"
127
+
128
+ # v2 shared infrastructure
129
+ require "mml/v2/configuration"
130
+ require "mml/v2/namespace"
131
+ require "mml/v2/common_elements"
132
+
133
+ # v2 element files
134
+ require "mml/v2/annotation"
135
+ require "mml/v2/annotation_xml"
136
+ require "mml/v2/apply"
137
+ require "mml/v2/arith"
138
+ require "mml/v2/bind"
139
+ require "mml/v2/bvar"
140
+ require "mml/v2/calculus"
141
+ require "mml/v2/ci"
142
+ require "mml/v2/cn"
143
+ require "mml/v2/condition"
144
+ require "mml/v2/constants"
145
+ require "mml/v2/csymbol"
146
+ require "mml/v2/degree"
147
+ require "mml/v2/elementary_functions"
148
+ require "mml/v2/fn"
149
+ require "mml/v2/functions"
150
+ require "mml/v2/interval"
151
+ require "mml/v2/inverse"
152
+ require "mml/v2/lambda"
153
+ require "mml/v2/linear_algebra"
154
+ require "mml/v2/logic"
155
+ require "mml/v2/maction"
156
+ require "mml/v2/maligngroup"
157
+ require "mml/v2/malignmark"
158
+ require "mml/v2/math"
159
+ require "mml/v2/menclose"
160
+ require "mml/v2/merror"
161
+ require "mml/v2/mfenced"
162
+ require "mml/v2/mfrac"
163
+ require "mml/v2/mfraction"
164
+ require "mml/v2/mglyph"
165
+ require "mml/v2/mi"
166
+ require "mml/v2/mlabeledtr"
167
+ require "mml/v2/mlongdiv"
168
+ require "mml/v2/mmultiscripts"
169
+ require "mml/v2/mn"
170
+ require "mml/v2/mo"
171
+ require "mml/v2/mover"
172
+ require "mml/v2/mpadded"
173
+ require "mml/v2/mphantom"
174
+ require "mml/v2/mprescripts"
175
+ require "mml/v2/mroot"
176
+ require "mml/v2/mrow"
177
+ require "mml/v2/ms"
178
+ require "mml/v2/mscarries"
179
+ require "mml/v2/mscarry"
180
+ require "mml/v2/msgroup"
181
+ require "mml/v2/msline"
182
+ require "mml/v2/mspace"
183
+ require "mml/v2/msqrt"
184
+ require "mml/v2/msrow"
185
+ require "mml/v2/mstack"
186
+ require "mml/v2/mstyle"
187
+ require "mml/v2/msub"
188
+ require "mml/v2/msubsup"
189
+ require "mml/v2/msup"
190
+ require "mml/v2/mtable"
191
+ require "mml/v2/mtd"
192
+ require "mml/v2/mtext"
193
+ require "mml/v2/mtr"
194
+ require "mml/v2/munder"
195
+ require "mml/v2/munderover"
196
+ require "mml/v2/none"
197
+ require "mml/v2/otherwise"
198
+ require "mml/v2/piece"
199
+ require "mml/v2/piecewise"
200
+ require "mml/v2/relations"
201
+ require "mml/v2/reln"
202
+ require "mml/v2/semantics"
203
+ require "mml/v2/sep"
204
+ require "mml/v2/sets"
205
+ require "mml/v2/statistics"
206
+ require "mml/v2/vector_calculus"
207
+
208
+ # v2 module (already autoloaded above)
209
+ require "mml/v2"
210
+
211
+ # v3 shared infrastructure
212
+ require "mml/v3/configuration"
213
+ require "mml/v3/namespace"
214
+ require "mml/v3/common_elements"
215
+
216
+ # v3 element files
217
+ require "mml/v3/annotation"
218
+ require "mml/v3/annotation_xml"
219
+ require "mml/v3/apply"
220
+ require "mml/v3/arith"
221
+ require "mml/v3/bind"
222
+ require "mml/v3/calculus"
223
+ require "mml/v3/cbytes"
224
+ require "mml/v3/cerror"
225
+ require "mml/v3/ci"
226
+ require "mml/v3/cn"
227
+ require "mml/v3/constants"
228
+ require "mml/v3/constructs"
229
+ require "mml/v3/cs"
230
+ require "mml/v3/csymbol"
231
+ require "mml/v3/deprecated_content"
232
+ require "mml/v3/elementary_functions"
233
+ require "mml/v3/functions"
234
+ require "mml/v3/linear_algebra"
235
+ require "mml/v3/logic"
236
+ require "mml/v3/maction"
237
+ require "mml/v3/maligngroup"
238
+ require "mml/v3/malignmark"
239
+ require "mml/v3/math"
240
+ require "mml/v3/menclose"
241
+ require "mml/v3/merror"
242
+ require "mml/v3/mfenced"
243
+ require "mml/v3/mfrac"
244
+ require "mml/v3/mfraction"
245
+ require "mml/v3/mglyph"
246
+ require "mml/v3/mi"
247
+ require "mml/v3/mlabeledtr"
248
+ require "mml/v3/mlongdiv"
249
+ require "mml/v3/mmultiscripts"
250
+ require "mml/v3/mn"
251
+ require "mml/v3/mo"
252
+ require "mml/v3/mover"
253
+ require "mml/v3/mpadded"
254
+ require "mml/v3/mphantom"
255
+ require "mml/v3/mprescripts"
256
+ require "mml/v3/mroot"
257
+ require "mml/v3/mrow"
258
+ require "mml/v3/ms"
259
+ require "mml/v3/mscarries"
260
+ require "mml/v3/mscarry"
261
+ require "mml/v3/msgroup"
262
+ require "mml/v3/msline"
263
+ require "mml/v3/mspace"
264
+ require "mml/v3/msqrt"
265
+ require "mml/v3/msrow"
266
+ require "mml/v3/mstack"
267
+ require "mml/v3/mstyle"
268
+ require "mml/v3/msub"
269
+ require "mml/v3/msubsup"
270
+ require "mml/v3/msup"
271
+ require "mml/v3/mtable"
272
+ require "mml/v3/mtd"
273
+ require "mml/v3/mtext"
274
+ require "mml/v3/mtr"
275
+ require "mml/v3/munder"
276
+ require "mml/v3/munderover"
277
+ require "mml/v3/none"
278
+ require "mml/v3/relations"
279
+ require "mml/v3/semantics"
280
+ require "mml/v3/sets"
281
+ require "mml/v3/statistics"
282
+ require "mml/v3/vector_calculus"
283
+ require "mml/v3/version"
284
+
285
+ # v3 module (already autoloaded above)
286
+ require "mml/v3"
287
+
288
+ # v4 shared infrastructure
289
+ require "mml/v4/configuration"
290
+ require "mml/v4/namespace"
291
+ require "mml/v4/common_elements"
292
+
293
+ # v4 element files
294
+ require "mml/v4/a"
295
+ require "mml/v4/annotation"
296
+ require "mml/v4/annotation_xml"
297
+ require "mml/v4/apply"
298
+ require "mml/v4/arith"
299
+ require "mml/v4/calculus"
300
+ require "mml/v4/cbytes"
301
+ require "mml/v4/cerror"
302
+ require "mml/v4/ci"
303
+ require "mml/v4/cn"
304
+ require "mml/v4/constants"
305
+ require "mml/v4/constructs"
306
+ require "mml/v4/cs"
307
+ require "mml/v4/csymbol"
308
+ require "mml/v4/deprecated_content"
309
+ require "mml/v4/elementary_functions"
310
+ require "mml/v4/factorof"
311
+ require "mml/v4/functions"
312
+ require "mml/v4/limit"
313
+ require "mml/v4/linear_algebra"
314
+ require "mml/v4/logic"
315
+ require "mml/v4/maction"
316
+ require "mml/v4/maligngroup"
317
+ require "mml/v4/malignmark"
318
+ require "mml/v4/math"
319
+ require "mml/v4/menclose"
320
+ require "mml/v4/merror"
321
+ require "mml/v4/mfenced"
322
+ require "mml/v4/mfrac"
323
+ require "mml/v4/mfraction"
324
+ require "mml/v4/mglyph"
325
+ require "mml/v4/mi"
326
+ require "mml/v4/mlabeledtr"
327
+ require "mml/v4/mlongdiv"
328
+ require "mml/v4/mmultiscripts"
329
+ require "mml/v4/mn"
330
+ require "mml/v4/mo"
331
+ require "mml/v4/mover"
332
+ require "mml/v4/mpadded"
333
+ require "mml/v4/mphantom"
334
+ require "mml/v4/mprescripts"
335
+ require "mml/v4/mroot"
336
+ require "mml/v4/mrow"
337
+ require "mml/v4/ms"
338
+ require "mml/v4/mscarries"
339
+ require "mml/v4/mscarry"
340
+ require "mml/v4/msgroup"
341
+ require "mml/v4/msline"
342
+ require "mml/v4/mspace"
343
+ require "mml/v4/msqrt"
344
+ require "mml/v4/msrow"
345
+ require "mml/v4/mstack"
346
+ require "mml/v4/mstyle"
347
+ require "mml/v4/msub"
348
+ require "mml/v4/msubsup"
349
+ require "mml/v4/msup"
350
+ require "mml/v4/mtable"
351
+ require "mml/v4/mtd"
352
+ require "mml/v4/mtext"
353
+ require "mml/v4/mtr"
354
+ require "mml/v4/munder"
355
+ require "mml/v4/munderover"
356
+ require "mml/v4/none"
357
+ require "mml/v4/relations"
358
+ require "mml/v4/semantics"
359
+ require "mml/v4/sets"
360
+ require "mml/v4/statistics"
361
+ require "mml/v4/tendsto"
362
+ require "mml/v4/vector_calculus"
363
+ require "mml/v4/version"
364
+
365
+ # v4 module (already autoloaded above)
366
+ require "mml/v4"
367
+
368
+ # Register every version now that all element files are loaded.
369
+ Mml::V2.register_models!
370
+ Mml::V3.register_models!
371
+ Mml::V4.register_models!