private CobolToken parseString(final CobolLine cobolLine, final int start) {
        final String line = cobolLine.getSource();
        final int last = line.length() - 1;
        char startChar = line.charAt(start);
        int index = start + 1;

        //  Check hexadecimal strings starting with H or X.
        if (Character.isLetter(startChar)) {
            //  Advance index to see the initial quote/semi-quote.
            index++;
            startChar = line.charAt(start + 1);
        }
        // Was the previous non-comment/non-empty line a string ending in
        // column 72 with a quote?
        if (isSpecialContinuation()) {
            //  The string must begin with quote-quote.
            //  Do not confuse with a empty string.
            index++;
        } //  Inspect the string, accounting for quote-quote.
        int count = 1;  // Count the quotes found so far.
        do {
            while (index <= last && line.charAt(index) != startChar) {
                index++;
            }
            while (index <= last && line.charAt(index) == startChar) {
                count++;
                index++;
            }
        } while (index <= last && count % 2 != 0);

        return new CobolToken(cobolLine.getLineNumber(), cobolLine.getFirstColumn() + start, line.substring(start, index), CobolType.STRING);
    }