com.vaadin.sass.internal.util.StringUtil Maven / Gradle / Ivy
/*
* Copyright 2000-2014 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.internal.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
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, "", "");
}
/**
* Check if a String contains a SCSS variable, using whole word match.
*
* @param text
* text to be checked
* @Param varName SCSS variable name to be checked. (Without '$' sign)
* @return true if the text contains the SCSS variable, false if not
*/
public static boolean containsVariable(String text, String varName) {
return containsSubString(text, "$" + varName);
}
/**
* Replace the SCSS variable in a String to its corresponding value, using
* whole word match.
*
* @param text
* text which contains the SCSS variable
* @param varName
* SCSS variable name (Without '$' sign)
* @param value
* the value of the SCSS variable
* @return the String after replacing
*/
public static String replaceVariable(String text, String varName,
String value) {
return replaceSubString(text, "$" + varName, value);
}
/**
* Check if a String contains a sub string, using whole word match.
*
* @param text
* text to be checked
* @Param sub Sub String to be checked.
* @return true if the text contains the sub string, false if not
*/
public static boolean containsSubString(String text, String sub) {
StringBuilder builder = new StringBuilder();
// (?![\\w-]) means lookahead, the next one shouldn't be a word
// character nor a dash.
builder.append("(? subStrings = Arrays.asList(motherString.split(Pattern
.quote(splitter)));
LinkedHashSet uniqueSubStrings = new LinkedHashSet(
subStrings);
StringBuilder builder = new StringBuilder();
int count = 0;
for (String uniqueSubString : uniqueSubStrings) {
count++;
builder.append(uniqueSubString);
if (count < uniqueSubStrings.size()) {
builder.append(splitter);
}
}
return builder.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy