blob: 660f8f632a3818ad52c314279968a3c3da78e777 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 protos software gmbh (http://www.protos.de).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* CONTRIBUTORS:
* Henrik Rentz-Reichert (initial contribution)
*
*******************************************************************************/
package org.eclipse.etrice.dctools.fsm.ast.nodes
import org.eclipse.etrice.dctools.fsm.ast.nodes.DCAstNode
import org.eclipse.xtend.lib.annotations.Accessors
@Accessors
class DCAstBracketNode extends DCAstTextNode {
enum BracketType {
ROUND,
CURLY,
SQUARE
}
BracketType type
int posClose
boolean closed
new(DCAstNode parent, BracketType type, DCAstNode contents, int posOpen, int posClose) {
super(parent, 2, posOpen, posOpen+1)
this.type = type
this.posClose = posClose
this.closed = posClose>=0
if (contents!==null) {
contents.parent = this
}
}
new(DCAstNode parent, BracketType type, DCAstNode contents, int posOpen) {
this(parent, type, contents, posOpen, -1)
}
def left() {
switch type {
case CURLY: "{"
case ROUND: "("
case SQUARE: "["
}
}
def right() {
switch type {
case CURLY: "}"
case ROUND: ")"
case SQUARE: "]"
}
}
override toString() {
switch type {
case CURLY: "{}"
case ROUND: "()"
case SQUARE: "[]"
}
}
override protected doPrint(String indent) {
println(indent + "DCAstBracketNode " + this.toString)
}
override def String getText() { toString }
}