Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'autotools/org.eclipse.linuxtools.cdt.autotools.ui/src/org/eclipse/linuxtools/internal/cdt/autotools/ui/editors/automake/Conditional.java')
-rw-r--r--autotools/org.eclipse.linuxtools.cdt.autotools.ui/src/org/eclipse/linuxtools/internal/cdt/autotools/ui/editors/automake/Conditional.java168
1 files changed, 168 insertions, 0 deletions
diff --git a/autotools/org.eclipse.linuxtools.cdt.autotools.ui/src/org/eclipse/linuxtools/internal/cdt/autotools/ui/editors/automake/Conditional.java b/autotools/org.eclipse.linuxtools.cdt.autotools.ui/src/org/eclipse/linuxtools/internal/cdt/autotools/ui/editors/automake/Conditional.java
new file mode 100644
index 0000000000..0a7e098541
--- /dev/null
+++ b/autotools/org.eclipse.linuxtools.cdt.autotools.ui/src/org/eclipse/linuxtools/internal/cdt/autotools/ui/editors/automake/Conditional.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006, 2007 QNX Software Systems and others.
+ * 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:
+ * QNX Software Systems - Initial API and implementation
+ * Red Hat Inc. - modified for Automake editor usage
+ *******************************************************************************/
+package org.eclipse.linuxtools.internal.cdt.autotools.ui.editors.automake;
+
+
+public abstract class Conditional extends Parent implements IConditional {
+
+ private static final String EMPTY = ""; //$NON-NLS-1$
+ String cond;
+ String arg1;
+ String arg2;
+
+ public Conditional(Directive parent, String conditional) {
+ super(parent);
+ cond = conditional;
+ parse();
+ }
+
+ public Conditional(Directive parent) {
+ this(parent, EMPTY, EMPTY, EMPTY);
+ }
+
+ public Conditional(Directive parent, String conditional, String argument1, String argument2) {
+ super(parent);
+ arg1 = argument1;
+ arg2 = argument2;
+ cond = conditional;
+ }
+
+
+ public String getConditional() {
+ return cond;
+ }
+
+ public String getArg1() {
+ return arg1;
+ }
+
+ public String getArg2() {
+ return arg2;
+ }
+
+ public boolean isIf() {
+ return false;
+ }
+
+ public boolean isIfdef() {
+ return false;
+ }
+
+ public boolean isIfndef() {
+ return false;
+ }
+
+ public boolean isIfeq() {
+ return false;
+ }
+
+ public boolean isIfneq() {
+ return false;
+ }
+
+ public boolean isElse() {
+ return false;
+ }
+
+ public boolean isEndif() {
+ return false;
+ }
+
+ /**
+ * Formats of the conditional string.
+ * ifeq (ARG1, ARG2)
+ * ifeq 'ARG1' 'ARG2'
+ * ifeq "ARG1" "ARG2"
+ * ifeq "ARG1" 'ARG2'
+ * ifeq 'ARG1' "ARG2"
+ */
+ protected void parse() {
+ String line = getConditional().trim();
+
+ char terminal = line.charAt(0) == '(' ? ',' : line.charAt(0);
+
+ if (line.length() < 5 && terminal != ',' && terminal != '"' && terminal != '\'') {
+ arg1 = arg2 = EMPTY;
+ return;
+ }
+
+ // Find the end of the first string.
+ int count = 0;
+ // For the (ARG1, ARG2) format.
+
+ // get the first ARG1
+ if (terminal == ',') {
+ int paren = 0;
+ for (count = 1; count < line.length(); count++) {
+ char ch = line.charAt(count);
+ if (ch == '(') {
+ paren++;
+ } else if (ch == ')') {
+ paren--;
+ }
+ if (ch == terminal && paren <= 0) {
+ break;
+ }
+ }
+ } else {
+ for (count = 1; count < line.length(); count++) {
+ if (line.charAt(count) == terminal) {
+ break;
+ }
+ }
+ }
+
+ if (count >= line.length()) {
+ arg1 = arg2 = EMPTY;
+ return;
+ }
+
+ arg1 = line.substring(1, count);
+
+ /* Find the start of the second string. */
+ line = line.substring(count + 1).trim();
+
+ terminal = terminal == ',' ? ')' : line.charAt(0);
+ if (terminal != ')' && terminal != '"' && terminal != '\'') {
+ arg2 = EMPTY;
+ return;
+ }
+
+ count = 0;
+ /* Find the end of the second string. */
+ if (terminal == ')') {
+ int paren = 0;
+ for (count = 0; count < line.length(); count++) {
+ char ch = line.charAt(count);
+ if (ch == '(') {
+ paren++;
+ } else if (ch == ')') {
+ paren--;
+ }
+ if (ch == terminal && paren <= 0) {
+ break;
+ }
+ }
+ } else {
+ for (count = 1; count < line.length(); count++) {
+ if (line.charAt(count) == terminal) {
+ break;
+ }
+ }
+ }
+ if (count > line.length()) {
+ arg2 = EMPTY;
+ } else {
+ arg2 = line.substring(0, count);
+ }
+ }
+}

Back to the top