summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2015-05-19 11:04:37 +0200
committerAndreas Gohr <andi@splitbrain.org>2015-05-19 11:04:37 +0200
commit3bc8c0d72be15e1210feef5c8f4c670d7ab71dc4 (patch)
tree704d76a745871ecbd6e6b27ca0d831165cc2f2a8 /inc
parentefed51d4b929b6e90e6db6fde1f600f5a8fb19ad (diff)
parent10b38f10e6ce99d01c6ca30bcd9992699d6ee049 (diff)
downloadrpg-3bc8c0d72be15e1210feef5c8f4c670d7ab71dc4.tar.gz
rpg-3bc8c0d72be15e1210feef5c8f4c670d7ab71dc4.tar.bz2
Merge pull request #1158 from splitbrain/local_conf_negation
Local configuration negation
Diffstat (limited to 'inc')
-rw-r--r--inc/confutils.php53
1 files changed, 44 insertions, 9 deletions
diff --git a/inc/confutils.php b/inc/confutils.php
index 8643a056c..4035d6dd4 100644
--- a/inc/confutils.php
+++ b/inc/confutils.php
@@ -6,6 +6,12 @@
* @author Harry Fuecks <hfuecks@gmail.com>
*/
+/*
+ * line prefix used to negate single value config items
+ * (scheme.conf & stopwords.conf), e.g.
+ * !gopher
+ */
+const DOKU_CONF_NEGATION = '!';
/**
* Returns the (known) extension and mimetype of a given filename
@@ -49,6 +55,7 @@ function getMimeTypes() {
static $mime = null;
if ( !$mime ) {
$mime = retrieveConfig('mime','confToHash');
+ $mime = array_filter($mime);
}
return $mime;
}
@@ -62,6 +69,7 @@ function getAcronyms() {
static $acronyms = null;
if ( !$acronyms ) {
$acronyms = retrieveConfig('acronyms','confToHash');
+ $acronyms = array_filter($acronyms, 'strlen');
}
return $acronyms;
}
@@ -75,6 +83,7 @@ function getSmileys() {
static $smileys = null;
if ( !$smileys ) {
$smileys = retrieveConfig('smileys','confToHash');
+ $smileys = array_filter($smileys, 'strlen');
}
return $smileys;
}
@@ -88,6 +97,7 @@ function getEntities() {
static $entities = null;
if ( !$entities ) {
$entities = retrieveConfig('entities','confToHash');
+ $entities = array_filter($entities, 'strlen');
}
return $entities;
}
@@ -101,9 +111,11 @@ function getInterwiki() {
static $wikis = null;
if ( !$wikis ) {
$wikis = retrieveConfig('interwiki','confToHash',array(true));
+ $wikis = array_filter($wikis, 'strlen');
+
+ //add sepecial case 'this'
+ $wikis['this'] = DOKU_URL.'{NAME}';
}
- //add sepecial case 'this'
- $wikis['this'] = DOKU_URL.'{NAME}';
return $wikis;
}
@@ -114,7 +126,7 @@ function getInterwiki() {
function getWordblocks() {
static $wordblocks = null;
if ( !$wordblocks ) {
- $wordblocks = retrieveConfig('wordblock','file');
+ $wordblocks = retrieveConfig('wordblock','file',null,'array_merge_with_removal');
}
return $wordblocks;
}
@@ -127,11 +139,11 @@ function getWordblocks() {
function getSchemes() {
static $schemes = null;
if ( !$schemes ) {
- $schemes = retrieveConfig('scheme','file');
+ $schemes = retrieveConfig('scheme','file',null,'array_merge_with_removal');
+ $schemes = array_map('trim', $schemes);
+ $schemes = preg_replace('/^#.*/', '', $schemes);
+ $schemes = array_filter($schemes);
}
- $schemes = array_map('trim', $schemes);
- $schemes = preg_replace('/^#.*/', '', $schemes);
- $schemes = array_filter($schemes);
return $schemes;
}
@@ -196,7 +208,7 @@ function confToHash($file,$lower=false) {
* @param array $params optional additional params to pass to the callback
* @return array configuration values
*/
-function retrieveConfig($type,$fn,$params=null) {
+function retrieveConfig($type,$fn,$params=null,$combine='array_merge') {
global $config_cascade;
if(!is_array($params)) $params = array();
@@ -208,7 +220,7 @@ function retrieveConfig($type,$fn,$params=null) {
foreach ($config_cascade[$type][$config_group] as $file) {
if (file_exists($file)) {
$config = call_user_func_array($fn,array_merge(array($file),$params));
- $combined = array_merge($combined, $config);
+ $combined = $combine($combined, $config);
}
}
}
@@ -347,4 +359,27 @@ function conf_decodeString($str) {
return $str;
}
}
+
+/**
+ * array combination function to remove negated values (prefixed by !)
+ *
+ * @param array $current
+ * @param array $new
+ *
+ * @return array the combined array, numeric keys reset
+ */
+function array_merge_with_removal($current, $new) {
+ foreach ($new as $val) {
+ if (substr($val,0,1) == DOKU_CONF_NEGATION) {
+ $idx = array_search(trim(substr($val,1)),$current);
+ if ($idx !== false) {
+ unset($current[$idx]);
+ }
+ } else {
+ $current[] = trim($val);
+ }
+ }
+
+ return array_slice($current,0);
+}
//Setup VIM: ex: et ts=4 :