| /********************************************************************** |
| * Copyright (c) 2002,2003 QNX Software Systems and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * Contributors: |
| * QNX Software Systems - Initial API and implementation |
| ***********************************************************************/ |
| package org.eclipse.cdt.make.internal.core.makefile; |
| |
| /** |
| * Utility methods. |
| */ |
| public class Util { |
| |
| private Util() { |
| } |
| |
| public static boolean isCommand(String line) { |
| return line.length() > 1 && line.startsWith("\t"); |
| } |
| |
| public static boolean isEscapedLine(String line) { |
| return (line.endsWith("\\") && !line.endsWith("\\\\")); |
| } |
| |
| public static boolean isEmptyLine(String line) { |
| return line.trim().length() == 0; |
| } |
| |
| public static int indexOfComment(String line) { |
| boolean escaped = false; |
| for (int i = 0; i < line.length(); i++) { |
| if (line.charAt(i) == '#' && !escaped) { |
| return i; |
| } |
| escaped = line.charAt(i) == '\\'; |
| } |
| return -1; |
| } |
| |
| public static boolean isSpace(char c) { |
| return (c == ' ' || c == '\t' || c == '\r' || c == '\n'); |
| } |
| |
| public static int indexOf(String line, char c) { |
| return indexOf(line, new Character(c).toString()); |
| } |
| |
| /** |
| * Special indexOf() method that makes sure that what we are searching |
| * is not between parentheses and brackets like a macro $(foo) ${bar} |
| */ |
| public static int indexOf(String line, String tokens) { |
| int paren = 0; |
| int bracket = 0; |
| char prev = 0; |
| char pprev = 0; |
| for (int i = 0; i < line.length(); i++) { |
| char ch = line.charAt(i); |
| if (ch == '(' && prev == '$' && pprev != '\\') { |
| paren++; |
| } else if (ch == '{' && prev == '$' && pprev != '\\') { |
| bracket++; |
| } else if (ch == ')' && prev != '\\') { |
| if (paren > 0) { |
| paren--; |
| } |
| } else if (ch == '}' && prev != '\\') { |
| if (bracket > 0) { |
| bracket--; |
| } |
| } else if (tokens.indexOf(ch) != -1) { |
| if (paren == 0 && bracket == 0) { |
| return i; |
| } |
| } |
| pprev = prev; |
| prev = ch; |
| } |
| return -1; |
| } |
| |
| } |