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