public CobolLine getCobolLine(final String sourceLine, final int lineNumber) {
        final Matcher m         = sourceFormat.matcher(sourceLine);
        final boolean fixedLine = (m.matches() && sourceLine.startsWith("$")) ? false : fixedFormat;
        final int[] tabs        = (fixedLine) ? CobolLineFixed.getTabs() : CobolLineFree.getTabs();
        final String line       = expandTabs(sourceLine, tabs);
        CobolLine cobolLine;

        if (m.matches()) {
            // $set formatsource must be accepted in both format.
            cobolLine = (line.startsWith("$")) ? new CobolLineFree(lineNumber, line)
                                               : new CobolLineFixed(lineNumber, line);
           String type = m.group(1);
           fixedFormat = type.equalsIgnoreCase("FIXED");
        }
        else {
            //  Any other card except $set formatsource
            cobolLine = (fixedFormat) ? new CobolLineFixed(lineNumber, line)
                                      : new CobolLineFree(lineNumber, line);
        }

        return cobolLine;
    }