1 package fr.ove.openmath.jome.ctrl.om;
2
3 import java.awt.*;
4 import java.awt.event.*;
5 import java.util.*;
6 import java.io.*;
7 import fr.inria.openmath.omapi.*;
8 import fr.inria.openmath.omapi.implementation.*;
9 import fr.ove.openmath.jome.ctrl.linear.events.*;
10 import fr.ove.openmath.jome.ctrl.om.*;
11
12 /***
13 * A parser for OpenMath objects.
14 *
15 * @author © 1999 DIRAT Laurent
16 * @version 1.0 06/10/1999
17 */
18 public class OMParser implements Serializable, LinearParserEventSource {
19 OMTreeParserHandler parserHandler;
20 Parser parser;
21
22 /***
23 * The list of listeners of the instance
24 */
25 private Vector listeners = new Vector();
26
27
28 public OMParser() {
29 parserHandler = new OMTreeParserHandler();
30 parser = new XMLParser(parserHandler);
31 parserHandler.setEventSource(this);
32 }
33
34 public void parseOMObject(String omObject) {
35 ByteArrayInputStream in = new ByteArrayInputStream(omObject.getBytes());
36
37 try {
38 parser.initParse(in);
39
40 parser.parseObject(in);
41 }
42 catch (Exception e) {
43 e.printStackTrace();
44 }
45 }
46
47 public void initParse(InputStream is) {
48 parser.initParse(is);
49 }
50
51 public void parseObject(InputStream is) {
52 parser.parseObject(is);
53 }
54
55 /***
56 * Registers another listener of the instance.
57 * @param linearParserListener the listener to add.
58 */
59 public synchronized void addLinearParserListener(LinearParserListener linearParserListener) {
60 listeners.addElement(linearParserListener);
61 }
62
63 /***
64 * Removes a listener.
65 * @param linearParserListener the listener to remove.
66 */
67 public synchronized void removeLinearParserListener(LinearParserListener linearParserListener) {
68 listeners.removeElement(linearParserListener);
69 }
70
71 /***
72 * Fires a LinearParserEvent event to registered listeners.
73 * @param linearParserEvent event encapsulating relevant information.
74 */
75 public void fireLinearParserEvent(LinearParserEvent linearParserEvent) {
76 for (int i = 0; i < listeners.size(); i++)
77 ((LinearParserListener) listeners.elementAt(i)).consumeLinearParserEvent(linearParserEvent);
78 }
79 }