blob: 89cfdcf5b65f667bd744b731f00ed5ed60a1f8b1 [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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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 String getText() { toString }
}