Skip to content

Commit

Permalink
fixed code style
Browse files Browse the repository at this point in the history
darcs-hash:20080607210552-23886-090c54f85b17d3bbe146d1ec9b0c84dd0fe95b9c.gz
  • Loading branch information
Michael Klier committed Jun 7, 2008
1 parent 6f6b034 commit e4d7601
Showing 1 changed file with 147 additions and 149 deletions.
296 changes: 147 additions & 149 deletions syntax.php
Expand Up @@ -15,161 +15,159 @@
*/
class syntax_plugin_meta extends DokuWiki_Syntax_Plugin {

/**
* return some info
*/
function getInfo(){
return array(
'author' => 'Esther Brunner',
'email' => 'wikidesign@gmail.com',
'date' => '2006-04-15',
'name' => 'Meta Plugin',
'desc' => 'Sets metadata for the current page',
'url' => 'http://wiki.splitbrain.org/plugin:meta',
);
}

function getType(){ return 'substition'; }
function getSort(){ return 99; }
function connectTo($mode) { $this->Lexer->addSpecialPattern('~~META:.*?~~',$mode,'plugin_meta');}

/**
* Handle the match
*/
function handle($match, $state, $pos, &$handler){
$match = substr($match,7,-2); //strip ~~META: from start and ~~ from end

$data = array();
$pairs = explode('&', $match);
foreach ($pairs as $pair){
list($key, $value) = explode('=', $pair, 2);
list($key, $subkey) = explode(' ', $key, 2);
if (trim($subkey)) $data[trim($key)][trim($subkey)] = trim($value);
else $data[trim($key)] = trim($value);
/**
* return some info
*/
function getInfo() {
return array(
'author' => 'Esther Brunner',
'email' => 'wikidesign@gmail.com',
'date' => '2006-04-15',
'name' => 'Meta Plugin',
'desc' => 'Sets metadata for the current page',
'url' => 'http://wiki.splitbrain.org/plugin:meta',
);
}
$data = array_change_key_case($data, CASE_LOWER);

return $data;
}

/**
* Create output
*/
function render($mode, &$renderer, $data){
if ($mode == 'xthml'){
return true; // don't output anything
} elseif ($mode == 'metadata'){

// do some validation / conversion for date metadata
if (isset($data['date'])){
if (is_array($data['date'])){
foreach ($data['date'] as $key => $date){
$date = $this->_convertDate(trim($date));
if (!$date) unset($data['date'][$key]);
else $data['date'][$key] = $date;
}
} else {
unset($data['date']);
}
}

// now merge the arrays
$protected = array('description', 'date', 'contributor');
foreach ($data as $key => $value){

// be careful with sub-arrays of $meta['relation']
if ($key == 'relation'){
foreach ($value as $subkey => $subvalue){
$renderer->meta[$key][$subkey] =
array_merge($renderer->meta[$key][$subkey], $subvalue);
}

// be careful with some senisitive arrays of $meta
} elseif (in_array($key, $protected)){
if (is_array($value)){
$renderer->meta[$key] =
array_merge($renderer->meta[$key], $value);
}

// no special treatment for the rest
} else {
$renderer->meta[$key] = $value;

function getType() { return 'substition'; }
function getSort() { return 99; }
function connectTo($mode) { $this->Lexer->addSpecialPattern('~~META:.*?~~',$mode,'plugin_meta');}

/**
* Handle the match
*/
function handle($match, $state, $pos, &$handler) {
$match = substr($match,7,-2); //strip ~~META: from start and ~~ from end

$data = array();
$pairs = explode('&', $match);
foreach ($pairs as $pair) {
list($key, $value) = explode('=', $pair, 2);
list($key, $subkey) = explode(' ', $key, 2);
if (trim($subkey)) $data[trim($key)][trim($subkey)] = trim($value);
else $data[trim($key)] = trim($value);
}
}
$data = array_change_key_case($data, CASE_LOWER);

return $data;
}
}

/**
* converts YYYY-MM-DD[ hh:mm:ss][ -> [YYYY-MM-DD ]hh:mm:ss] to PHP timestamps
*/
function _convertDate($date){
list($start, $end) = explode('->', $date, 2);

// single date
if (!$end){
list($date, $time) = explode(' ', trim($start), 2);
if (!preg_match('/\d{4}\-\d{2}\-\d{2}/', $date)) return false;
$time = $this->_autocompleteTime($time);
return strtotime($date.' '.$time);

// duration
} else {

// start
list($startdate, $starttime) = explode(' ', trim($start), 2);
$startdate = $this->_autocompleteDate($startdate);
if (!$startdate) return false;
$starttime = $this->_autocompleteTime($starttime);

// end
list($enddate, $endtime) = explode(' ', trim($end), 2);
if (!trim($endtime)){ // only time given
$end_date = $this->_autocompleteDate($enddate, true);
if (!$end_date){
$endtime = $this->_autocompleteTime($enddate, true);
$enddate = $startdate;
} else { // only date given
$enddate = $end_date;
$endtime = '23:59:59';

/**
* Create output
*/
function render($mode, &$renderer, $data) {
if ($mode == 'xthml') {
return true; // don't output anything
} elseif ($mode == 'metadata') {

// do some validation / conversion for date metadata
if (isset($data['date'])) {
if (is_array($data['date'])) {
foreach ($data['date'] as $key => $date) {
$date = $this->_convertDate(trim($date));
if (!$date) unset($data['date'][$key]);
else $data['date'][$key] = $date;
}
} else {
unset($data['date']);
}
}

// now merge the arrays
$protected = array('description', 'date', 'contributor');
foreach ($data as $key => $value) {

// be careful with sub-arrays of $meta['relation']
if ($key == 'relation') {
foreach ($value as $subkey => $subvalue) {
$renderer->meta[$key][$subkey] =
array_merge($renderer->meta[$key][$subkey], $subvalue);
}

// be careful with some senisitive arrays of $meta
} elseif (in_array($key, $protected)) {
if (is_array($value)) {
$renderer->meta[$key] =
array_merge($renderer->meta[$key], $value);
}

// no special treatment for the rest
} else {
$renderer->meta[$key] = $value;
}
}
}
} else {
$enddate = $this->_autocompleteDate($enddate, true);
if (!$enddate) $enddate = $startdate;
$endtime = $this->_autocompleteTime($endtime, true);
}

$start = strtotime($startdate.' '.$starttime);
$end = strtotime($enddate.' '.$endtime);
if (!$start || !$end) return false;
return array('start' => $start, 'end' => $end);
}
}

function _autocompleteDate($date, $end=false){
if (!preg_match('/^\d{4}\-\d{2}\-\d{2}$/', $date)){
if (preg_match('/^\d{4}\-\d{2}$/', $date))
// we don't know which month
return ($end) ? $date.'-28' : $date.'-01';
elseif (preg_match('/^\d{4}$/', $date))
return ($end) ? $date.'-12-31' : $date.'-01-01';
else return false;
} else {
return $date;

/**
* converts YYYY-MM-DD[ hh:mm:ss][ -> [YYYY-MM-DD ]hh:mm:ss] to PHP timestamps
*/
function _convertDate($date) {
list($start, $end) = explode('->', $date, 2);

// single date
if (!$end) {
list($date, $time) = explode(' ', trim($start), 2);
if (!preg_match('/\d{4}\-\d{2}\-\d{2}/', $date)) return false;
$time = $this->_autocompleteTime($time);
return strtotime($date.' '.$time);

// duration
} else {

// start
list($startdate, $starttime) = explode(' ', trim($start), 2);
$startdate = $this->_autocompleteDate($startdate);
if (!$startdate) return false;
$starttime = $this->_autocompleteTime($starttime);

// end
list($enddate, $endtime) = explode(' ', trim($end), 2);
if (!trim($endtime)) { // only time given
$end_date = $this->_autocompleteDate($enddate, true);
if (!$end_date) {
$endtime = $this->_autocompleteTime($enddate, true);
$enddate = $startdate;
} else { // only date given
$enddate = $end_date;
$endtime = '23:59:59';
}
} else {
$enddate = $this->_autocompleteDate($enddate, true);
if (!$enddate) $enddate = $startdate;
$endtime = $this->_autocompleteTime($endtime, true);
}

$start = strtotime($startdate.' '.$starttime);
$end = strtotime($enddate.' '.$endtime);
if (!$start || !$end) return false;
return array('start' => $start, 'end' => $end);
}
}
}

function _autocompleteTime($time, $end=false){
if (!preg_match('/^\d{2}:\d{2}:\d{2}$/', $time)){
if (preg_match('/^\d{2}:\d{2}$/', $time))
return ($end) ? $time.':59' : $time.':00';
elseif (preg_match('/^\d{2}$/', $time))
return ($end) ? $time.':59:59': $time.':00:00';
else return ($end) ? '23:59:59' : '00:00:00';
} else {
return $time;

function _autocompleteDate($date, $end=false) {
if (!preg_match('/^\d{4}\-\d{2}\-\d{2}$/', $date)) {
if (preg_match('/^\d{4}\-\d{2}$/', $date))
// we don't know which month
return ($end) ? $date.'-28' : $date.'-01';
elseif (preg_match('/^\d{4}$/', $date))
return ($end) ? $date.'-12-31' : $date.'-01-01';
else return false;
} else {
return $date;
}
}
}

function _autocompleteTime($time, $end=false) {
if (!preg_match('/^\d{2}:\d{2}:\d{2}$/', $time)) {
if (preg_match('/^\d{2}:\d{2}$/', $time))
return ($end) ? $time.':59' : $time.':00';
elseif (preg_match('/^\d{2}$/', $time))
return ($end) ? $time.':59:59': $time.':00:00';
else return ($end) ? '23:59:59' : '00:00:00';
} else {
return $time;
}
}
}

//Setup VIM: ex: et ts=4 enc=utf-8 :
//vim:ts=4:sw=4:et:enc=utf-8:

0 comments on commit e4d7601

Please sign in to comment.