core/src/main/java/org/trimou/engine/segment/HelperExecutionHandler.java
static Iterator<String> splitHelperName(String name, Segment segment) {

        boolean stringLiteral = false;
        boolean arrayLiteral = false;
        boolean space = false;
        List<String> parts = new ArrayList<>();
        StringBuilder buffer = new StringBuilder();

        for (int i = 0; i < name.length(); i++) {
            if (name.charAt(i) == ' ') {
                if (!space) {
                    if (!stringLiteral && !arrayLiteral) {
                        if (buffer.length() > 0) {
                            parts.add(buffer.toString());
                            buffer = new StringBuilder();
                        }
                        space = true;
                    } else {
                        buffer.append(name.charAt(i));
                    }
                }
            } else {
                if (!arrayLiteral
                        && Strings.isStringLiteralSeparator(name.charAt(i))) {
                    stringLiteral = !stringLiteral;
                } else if (!stringLiteral
                        && Strings.isListLiteralStart(name.charAt(i))) {
                    arrayLiteral = true;
                } else if (!stringLiteral
                        && Strings.isListLiteralEnd(name.charAt(i))) {
                    arrayLiteral = false;
                }
                space = false;
                buffer.append(name.charAt(i));
            }
        }

        if (buffer.length() > 0) {
            if (stringLiteral || arrayLiteral) {
                throw new MustacheException(
                        MustacheProblem.COMPILE_HELPER_VALIDATION_FAILURE,
                        "Unterminated string or array literal detected: %s",
                        segment);
            }
            parts.add(buffer.toString());
        }
        return parts.iterator();
    }
static Iterator<String> splitHelperName(String name, Segment segment) {

        boolean stringLiteral = false;
        boolean arrayLiteral = false;
        boolean space = false;
        List<String> parts = new ArrayList<>();
        StringBuilder buffer = new StringBuilder();

        for (int i = 0; i < name.length(); i++) {
            if (name.charAt(i) == ' ') {
                if (!space) {
                    if (!stringLiteral && !arrayLiteral) {
                        if (buffer.length() > 0) {
                            parts.add(buffer.toString());
                            buffer = new StringBuilder();
                        }
                        space = true;
                    } else {
                        buffer.append(name.charAt(i));
                    }
                }
            } else {
                if (!arrayLiteral
                        && Strings.isStringLiteralSeparator(name.charAt(i))) {
                    stringLiteral = !stringLiteral;
                } else if (!stringLiteral
                        && Strings.isListLiteralStart(name.charAt(i))) {
                    arrayLiteral = true;
                } else if (!stringLiteral
                        && Strings.isListLiteralEnd(name.charAt(i))) {
                    arrayLiteral = false;
                }
                space = false;
                buffer.append(name.charAt(i));
            }
        }

        if (buffer.length() > 0) {
            if (stringLiteral || arrayLiteral) {
                throw new MustacheException(
                        MustacheProblem.COMPILE_HELPER_VALIDATION_FAILURE,
                        "Unterminated string or array literal detected: %s",
                        segment);
            }
            parts.add(buffer.toString());
        }
        return parts.iterator();
    }
Extracts parts from an input string. This implementation is quite naive
and should be possibly rewritten. Note that we can't use a simple
splitter because of string literals may contain whitespace chars.

@param name
@param segment
@return the parts of the helper name
@throws MustacheException
If a compilation problem occurs