UNPKG

1.75 kBJavaScriptView Raw
1import Expression from './expression';
2import RRBreak from '../ui/rrbreak';
3import RRText from '../ui/rrtext';
4import GrammarToRRDiagram from './grammartorrdiagram';
5import RRElement from '../ui/rrelement';
6import GrammarToBNF from './grammartobnf';
7
8export default class RuleReference extends Expression {
9
10 /**
11 * @param {string} ruleName
12 */
13 constructor(ruleName) {
14 super();
15 this.ruleName = ruleName;
16 }
17
18 getRuleName() {
19 return this.ruleName;
20 }
21
22 /**
23 * @param {GrammarToRRDiagram} grammarToRRDiagram
24 * @return {RRElement}
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 * @param {GrammarToBNF} grammarToBNF
37 * @param {string[]} sb
38 * @param {boolean} isNested
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 * @param {*} o
50 * @return {boolean}
51 */
52 equals(o) {
53 if(!(o instanceof RuleReference)) {
54 return false;
55 }
56 return this.ruleName == o.ruleName;
57 }
58
59}