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.
data/lib/mml/v4.rb CHANGED
@@ -210,229 +210,236 @@ module Mml
210
210
  autoload :Moment, "mml/v4/statistics"
211
211
  autoload :Momentabout, "mml/v4/statistics"
212
212
 
213
- # Presentation element registrations
214
- Configuration.register_model(A, id: :a)
215
- Configuration.register_model(Maction, id: :maction)
216
- Configuration.register_model(Maligngroup, id: :maligngroup)
217
- Configuration.register_model(Malignmark, id: :malignmark)
218
- Configuration.register_model(Menclose, id: :menclose)
219
- Configuration.register_model(Merror, id: :merror)
220
- Configuration.register_model(Mfenced, id: :mfenced)
221
- Configuration.register_model(Mfrac, id: :mfrac)
222
- Configuration.register_model(Mfraction, id: :mfraction)
223
- Configuration.register_model(Mglyph, id: :mglyph)
224
- Configuration.register_model(Mi, id: :mi)
225
- Configuration.register_model(Mlongdiv, id: :mlongdiv)
226
- Configuration.register_model(Mn, id: :mn)
227
- Configuration.register_model(Mo, id: :mo)
228
- Configuration.register_model(Mover, id: :mover)
229
- Configuration.register_model(Mpadded, id: :mpadded)
230
- Configuration.register_model(Mphantom, id: :mphantom)
231
- Configuration.register_model(Mprescripts, id: :mprescripts)
232
- Configuration.register_model(Mroot, id: :mroot)
233
- Configuration.register_model(Mrow, id: :mrow)
234
- Configuration.register_model(Ms, id: :ms)
235
- Configuration.register_model(Mscarries, id: :mscarries)
236
- Configuration.register_model(Mscarry, id: :mscarry)
237
- Configuration.register_model(Msgroup, id: :msgroup)
238
- Configuration.register_model(Msline, id: :msline)
239
- Configuration.register_model(Mspace, id: :mspace)
240
- Configuration.register_model(Msqrt, id: :msqrt)
241
- Configuration.register_model(Msrow, id: :msrow)
242
- Configuration.register_model(Mstack, id: :mstack)
243
- Configuration.register_model(Mstyle, id: :mstyle)
244
- Configuration.register_model(Msub, id: :msub)
245
- Configuration.register_model(Msubsup, id: :msubsup)
246
- Configuration.register_model(Msup, id: :msup)
247
- Configuration.register_model(Mtd, id: :mtd)
248
- Configuration.register_model(Mtable, id: :mtable)
249
- Configuration.register_model(Mtext, id: :mtext)
250
- Configuration.register_model(Mtr, id: :mtr)
251
- Configuration.register_model(Mlabeledtr, id: :mlabeledtr)
252
- Configuration.register_model(Munder, id: :munder)
253
- Configuration.register_model(Munderover, id: :munderover)
254
- Configuration.register_model(Mmultiscripts, id: :mmultiscripts)
255
- Configuration.register_model(None, id: :none)
256
- Configuration.register_model(Semantics, id: :semantics)
257
- Configuration.register_model(Math, id: :math)
213
+ # Registers every element class with this version's Configuration.
214
+ # Call it through register_models!, which runs it once per process.
215
+ def self.register_all_models # rubocop:disable Metrics/MethodLength,Metrics/AbcSize
216
+ # Presentation element registrations
217
+ Configuration.register_model(A, id: :a)
218
+ Configuration.register_model(Maction, id: :maction)
219
+ Configuration.register_model(Maligngroup, id: :maligngroup)
220
+ Configuration.register_model(Malignmark, id: :malignmark)
221
+ Configuration.register_model(Menclose, id: :menclose)
222
+ Configuration.register_model(Merror, id: :merror)
223
+ Configuration.register_model(Mfenced, id: :mfenced)
224
+ Configuration.register_model(Mfrac, id: :mfrac)
225
+ Configuration.register_model(Mfraction, id: :mfraction)
226
+ Configuration.register_model(Mglyph, id: :mglyph)
227
+ Configuration.register_model(Mi, id: :mi)
228
+ Configuration.register_model(Mlongdiv, id: :mlongdiv)
229
+ Configuration.register_model(Mn, id: :mn)
230
+ Configuration.register_model(Mo, id: :mo)
231
+ Configuration.register_model(Mover, id: :mover)
232
+ Configuration.register_model(Mpadded, id: :mpadded)
233
+ Configuration.register_model(Mphantom, id: :mphantom)
234
+ Configuration.register_model(Mprescripts, id: :mprescripts)
235
+ Configuration.register_model(Mroot, id: :mroot)
236
+ Configuration.register_model(Mrow, id: :mrow)
237
+ Configuration.register_model(Ms, id: :ms)
238
+ Configuration.register_model(Mscarries, id: :mscarries)
239
+ Configuration.register_model(Mscarry, id: :mscarry)
240
+ Configuration.register_model(Msgroup, id: :msgroup)
241
+ Configuration.register_model(Msline, id: :msline)
242
+ Configuration.register_model(Mspace, id: :mspace)
243
+ Configuration.register_model(Msqrt, id: :msqrt)
244
+ Configuration.register_model(Msrow, id: :msrow)
245
+ Configuration.register_model(Mstack, id: :mstack)
246
+ Configuration.register_model(Mstyle, id: :mstyle)
247
+ Configuration.register_model(Msub, id: :msub)
248
+ Configuration.register_model(Msubsup, id: :msubsup)
249
+ Configuration.register_model(Msup, id: :msup)
250
+ Configuration.register_model(Mtd, id: :mtd)
251
+ Configuration.register_model(Mtable, id: :mtable)
252
+ Configuration.register_model(Mtext, id: :mtext)
253
+ Configuration.register_model(Mtr, id: :mtr)
254
+ Configuration.register_model(Mlabeledtr, id: :mlabeledtr)
255
+ Configuration.register_model(Munder, id: :munder)
256
+ Configuration.register_model(Munderover, id: :munderover)
257
+ Configuration.register_model(Mmultiscripts, id: :mmultiscripts)
258
+ Configuration.register_model(None, id: :none)
259
+ Configuration.register_model(Semantics, id: :semantics)
260
+ Configuration.register_model(Math, id: :math)
258
261
 
259
- # Content element registrations
260
- Configuration.register_model(Annotation, id: :annotation)
261
- Configuration.register_model(AnnotationXml, id: :"annotation-xml")
262
- Configuration.register_model(Apply, id: :apply)
263
- Configuration.register_model(Cbytes, id: :cbytes)
264
- Configuration.register_model(Cerror, id: :cerror)
265
- Configuration.register_model(Ci, id: :ci)
266
- Configuration.register_model(Cn, id: :cn)
267
- Configuration.register_model(Cs, id: :cs)
268
- Configuration.register_model(Csymbol, id: :csymbol)
262
+ # Content element registrations
263
+ Configuration.register_model(Annotation, id: :annotation)
264
+ Configuration.register_model(AnnotationXml, id: :"annotation-xml")
265
+ Configuration.register_model(Apply, id: :apply)
266
+ Configuration.register_model(Cbytes, id: :cbytes)
267
+ Configuration.register_model(Cerror, id: :cerror)
268
+ Configuration.register_model(Ci, id: :ci)
269
+ Configuration.register_model(Cn, id: :cn)
270
+ Configuration.register_model(Cs, id: :cs)
271
+ Configuration.register_model(Csymbol, id: :csymbol)
269
272
 
270
- # Constructs (bvar, condition, interval, lambda, inverse, degree, piecewise, piece, otherwise, sep, bind)
271
- Configuration.register_model(Bvar, id: :bvar)
272
- Configuration.register_model(Condition, id: :condition)
273
- Configuration.register_model(Interval, id: :interval)
274
- Configuration.register_model(Lambda, id: :lambda)
275
- Configuration.register_model(Inverse, id: :inverse)
276
- Configuration.register_model(Degree, id: :degree)
277
- Configuration.register_model(Piecewise, id: :piecewise)
278
- Configuration.register_model(Piece, id: :piece)
279
- Configuration.register_model(Otherwise, id: :otherwise)
280
- Configuration.register_model(Sep, id: :sep)
281
- Configuration.register_model(Bind, id: :bind)
273
+ # Constructs (bvar, condition, interval, lambda, inverse, degree, piecewise, piece, otherwise, sep, bind)
274
+ Configuration.register_model(Bvar, id: :bvar)
275
+ Configuration.register_model(Condition, id: :condition)
276
+ Configuration.register_model(Interval, id: :interval)
277
+ Configuration.register_model(Lambda, id: :lambda)
278
+ Configuration.register_model(Inverse, id: :inverse)
279
+ Configuration.register_model(Degree, id: :degree)
280
+ Configuration.register_model(Piecewise, id: :piecewise)
281
+ Configuration.register_model(Piece, id: :piece)
282
+ Configuration.register_model(Otherwise, id: :otherwise)
283
+ Configuration.register_model(Sep, id: :sep)
284
+ Configuration.register_model(Bind, id: :bind)
282
285
 
283
- # V2 compatibility (fn, reln, declare, share)
284
- Configuration.register_model(Fn, id: :fn)
285
- Configuration.register_model(Reln, id: :reln)
286
- Configuration.register_model(Declare, id: :declare)
287
- Configuration.register_model(Share, id: :share)
286
+ # V2 compatibility (fn, reln, declare, share)
287
+ Configuration.register_model(Fn, id: :fn)
288
+ Configuration.register_model(Reln, id: :reln)
289
+ Configuration.register_model(Declare, id: :declare)
290
+ Configuration.register_model(Share, id: :share)
288
291
 
289
- # Arith (22 classes)
290
- Configuration.register_model(Abs, id: :abs)
291
- Configuration.register_model(Conjugate, id: :conjugate)
292
- Configuration.register_model(Arg, id: :arg)
293
- Configuration.register_model(Real, id: :real)
294
- Configuration.register_model(Imaginary, id: :imaginary)
295
- Configuration.register_model(Floor, id: :floor)
296
- Configuration.register_model(Ceiling, id: :ceiling)
297
- Configuration.register_model(Quotient, id: :quotient)
298
- Configuration.register_model(Divide, id: :divide)
299
- Configuration.register_model(Rem, id: :rem)
300
- Configuration.register_model(Minus, id: :minus)
301
- Configuration.register_model(Plus, id: :plus)
302
- Configuration.register_model(Times, id: :times)
303
- Configuration.register_model(Power, id: :power)
304
- Configuration.register_model(Root, id: :root)
305
- Configuration.register_model(Max, id: :max)
306
- Configuration.register_model(Min, id: :min)
307
- Configuration.register_model(Gcd, id: :gcd)
308
- Configuration.register_model(Lcm, id: :lcm)
309
- Configuration.register_model(Sum, id: :sum)
310
- Configuration.register_model(Product, id: :product)
311
- Configuration.register_model(Factorial, id: :factorial)
292
+ # Arith (22 classes)
293
+ Configuration.register_model(Abs, id: :abs)
294
+ Configuration.register_model(Conjugate, id: :conjugate)
295
+ Configuration.register_model(Arg, id: :arg)
296
+ Configuration.register_model(Real, id: :real)
297
+ Configuration.register_model(Imaginary, id: :imaginary)
298
+ Configuration.register_model(Floor, id: :floor)
299
+ Configuration.register_model(Ceiling, id: :ceiling)
300
+ Configuration.register_model(Quotient, id: :quotient)
301
+ Configuration.register_model(Divide, id: :divide)
302
+ Configuration.register_model(Rem, id: :rem)
303
+ Configuration.register_model(Minus, id: :minus)
304
+ Configuration.register_model(Plus, id: :plus)
305
+ Configuration.register_model(Times, id: :times)
306
+ Configuration.register_model(Power, id: :power)
307
+ Configuration.register_model(Root, id: :root)
308
+ Configuration.register_model(Max, id: :max)
309
+ Configuration.register_model(Min, id: :min)
310
+ Configuration.register_model(Gcd, id: :gcd)
311
+ Configuration.register_model(Lcm, id: :lcm)
312
+ Configuration.register_model(Sum, id: :sum)
313
+ Configuration.register_model(Product, id: :product)
314
+ Configuration.register_model(Factorial, id: :factorial)
312
315
 
313
- # Logic (7)
314
- Configuration.register_model(And, id: :and)
315
- Configuration.register_model(Or, id: :or)
316
- Configuration.register_model(Xor, id: :xor)
317
- Configuration.register_model(Not, id: :not)
318
- Configuration.register_model(Implies, id: :implies)
319
- Configuration.register_model(Forall, id: :forall)
320
- Configuration.register_model(Exists, id: :exists)
316
+ # Logic (7)
317
+ Configuration.register_model(And, id: :and)
318
+ Configuration.register_model(Or, id: :or)
319
+ Configuration.register_model(Xor, id: :xor)
320
+ Configuration.register_model(Not, id: :not)
321
+ Configuration.register_model(Implies, id: :implies)
322
+ Configuration.register_model(Forall, id: :forall)
323
+ Configuration.register_model(Exists, id: :exists)
321
324
 
322
- # Relations (8 - no Factorof)
323
- Configuration.register_model(Eq, id: :eq)
324
- Configuration.register_model(Neq, id: :neq)
325
- Configuration.register_model(Lt, id: :lt)
326
- Configuration.register_model(Gt, id: :gt)
327
- Configuration.register_model(Leq, id: :leq)
328
- Configuration.register_model(Geq, id: :geq)
329
- Configuration.register_model(Equivalent, id: :equivalent)
330
- Configuration.register_model(Approx, id: :approx)
331
- Configuration.register_model(Factorof, id: :factorof)
325
+ # Relations (8 - no Factorof)
326
+ Configuration.register_model(Eq, id: :eq)
327
+ Configuration.register_model(Neq, id: :neq)
328
+ Configuration.register_model(Lt, id: :lt)
329
+ Configuration.register_model(Gt, id: :gt)
330
+ Configuration.register_model(Leq, id: :leq)
331
+ Configuration.register_model(Geq, id: :geq)
332
+ Configuration.register_model(Equivalent, id: :equivalent)
333
+ Configuration.register_model(Approx, id: :approx)
334
+ Configuration.register_model(Factorof, id: :factorof)
332
335
 
333
- # Sets (13 - uses List not Mlist)
334
- Configuration.register_model(Set, id: :set)
335
- Configuration.register_model(List, id: :list)
336
- Configuration.register_model(Union, id: :union)
337
- Configuration.register_model(Intersect, id: :intersect)
338
- Configuration.register_model(In, id: :in)
339
- Configuration.register_model(Notin, id: :notin)
340
- Configuration.register_model(Notsubset, id: :notsubset)
341
- Configuration.register_model(Notprsubset, id: :notprsubset)
342
- Configuration.register_model(Subset, id: :subset)
343
- Configuration.register_model(Prsubset, id: :prsubset)
344
- Configuration.register_model(Setdiff, id: :setdiff)
345
- Configuration.register_model(Card, id: :card)
346
- Configuration.register_model(Cartesianproduct, id: :cartesianproduct)
336
+ # Sets (13 - uses List not Mlist)
337
+ Configuration.register_model(Set, id: :set)
338
+ Configuration.register_model(List, id: :list)
339
+ Configuration.register_model(Union, id: :union)
340
+ Configuration.register_model(Intersect, id: :intersect)
341
+ Configuration.register_model(In, id: :in)
342
+ Configuration.register_model(Notin, id: :notin)
343
+ Configuration.register_model(Notsubset, id: :notsubset)
344
+ Configuration.register_model(Notprsubset, id: :notprsubset)
345
+ Configuration.register_model(Subset, id: :subset)
346
+ Configuration.register_model(Prsubset, id: :prsubset)
347
+ Configuration.register_model(Setdiff, id: :setdiff)
348
+ Configuration.register_model(Card, id: :card)
349
+ Configuration.register_model(Cartesianproduct, id: :cartesianproduct)
347
350
 
348
- # Calculus (5 - no Limit, Tendsto)
349
- Configuration.register_model(Diff, id: :diff)
350
- Configuration.register_model(Partialdiff, id: :partialdiff)
351
- Configuration.register_model(Int, id: :int)
352
- Configuration.register_model(Limit, id: :limit)
353
- Configuration.register_model(Lowlimit, id: :lowlimit)
354
- Configuration.register_model(Tendsto, id: :tendsto)
355
- Configuration.register_model(Uplimit, id: :uplimit)
351
+ # Calculus (5 - no Limit, Tendsto)
352
+ Configuration.register_model(Diff, id: :diff)
353
+ Configuration.register_model(Partialdiff, id: :partialdiff)
354
+ Configuration.register_model(Int, id: :int)
355
+ Configuration.register_model(Limit, id: :limit)
356
+ Configuration.register_model(Lowlimit, id: :lowlimit)
357
+ Configuration.register_model(Tendsto, id: :tendsto)
358
+ Configuration.register_model(Uplimit, id: :uplimit)
356
359
 
357
- # Vector Calculus (4)
358
- Configuration.register_model(Divergence, id: :divergence)
359
- Configuration.register_model(Grad, id: :grad)
360
- Configuration.register_model(Curl, id: :curl)
361
- Configuration.register_model(Laplacian, id: :laplacian)
360
+ # Vector Calculus (4)
361
+ Configuration.register_model(Divergence, id: :divergence)
362
+ Configuration.register_model(Grad, id: :grad)
363
+ Configuration.register_model(Curl, id: :curl)
364
+ Configuration.register_model(Laplacian, id: :laplacian)
362
365
 
363
- # Functions (5 + Domainofapplication)
364
- Configuration.register_model(Compose, id: :compose)
365
- Configuration.register_model(Domain, id: :domain)
366
- Configuration.register_model(Codomain, id: :codomain)
367
- Configuration.register_model(Image, id: :image)
368
- Configuration.register_model(Ident, id: :ident)
369
- Configuration.register_model(Domainofapplication, id: :domainofapplication)
366
+ # Functions (5 + Domainofapplication)
367
+ Configuration.register_model(Compose, id: :compose)
368
+ Configuration.register_model(Domain, id: :domain)
369
+ Configuration.register_model(Codomain, id: :codomain)
370
+ Configuration.register_model(Image, id: :image)
371
+ Configuration.register_model(Ident, id: :ident)
372
+ Configuration.register_model(Domainofapplication, id: :domainofapplication)
370
373
 
371
- # Elementary Functions (27 + Logbase)
372
- Configuration.register_model(Sin, id: :sin)
373
- Configuration.register_model(Cos, id: :cos)
374
- Configuration.register_model(Tan, id: :tan)
375
- Configuration.register_model(Sec, id: :sec)
376
- Configuration.register_model(Csc, id: :csc)
377
- Configuration.register_model(Cot, id: :cot)
378
- Configuration.register_model(Sinh, id: :sinh)
379
- Configuration.register_model(Cosh, id: :cosh)
380
- Configuration.register_model(Tanh, id: :tanh)
381
- Configuration.register_model(Sech, id: :sech)
382
- Configuration.register_model(Csch, id: :csch)
383
- Configuration.register_model(Coth, id: :coth)
384
- Configuration.register_model(Arcsin, id: :arcsin)
385
- Configuration.register_model(Arccos, id: :arccos)
386
- Configuration.register_model(Arctan, id: :arctan)
387
- Configuration.register_model(Arcsec, id: :arcsec)
388
- Configuration.register_model(Arccsc, id: :arccsc)
389
- Configuration.register_model(Arccot, id: :arccot)
390
- Configuration.register_model(Arcsinh, id: :arcsinh)
391
- Configuration.register_model(Arccosh, id: :arccosh)
392
- Configuration.register_model(Arctanh, id: :arctanh)
393
- Configuration.register_model(Arcsech, id: :arcsech)
394
- Configuration.register_model(Arccsch, id: :arccsch)
395
- Configuration.register_model(Arccoth, id: :arccoth)
396
- Configuration.register_model(Exp, id: :exp)
397
- Configuration.register_model(Ln, id: :ln)
398
- Configuration.register_model(Log, id: :log)
399
- Configuration.register_model(Logbase, id: :logbase)
374
+ # Elementary Functions (27 + Logbase)
375
+ Configuration.register_model(Sin, id: :sin)
376
+ Configuration.register_model(Cos, id: :cos)
377
+ Configuration.register_model(Tan, id: :tan)
378
+ Configuration.register_model(Sec, id: :sec)
379
+ Configuration.register_model(Csc, id: :csc)
380
+ Configuration.register_model(Cot, id: :cot)
381
+ Configuration.register_model(Sinh, id: :sinh)
382
+ Configuration.register_model(Cosh, id: :cosh)
383
+ Configuration.register_model(Tanh, id: :tanh)
384
+ Configuration.register_model(Sech, id: :sech)
385
+ Configuration.register_model(Csch, id: :csch)
386
+ Configuration.register_model(Coth, id: :coth)
387
+ Configuration.register_model(Arcsin, id: :arcsin)
388
+ Configuration.register_model(Arccos, id: :arccos)
389
+ Configuration.register_model(Arctan, id: :arctan)
390
+ Configuration.register_model(Arcsec, id: :arcsec)
391
+ Configuration.register_model(Arccsc, id: :arccsc)
392
+ Configuration.register_model(Arccot, id: :arccot)
393
+ Configuration.register_model(Arcsinh, id: :arcsinh)
394
+ Configuration.register_model(Arccosh, id: :arccosh)
395
+ Configuration.register_model(Arctanh, id: :arctanh)
396
+ Configuration.register_model(Arcsech, id: :arcsech)
397
+ Configuration.register_model(Arccsch, id: :arccsch)
398
+ Configuration.register_model(Arccoth, id: :arccoth)
399
+ Configuration.register_model(Exp, id: :exp)
400
+ Configuration.register_model(Ln, id: :ln)
401
+ Configuration.register_model(Log, id: :log)
402
+ Configuration.register_model(Logbase, id: :logbase)
400
403
 
401
- # Constants (15 - uses True/False not Mtrue/Mfalse)
402
- Configuration.register_model(Integers, id: :integers)
403
- Configuration.register_model(Reals, id: :reals)
404
- Configuration.register_model(Rationals, id: :rationals)
405
- Configuration.register_model(Naturalnumbers, id: :naturalnumbers)
406
- Configuration.register_model(Complexes, id: :complexes)
407
- Configuration.register_model(Primes, id: :primes)
408
- Configuration.register_model(Exponentiale, id: :exponentiale)
409
- Configuration.register_model(Imaginaryi, id: :imaginaryi)
410
- Configuration.register_model(Notanumber, id: :notanumber)
411
- Configuration.register_model(True, id: :true) # rubocop:disable Lint/BooleanSymbol
412
- Configuration.register_model(False, id: :false) # rubocop:disable Lint/BooleanSymbol
413
- Configuration.register_model(Emptyset, id: :emptyset)
414
- Configuration.register_model(Pi, id: :pi)
415
- Configuration.register_model(Eulergamma, id: :eulergamma)
416
- Configuration.register_model(Infinity, id: :infinity)
404
+ # Constants (15 - uses True/False not Mtrue/Mfalse)
405
+ Configuration.register_model(Integers, id: :integers)
406
+ Configuration.register_model(Reals, id: :reals)
407
+ Configuration.register_model(Rationals, id: :rationals)
408
+ Configuration.register_model(Naturalnumbers, id: :naturalnumbers)
409
+ Configuration.register_model(Complexes, id: :complexes)
410
+ Configuration.register_model(Primes, id: :primes)
411
+ Configuration.register_model(Exponentiale, id: :exponentiale)
412
+ Configuration.register_model(Imaginaryi, id: :imaginaryi)
413
+ Configuration.register_model(Notanumber, id: :notanumber)
414
+ Configuration.register_model(True, id: :true) # rubocop:disable Lint/BooleanSymbol
415
+ Configuration.register_model(False, id: :false) # rubocop:disable Lint/BooleanSymbol
416
+ Configuration.register_model(Emptyset, id: :emptyset)
417
+ Configuration.register_model(Pi, id: :pi)
418
+ Configuration.register_model(Eulergamma, id: :eulergamma)
419
+ Configuration.register_model(Infinity, id: :infinity)
417
420
 
418
- # Linear Algebra (9)
419
- Configuration.register_model(Vector, id: :vector)
420
- Configuration.register_model(Matrix, id: :matrix)
421
- Configuration.register_model(Matrixrow, id: :matrixrow)
422
- Configuration.register_model(Determinant, id: :determinant)
423
- Configuration.register_model(Transpose, id: :transpose)
424
- Configuration.register_model(Selector, id: :selector)
425
- Configuration.register_model(Vectorproduct, id: :vectorproduct)
426
- Configuration.register_model(Scalarproduct, id: :scalarproduct)
427
- Configuration.register_model(Outerproduct, id: :outerproduct)
421
+ # Linear Algebra (9)
422
+ Configuration.register_model(Vector, id: :vector)
423
+ Configuration.register_model(Matrix, id: :matrix)
424
+ Configuration.register_model(Matrixrow, id: :matrixrow)
425
+ Configuration.register_model(Determinant, id: :determinant)
426
+ Configuration.register_model(Transpose, id: :transpose)
427
+ Configuration.register_model(Selector, id: :selector)
428
+ Configuration.register_model(Vectorproduct, id: :vectorproduct)
429
+ Configuration.register_model(Scalarproduct, id: :scalarproduct)
430
+ Configuration.register_model(Outerproduct, id: :outerproduct)
428
431
 
429
- # Statistics (7)
430
- Configuration.register_model(Mean, id: :mean)
431
- Configuration.register_model(Sdev, id: :sdev)
432
- Configuration.register_model(Variance, id: :variance)
433
- Configuration.register_model(Median, id: :median)
434
- Configuration.register_model(Mode, id: :mode)
435
- Configuration.register_model(Moment, id: :moment)
436
- Configuration.register_model(Momentabout, id: :momentabout)
432
+ # Statistics (7)
433
+ Configuration.register_model(Mean, id: :mean)
434
+ Configuration.register_model(Sdev, id: :sdev)
435
+ Configuration.register_model(Variance, id: :variance)
436
+ Configuration.register_model(Median, id: :median)
437
+ Configuration.register_model(Mode, id: :mode)
438
+ Configuration.register_model(Moment, id: :moment)
439
+ Configuration.register_model(Momentabout, id: :momentabout)
440
+ end
441
+
442
+ # During an Opal boot, lib/mml/opal.rb calls this after its last require.
443
+ register_models! unless Mml.opal_boot?
437
444
  end
438
445
  end
data/lib/mml/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mml
4
- VERSION = "2.4.2"
4
+ VERSION = "2.4.3"
5
5
  end
@@ -2,6 +2,20 @@
2
2
 
3
3
  module Mml
4
4
  module VersionedParser
5
+ # Guards register_models! for every version. Not defined under Opal,
6
+ # which is single-threaded and defines Mutex only in stdlib "thread".
7
+ REGISTRATION_LOCK = Mutex.new unless RUBY_ENGINE == "opal"
8
+
9
+ # Runs each version's register_all_models once per process, across threads.
10
+ def register_models!
11
+ with_registration_lock do
12
+ next if @models_registered
13
+
14
+ register_all_models
15
+ @models_registered = true
16
+ end
17
+ end
18
+
5
19
  # Shared parse entrypoint for versioned modules.
6
20
  def parse(input, namespace_exist: true,
7
21
  context: Mml::UNSPECIFIED_CONTEXT, register: nil)
@@ -42,6 +56,12 @@ module Mml
42
56
 
43
57
  private
44
58
 
59
+ def with_registration_lock(&block)
60
+ return yield if RUBY_ENGINE == "opal"
61
+
62
+ REGISTRATION_LOCK.synchronize(&block)
63
+ end
64
+
45
65
  def inject_namespace(xml_string, namespace_uri)
46
66
  # Add xmlns attribute to the <math> root element in the raw XML string.
47
67
  # Handles both <math> and <math ...> (with existing attributes).
data/lib/mml.rb CHANGED
@@ -22,6 +22,16 @@ module Mml
22
22
  end
23
23
  end
24
24
 
25
+ # True under Opal or after Mml.opal_boot!. The version files then leave
26
+ # model registration to lib/mml/opal.rb.
27
+ def opal_boot?
28
+ RUBY_ENGINE == "opal" || @opal_boot == true
29
+ end
30
+
31
+ def opal_boot!
32
+ @opal_boot = true
33
+ end
34
+
25
35
  autoload :Namespace, "mml/namespace"
26
36
  autoload :CommonElements, "mml/common_elements"
27
37
  autoload :ContextOptions, "mml/context_options"
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.4.2
4
+ version: 2.4.3
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-09-27 00:00:00.000000000 Z
11
+ date: 2026-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lutaml-model
@@ -47,6 +47,8 @@ executables: []
47
47
  extensions: []
48
48
  extra_rdoc_files: []
49
49
  files:
50
+ - ".github/workflows/notify-mml-js.yml"
51
+ - ".github/workflows/opal.yml"
50
52
  - ".github/workflows/rake.yml"
51
53
  - ".github/workflows/release.yml"
52
54
  - ".gitignore"
@@ -168,6 +170,7 @@ files:
168
170
  - lib/mml/context_configuration.rb
169
171
  - lib/mml/context_options.rb
170
172
  - lib/mml/namespace.rb
173
+ - lib/mml/opal.rb
171
174
  - lib/mml/v2.rb
172
175
  - lib/mml/v2/annotation.rb
173
176
  - lib/mml/v2/annotation_xml.rb