From 4ceab83fd024405dfa43e10241bb9a9f7fee5bf5 Mon Sep 17 00:00:00 2001 From: Andreas Gohr <andi@splitbrain.org> Date: Mon, 1 Dec 2008 22:55:39 +0100 Subject: [PATCH] Better creation of section IDs FS#1536 This patch enhances the creation of section IDs for number only headlines. It also moves section ID creation to a function in pageutils.php removing some duplicate functionality in inc/action.php darcs-hash:20081201215539-7ad00-48f3c153a2c126d9fb06aa90e4f1b857f76ebec7.gz --- inc/actions.php | 6 +----- inc/pageutils.php | 46 ++++++++++++++++++++++++++++++++++++-------- inc/parser/xhtml.php | 16 +++------------ 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/inc/actions.php b/inc/actions.php index 8da6c47cc..62b39efc2 100644 --- a/inc/actions.php +++ b/inc/actions.php @@ -340,11 +340,7 @@ function act_redirect($id,$preact){ //get section name when coming from section edit if($PRE && preg_match('/^\s*==+([^=\n]+)/',$TEXT,$match)){ - #FIXME duplicates code from xhtml renderer - $title = $match[0]; - $title = str_replace(':','',cleanID($title)); - $title = ltrim($title,'0123456789._-'); - if(empty($title)) $title='section'; + $title = sectionID($match[0]); } $opts = array( diff --git a/inc/pageutils.php b/inc/pageutils.php index e509dfde3..7a140ef8c 100644 --- a/inc/pageutils.php +++ b/inc/pageutils.php @@ -162,19 +162,19 @@ function noNS($id) { } /** -* Returns the current namespace -* -* @author Nathan Fritz <fritzn@crown.edu> -*/ + * Returns the current namespace + * + * @author Nathan Fritz <fritzn@crown.edu> + */ function curNS($id) { return noNS(getNS($id)); } /** -* Returns the ID without the namespace or current namespace for 'start' pages -* -* @author Nathan Fritz <fritzn@crown.edu> -*/ + * Returns the ID without the namespace or current namespace for 'start' pages + * + * @author Nathan Fritz <fritzn@crown.edu> + */ function noNSorNS($id) { global $conf; @@ -188,6 +188,36 @@ function noNSorNS($id) { return $p; } +/** + * Creates a XHTML valid linkid from a given headline title + * + * @param string $title The headline title + * @param array $check List of existing IDs + * @author Andreas Gohr <andi@splitbrain.org> + */ +function sectionID($title,&$check=null) { + $title = str_replace(':','',cleanID($title)); + $new = ltrim($title,'0123456789._-'); + if(empty($new)){ + $title = 'section'.preg_replace('/[^0-9]+/','',$title); //keep numbers from headline + }else{ + $title = $new; + } + + if(!is_null($check) && is_array($check)){ + // make sure tiles are unique + $num = ''; + while(in_array($title.$num,$check)){ + ($num) ? $num++ : $num = 1; + } + $title = $title.$num; + $check[] = $title; + } + + return $title; +} + + /** * Wiki page existence check * diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index 4fb6cb548..fda1ef36e 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -1004,21 +1004,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer { * @author Andreas Gohr <andi@splitbrain.org> */ function _headerToLink($title,$create=false) { - $title = str_replace(':','',cleanID($title)); - $title = ltrim($title,'0123456789._-'); - if(empty($title)) $title='section'; - if($create){ - // make sure tiles are unique - $num = ''; - while(in_array($title.$num,$this->headers)){ - ($num) ? $num++ : $num = 1; - } - $title = $title.$num; - $this->headers[] = $title; + return sectionID($title,$this->headers); + }else{ + return sectionID($title); } - - return $title; } /** -- GitLab