package com.hubspot.jinjava.lib.filter;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.hubspot.jinjava.doc.annotations.JinjavaDoc;
import com.hubspot.jinjava.doc.annotations.JinjavaSnippet;
import com.hubspot.jinjava.interpret.JinjavaInterpreter;
@JinjavaDoc(
value = "Counts the words in the given string",
snippets = {
@JinjavaSnippet(
code = "{% set count_words = \"Count the number of words in this variable\" %}\n" +
"{{ count_words|wordcount }}")
})
public class WordCountFilter implements Filter {
@Override
public String getName() {
return "wordcount";
}
@Override
public Object filter(Object var, JinjavaInterpreter interpreter, String... args) {
Matcher matcher = WORD_RE.matcher(Objects.toString(var, ""));
int count = 0;
while (matcher.find()) {
count++;
}
return Integer.valueOf(count);
}
private static final Pattern WORD_RE = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS | Pattern.MULTILINE);
}