Commit d52299ba by Carsten Brandt

first approach to a PDF guide

parent c8f6baf5
...@@ -311,7 +311,7 @@ use yii\helpers\Html; ...@@ -311,7 +311,7 @@ use yii\helpers\Html;
<div class="container"> <div class="container">
<?= $content ?> <?= $content ?>
</div> </div>
<footer class="footer">© 2013 me :)</footer> <footer class="footer">&copy; 2013 me :)</footer>
<?php $this->endBody() ?> <?php $this->endBody() ?>
</body> </body>
</html> </html>
......
...@@ -78,6 +78,7 @@ class GuideController extends BaseController ...@@ -78,6 +78,7 @@ class GuideController extends BaseController
file_put_contents($targetDir . '/guide-references.txt', implode("\n", $references)); file_put_contents($targetDir . '/guide-references.txt', implode("\n", $references));
} }
/** /**
* @inheritdoc * @inheritdoc
*/ */
......
...@@ -24,7 +24,9 @@ ...@@ -24,7 +24,9 @@
"phpdocumentor/reflection": ">=1.0.3", "phpdocumentor/reflection": ">=1.0.3",
"phpdocumentor/reflection-docblock": ">2.0.1", "phpdocumentor/reflection-docblock": ">2.0.1",
"nikic/php-parser": "0.9.*", "nikic/php-parser": "0.9.*",
"cebe/js-search": "*" "cebe/js-search": "*",
"cebe/markdown": "dev-master as 0.9.0",
"cebe/markdown-latex": "*"
}, },
"autoload": { "autoload": {
"psr-4": { "yii\\apidoc\\": "" } "psr-4": { "yii\\apidoc\\": "" }
......
...@@ -81,7 +81,7 @@ abstract class GuideRenderer extends BaseGuideRenderer ...@@ -81,7 +81,7 @@ abstract class GuideRenderer extends BaseGuideRenderer
$headlines = []; $headlines = [];
foreach ($files as $file) { foreach ($files as $file) {
$fileData[$file] = file_get_contents($file); $fileData[$file] = file_get_contents($file);
if (basename($file) == 'index.md') { if (basename($file) == 'README.md') {
continue; // to not add index file to nav continue; // to not add index file to nav
} }
if (preg_match("/^(.*)\n=+/", $fileData[$file], $matches)) { if (preg_match("/^(.*)\n=+/", $fileData[$file], $matches)) {
......
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\apidoc\templates\pdf;
use cebe\markdown\latex\GithubMarkdown;
use Yii;
use yii\apidoc\helpers\ApiIndexer;
use yii\helpers\Console;
use yii\helpers\FileHelper;
/**
*
* @author Carsten Brandt <mail@cebe.cc>
* @since 2.0
*/
class GuideRenderer extends \yii\apidoc\templates\html\GuideRenderer
{
/**
* @inheritDoc
*/
public function render($files, $targetDir)
{
// $types = array_merge($this->apiContext->classes, $this->apiContext->interfaces, $this->apiContext->traits);
//
// $extTypes = [];
// foreach ($this->extensions as $k => $ext) {
// $extType = $this->filterTypes($types, $ext);
// if (empty($extType)) {
// unset($this->extensions[$k]);
// continue;
// }
// $extTypes[$ext] = $extType;
// }
$fileCount = count($files) + 1;
if ($this->controller !== null) {
Console::startProgress(0, $fileCount, 'Rendering markdown files: ', false);
}
$done = 0;
$fileData = [];
// $headlines = [];
foreach ($files as $file) {
if (basename($file) == 'README.md') {
continue; // to not add index file to nav
}
if (basename($file) == 'tutorial-i18n.md') {
continue; // TODO avoid i18n tut because of non displayable characters right now. need to fix it.
}
$fileData[$file] = file_get_contents($file);
// if (preg_match("/^(.*)\n=+/", $fileData[$file], $matches)) {
// $headlines[$file] = $matches[1];
// } else {
// $headlines[$file] = basename($file);
// }
}
$md = new GithubMarkdown();
$output = '';
foreach ($fileData as $file => $content) {
$output .= $md->parse($content) . "\n\n"; // TODO generate links to yiiframework.com by default
// $output = $this->fixMarkdownLinks($output);
// if ($this->layout !== false) {
// $params = [
//// 'headlines' => $headlines,
// 'currentFile' => $file,
// 'content' => $output,
// ];
// $output = $this->getView()->renderFile($this->layout, $params, $this);
// }
// $fileName = $this->generateGuideFileName($file);
// file_put_contents($targetDir . '/' . $fileName, $output);
if ($this->controller !== null) {
Console::updateProgress(++$done, $fileCount);
}
}
file_put_contents($targetDir . '/guide.tex', $output);
copy(__DIR__ . '/main.tex', $targetDir . '/main.tex');
copy(__DIR__ . '/Makefile', $targetDir . '/Makefile');
if ($this->controller !== null) {
Console::updateProgress(++$done, $fileCount);
Console::endProgress(true);
$this->controller->stdout('done.' . PHP_EOL, Console::FG_GREEN);
}
echo "\nnow run `make pdf` in $targetDir (you need pdflatex to compile pdf file)\n\n";
}
}
pdf:
# run pdflatex twice to generate TOC correctly
pdflatex -halt-on-error main.tex
pdflatex -halt-on-error main.tex
mv main.pdf guide.pdf
\documentclass[a4paper, 10pt]{article}
% english and utf8
%\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
%\usepackage[british,russian]{babel}
\usepackage[british]{babel}
% url support
\usepackage{url}
% make links clickable
\usepackage{hyperref}
% code listings
\usepackage{listings}
\usepackage{color}
\definecolor{codebg}{rgb}{0.9,0.9,0.9}
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\lstset{%
backgroundcolor=\color{codebg}, % choose the background color; you must add \usepackage{color} or \usepackage{xcolor}
basicstyle=\footnotesize, % the size of the fonts that are used for the code
breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
breaklines=true, % sets automatic line breaking
captionpos=b, % sets the caption-position to bottom
commentstyle=\color{mygreen}, % comment style
% deletekeywords={...}, % if you want to delete keywords from the given language
escapeinside={\%*}{*)}, % if you want to add LaTeX within your code
extendedchars=true, % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8
% frame=single, % adds a frame around the code
keepspaces=true, % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
keywordstyle=\color{blue}, % keyword style
% language=Octave, % the language of the code
% morekeywords={*,...}, % if you want to add more keywords to the set
numbers=left, % where to put the line-numbers; possible values are (none, left, right)
numbersep=5pt, % how far the line-numbers are from the code
numberstyle=\tiny\color{mygray}, % the style that is used for the line-numbers
rulecolor=\color{black}, % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
showspaces=false, % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
showstringspaces=false, % underline spaces within strings only
showtabs=false, % show tabs within strings adding particular underscores
stepnumber=1, % the step between two line-numbers. If it's 1, each line will be numbered
stringstyle=\color{mymauve}, % string literal style
tabsize=2, % sets default tabsize to 2 spaces
title=\lstname % show the filename of files included with \lstinputlisting; also try caption instead of title
}
\lstdefinelanguage{json}{
morekeywords={},
sensitive=false,
morestring=[b]",
}
\lstdefinelanguage{css}{
morekeywords={},
sensitive=false,
morestring=[b]",
}
\lstdefinelanguage{javascript}{
morekeywords={},
sensitive=false,
morestring=[b]",
}
% include images
\usepackage{graphicx}
% support github markdown strikethrough
% http://tex.stackexchange.com/questions/23711/strikethrough-text
\usepackage{ulem}
\begin{document}
\tableofcontents
\include{guide}
\end{document}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment