xref: /dokuwiki/inc/parser/xhtmlsummary.php (revision 2c01be2ff65c7adeb4e34cd2a507c910e84b79b7)
1<?php
2if(!defined('DOKU_INC')) die('meh.');
3require_once DOKU_INC . 'inc/parser/xhtml.php';
4
5/**
6 * The summary XHTML form selects either up to the first two paragraphs
7 * it find in a page or the first section (whichever comes first)
8 * It strips out the table of contents if one exists
9 * Section divs are not used - everything should be nested in a single
10 * div with CSS class "page"
11 * Headings have their a name link removed and section editing links
12 * removed
13 * It also attempts to capture the first heading in a page for
14 * use as the title of the page.
15 *
16 *
17 * @author Harry Fuecks <hfuecks@gmail.com>
18 * @todo   Is this currently used anywhere? Should it?
19 */
20class Doku_Renderer_xhtmlsummary extends Doku_Renderer_xhtml {
21
22    // Namespace these variables to
23    // avoid clashes with parent classes
24    var $sum_paragraphs = 0;
25    var $sum_capture = true;
26    var $sum_inSection = false;
27    var $sum_summary = '';
28    var $sum_pageTitle = false;
29
30    function document_start() {
31        $this->doc .= DOKU_LF.'<div>'.DOKU_LF;
32    }
33
34    function document_end() {
35        $this->doc = $this->sum_summary;
36        $this->doc .= DOKU_LF.'</div>'.DOKU_LF;
37    }
38
39    // FIXME not supported anymore
40    function toc_open() {
41        $this->sum_summary .= $this->doc;
42    }
43
44    // FIXME not supported anymore
45    function toc_close() {
46        $this->doc = '';
47    }
48
49    function header($text, $level, $pos) {
50        if ( !$this->sum_pageTitle ) {
51            $this->info['sum_pagetitle'] = $text;
52            $this->sum_pageTitle = true;
53        }
54        $this->doc .= DOKU_LF.'<h'.$level.'>';
55        $this->doc .= $this->_xmlEntities($text);
56        $this->doc .= "</h$level>".DOKU_LF;
57    }
58
59    function section_open($level) {
60        if ( $this->sum_capture ) {
61            $this->sum_inSection = true;
62        }
63    }
64
65    function section_close() {
66        if ( $this->sum_capture && $this->sum_inSection ) {
67            $this->sum_summary .= $this->doc;
68            $this->sum_capture = false;
69        }
70    }
71
72    function p_open() {
73        if ( $this->sum_capture && $this->sum_paragraphs < 2 ) {
74            $this->sum_paragraphs++;
75        }
76        parent :: p_open();
77    }
78
79    function p_close() {
80        parent :: p_close();
81        if ( $this->sum_capture && $this->sum_paragraphs >= 2 ) {
82            $this->sum_summary .= $this->doc;
83            $this->sum_capture = false;
84        }
85    }
86
87}
88
89
90//Setup VIM: ex: et ts=2 :
91