171 lines
3.9 KiB
PHP
171 lines
3.9 KiB
PHP
#!/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);
|
|
}
|