|
- #!/usr/bin/env php
- <?php
- /**
- * @copyright Copyright (c) 2014 Carsten Brandt
- * @license https://github.com/cebe/markdown/blob/master/LICENSE
- * @link https://github.com/cebe/markdown#readme
- */
-
- $composerAutoload = [
- __DIR__ . '/../vendor/autoload.php', // standalone with "composer install" run
- __DIR__ . '/../../../autoload.php', // script is installed as a composer binary
- ];
- foreach ($composerAutoload as $autoload) {
- if (file_exists($autoload)) {
- require($autoload);
- break;
- }
- }
-
- // Send all errors to stderr
- ini_set('display_errors', 'stderr');
-
- $flavor = 'cebe\\markdown\\Markdown';
- $flavors = [
- 'gfm' => ['cebe\\markdown\\GithubMarkdown', __DIR__ . '/../GithubMarkdown.php'],
- 'extra' => ['cebe\\markdown\\MarkdownExtra', __DIR__ . '/../MarkdownExtra.php'],
- ];
-
- $full = false;
- $src = [];
- foreach($argv as $k => $arg) {
- if ($k == 0) {
- continue;
- }
- if ($arg[0] == '-') {
- $arg = explode('=', $arg);
- switch($arg[0]) {
- case '--flavor':
- if (isset($arg[1])) {
- if (isset($flavors[$arg[1]])) {
- require($flavors[$arg[1]][1]);
- $flavor = $flavors[$arg[1]][0];
- } else {
- error("Unknown flavor: " . $arg[1], "usage");
- }
- } else {
- error("Incomplete argument --flavor!", "usage");
- }
- break;
- case '--full':
- $full = true;
- break;
- case '-h':
- case '--help':
- echo "PHP Markdown to HTML converter\n";
- echo "------------------------------\n\n";
- echo "by Carsten Brandt <mail@cebe.cc>\n\n";
- usage();
- break;
- default:
- error("Unknown argument " . $arg[0], "usage");
- }
- } else {
- $src[] = $arg;
- }
- }
-
- if (empty($src)) {
- $markdown = file_get_contents("php://stdin");
- } elseif (count($src) == 1) {
- $file = reset($src);
- if (!file_exists($file)) {
- error("File does not exist:" . $file);
- }
- $markdown = file_get_contents($file);
- } else {
- error("Converting multiple files is not yet supported.", "usage");
- }
-
- /** @var cebe\markdown\Parser $md */
- $md = new $flavor();
- $markup = $md->parse($markdown);
-
- if ($full) {
- echo <<<HTML
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <style>
- body { font-family: Arial, sans-serif; }
- code { background: #eeeeff; padding: 2px; }
- li { margin-bottom: 5px; }
- img { max-width: 1200px; }
- table, td, th { border: solid 1px #ccc; border-collapse: collapse; }
- </style>
- </head>
- <body>
- $markup
- </body>
- </html>
- HTML;
- } else {
- echo $markup;
- }
-
- // functions
-
- /**
- * Display usage information
- */
- function usage() {
- global $argv;
- $cmd = $argv[0];
- echo <<<EOF
- Usage:
- $cmd [--flavor=<flavor>] [--full] [file.md]
-
- --flavor specifies the markdown flavor to use. If omitted the original markdown by John Gruber [1] will be used.
- Available flavors:
-
- gfm - Github flavored markdown [2]
- extra - Markdown Extra [3]
-
- --full ouput a full HTML page with head and body. If not given, only the parsed markdown will be output.
-
- --help shows this usage information.
-
- If no file is specified input will be read from STDIN.
-
- Examples:
-
- Render a file with original markdown:
-
- $cmd README.md > README.html
-
- Render a file using gihtub flavored markdown:
-
- $cmd --flavor=gfm README.md > README.html
-
- Convert the original markdown description to html using STDIN:
-
- curl http://daringfireball.net/projects/markdown/syntax.text | $cmd > md.html
-
-
- [1] http://daringfireball.net/projects/markdown/syntax
- [2] https://help.github.com/articles/github-flavored-markdown
- [3] http://michelf.ca/projects/php-markdown/extra/
-
- EOF;
- exit(1);
- }
-
- /**
- * Send custom error message to stderr
- * @param $message string
- * @param $callback mixed called before script exit
- * @return void
- */
- function error($message, $callback = null) {
- $fe = fopen("php://stderr", "w");
- fwrite($fe, "Error: " . $message . "\n");
-
- if (is_callable($callback)) {
- call_user_func($callback);
- }
-
- exit(1);
- }
|