1 | import Expression from './expression';
|
2 | import RRBreak from '../ui/rrbreak';
|
3 | import RRText from '../ui/rrtext';
|
4 | import GrammarToRRDiagram from './grammartorrdiagram';
|
5 | import RRElement from '../ui/rrelement';
|
6 | import GrammarToBNF from './grammartobnf';
|
7 |
|
8 | export default class RuleReference extends Expression {
|
9 |
|
10 | |
11 |
|
12 |
|
13 | constructor(ruleName) {
|
14 | super();
|
15 | this.ruleName = ruleName;
|
16 | }
|
17 |
|
18 | getRuleName() {
|
19 | return this.ruleName;
|
20 | }
|
21 |
|
22 | |
23 |
|
24 |
|
25 |
|
26 | toRRElement(grammarToRRDiagram) {
|
27 | const ruleConsideredAsLineBreak = grammarToRRDiagram.ruleConsideredAsLineBreak;
|
28 | if (ruleConsideredAsLineBreak != null && ruleConsideredAsLineBreak === this.ruleName) {
|
29 | return new RRBreak();
|
30 | }
|
31 | const ruleLinkProvider = grammarToRRDiagram.ruleLinkProvider;
|
32 | return new RRText(RRText.Type.RULE, this.ruleName, ruleLinkProvider == null ? null : ruleLinkProvider(this.ruleName));
|
33 | }
|
34 |
|
35 | |
36 |
|
37 |
|
38 |
|
39 |
|
40 | toBNF(grammarToBNF, sb, isNested) {
|
41 | sb.push(this.ruleName);
|
42 | const ruleConsideredAsLineBreak = grammarToBNF.ruleConsideredAsLineBreak;
|
43 | if (ruleConsideredAsLineBreak != null && ruleConsideredAsLineBreak === this.ruleName) {
|
44 | sb.push("\n");
|
45 | }
|
46 | }
|
47 |
|
48 | |
49 |
|
50 |
|
51 |
|
52 | equals(o) {
|
53 | if(!(o instanceof RuleReference)) {
|
54 | return false;
|
55 | }
|
56 | return this.ruleName == o.ruleName;
|
57 | }
|
58 |
|
59 | }
|