in gflog-core/src/main/java/com/epam/deltix/gflog/core/layout/template/FastDateFormat.java [224:274]
private String parseToken(final String pattern, final int[] indexRef) {
final StringBuilder builder = new StringBuilder();
int i = indexRef[0];
final int length = pattern.length();
char c = pattern.charAt(i);
if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') {
// Scan a run of the same character, which indicates a time
// pattern.
builder.append(c);
while (i + 1 < length) {
final char peek = pattern.charAt(i + 1);
if (peek == c) {
builder.append(c);
i++;
} else {
break;
}
}
} else {
// This will identify token as text.
builder.append('\'');
boolean inLiteral = false;
for (; i < length; i++) {
c = pattern.charAt(i);
if (c == '\'') {
if (i + 1 < length && pattern.charAt(i + 1) == '\'') {
// '' is treated as escaped '
i++;
builder.append(c);
} else {
inLiteral = !inLiteral;
}
} else if (!inLiteral &&
(c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')) {
i--;
break;
} else {
builder.append(c);
}
}
}
indexRef[0] = i;
return builder.toString();
}