code: function mvScan (sP) {
    var s = sP || scanString('mathvariant'), tok = scanMeTok(s), me = tok[0];
    if (!F.elem(M.mtagName(me), ['mi', 'mn', 'mo', 'mtext', 'mspace', 'ms']))
      throw 'Can only apply a mathvariant to a MathML token (atomic) element, at ' +
      'position ' + M.re_.lastIndex;
  
    me.setAttribute('mathvariant', s);
  
    if (/bold/.test(s)) M.addClass(me, 'ma-bold');
    else if (s == 'normal' || s == 'italic') M.addClass(me, 'ma-nonbold');
  
    M.addClass(me, /italic/.test(s) ? 'ma-italic' : 'ma-upright');
  
    if (/double-struck/.test(s)) M.addClass(me, 'ma-double-struck');
    else if (/fraktur/.test(s)) M.addClass(me, 'ma-fraktur');
    else if (/script/.test(s)) M.addClass(me, 'ma-script');
    else if (/sans-serif/.test(s)) M.addClass(me, 'ma-sans-serif');
  
    // (monospace, initial, tailed, looped, stretched) currently don't add classes
  
    return tok;
  }
docs: see http://www.w3.org/TR/MathML3/chapter3.html#presm.commatt for mathvariant attr