/************************************************************* * * Copyright (c) 2009-2018 The MathJax Consortium * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @fileoverview Stack items for the physics package. * * @author v.sorge@mathjax.org (Volker Sorge) */ import StackItemFactory from '../StackItemFactory.js'; import {CheckType, BaseItem, StackItem, EnvList} from '../StackItem.js'; import {TEXCLASS, MmlNode} from '../../../core/MmlTree/MmlNode.js'; import ParseUtil from '../ParseUtil.js'; import TexParser from '../TexParser.js'; import NodeUtil from '../NodeUtil.js'; export class AutoOpen extends BaseItem { /** * @override */ public get kind() { return 'auto open'; } /** * @override */ get isOpen() { return true; } /** * @override */ public toMml() { // Smash and right/left let parser = this.factory.configuration.parser; let right = this.getProperty('right') as string; if (this.getProperty('smash')) { let mml = super.toMml(); const smash = parser.create('node', 'mpadded', [mml], {height: 0, depth: 0}); this.Clear(); this.Push(parser.create('node', 'TeXAtom', [smash])); } if (right) { this.Push(new TexParser(right, parser.stack.env, parser.configuration).mml()); } let mml = super.toMml(); return ParseUtil.fenced(this.factory.configuration, this.getProperty('open') as string, mml, this.getProperty('close') as string, this.getProperty('big') as string); } /** * @override */ public checkItem(item: StackItem): CheckType { let close = item.getProperty('autoclose'); if (close && close === this.getProperty('close')) { if (this.getProperty('ignore')) { this.Clear(); return [[], true]; } return [[this.toMml()], true]; } return super.checkItem(item); } }