PhysicsMethods.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
  1. "use strict";
  2. var __read = (this && this.__read) || function (o, n) {
  3. var m = typeof Symbol === "function" && o[Symbol.iterator];
  4. if (!m) return o;
  5. var i = m.call(o), r, ar = [], e;
  6. try {
  7. while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  8. }
  9. catch (error) { e = { error: error }; }
  10. finally {
  11. try {
  12. if (r && !r.done && (m = i["return"])) m.call(i);
  13. }
  14. finally { if (e) throw e.error; }
  15. }
  16. return ar;
  17. };
  18. var __importDefault = (this && this.__importDefault) || function (mod) {
  19. return (mod && mod.__esModule) ? mod : { "default": mod };
  20. };
  21. Object.defineProperty(exports, "__esModule", { value: true });
  22. var BaseMethods_js_1 = __importDefault(require("../base/BaseMethods.js"));
  23. var TexParser_js_1 = __importDefault(require("../TexParser.js"));
  24. var TexError_js_1 = __importDefault(require("../TexError.js"));
  25. var MmlNode_js_1 = require("../../../core/MmlTree/MmlNode.js");
  26. var ParseUtil_js_1 = __importDefault(require("../ParseUtil.js"));
  27. var NodeUtil_js_1 = __importDefault(require("../NodeUtil.js"));
  28. var NodeFactory_js_1 = require("../NodeFactory.js");
  29. var PhysicsMethods = {};
  30. var pairs = {
  31. '(': ')',
  32. '[': ']',
  33. '{': '}',
  34. '|': '|',
  35. };
  36. var biggs = /^(b|B)i(g{1,2})$/;
  37. PhysicsMethods.Quantity = function (parser, name, open, close, arg, named, variant) {
  38. if (open === void 0) { open = '('; }
  39. if (close === void 0) { close = ')'; }
  40. if (arg === void 0) { arg = false; }
  41. if (named === void 0) { named = ''; }
  42. if (variant === void 0) { variant = ''; }
  43. var star = arg ? parser.GetStar() : false;
  44. var next = parser.GetNext();
  45. var position = parser.i;
  46. var big = null;
  47. if (next === '\\') {
  48. parser.i++;
  49. big = parser.GetCS();
  50. if (!big.match(biggs)) {
  51. var empty = parser.create('node', 'mrow');
  52. parser.Push(ParseUtil_js_1.default.fenced(parser.configuration, open, empty, close));
  53. parser.i = position;
  54. return;
  55. }
  56. next = parser.GetNext();
  57. }
  58. var right = pairs[next];
  59. if (arg && next !== '{') {
  60. throw new TexError_js_1.default('MissingArgFor', 'Missing argument for %1', parser.currentCS);
  61. }
  62. if (!right) {
  63. var empty = parser.create('node', 'mrow');
  64. parser.Push(ParseUtil_js_1.default.fenced(parser.configuration, open, empty, close));
  65. parser.i = position;
  66. return;
  67. }
  68. if (named) {
  69. var mml = parser.create('token', 'mi', { texClass: MmlNode_js_1.TEXCLASS.OP }, named);
  70. if (variant) {
  71. NodeUtil_js_1.default.setAttribute(mml, 'mathvariant', variant);
  72. }
  73. parser.Push(parser.itemFactory.create('fn', mml));
  74. }
  75. if (next === '{') {
  76. var argument = parser.GetArgument(name);
  77. next = arg ? open : '\\{';
  78. right = arg ? close : '\\}';
  79. argument = star ? next + ' ' + argument + ' ' + right :
  80. (big ?
  81. '\\' + big + 'l' + next + ' ' + argument + ' ' + '\\' + big + 'r' + right :
  82. '\\left' + next + ' ' + argument + ' ' + '\\right' + right);
  83. parser.Push(new TexParser_js_1.default(argument, parser.stack.env, parser.configuration).mml());
  84. return;
  85. }
  86. if (arg) {
  87. next = open;
  88. right = close;
  89. }
  90. parser.i++;
  91. parser.Push(parser.itemFactory.create('auto open')
  92. .setProperties({ open: next, close: right, big: big }));
  93. };
  94. PhysicsMethods.Eval = function (parser, name) {
  95. var star = parser.GetStar();
  96. var next = parser.GetNext();
  97. if (next === '{') {
  98. var arg = parser.GetArgument(name);
  99. var replace = '\\left. ' +
  100. (star ? '\\smash{' + arg + '}' : arg) +
  101. ' ' + '\\vphantom{\\int}\\right|';
  102. parser.string = parser.string.slice(0, parser.i) + replace +
  103. parser.string.slice(parser.i);
  104. return;
  105. }
  106. if (next === '(' || next === '[') {
  107. parser.i++;
  108. parser.Push(parser.itemFactory.create('auto open')
  109. .setProperties({ open: next, close: '|',
  110. smash: star, right: '\\vphantom{\\int}' }));
  111. return;
  112. }
  113. throw new TexError_js_1.default('MissingArgFor', 'Missing argument for %1', parser.currentCS);
  114. };
  115. PhysicsMethods.Commutator = function (parser, name, open, close) {
  116. if (open === void 0) { open = '['; }
  117. if (close === void 0) { close = ']'; }
  118. var star = parser.GetStar();
  119. var next = parser.GetNext();
  120. var big = null;
  121. if (next === '\\') {
  122. parser.i++;
  123. big = parser.GetCS();
  124. if (!big.match(biggs)) {
  125. throw new TexError_js_1.default('MissingArgFor', 'Missing argument for %1', parser.currentCS);
  126. }
  127. next = parser.GetNext();
  128. }
  129. if (next !== '{') {
  130. throw new TexError_js_1.default('MissingArgFor', 'Missing argument for %1', parser.currentCS);
  131. }
  132. var arg1 = parser.GetArgument(name);
  133. var arg2 = parser.GetArgument(name);
  134. var argument = arg1 + ',' + arg2;
  135. argument = star ? open + ' ' + argument + ' ' + close :
  136. (big ?
  137. '\\' + big + 'l' + open + ' ' + argument + ' ' + '\\' + big + 'r' + close :
  138. '\\left' + open + ' ' + argument + ' ' + '\\right' + close);
  139. parser.Push(new TexParser_js_1.default(argument, parser.stack.env, parser.configuration).mml());
  140. };
  141. var latinCap = [0x41, 0x5A];
  142. var latinSmall = [0x61, 0x7A];
  143. var greekCap = [0x391, 0x3A9];
  144. var greekSmall = [0x3B1, 0x3C9];
  145. var digits = [0x30, 0x39];
  146. function inRange(value, range) {
  147. return (value >= range[0] && value <= range[1]);
  148. }
  149. function createVectorToken(factory, kind, def, text) {
  150. var parser = factory.configuration.parser;
  151. var token = NodeFactory_js_1.NodeFactory.createToken(factory, kind, def, text);
  152. var code = text.codePointAt(0);
  153. if (text.length === 1 && !parser.stack.env.font &&
  154. parser.stack.env.vectorFont &&
  155. (inRange(code, latinCap) || inRange(code, latinSmall) ||
  156. inRange(code, greekCap) || inRange(code, digits) ||
  157. (inRange(code, greekSmall) && parser.stack.env.vectorStar) ||
  158. NodeUtil_js_1.default.getAttribute(token, 'accent'))) {
  159. NodeUtil_js_1.default.setAttribute(token, 'mathvariant', parser.stack.env.vectorFont);
  160. }
  161. return token;
  162. }
  163. PhysicsMethods.VectorBold = function (parser, name) {
  164. var star = parser.GetStar();
  165. var arg = parser.GetArgument(name);
  166. var oldToken = parser.configuration.nodeFactory.get('token');
  167. var oldFont = parser.stack.env.font;
  168. delete parser.stack.env.font;
  169. parser.configuration.nodeFactory.set('token', createVectorToken);
  170. parser.stack.env.vectorFont = star ? 'bold-italic' : 'bold';
  171. parser.stack.env.vectorStar = star;
  172. var node = new TexParser_js_1.default(arg, parser.stack.env, parser.configuration).mml();
  173. if (oldFont) {
  174. parser.stack.env.font = oldFont;
  175. }
  176. delete parser.stack.env.vectorFont;
  177. delete parser.stack.env.vectorStar;
  178. parser.configuration.nodeFactory.set('token', oldToken);
  179. parser.Push(node);
  180. };
  181. PhysicsMethods.StarMacro = function (parser, name, argcount) {
  182. var parts = [];
  183. for (var _i = 3; _i < arguments.length; _i++) {
  184. parts[_i - 3] = arguments[_i];
  185. }
  186. var star = parser.GetStar();
  187. var args = [];
  188. if (argcount) {
  189. for (var i = args.length; i < argcount; i++) {
  190. args.push(parser.GetArgument(name));
  191. }
  192. }
  193. var macro = parts.join(star ? '*' : '');
  194. macro = ParseUtil_js_1.default.substituteArgs(parser, args, macro);
  195. parser.string = ParseUtil_js_1.default.addArgs(parser, macro, parser.string.slice(parser.i));
  196. parser.i = 0;
  197. ParseUtil_js_1.default.checkMaxMacros(parser);
  198. };
  199. var vectorApplication = function (parser, kind, name, operator, fences) {
  200. var op = new TexParser_js_1.default(operator, parser.stack.env, parser.configuration).mml();
  201. parser.Push(parser.itemFactory.create(kind, op));
  202. var left = parser.GetNext();
  203. var right = pairs[left];
  204. if (!right) {
  205. return;
  206. }
  207. var lfence = '', rfence = '', arg = '';
  208. var enlarge = fences.indexOf(left) !== -1;
  209. if (left === '{') {
  210. arg = parser.GetArgument(name);
  211. lfence = enlarge ? '\\left\\{' : '';
  212. rfence = enlarge ? '\\right\\}' : '';
  213. var macro = lfence + ' ' + arg + ' ' + rfence;
  214. parser.string = macro + parser.string.slice(parser.i);
  215. parser.i = 0;
  216. return;
  217. }
  218. if (!enlarge) {
  219. return;
  220. }
  221. parser.i++;
  222. parser.Push(parser.itemFactory.create('auto open')
  223. .setProperties({ open: left, close: right }));
  224. };
  225. PhysicsMethods.OperatorApplication = function (parser, name, operator) {
  226. var fences = [];
  227. for (var _i = 3; _i < arguments.length; _i++) {
  228. fences[_i - 3] = arguments[_i];
  229. }
  230. vectorApplication(parser, 'fn', name, operator, fences);
  231. };
  232. PhysicsMethods.VectorOperator = function (parser, name, operator) {
  233. var fences = [];
  234. for (var _i = 3; _i < arguments.length; _i++) {
  235. fences[_i - 3] = arguments[_i];
  236. }
  237. vectorApplication(parser, 'mml', name, operator, fences);
  238. };
  239. PhysicsMethods.Expression = function (parser, name, opt, id) {
  240. if (opt === void 0) { opt = true; }
  241. if (id === void 0) { id = ''; }
  242. id = id || name.slice(1);
  243. var exp = opt ? parser.GetBrackets(name) : null;
  244. var mml = parser.create('token', 'mi', { texClass: MmlNode_js_1.TEXCLASS.OP }, id);
  245. if (exp) {
  246. var sup = new TexParser_js_1.default(exp, parser.stack.env, parser.configuration).mml();
  247. mml = parser.create('node', 'msup', [mml, sup]);
  248. }
  249. parser.Push(parser.itemFactory.create('fn', mml));
  250. if (parser.GetNext() !== '(') {
  251. return;
  252. }
  253. parser.i++;
  254. parser.Push(parser.itemFactory.create('auto open')
  255. .setProperties({ open: '(', close: ')' }));
  256. };
  257. PhysicsMethods.Qqtext = function (parser, name, text) {
  258. var star = parser.GetStar();
  259. var arg = text ? text : parser.GetArgument(name);
  260. var replace = (star ? '' : '\\quad') + '\\text{' + arg + '}\\quad ';
  261. parser.string = parser.string.slice(0, parser.i) + replace +
  262. parser.string.slice(parser.i);
  263. };
  264. PhysicsMethods.Differential = function (parser, name, op) {
  265. var optArg = parser.GetBrackets(name);
  266. var power = optArg != null ? '^{' + optArg + '}' : ' ';
  267. var parens = parser.GetNext() === '(';
  268. var braces = parser.GetNext() === '{';
  269. var macro = op + power;
  270. if (!(parens || braces)) {
  271. macro += parser.GetArgument(name, true) || '';
  272. var mml = new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml();
  273. parser.Push(mml);
  274. return;
  275. }
  276. if (braces) {
  277. macro += parser.GetArgument(name);
  278. var mml = new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml();
  279. parser.Push(parser.create('node', 'TeXAtom', [mml], { texClass: MmlNode_js_1.TEXCLASS.OP }));
  280. return;
  281. }
  282. parser.Push(new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml());
  283. parser.i++;
  284. parser.Push(parser.itemFactory.create('auto open')
  285. .setProperties({ open: '(', close: ')' }));
  286. };
  287. PhysicsMethods.Derivative = function (parser, name, argMax, op) {
  288. var star = parser.GetStar();
  289. var optArg = parser.GetBrackets(name);
  290. var argCounter = 1;
  291. var args = [];
  292. args.push(parser.GetArgument(name));
  293. while (parser.GetNext() === '{' && argCounter < argMax) {
  294. args.push(parser.GetArgument(name));
  295. argCounter++;
  296. }
  297. var ignore = false;
  298. var power1 = ' ';
  299. var power2 = ' ';
  300. if (argMax > 2 && args.length > 2) {
  301. power1 = '^{' + (args.length - 1) + '}';
  302. ignore = true;
  303. }
  304. else if (optArg != null) {
  305. if (argMax > 2 && args.length > 1) {
  306. ignore = true;
  307. }
  308. power1 = '^{' + optArg + '}';
  309. power2 = power1;
  310. }
  311. var frac = star ? '\\flatfrac' : '\\frac';
  312. var first = args.length > 1 ? args[0] : '';
  313. var second = args.length > 1 ? args[1] : args[0];
  314. var rest = '';
  315. for (var i = 2, arg = void 0; arg = args[i]; i++) {
  316. rest += op + ' ' + arg;
  317. }
  318. var macro = frac + '{' + op + power1 + first + '}' +
  319. '{' + op + ' ' + second + power2 + ' ' + rest + '}';
  320. parser.Push(new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml());
  321. if (parser.GetNext() === '(') {
  322. parser.i++;
  323. parser.Push(parser.itemFactory.create('auto open')
  324. .setProperties({ open: '(', close: ')', ignore: ignore }));
  325. }
  326. };
  327. PhysicsMethods.Bra = function (parser, name) {
  328. var starBra = parser.GetStar();
  329. var bra = parser.GetArgument(name);
  330. var ket = '';
  331. var hasKet = false;
  332. var starKet = false;
  333. if (parser.GetNext() === '\\') {
  334. var saveI = parser.i;
  335. parser.i++;
  336. var cs = parser.GetCS();
  337. var symbol = parser.lookup('macro', cs);
  338. if (symbol && symbol.symbol === 'ket') {
  339. hasKet = true;
  340. saveI = parser.i;
  341. starKet = parser.GetStar();
  342. if (parser.GetNext() === '{') {
  343. ket = parser.GetArgument(cs, true);
  344. }
  345. else {
  346. parser.i = saveI;
  347. starKet = false;
  348. }
  349. }
  350. else {
  351. parser.i = saveI;
  352. }
  353. }
  354. var macro = '';
  355. if (hasKet) {
  356. macro = (starBra || starKet) ?
  357. "\\langle{".concat(bra, "}\\vert{").concat(ket, "}\\rangle") :
  358. "\\left\\langle{".concat(bra, "}\\middle\\vert{").concat(ket, "}\\right\\rangle");
  359. }
  360. else {
  361. macro = (starBra || starKet) ?
  362. "\\langle{".concat(bra, "}\\vert") : "\\left\\langle{".concat(bra, "}\\right\\vert{").concat(ket, "}");
  363. }
  364. parser.Push(new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml());
  365. };
  366. PhysicsMethods.Ket = function (parser, name) {
  367. var star = parser.GetStar();
  368. var ket = parser.GetArgument(name);
  369. var macro = star ? "\\vert{".concat(ket, "}\\rangle") :
  370. "\\left\\vert{".concat(ket, "}\\right\\rangle");
  371. parser.Push(new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml());
  372. };
  373. PhysicsMethods.BraKet = function (parser, name) {
  374. var star = parser.GetStar();
  375. var bra = parser.GetArgument(name);
  376. var ket = null;
  377. if (parser.GetNext() === '{') {
  378. ket = parser.GetArgument(name, true);
  379. }
  380. var macro = '';
  381. if (ket == null) {
  382. macro = star ?
  383. "\\langle{".concat(bra, "}\\vert{").concat(bra, "}\\rangle") :
  384. "\\left\\langle{".concat(bra, "}\\middle\\vert{").concat(bra, "}\\right\\rangle");
  385. }
  386. else {
  387. macro = star ?
  388. "\\langle{".concat(bra, "}\\vert{").concat(ket, "}\\rangle") :
  389. "\\left\\langle{".concat(bra, "}\\middle\\vert{").concat(ket, "}\\right\\rangle");
  390. }
  391. parser.Push(new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml());
  392. };
  393. PhysicsMethods.KetBra = function (parser, name) {
  394. var star = parser.GetStar();
  395. var ket = parser.GetArgument(name);
  396. var bra = null;
  397. if (parser.GetNext() === '{') {
  398. bra = parser.GetArgument(name, true);
  399. }
  400. var macro = '';
  401. if (bra == null) {
  402. macro = star ?
  403. "\\vert{".concat(ket, "}\\rangle\\!\\langle{").concat(ket, "}\\vert") :
  404. "\\left\\vert{".concat(ket, "}\\middle\\rangle\\!\\middle\\langle{").concat(ket, "}\\right\\vert");
  405. }
  406. else {
  407. macro = star ?
  408. "\\vert{".concat(ket, "}\\rangle\\!\\langle{").concat(bra, "}\\vert") :
  409. "\\left\\vert{".concat(ket, "}\\middle\\rangle\\!\\middle\\langle{").concat(bra, "}\\right\\vert");
  410. }
  411. parser.Push(new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml());
  412. };
  413. function outputBraket(_a, star1, star2) {
  414. var _b = __read(_a, 3), arg1 = _b[0], arg2 = _b[1], arg3 = _b[2];
  415. return (star1 && star2) ?
  416. "\\left\\langle{".concat(arg1, "}\\middle\\vert{").concat(arg2, "}\\middle\\vert{").concat(arg3, "}\\right\\rangle") :
  417. (star1 ? "\\langle{".concat(arg1, "}\\vert{").concat(arg2, "}\\vert{").concat(arg3, "}\\rangle") :
  418. "\\left\\langle{".concat(arg1, "}\\right\\vert{").concat(arg2, "}\\left\\vert{").concat(arg3, "}\\right\\rangle"));
  419. }
  420. PhysicsMethods.Expectation = function (parser, name) {
  421. var star1 = parser.GetStar();
  422. var star2 = star1 && parser.GetStar();
  423. var arg1 = parser.GetArgument(name);
  424. var arg2 = null;
  425. if (parser.GetNext() === '{') {
  426. arg2 = parser.GetArgument(name, true);
  427. }
  428. var macro = (arg1 && arg2) ?
  429. outputBraket([arg2, arg1, arg2], star1, star2) :
  430. (star1 ? "\\langle {".concat(arg1, "} \\rangle") :
  431. "\\left\\langle {".concat(arg1, "} \\right\\rangle"));
  432. parser.Push(new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml());
  433. };
  434. PhysicsMethods.MatrixElement = function (parser, name) {
  435. var star1 = parser.GetStar();
  436. var star2 = star1 && parser.GetStar();
  437. var arg1 = parser.GetArgument(name);
  438. var arg2 = parser.GetArgument(name);
  439. var arg3 = parser.GetArgument(name);
  440. var macro = outputBraket([arg1, arg2, arg3], star1, star2);
  441. parser.Push(new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml());
  442. };
  443. PhysicsMethods.MatrixQuantity = function (parser, name, small) {
  444. var star = parser.GetStar();
  445. var next = parser.GetNext();
  446. var array = small ? 'smallmatrix' : 'array';
  447. var arg = '';
  448. var open = '';
  449. var close = '';
  450. switch (next) {
  451. case '{':
  452. arg = parser.GetArgument(name);
  453. break;
  454. case '(':
  455. parser.i++;
  456. open = star ? '\\lgroup' : '(';
  457. close = star ? '\\rgroup' : ')';
  458. arg = parser.GetUpTo(name, ')');
  459. break;
  460. case '[':
  461. parser.i++;
  462. open = '[';
  463. close = ']';
  464. arg = parser.GetUpTo(name, ']');
  465. break;
  466. case '|':
  467. parser.i++;
  468. open = '|';
  469. close = '|';
  470. arg = parser.GetUpTo(name, '|');
  471. break;
  472. default:
  473. open = '(';
  474. close = ')';
  475. break;
  476. }
  477. var macro = (open ? '\\left' : '') + open +
  478. '\\begin{' + array + '}{} ' + arg + '\\end{' + array + '}' +
  479. (open ? '\\right' : '') + close;
  480. parser.Push(new TexParser_js_1.default(macro, parser.stack.env, parser.configuration).mml());
  481. };
  482. PhysicsMethods.IdentityMatrix = function (parser, name) {
  483. var arg = parser.GetArgument(name);
  484. var size = parseInt(arg, 10);
  485. if (isNaN(size)) {
  486. throw new TexError_js_1.default('InvalidNumber', 'Invalid number');
  487. }
  488. if (size <= 1) {
  489. parser.string = '1' + parser.string.slice(parser.i);
  490. parser.i = 0;
  491. return;
  492. }
  493. var zeros = Array(size).fill('0');
  494. var columns = [];
  495. for (var i = 0; i < size; i++) {
  496. var row = zeros.slice();
  497. row[i] = '1';
  498. columns.push(row.join(' & '));
  499. }
  500. parser.string = columns.join('\\\\ ') + parser.string.slice(parser.i);
  501. parser.i = 0;
  502. };
  503. PhysicsMethods.XMatrix = function (parser, name) {
  504. var star = parser.GetStar();
  505. var arg1 = parser.GetArgument(name);
  506. var arg2 = parser.GetArgument(name);
  507. var arg3 = parser.GetArgument(name);
  508. var n = parseInt(arg2, 10);
  509. var m = parseInt(arg3, 10);
  510. if (isNaN(n) || isNaN(m) || m.toString() !== arg3 || n.toString() !== arg2) {
  511. throw new TexError_js_1.default('InvalidNumber', 'Invalid number');
  512. }
  513. n = n < 1 ? 1 : n;
  514. m = m < 1 ? 1 : m;
  515. if (!star) {
  516. var row = Array(m).fill(arg1).join(' & ');
  517. var matrix_1 = Array(n).fill(row).join('\\\\ ');
  518. parser.string = matrix_1 + parser.string.slice(parser.i);
  519. parser.i = 0;
  520. return;
  521. }
  522. var matrix = '';
  523. if (n === 1 && m === 1) {
  524. matrix = arg1;
  525. }
  526. else if (n === 1) {
  527. var row = [];
  528. for (var i = 1; i <= m; i++) {
  529. row.push("".concat(arg1, "_{").concat(i, "}"));
  530. }
  531. matrix = row.join(' & ');
  532. }
  533. else if (m === 1) {
  534. var row = [];
  535. for (var i = 1; i <= n; i++) {
  536. row.push("".concat(arg1, "_{").concat(i, "}"));
  537. }
  538. matrix = row.join('\\\\ ');
  539. }
  540. else {
  541. var rows = [];
  542. for (var i = 1; i <= n; i++) {
  543. var row = [];
  544. for (var j = 1; j <= m; j++) {
  545. row.push("".concat(arg1, "_{{").concat(i, "}{").concat(j, "}}"));
  546. }
  547. rows.push(row.join(' & '));
  548. }
  549. matrix = rows.join('\\\\ ');
  550. }
  551. parser.string = matrix + parser.string.slice(parser.i);
  552. parser.i = 0;
  553. return;
  554. };
  555. PhysicsMethods.PauliMatrix = function (parser, name) {
  556. var arg = parser.GetArgument(name);
  557. var matrix = arg.slice(1);
  558. switch (arg[0]) {
  559. case '0':
  560. matrix += ' 1 & 0\\\\ 0 & 1';
  561. break;
  562. case '1':
  563. case 'x':
  564. matrix += ' 0 & 1\\\\ 1 & 0';
  565. break;
  566. case '2':
  567. case 'y':
  568. matrix += ' 0 & -i\\\\ i & 0';
  569. break;
  570. case '3':
  571. case 'z':
  572. matrix += ' 1 & 0\\\\ 0 & -1';
  573. break;
  574. default:
  575. }
  576. parser.string = matrix + parser.string.slice(parser.i);
  577. parser.i = 0;
  578. };
  579. PhysicsMethods.DiagonalMatrix = function (parser, name, anti) {
  580. if (parser.GetNext() !== '{') {
  581. return;
  582. }
  583. var startI = parser.i;
  584. parser.GetArgument(name);
  585. var endI = parser.i;
  586. parser.i = startI + 1;
  587. var elements = [];
  588. var element = '';
  589. var currentI = parser.i;
  590. while (currentI < endI) {
  591. try {
  592. element = parser.GetUpTo(name, ',');
  593. }
  594. catch (e) {
  595. parser.i = endI;
  596. elements.push(parser.string.slice(currentI, endI - 1));
  597. break;
  598. }
  599. if (parser.i >= endI) {
  600. elements.push(parser.string.slice(currentI, endI));
  601. break;
  602. }
  603. currentI = parser.i;
  604. elements.push(element);
  605. }
  606. parser.string = makeDiagMatrix(elements, anti) + parser.string.slice(endI);
  607. parser.i = 0;
  608. };
  609. function makeDiagMatrix(elements, anti) {
  610. var length = elements.length;
  611. var matrix = [];
  612. for (var i = 0; i < length; i++) {
  613. matrix.push(Array(anti ? length - i : i + 1).join('&') +
  614. '\\mqty{' + elements[i] + '}');
  615. }
  616. return matrix.join('\\\\ ');
  617. }
  618. PhysicsMethods.AutoClose = function (parser, fence, _texclass) {
  619. var mo = parser.create('token', 'mo', { stretchy: false }, fence);
  620. var item = parser.itemFactory.create('mml', mo).
  621. setProperties({ autoclose: fence });
  622. parser.Push(item);
  623. };
  624. PhysicsMethods.Vnabla = function (parser, _name) {
  625. var argument = parser.options.physics.arrowdel ?
  626. '\\vec{\\gradientnabla}' : '{\\gradientnabla}';
  627. return parser.Push(new TexParser_js_1.default(argument, parser.stack.env, parser.configuration).mml());
  628. };
  629. PhysicsMethods.DiffD = function (parser, _name) {
  630. var argument = parser.options.physics.italicdiff ? 'd' : '{\\rm d}';
  631. return parser.Push(new TexParser_js_1.default(argument, parser.stack.env, parser.configuration).mml());
  632. };
  633. PhysicsMethods.Macro = BaseMethods_js_1.default.Macro;
  634. PhysicsMethods.NamedFn = BaseMethods_js_1.default.NamedFn;
  635. PhysicsMethods.Array = BaseMethods_js_1.default.Array;
  636. exports.default = PhysicsMethods;
  637. //# sourceMappingURL=PhysicsMethods.js.map