summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
Diffstat (limited to 'inc')
-rw-r--r--inc/actions.php6
-rw-r--r--inc/pageutils.php46
-rw-r--r--inc/parser/xhtml.php16
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;
@@ -189,6 +189,36 @@ function noNSorNS($id) {
}
/**
+ * 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
*
* parameters as for wikiFN
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;
}
/**