summaryrefslogtreecommitdiffstats
path: root/theme-compiler/src/com/vaadin/sass/util/StringUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'theme-compiler/src/com/vaadin/sass/util/StringUtil.java')
-rw-r--r--theme-compiler/src/com/vaadin/sass/util/StringUtil.java136
1 files changed, 136 insertions, 0 deletions
diff --git a/theme-compiler/src/com/vaadin/sass/util/StringUtil.java b/theme-compiler/src/com/vaadin/sass/util/StringUtil.java
new file mode 100644
index 0000000000..bd39f1d41a
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/util/StringUtil.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.sass.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+public class StringUtil {
+ private static final String FOLDER_SEPARATOR = "/"; // folder separator
+
+ private static final String WINDOWS_FOLDER_SEPARATOR = "\\"; // Windows
+ // folder
+ // separator
+
+ private static final String TOP_PATH = ".."; // top folder
+
+ private static final String CURRENT_PATH = "."; // current folder
+
+ public static String cleanPath(String path) {
+ String pathToUse = replace(path, WINDOWS_FOLDER_SEPARATOR,
+ FOLDER_SEPARATOR);
+ String[] pathArray = delimitedListToStringArray(pathToUse,
+ FOLDER_SEPARATOR);
+ List pathElements = new LinkedList();
+ int tops = 0;
+ for (int i = pathArray.length - 1; i >= 0; i--) {
+ if (CURRENT_PATH.equals(pathArray[i])) {
+ // do nothing
+ } else if (TOP_PATH.equals(pathArray[i])) {
+ tops++;
+ } else {
+ if (tops > 0) {
+ tops--;
+ } else {
+ pathElements.add(0, pathArray[i]);
+ }
+ }
+ }
+ for (int i = 0; i < tops; i++) {
+ pathElements.add(0, TOP_PATH);
+ }
+ return collectionToDelimitedString(pathElements, FOLDER_SEPARATOR);
+ }
+
+ public static String replace(String inString, String oldPattern,
+ String newPattern) {
+ if (inString == null) {
+ return null;
+ }
+ if (oldPattern == null || newPattern == null) {
+ return inString;
+ }
+
+ StringBuffer sbuf = new StringBuffer();
+ // output StringBuffer we'll build up
+ int pos = 0; // our position in the old string
+ int index = inString.indexOf(oldPattern);
+ // the index of an occurrence we've found, or -1
+ int patLen = oldPattern.length();
+ while (index >= 0) {
+ sbuf.append(inString.substring(pos, index));
+ sbuf.append(newPattern);
+ pos = index + patLen;
+ index = inString.indexOf(oldPattern, pos);
+ }
+ sbuf.append(inString.substring(pos));
+
+ // remember to append any characters to the right of a match
+ return sbuf.toString();
+ }
+
+ public static String[] delimitedListToStringArray(String str,
+ String delimiter) {
+ if (str == null) {
+ return new String[0];
+ }
+ if (delimiter == null) {
+ return new String[] { str };
+ }
+
+ List result = new ArrayList();
+ int pos = 0;
+ int delPos = 0;
+ while ((delPos = str.indexOf(delimiter, pos)) != -1) {
+ result.add(str.substring(pos, delPos));
+ pos = delPos + delimiter.length();
+ }
+ if (str.length() > 0 && pos <= str.length()) {
+ // Add rest of String, but not in case of empty input.
+ result.add(str.substring(pos));
+ }
+
+ return (String[]) result.toArray(new String[result.size()]);
+ }
+
+ public static String collectionToDelimitedString(Collection coll,
+ String delim, String prefix, String suffix) {
+ if (coll == null) {
+ return "";
+ }
+
+ StringBuffer sb = new StringBuffer();
+ Iterator it = coll.iterator();
+ int i = 0;
+ while (it.hasNext()) {
+ if (i > 0) {
+ sb.append(delim);
+ }
+ sb.append(prefix).append(it.next()).append(suffix);
+ i++;
+ }
+ return sb.toString();
+ }
+
+ public static String collectionToDelimitedString(Collection coll,
+ String delim) {
+ return collectionToDelimitedString(coll, delim, "", "");
+ }
+}