case_tensor.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import { SemanticType } from '../semantic_tree/semantic_meaning.js';
  2. import { SemanticSkeleton } from '../semantic_tree/semantic_skeleton.js';
  3. import { CaseMultiindex } from './case_multiindex.js';
  4. import * as EnrichMathml from './enrich_mathml.js';
  5. import { setAttributes, Attribute } from './enrich_attr.js';
  6. export class CaseTensor extends CaseMultiindex {
  7. static test(semantic) {
  8. return !!semantic.mathmlTree && semantic.type === SemanticType.TENSOR;
  9. }
  10. constructor(semantic) {
  11. super(semantic);
  12. }
  13. getMathml() {
  14. EnrichMathml.walkTree(this.semantic.childNodes[0]);
  15. const lsub = CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]);
  16. const lsup = CaseMultiindex.multiscriptIndex(this.semantic.childNodes[2]);
  17. const rsub = CaseMultiindex.multiscriptIndex(this.semantic.childNodes[3]);
  18. const rsup = CaseMultiindex.multiscriptIndex(this.semantic.childNodes[4]);
  19. setAttributes(this.mml, this.semantic);
  20. const collapsed = [
  21. this.semantic.id,
  22. this.semantic.childNodes[0].id,
  23. lsub,
  24. lsup,
  25. rsub,
  26. rsup
  27. ];
  28. EnrichMathml.addCollapsedAttribute(this.mml, collapsed);
  29. const childIds = SemanticSkeleton.collapsedLeafs(lsub, lsup, rsub, rsup);
  30. childIds.unshift(this.semantic.childNodes[0].id);
  31. this.mml.setAttribute(Attribute.CHILDREN, childIds.join(','));
  32. this.completeMultiscript(SemanticSkeleton.interleaveIds(rsub, rsup), SemanticSkeleton.interleaveIds(lsub, lsup));
  33. return this.mml;
  34. }
  35. }