2626import { StackItemClass , StackItem , BaseItem } from './StackItem.js' ;
2727import { MmlNode , TextNode , TEXCLASS } from '../../core/MmlTree/MmlNode.js' ;
2828import ParseOptions from './ParseOptions.js' ;
29+ import { AbstractFactory } from '../../core/Tree/Factory.js' ;
2930
3031
3132class DummyItem extends BaseItem { }
@@ -35,71 +36,39 @@ class DummyItem extends BaseItem {}
3536 * classes. They can be changed, deleted or added to, if and when necessary.
3637 *
3738 * @constructor
39+ * @extends {AbstractFactory }
3840 */
39- export default class StackItemFactory {
41+ export default class StackItemFactory extends AbstractFactory < StackItem , StackItemClass > {
4042
41- private static DefaultStackItems : { [ kind : string ] : StackItemClass } = {
43+ /**
44+ * @override
45+ */
46+ public static DefaultStackItems : { [ kind : string ] : StackItemClass } = {
4247 [ DummyItem . prototype . kind ] : DummyItem
4348 } ;
4449
50+
4551 /**
46- * A default item.
52+ * @override
4753 */
48- public defaultKind : string = 'dummy' ;
54+ public defaultKind = 'dummy' ;
55+
4956
5057 /**
5158 * The parser configuration.
5259 * @type {ParseOptions }
5360 */
5461 public configuration : ParseOptions = null ;
5562
56- private itemMap : Map < string , StackItemClass > = new Map ( ) ;
57-
58- private item : { [ kind : string ] : ( factory : StackItemFactory , ...args : any [ ] ) => StackItem } = { } ;
59-
60- /**
61- * @constructor
62- */
63- constructor ( ) {
64- this . addStackItems ( StackItemFactory . DefaultStackItems ) ;
65- }
66-
6763
6864 /**
6965 * Adds a list of stack items to the current factory.
7066 * @param {Object.<string, StackItemClass> } stackItems A list of stackitems.
7167 */
7268 public addStackItems ( stackItems : { [ kind : string ] : StackItemClass } ) {
7369 for ( const kind of Object . keys ( stackItems ) ) {
74- this . itemMap . set ( kind , stackItems [ kind ] ) ;
75- let constr = this . itemMap . get ( kind ) ;
76- this . item [ kind ] = ( factory : StackItemFactory , ...args : any [ ] ) => {
77- return new constr ( factory , ...args ) ;
78- } ;
70+ this . setNodeClass ( kind , stackItems [ kind ] ) ;
7971 }
8072 }
8173
82-
83- /**
84- * Removes stack item classs from the factory.
85- * @param {string[] } keys The classes to remove.
86- */
87- public removeStackItems ( keys : string [ ] ) {
88- for ( const key of keys ) {
89- this . itemMap . delete ( key ) ;
90- }
91- }
92-
93-
94- /**
95- *
96- * @param {string } kind The type of
97- * @return { }
98- */
99- public create ( kind : string , ...parameters : any [ ] ) {
100- // return (this.item[kind] || this.item[this.defaultKind])(this, ...parameters);
101- return ( this . item [ kind ] || this . item [ this . defaultKind ] )
102- . apply ( null , [ this ] . concat ( ...parameters ) ) ;
103- }
104-
10574}
0 commit comments