private static List applyPattern()

in src/main/java/org/apache/maven/reporting/AbstractMavenReportRenderer.java [508:608]


    private static List<String> applyPattern(String text) {
        if (text == null || text.isEmpty()) {
            return null;
        }

        // Map defined by key/value name/href
        // If href == null, it means
        List<String> segments = new ArrayList<>();

        // TODO Special case http://jira.codehaus.org/browse/MEV-40
        if (text.indexOf("${") != -1) {
            int lastComma = text.lastIndexOf(",");
            int lastSemi = text.lastIndexOf("}");
            if (lastComma != -1 && lastSemi != -1 && lastComma < lastSemi) {
                segments.add(text.substring(lastComma + 1, lastSemi).trim());
                segments.add(null);
            } else {
                segments.add(text);
                segments.add(null);
            }

            return segments;
        }

        boolean inQuote = false;
        int braceStack = 0;
        int lastOffset = 0;

        for (int i = 0; i < text.length(); i++) {
            char ch = text.charAt(i);

            if (ch == '\'' && !inQuote && braceStack == 0) {
                // handle: ''
                if (i + 1 < text.length() && text.charAt(i + 1) == '\'') {
                    i++;
                    segments.add(text.substring(lastOffset, i));
                    segments.add(null);
                    lastOffset = i + 1;
                } else {
                    inQuote = true;
                }
            } else {
                switch (ch) {
                    case '{':
                        if (!inQuote) {
                            if (braceStack == 0) {
                                if (i != lastOffset) // handle { at first character
                                {
                                    segments.add(text.substring(lastOffset, i));
                                    segments.add(null);
                                }
                                lastOffset = i + 1;
                            }
                            braceStack++;
                        }
                        break;
                    case '}':
                        if (!inQuote) {
                            braceStack--;
                            if (braceStack == 0) {
                                String subString = text.substring(lastOffset, i);
                                lastOffset = i + 1;

                                int lastComma = subString.lastIndexOf(",");
                                if (lastComma != -1) {
                                    segments.add(
                                            subString.substring(0, lastComma).trim());
                                    segments.add(
                                            subString.substring(lastComma + 1).trim());
                                } else {
                                    segments.add(subString);
                                    segments.add(null);
                                }
                            }
                        }
                        break;
                    case '\'':
                        inQuote = false;
                        break;
                    default:
                        break;
                }
            }
        }

        if (!StringUtils.isEmpty(text.substring(lastOffset))) {
            segments.add(text.substring(lastOffset));
            segments.add(null);
        }

        if (braceStack != 0) {
            throw new IllegalArgumentException("Unmatched braces in the pattern.");
        }

        if (inQuote) {
            // throw new IllegalArgumentException( "Unmatched quote in the pattern." );
            // TODO: warning...
        }

        return Collections.unmodifiableList(segments);
    }