mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-26 06:15:19 +08:00
first approach to a PDF guide
This commit is contained in:
@ -311,7 +311,7 @@ use yii\helpers\Html;
|
||||
<div class="container">
|
||||
<?= $content ?>
|
||||
</div>
|
||||
<footer class="footer">© 2013 me :)</footer>
|
||||
<footer class="footer">© 2013 me :)</footer>
|
||||
<?php $this->endBody() ?>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -78,6 +78,7 @@ class GuideController extends BaseController
|
||||
file_put_contents($targetDir . '/guide-references.txt', implode("\n", $references));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
|
@ -24,7 +24,9 @@
|
||||
"phpdocumentor/reflection": ">=1.0.3",
|
||||
"phpdocumentor/reflection-docblock": ">2.0.1",
|
||||
"nikic/php-parser": "0.9.*",
|
||||
"cebe/js-search": "*"
|
||||
"cebe/js-search": "*",
|
||||
"cebe/markdown": "dev-master as 0.9.0",
|
||||
"cebe/markdown-latex": "*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "yii\\apidoc\\": "" }
|
||||
|
@ -81,7 +81,7 @@ abstract class GuideRenderer extends BaseGuideRenderer
|
||||
$headlines = [];
|
||||
foreach ($files as $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
|
||||
}
|
||||
if (preg_match("/^(.*)\n=+/", $fileData[$file], $matches)) {
|
||||
|
94
extensions/apidoc/templates/pdf/GuideRenderer.php
Normal file
94
extensions/apidoc/templates/pdf/GuideRenderer.php
Normal file
@ -0,0 +1,94 @@
|
||||
<?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";
|
||||
}
|
||||
}
|
7
extensions/apidoc/templates/pdf/Makefile
Normal file
7
extensions/apidoc/templates/pdf/Makefile
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
|
||||
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
|
84
extensions/apidoc/templates/pdf/main.tex
Normal file
84
extensions/apidoc/templates/pdf/main.tex
Normal file
@ -0,0 +1,84 @@
|
||||
\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}
|
Reference in New Issue
Block a user