package com.hubspot.jinjava.util; import com.hubspot.jinjava.interpret.InterpretException; public final class WhitespaceUtils { public static boolean startsWith(String s, String prefix) { if (s == null) { return false; } for (int i = 0; i < s.length(); i++) { if (Character.isWhitespace(s.charAt(i))) { continue; } else { return s.regionMatches(i, prefix, 0, prefix.length()); } } return false; } public static boolean endsWith(String s, String suffix) { if (s == null) { return false; } for (int i = s.length() - 1; i >= 0; i--) { if (Character.isWhitespace(s.charAt(i))) { continue; } else { return s.regionMatches(i - suffix.length() + 1, suffix, 0, suffix.length()); } } return false; } public static boolean isWrappedWith(String s, String prefix, String suffix) { return startsWith(s, prefix) && endsWith(s, suffix); } public static boolean isQuoted(String s) { if (startsWith(s, "'")) { if (!endsWith(s, "'")) { throw new InterpretException("Unbalanced quotes: " + s); } return true; } else if (startsWith(s, "\"")) { if (!endsWith(s, "\"")) { throw new InterpretException("Unbalanced quotes: " + s); } return true; } return false; } public static String unquote(String s) { if (s == null) { return ""; } if (startsWith(s, "'")) { return unwrap(s, "'", "'"); } else if (startsWith(s, "\"")) { return unwrap(s, "\"", "\""); } return s.trim(); } public static String unwrap(String s, String prefix, String suffix) { int start = 0, end = s.length() - 1; while (start < s.length()) { if (!Character.isWhitespace(s.charAt(start))) { break; } ++start; } while (end >= 0) { if (!Character.isWhitespace(s.charAt(end))) { break; } --end; } return s.substring(start + prefix.length(), end - suffix.length() + 1); } private WhitespaceUtils() { } }