class StructureNamesRepository {

        private static final int REPOSITORY_INITIAL_LEN = 20;
        private static final int REPOSITORY_INITIAL_INC = 5;
        private char[][] repository;
        private int repositorySize;


        StructureNamesRepository() {
            super();
            this.repository = new char[REPOSITORY_INITIAL_LEN][];
            this.repositorySize = 0;
        }


        char[] getStructureName(final char[] text, final int offset, final int len) {<FILL_FUNCTION_BODY>}


        private char[] storeStructureName(final int index, final char[] text, final int offset, final int len) {

            if (this.repositorySize == this.repository.length) {
                // We must grow the repository!
                final char[][] newRepository = new char[this.repository.length + REPOSITORY_INITIAL_INC][];
                Arrays.fill(newRepository, null);
                System.arraycopy(this.repository, 0, newRepository, 0, this.repositorySize);
                this.repository = newRepository;
            }

            // binary search returned (-(insertion point) - 1)
            final int insertionIndex = ((index + 1) * -1);

            // Create the char[] for the structure name
            final char[] structureName = new char[len];
            System.arraycopy(text, offset, structureName, 0, len);

            // Make room and insert the new element
            System.arraycopy(this.repository, insertionIndex, this.repository, insertionIndex + 1, this.repositorySize - insertionIndex);
            this.repository[insertionIndex] = structureName;
            this.repositorySize++;

            return structureName;

        }

    }


            // We are looking for exact matches here, disregarding the TEXT_PARSING_CASE_SENSITIVE constant value
            final int index =
                    TextUtils.binarySearch(true, this.repository, 0, this.repositorySize, text, offset, len);

            if (index >= 0) {
                return this.repository[index];
            }

            /*
             * NOT FOUND. We need to store the text
             */
            return storeStructureName(index, text, offset, len);

        
<methods>public void handleAttribute(char[], int, int, int, int, int, int, int, int, int, int, int, int, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleCloseElementEnd(char[], int, int, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleCloseElementStart(char[], int, int, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleComment(char[], int, int, int, int, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleDocumentEnd(long, long, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleDocumentStart(long, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleOpenElementEnd(char[], int, int, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleOpenElementStart(char[], int, int, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleStandaloneElementEnd(char[], int, int, boolean, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleStandaloneElementStart(char[], int, int, boolean, int, int) throws org.thymeleaf.templateparser.text.TextParseException,public void handleText(char[], int, int, int, int) throws org.thymeleaf.templateparser.text.TextParseException<variables>private final non-sealed org.thymeleaf.templateparser.text.ITextHandler next