/**
     * Initialized the command
     */
    public function __construct()
    {
        parent::__construct();
        $script = basename($this->script_path);
        $link = MarkdownExtended::LINK;
        $this->setName(MarkdownExtended::NAME)->setShortname(MarkdownExtended::SHORTNAME)->setVersion(MarkdownExtended::VERSION)->setDescription(MarkdownExtended::DESC)->setUsage(<<<DESC
This program converts markdown-extended syntax text(s) source(s) from specified file(s)
(or STDIN). The rendering can be the full parsed content or just a part of this content.
By default, result is written through STDOUT in HTML format.

To transform a file content, write its path as script argument. To process a list of input
files, just write the concerned paths as arguments, separated by a space.

To transform a string read from STDIN, write it as last argument between double-quotes or EOF.
To process a list of input strings, just write them as arguments, separated by a space.
You can also use the output of a previous command with the pipe notation.

Examples:
    {$script} [options ...] input_filename [input_filename] [...]
    {$script} [options ...] "markdown string read from STDIN"
    echo "*Markdown* __content__" | {$script} [options ...]

Additionally, you can call a special task running: `{$script} <task_name>`
Available tasks are:
    license         : read the full LICENSE of the application
    manifest        : read the full application manifest
    config-list     : dump current configuration settings list
    filters-list    : list runtime filters for current configuration

More information at <{$link}>.
DESC
)->setSynopsis($script . ' [options] "**markdown** _string_" [... string / file path]')->setShortVersionString(MarkdownExtended::getAppInfo(true))->setLongVersionString(implode(PHP_EOL, MarkdownExtended::getAppInfo()))->addCliOption('output', array('shortcut' => 'o', 'argument' => UserInput::ARG_REQUIRED, 'type' => UserInput::TYPE_STRING, 'negate' => true, 'description' => 'Write the result in concerned path(s).'))->addCliOption('config', array('shortcut' => 'c', 'argument' => UserInput::ARG_REQUIRED, 'type' => UserInput::TYPE_STRING, 'description' => 'Define a configuration file to over-write defaults.'))->addCliOption('format', array('shortcut' => 'f', 'argument' => UserInput::ARG_REQUIRED, 'type' => UserInput::TYPE_STRING, 'default' => 'html', 'description' => 'Define the final format to use ("HTML" by default).'))->addCliOption('extract', array('shortcut' => 'e', 'argument' => UserInput::ARG_OPTIONAL, 'type' => UserInput::TYPE_STRING, 'default' => false, 'default_arg' => 'metadata', 'description' => 'Extract only a part of parsed content ("metadata" by default).'))->addCliOption('template', array('shortcut' => 't', 'argument' => UserInput::ARG_OPTIONAL, 'type' => UserInput::TYPE_BOOL | UserInput::TYPE_PATH, 'negate' => true, 'default' => 'auto', 'default_arg' => true, 'description' => 'Define a template to load parsed content in (without argument, the default template will be used).'))->addCliOption('response', array('shortcut' => 'r', 'argument' => UserInput::ARG_REQUIRED, 'type' => UserInput::TYPE_STRING | UserInput::TYPE_LISTITEM, 'default' => 'plain', 'list' => array('plain', 'json', 'php'), 'description' => 'Define the response format in "plain" (default), "json" or "php".'))->addCliOption('force', array('argument' => UserInput::ARG_NULL, 'description' => 'Force some actions (i.e. does not create file backup).'));
        $this->initCommonOptions()->parseOptions();
    }