diff --git a/public_html/lib/plugins/pagetitle/action.php b/public_html/lib/plugins/pagetitle/action.php
index dda80b11..9c00b388 100644
--- a/public_html/lib/plugins/pagetitle/action.php
+++ b/public_html/lib/plugins/pagetitle/action.php
@@ -13,16 +13,130 @@ class action_plugin_pagetitle extends DokuWiki_Action_Plugin {
/**
* register the event handlers
*/
- public function register(Doku_Event_Handler $controller) {
- $controller->register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'deleteObsoletedSingleClass');
+ function register(Doku_Event_Handler $controller) {
+ //$controller->register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'deleteObsoletedSingleClass');
+ $controller->register_hook('INDEXER_VERSION_GET', 'BEFORE', $this, '_indexer_version');
+ $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE', $this, '_indexer_pagetitle');
+ $controller->register_hook('PARSER_METADATA_RENDER', 'AFTER', $this, '_parser_render');
+ $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, '_prepare_cache');
}
/**
* Delete syntax.php which is obsoleted since multi-components syntax structure
*/
- public function deleteObsoletedSingleClass(Doku_Event $event) {
+ function deleteObsoletedSingleClass(Doku_Event $event) {
$legacyFile = dirname(__FILE__).'/syntax.php';
if (file_exists($legacyFile)) { unlink($legacyFile); }
}
+
+ /**
+ * INDEXER_VERSION_GET
+ * Set a version string to the metadata index so that
+ * the index will be re-created when the version increased
+ */
+ function _indexer_version(Doku_Event $event, $param) {
+ $event->data['plgin_pagetitle'] = '1.'.$this->getConf('usePersistent');
+ }
+
+ /**
+ * INDEXER_PAGE_ADD
+ * Add id of the page to metadata index, relevant pages should be found
+ * in data/index/plugin_pagetitle_w.idx file
+ */
+ function _indexer_pagetitle(Doku_Event $event, $param) {
+ $id = p_get_metadata($event->data['page'], 'plugin pagetitle');
+ if ($id) {
+ $event->data['metadata']['plugin_pagetitle'] = $id;
+ }
+ }
+
+
+ /**
+ * PAESER_METADATA_RENDER
+ * Use this event to update/reflesh metadata they may have set elseware.
+ * The page metadata is passed including both the current and persistent arrays.
+ */
+ function _parser_render(Doku_Event $event, $param) {
+ global $ID;
+
+ /*
+ * The PageTitle plugin will overwrite "title" metadata of the page
+ * with "pagetitle" specified in page source. The page must be rendered
+ * first in xhtml mode to get pagetitle and to stote it on metadata
+ * storage.
+
+ * Each metadata storage (.meta file) may be expired or refleshed by
+ * DokuWiki or any plugins at elsewhere in any stage. For example,
+ * metadata will be expired when main config modified. DokuWiki will set
+ * again title metadata through calls p_get_first_heading() depending on
+ * $conf['useheading"] setting.
+ *
+ * Since page text is not changed, instruction and xhtml cache files are
+ * used to set title metadata, there is no chance to handle/render page
+ * source to get pagetitle and to overwite title metadata.
+ * Therfore, the value of "title" metadata will remain wrong with that
+ * pagetitle plugin intended.
+ *
+ * For the purpose to trigger PageTitle plugin's renderer, we tentatively
+ * set $ID as "title" to tell DokuWiki caching mechanism so that old
+ * cache need to be purged and metadata must be rebuild again.
+ */
+
+ $meta =& $event->data['current'];
+ $persistent =& $event->data['persistent'];
+
+ // check metadata index whether pagetitle had used in the wiki page
+ $pages = idx_get_indexer()->getPages('plugin_pagetitle');
+ $pageTitled = in_array($ID, $pages);
+
+ if (!$pageTitled) return;
+
+ // check whether page has rendered by pagetitle plugin
+ if (!isset($meta['plugin']['pagetitle'])) {
+ // tentatively assign full id as page title, just to distinguish
+ // with normal setting noNS($ID) and to purge .meta file later
+ $meta['title'] = $ID;
+ }
+
+ // unnecessary persistent metadata should be removed in syntax component,
+ // however it may be possible to remove it here
+ if (!$this->getConf('usePersistent')) {
+ unset($persistent['title']);
+ }
+ }
+
+ /**
+ * PARSER_CACHE_USE
+ * prepare the cache object for default _useCache action
+ */
+ function _prepare_cache(Doku_Event $event, $param) {
+ $cache =& $event->data;
+
+ // we're only interested in wiki pages
+ if (!isset($cache->page)) return;
+
+ // check metadata index whether pagetitle had used in the wiki page
+ $pages = idx_get_indexer()->getPages('plugin_pagetitle');
+ $pageTitled = in_array($cache->page, $pages);
+
+ if (!$pageTitled) return;
+
+ // check title metadata whether cache files should be purged
+ $title = p_get_metadata($cache->page, 'title', METADATA_DONT_RENDER);
+ switch ($cache->mode) {
+ case 'metadata': // metadata cache?
+ $request = ($title == $cache->page) ? true : false;
+ break;
+ case 'i': // instruction cache
+ $request = ($title == $cache->page) ? true : false;
+ break;
+ case 'xhtml': // xhtml cache
+ $request = ($title == $cache->page) ? true : false;
+ break;
+ }
+ // request purge if necessary
+ $cache->depends['purge'] = $request;
+ }
+
}
diff --git a/public_html/lib/plugins/pagetitle/conf/default.php b/public_html/lib/plugins/pagetitle/conf/default.php
new file mode 100644
index 00000000..6238672b
--- /dev/null
+++ b/public_html/lib/plugins/pagetitle/conf/default.php
@@ -0,0 +1,7 @@
+
+ */
+
+$conf['usePersistent'] = 0; // false
diff --git a/public_html/lib/plugins/pagetitle/conf/metadata.php b/public_html/lib/plugins/pagetitle/conf/metadata.php
new file mode 100644
index 00000000..6bc81fbd
--- /dev/null
+++ b/public_html/lib/plugins/pagetitle/conf/metadata.php
@@ -0,0 +1,7 @@
+
+ */
+
+$meta['usePersistent'] = array('onoff');
diff --git a/public_html/lib/plugins/pagetitle/deleted.files b/public_html/lib/plugins/pagetitle/deleted.files
index 2ca72777..505f12d6 100644
--- a/public_html/lib/plugins/pagetitle/deleted.files
+++ b/public_html/lib/plugins/pagetitle/deleted.files
@@ -1,4 +1,4 @@
-# deleted.files : Page Title plugin for DokuWiki
+# deleted.files : PageTitle plugin for DokuWiki
#
# This file contains a list of files that were present in previous
# plugin releases but were removed later.
@@ -6,4 +6,7 @@
# Since 2015-09-17
syntax.php
+# Since 2017-07-11
+syntax/metaonly.php
+# action.php is used again since 2017-08-27
diff --git a/public_html/lib/plugins/pagetitle/helper.php b/public_html/lib/plugins/pagetitle/helper.php
index 57545e2f..9e5b1c91 100644
--- a/public_html/lib/plugins/pagetitle/helper.php
+++ b/public_html/lib/plugins/pagetitle/helper.php
@@ -31,32 +31,32 @@ class helper_plugin_pagetitle extends DokuWiki_Plugin {
function html_youarehere($start_depth = 0) {
global $conf, $ID;
- if ($ID == $conf['start']) {
- $page = '';
- } elseif (noNS($ID) == $conf['start']) {
- $page = ':'.getNS($ID); // drop tailing start
- } else {
- $page = ':'.$ID;
- }
+ //prepend virtual root namespace to $ID that is not start page
+ $nodes = ($ID == $conf['start']) ? array('') : explode(':', ':'.$ID);
+ $depth = count($nodes);
+ $items = array();
- $parts = explode(':', $page);
- $depth = count($parts) -1;
+ for ($i = $start_depth; $i < $depth; $i++) {
+ $id = $id0 = implode(':', array_slice($nodes, 0, $i+1));
- $out = '';
- $ns = '';
- for ($i = $start_depth; $i < count($parts); $i++) {
- $ns.= $parts[$i];
- $id = $ns ?: $conf['start'];
- resolve_pageid('', $id, $exists);
- if (!$exists) {
- $id = $ns.':';
+ if (empty($id)) { // root start page
+ $id = $conf['start'];
+ } elseif ($id == ':'.$conf['start']) { // start namespace
+ $id = $conf['start'].':'.$conf['start'];
resolve_pageid('', $id, $exists);
+ $name = $conf['start'];
+ } else {
+ resolve_pageid('', $id, $exists);
+ if (!$exists) {
+ $id = $id.':';
+ resolve_pageid('', $id, $exists);
+ }
+ $name = p_get_metadata($id, 'shorttitle', METADATA_DONT_RENDER) ?: noNS($id0);
}
- $name = p_get_metadata($id, 'shorttitle') ?: $parts[$i];
- $out.= ''.$this->html_pagelink($id, $name, $exists).'';
- if ($i < $depth) $out.= ' › '; // separator
- $ns.= ':';
+ $items[] = ''.$this->html_pagelink($id, $name, $exists).'';
}
+ // join items with a separator
+ $out = implode(' › ', $items);
return $out;
}
diff --git a/public_html/lib/plugins/pagetitle/helper/counter.php b/public_html/lib/plugins/pagetitle/helper/counter.php
new file mode 100644
index 00000000..06d3fbd7
--- /dev/null
+++ b/public_html/lib/plugins/pagetitle/helper/counter.php
@@ -0,0 +1,41 @@
+
+ */
+
+if (!defined('DOKU_INC')) die();
+
+class helper_plugin_pagetitle_counter extends DokuWiki_Plugin {
+
+ /**
+ * tally counter utility - incrementally counts items
+ *
+ * @param string|integer $item item that to be counted
+ * @return closure function
+ *
+ * Note: assign this closure function to variables to use counter
+ * $obj = $this->loadHelper('pagetitle_counter');
+ * $counter = $obj->create_counter($item);
+ * echo $counter($something);
+ *
+ * if a closure function assigned to class properties, make sure that
+ * PHP parses "$MyClass->counter" as fetch the property named "counter".
+ *
+ * $MyClass->counter = $obj->create_counter($item);
+ * echo ($MyClass->counter)($something); // PHP >= 7.0
+ *
+ * or call it using call_user_func:
+ * echo call_user_func($MyClass->counter, $something);
+ *
+ */
+ function create_counter($item='') {
+ $counter = array();
+ return function ($item='') use (&$counter) {
+ return @$counter[$item]++ ?: 0; // restrain notice of Undefined index
+ };
+ }
+
+}
diff --git a/public_html/lib/plugins/pagetitle/lang/en/settings.php b/public_html/lib/plugins/pagetitle/lang/en/settings.php
new file mode 100644
index 00000000..31cf6662
--- /dev/null
+++ b/public_html/lib/plugins/pagetitle/lang/en/settings.php
@@ -0,0 +1,10 @@
+
+ */
+
+$lang['usePersistent'] = 'store pagetitle (= title) on persistent metadata storage';
+
diff --git a/public_html/lib/plugins/pagetitle/manager.dat b/public_html/lib/plugins/pagetitle/manager.dat
deleted file mode 100644
index ebeaac7c..00000000
--- a/public_html/lib/plugins/pagetitle/manager.dat
+++ /dev/null
@@ -1,2 +0,0 @@
-downloadurl=https://github.com/ssahara/dw-plugin-pagetitle/zipball/master
-installed=Mon, 05 Sep 2016 13:14:32 +0000
diff --git a/public_html/lib/plugins/pagetitle/plugin.info.txt b/public_html/lib/plugins/pagetitle/plugin.info.txt
index eb09ed47..07f7e6d8 100644
--- a/public_html/lib/plugins/pagetitle/plugin.info.txt
+++ b/public_html/lib/plugins/pagetitle/plugin.info.txt
@@ -1,7 +1,7 @@
base pagetitle
-name Page Title plugin
+name PageTitle plugin
author Satoshi Sahara
email sahara.satoshi@gmail.com
-date 2016-09-02
+date 2017-09-08
desc Define a title of the wiki page by
tag. This plugin allows to write decorative title on the page with setting plain title text in metadata storage.
url https://www.dokuwiki.org/plugin:pagetitle
diff --git a/public_html/lib/plugins/pagetitle/syntax/breadcrumb.php b/public_html/lib/plugins/pagetitle/syntax/breadcrumb.php
index ebea7a87..ff088d96 100644
--- a/public_html/lib/plugins/pagetitle/syntax/breadcrumb.php
+++ b/public_html/lib/plugins/pagetitle/syntax/breadcrumb.php
@@ -1,6 +1,6 @@
mode = substr(get_class($this), 7); // drop 'syntax_' from class name
+
+ //syntax patterns
+ $this->pattern[5] = '~~ShortTitle:.*?~~';
+
+ // assign helper component to dedicated class property
+ $this->counter = $this->loadHelper('pagetitle_counter', true);
}
- public function getType() { return 'substition'; }
- public function getPType(){ return 'normal'; }
- public function getSort() { return 990; }
+ function getType() { return 'substition'; }
+ function getPType(){ return 'normal'; }
+ function getSort() { return 990; }
- public function connectTo($mode) {
- $this->Lexer->addSpecialPattern($this->special_pattern, $mode, $this->mode);
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern($this->pattern[5], $mode, $this->mode);
}
- public function handle($match, $state, $pos, Doku_Handler $handler) {
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, Doku_Handler $handler) {
global $ID;
- if ($this->check[$ID]++) {
- return false; // ignore match after once handled
+ // assign a closure function to the class property
+ if ($this->handledOnce === null) {
+ $this->handledOnce = $this->counter->create_counter($item);
}
- list($key, $value) = explode(':', substr($match, 2, -2), 2);
- $short_title = trim($value);
+ // ensure first matched pattern only effective
+ //if (($this->handledOnce)($ID) > 0) return false; // since PHP 7
+ //if (call_user_func($this->handledOnce, $ID) > 0) return false; // PHP 7 & 5
+
+ $counter = $this->handledOnce; // assign class property to a local variable
+ if ($counter($ID) > 0) return false;
+
+ // get short title
+ $short_title = trim(substr($match, 13, -2));
return array($state, $short_title, $ID);
}
- public function render($format, Doku_Renderer $renderer, $data) {
+ /**
+ * Create output
+ */
+ function render($format, Doku_Renderer $renderer, $data) {
global $ID;
list($state, $short_title, $id) = $data;
+
+ // skip calls that belong to different pages (eg. title of included page)
if (strcmp($id, $ID) !== 0) return false;
switch ($format) {
diff --git a/public_html/lib/plugins/pagetitle/syntax/decorative.php b/public_html/lib/plugins/pagetitle/syntax/decorative.php
index 3db58541..63aba66d 100644
--- a/public_html/lib/plugins/pagetitle/syntax/decorative.php
+++ b/public_html/lib/plugins/pagetitle/syntax/decorative.php
@@ -10,7 +10,7 @@
* itlic, subscript and superscript, but title metadata remains simple
* plain text without any markup.
* example
- * wiki source: HsO
+ * wiki source: H2O
* page (html): H2O
* title metadata: H2O
*/
@@ -19,56 +19,77 @@ if (!defined('DOKU_INC')) die();
class syntax_plugin_pagetitle_decorative extends DokuWiki_Syntax_Plugin {
- protected $entry_pattern = '\r\n]*?>(?=.*?)';
- protected $exit_pattern = '';
+ protected $mode;
+ protected $pattern = array();
- protected $mode, $name;
- protected $store, $capture;
+ private $counter = null; // helper component "pagetitle_counter"
+ private $renderedOnce = null; // counter used in render()
+
+ protected $doc, $capture; // store properties of $renderer
protected $params; // store title tag parameters
- protected $check = array(); // ensure first title only effective, used in render()
function __construct() {
$this->mode = substr(get_class($this), 7); // drop 'syntax_' from class name
- $this->name = substr(get_class($this), 14);
+
+ // syntax patterns
+ $this->pattern[1] = '\r\n]*?>(?=.*?)'; // entry
+ $this->pattern[4] = ''; // exit
+ $this->pattern[5] = '~~Title:[^\r\n]*?~~'; // special
+
+ // assign helper component to dedicated class property
+ $this->counter = $this->loadHelper('pagetitle_counter', true);
}
function getType() { return 'baseonly';}
function getPType() { return 'block';}
- function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); }
function getSort() { return 49; }
+ function getAllowedTypes() {
+ return array('formatting', 'substition', 'disabled');
+ }
- // Connect pattern to lexer
+ /**
+ * Connect pattern to lexer
+ */
function connectTo($mode) {
- $this->Lexer->addEntryPattern($this->entry_pattern, $mode, $this->mode);
+ $this->Lexer->addSpecialPattern($this->pattern[5], $mode, $this->mode);
+ $this->Lexer->addEntryPattern($this->pattern[1], $mode, $this->mode);
}
function postConnect() {
- $this->Lexer->addExitPattern($this->exit_pattern, $this->mode);
+ $this->Lexer->addExitPattern($this->pattern[4], $this->mode);
}
- /*
+ /**
* Handle the match
*/
function handle($match, $state, $pos, Doku_Handler $handler) {
global $ID;
- if ($this->check[$ID] > 0) {
- return false; // ignore match after once handled
- }
+ $plugin = substr(get_class($this), 14);
switch ($state) {
+ case DOKU_LEXER_SPECIAL : // ~~Title:*~~ macro syntax
+ $title = trim(substr($match, 8, -2));
+ return array($state, $ID, $title);
+
case DOKU_LEXER_ENTER :
- $params = strtolower(trim(substr($match, strpos($match,' '), -1)));
- $data = array($state, $ID, $params);
- $handler->addPluginCall($this->name, $data, $state,$pos,$match);
+ // store title tag parameters
+ if (($n = strpos($match, ' ')) !== false) {
+ $this->params = strtolower(trim(substr($match, $n, -1)));
+ } else {
+ $this->params = '';
+ }
+ $data = array($state, $ID, '');
+ $handler->addPluginCall($plugin, $data, $state,$pos,$match);
return false;
+
case DOKU_LEXER_UNMATCHED :
$handler->_addCall('cdata', array($match), $pos);
return false;
+
case DOKU_LEXER_EXIT :
- $data = array($state, $ID, '');
- $handler->addPluginCall($this->name, $data, $state,$pos,$match);
- $this->check[$ID]++;
+ $data = array($state, $ID, $this->params);
+ $handler->addPluginCall($plugin, $data, $state,$pos,$match);
return false;
}
return false;
@@ -80,13 +101,18 @@ class syntax_plugin_pagetitle_decorative extends DokuWiki_Syntax_Plugin {
function render($format, Doku_Renderer $renderer, $data) {
global $ID;
- list($state, $id, $params) = $data;
+ list($state, $id, $param) = $data;
+
switch ($state) {
+ case DOKU_LEXER_SPECIAL : // ~~Title:*~~ macro syntax
+ // $decorative_title = $param;
+ // convert to curly quote characters depending on $conf['typography']
+ $decorative_title = $this->render_text($param);
+ break;
+
case DOKU_LEXER_ENTER :
- // store title tag parameters
- $this->params = $params;
// preserve variables
- $this->store = $renderer->doc;
+ $this->doc = $renderer->doc;
$this->capture = $renderer->capture;
// set doc blank to store parsed "UNMATHCED" content
@@ -101,44 +127,69 @@ class syntax_plugin_pagetitle_decorative extends DokuWiki_Syntax_Plugin {
$decorative_title = trim($renderer->doc);
// restore variable
- $renderer->doc = $this->store;
+ $renderer->doc = $this->doc;
if ($format == 'metadata') $renderer->capture = $this->capture;
break; // do not return here
default:
return false; // this should never happen
}
+ // follow up only for DOKU_LEXER_EXIT
+
+ // skip calls that belong to different pages (eg. title of included page)
if (strcmp($id, $ID) !== 0) return false;
+ // assign a closure function to the class property
+ if ($this->renderedOnce === null) {
+ $this->renderedOnce = $this->counter->create_counter($item);
+ }
+
+ // ensure first instruction only effective
+ //if (($this->renderedOnce)($format) > 0) return false; // since PHP 7
+ //if (call_user_func($this->renderedOnce, $format) > 0) return false; // PHP 7 & 5
+
+ $counter = $this->renderedOnce; // assign property to a local variable
+ if ($counter($format) > 0) return false;
+
// get plain title
- $title = htmlspecialchars_decode(strip_tags($decorative_title), ENT_QUOTES);
+ $title = trim(htmlspecialchars_decode(strip_tags($decorative_title), ENT_QUOTES));
if (empty($title)) return false;
// output title
- $method = '_' . $format . '_render';
- if (method_exists($this, $method)) {
- return $this->$method($decorative_title, $title, $renderer);
+ switch ($format) {
+ case 'xhtml':
+ if ($state == DOKU_LEXER_SPECIAL) return false;
+ if (($wrap = $this->loadHelper('wrap')) != NULL) {
+ $attr = $wrap->buildAttributes($param, 'pagetitle');
+ } else {
+ $attr = ' class="pagetitle"';
+ }
+
+ // even title in , it never shown up in the table of contents (TOC)
+ $renderer->doc .= '';
+ $renderer->doc .= $decorative_title;
+ $renderer->doc .= '
'.DOKU_LF;
+ return true;
+
+ case 'text':
+ $renderer->doc .= $title . DOKU_LF;
+ return true;
+
+ case 'metadata':
+ // set metadata for metadata indexer
+ $renderer->meta['plugin']['pagetitle'] = $ID;
+
+ if ($this->getConf('usePersistent')) {
+ // metadata persistence
+ $renderer->persistent['title'] = $title;
+ $renderer->meta['title'] = $title;
+ } else {
+ // erase persistent title metadata if defined
+ unset($renderer->persistent['title']);
+ $renderer->meta['title'] = $title;
+ }
+ return true;
}
- else return false;
- }
-
- /**
- * Revised procedures for renderers
- */
- protected function _xhtml_render($decorative_title, $title, $renderer) {
- if (($wrap = $this->loadHelper('wrap')) != NULL) {
- $attr = $wrap->buildAttributes($this->params, 'pagetitle');
- } else $attr = ' class="pagetitle"';
-
- // even title in , it never shown up in the table of contents (TOC)
- $renderer->doc .= '';
- $renderer->doc .= $decorative_title;
- $renderer->doc .= '
'.DOKU_LF;
- return true;
- }
-
- protected function _metadata_render($decorative_title, $title, $renderer) {
- $renderer->meta['title'] = $title;
- return true;
+ return false;
}
}
diff --git a/public_html/lib/plugins/pagetitle/syntax/metaonly.php b/public_html/lib/plugins/pagetitle/syntax/metaonly.php
deleted file mode 100644
index db514f82..00000000
--- a/public_html/lib/plugins/pagetitle/syntax/metaonly.php
+++ /dev/null
@@ -1,38 +0,0 @@
-
- *
- */
-
-require_once(dirname(__FILE__).'/decorative.php');
-
-class syntax_plugin_pagetitle_metaonly extends syntax_plugin_pagetitle_decorative {
-
- protected $entry_pattern = '~~Title:(?=.*?~~)';
- protected $exit_pattern = '~~';
-
-
- function getType() { return 'baseonly';}
- function getPType() { return 'normal';}
- function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); }
- function getSort() { return 49; }
-
-
- /**
- * Revised procedures for renderers
- */
- protected function _xhtml_render($decorative_title, $title, $renderer) {
- return true;
- }
-
- protected function _metadata_render($decorative_title, $title, $renderer) {
- $renderer->meta['title'] = $title;
- return true;
- }
-
-}
diff --git a/public_html/lib/plugins/pagetitle/syntax/youarehere.php b/public_html/lib/plugins/pagetitle/syntax/youarehere.php
index 10984fcc..0487faab 100644
--- a/public_html/lib/plugins/pagetitle/syntax/youarehere.php
+++ b/public_html/lib/plugins/pagetitle/syntax/youarehere.php
@@ -11,34 +11,54 @@ if (!defined('DOKU_INC')) die();
class syntax_plugin_pagetitle_youarehere extends DokuWiki_Syntax_Plugin {
- protected $special_pattern = '';
protected $mode;
+ protected $pattern =array();
function __construct() {
$this->mode = substr(get_class($this), 7); // drop 'syntax_' from class name
+
+ //syntax patterns
+ $this->pattern[5] = '';
}
- public function getType() { return 'substition'; }
- public function getPType(){ return 'block'; }
- public function getSort() { return 990; }
+ function getType() { return 'substition'; }
+ function getPType(){ return 'block'; }
+ function getSort() { return 990; }
- public function connectTo($mode) {
- $this->Lexer->addSpecialPattern($this->special_pattern, $mode, $this->mode);
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern($this->pattern[5], $mode, $this->mode);
}
- public function handle($match, $state, $pos, Doku_Handler $handler) {
- return array($state, $match);
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, Doku_Handler $handler) {
+ global $ID;
+ return array($state, $match, $ID);
}
- public function render($format, Doku_Renderer $renderer, $data) {
+ /**
+ * Create output
+ */
+ function render($format, Doku_Renderer $renderer, $data) {
+ global $ID;
- list($state, $match) = $data;
- $template = plugin_load('helper','pagetitle');
+ list($state, $match, $id) = $data;
- $renderer->doc .= DOKU_LF.$match.DOKU_LF; // html comment
- $renderer->doc .= '
';
- $renderer->doc .= $template->html_youarehere(1); // start_depth = 1
- $renderer->doc .= '
'.DOKU_LF;
+ // skip calls that belong to different pages (eg. title of included page)
+ if (strcmp($id, $ID) !== 0) return false;
+
+ $template = $this->loadHelper('pagetitle');
+
+ if ($format == 'xhtml') {
+ $renderer->doc .= DOKU_LF.$match.DOKU_LF; // html comment
+ $renderer->doc .= '';
+ $renderer->doc .= $template->html_youarehere(1); // start_depth = 1
+ $renderer->doc .= '
'.DOKU_LF;
+ }
return true;
}