Html Command outputs formatted document

The section titles aren’t being handled correctly, but otherwise, the
output looks good.
This commit is contained in:
Craig Davis 2014-01-12 11:00:45 -07:00
parent 842fae2b6f
commit 57fbb3dd8f
3 changed files with 281 additions and 101 deletions

View File

@ -31,8 +31,6 @@
},
"minimum-stability": "dev",
"require": {
},
"require-dev": {
"symfony/console": "v2.3.4",
"symfony/config": "v2.3.4",
"symfony/yaml": "v2.3.4",
@ -41,6 +39,12 @@
"twig/twig": "v1.13.2",
"mustache/mustache": "2.5.1",
"michelf/php-smartypants": "1.6.0-beta1",
"simple-html-dom/simple-html-dom": "1.5.0"
"simple-html-dom/simple-html-dom": "1.5.0",
"kriswallsmith/assetic": "1.1.2"
},
"autoload": {
"classmap": [
"vendor/simple-html-dom/simple-html-dom/"
]
}
}

309
composer.lock generated
View File

@ -3,8 +3,171 @@
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
],
"hash": "7f8d3ab6c722a1dfa180e92c876ffc63",
"hash": "40e7ded8558afab5c3b481ec2d33dafe",
"packages": [
{
"name": "kriswallsmith/assetic",
"version": "v1.1.2",
"source": {
"type": "git",
"url": "https://github.com/kriswallsmith/assetic.git",
"reference": "735cffd3982c6e8cdebe292d5db39d077f65890f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/735cffd3982c6e8cdebe292d5db39d077f65890f",
"reference": "735cffd3982c6e8cdebe292d5db39d077f65890f",
"shasum": ""
},
"require": {
"php": ">=5.3.1",
"symfony/process": "~2.1"
},
"require-dev": {
"cssmin/cssmin": "*",
"joliclic/javascript-packer": "*",
"kamicane/packager": "*",
"leafo/lessphp": "*",
"leafo/scssphp": "*",
"leafo/scssphp-compass": "*",
"mrclay/minify": "*",
"phpunit/phpunit": "~3.7",
"ptachoire/cssembed": "*",
"twig/twig": "~1.6"
},
"suggest": {
"leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler",
"leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler",
"leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin",
"ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris",
"twig/twig": "Assetic provides the integration with the Twig templating engine"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-0": {
"Assetic": "src/"
},
"files": [
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kris Wallsmith",
"email": "kris.wallsmith@gmail.com",
"homepage": "http://kriswallsmith.net/"
}
],
"description": "Asset Management for PHP",
"homepage": "https://github.com/kriswallsmith/assetic",
"keywords": [
"assets",
"compression",
"minification"
],
"time": "2013-07-19 00:03:27"
},
{
"name": "leafo/lessphp",
"version": "v0.4.0",
"source": {
"type": "git",
"url": "https://github.com/leafo/lessphp.git",
"reference": "51f3f06f0fe78a722dabfd14578444bdd078d9de"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/leafo/lessphp/zipball/51f3f06f0fe78a722dabfd14578444bdd078d9de",
"reference": "51f3f06f0fe78a722dabfd14578444bdd078d9de",
"shasum": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "0.3-dev"
}
},
"autoload": {
"classmap": [
"lessc.inc.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT",
"GPL-3.0"
],
"authors": [
{
"name": "Leaf Corcoran",
"email": "leafot@gmail.com",
"homepage": "http://leafo.net"
}
],
"description": "lessphp is a compiler for LESS written in PHP.",
"homepage": "http://leafo.net/lessphp/",
"time": "2013-08-09 17:09:19"
},
{
"name": "michelf/php-markdown",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/michelf/php-markdown.git",
"reference": "96d8150406f67e683ef4acc09fef91785fef1266"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/michelf/php-markdown/zipball/96d8150406f67e683ef4acc09fef91785fef1266",
"reference": "96d8150406f67e683ef4acc09fef91785fef1266",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-lib": "1.4.x-dev"
}
},
"autoload": {
"psr-0": {
"Michelf": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Michel Fortin",
"email": "michel.fortin@michelf.ca",
"homepage": "http://michelf.ca/",
"role": "Developer"
},
{
"name": "John Gruber",
"homepage": "http://daringfireball.net/"
}
],
"description": "PHP Markdown",
"homepage": "http://michelf.ca/projects/php-markdown/",
"keywords": [
"markdown"
],
"time": "2013-11-29 17:09:24"
},
{
"name": "michelf/php-smartypants",
"version": "1.6.0-beta1",
@ -133,100 +296,6 @@
],
"description": "A copy of the PHP Simple HTML DOM Parser project.",
"time": "2013-05-14 22:27:35"
}
],
"packages-dev": [
{
"name": "leafo/lessphp",
"version": "v0.4.0",
"source": {
"type": "git",
"url": "https://github.com/leafo/lessphp.git",
"reference": "51f3f06f0fe78a722dabfd14578444bdd078d9de"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/leafo/lessphp/zipball/51f3f06f0fe78a722dabfd14578444bdd078d9de",
"reference": "51f3f06f0fe78a722dabfd14578444bdd078d9de",
"shasum": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "0.3-dev"
}
},
"autoload": {
"classmap": [
"lessc.inc.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT",
"GPL-3.0"
],
"authors": [
{
"name": "Leaf Corcoran",
"email": "leafot@gmail.com",
"homepage": "http://leafo.net"
}
],
"description": "lessphp is a compiler for LESS written in PHP.",
"homepage": "http://leafo.net/lessphp/",
"time": "2013-08-09 17:09:19"
},
{
"name": "michelf/php-markdown",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/michelf/php-markdown.git",
"reference": "96d8150406f67e683ef4acc09fef91785fef1266"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/michelf/php-markdown/zipball/96d8150406f67e683ef4acc09fef91785fef1266",
"reference": "96d8150406f67e683ef4acc09fef91785fef1266",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-lib": "1.4.x-dev"
}
},
"autoload": {
"psr-0": {
"Michelf": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Michel Fortin",
"email": "michel.fortin@michelf.ca",
"homepage": "http://michelf.ca/",
"role": "Developer"
},
{
"name": "John Gruber",
"homepage": "http://daringfireball.net/"
}
],
"description": "PHP Markdown",
"homepage": "http://michelf.ca/projects/php-markdown/",
"keywords": [
"markdown"
],
"time": "2013-11-29 17:09:24"
},
{
"name": "symfony/config",
@ -376,6 +445,53 @@
"homepage": "http://symfony.com",
"time": "2014-01-07 13:29:57"
},
{
"name": "symfony/process",
"version": "dev-master",
"target-dir": "Symfony/Component/Process",
"source": {
"type": "git",
"url": "https://github.com/symfony/Process.git",
"reference": "d4b086ca4d6e192d8c2c64fe011159c8bc4c9daa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/Process/zipball/d4b086ca4d6e192d8c2c64fe011159c8bc4c9daa",
"reference": "d4b086ca4d6e192d8c2c64fe011159c8bc4c9daa",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.5-dev"
}
},
"autoload": {
"psr-0": {
"Symfony\\Component\\Process\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "http://symfony.com/contributors"
}
],
"description": "Symfony Process Component",
"homepage": "http://symfony.com",
"time": "2014-01-07 13:29:57"
},
{
"name": "symfony/yaml",
"version": "v2.3.4",
@ -472,6 +588,9 @@
],
"time": "2013-08-03 15:35:31"
}
],
"packages-dev": [
],
"aliases": [

View File

@ -6,6 +6,12 @@ use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Assetic\Asset\AssetCollection;
use Assetic\Asset\FileAsset;
use Assetic\Asset\GlobAsset;
use Assetic\Filter;
use Michelf\Markdown;
use Michelf\SmartyPants;
class HtmlCommand extends Command
{
@ -65,18 +71,69 @@ class HtmlCommand extends Command
$template = $this->app->defaultTemplate;
}
$templatePath = join(DIRECTORY_SEPARATOR, array(
$this->app->templatePath, basename($template), '/index.html'
$this->app->templatePath, basename($template)
));
if (!file_exists($templatePath)) {
$templateIndexPath = join(DIRECTORY_SEPARATOR, array(
$templatePath, 'index.html'
));
if (!file_exists($templateIndexPath)) {
$output->writeln(
sprintf(
"<error>Unable to open template file: %s</error>",
$templatePath
$templateIndexPath
),
$this->app->outputFormat
);
return false;
}
// We build these into a single string so that we can deploy this resume as a
// single file.
$cssAssetSelector = join(DIRECTORY_SEPARATOR, array($templatePath, '/css/*.css'));
$css = new AssetCollection(
array(new GlobAsset($cssAssetSelector)),
array(new Filter\LessphpFilter())
);
$style = $css->dump();
$templateContent = file_get_contents($templateIndexPath);
$resumeContent = file_get_contents($source);
// Process with Markdown, and then use SmartyPants to clean up punctuation.
$resumeHtml = Markdown::defaultTransform($resumeContent);
$resumeHtml = SmartyPants::defaultTransform($resumeHtml);
// We'll construct the title for the html document from the h1 and h2 tags
$simpleDom = new \simple_html_dom();
$simpleDom->load($resumeHtml);
$title = sprintf(
'%s | %s',
$simpleDom->find('h1', 0)->innertext,
$simpleDom->find('h2', 0)->innertext
);
// We'll now render the Markdown into an html file with Mustache Templates
$m = new \Mustache_Engine;
$rendered = $m->render(
$templateContent,
array(
'title' => $title,
'style' => $style,
'resume' => $resumeHtml,
'reload' => $refresh
)
);
// Save the fully rendered html to the final destination
file_put_contents($destination, $rendered);
$output->writeln(
sprintf(
"Wrote resume to: <info>%s</info>",
$destination
),
$this->app->outputFormat
);
}
}