public function run(array $options)
    {
        $this->generator = new ReadmeGen(new ConfigLoader());

        $this->setupParser($options);

        // Extract useful log entries
        $logGrouped = $this->generator->setExtractor(new Extractor())
            ->extractMessages($this->getLog());

        $config = $this->generator->getConfig();

        $formatterClassName = '\ReadmeGen\Output\Format\\' . ucfirst($config['format']);

        // Create the output formatter
        $formatter = new $formatterClassName;

        $formatter
            ->setRelease($options['release'])
            ->setFileName($config['output_file_name'])
            ->setDate($this->getToDate());

        // Pass decorated log entries to the generator
        $this->generator->setDecorator(new Decorator($formatter))
            ->getDecoratedMessages($logGrouped);

        $writer = new Writer($formatter);

        // If present, respect the breakpoint in the existing output file
        $break = $this->getBreak($options, $config);

        if (false === empty($break)) {
            $writer->setBreak($break);
        }

        // Write the output
        $this->generator->setOutputWriter($writer)
            ->writeOutput();
    }