121 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
/*
 | 
						|
Plugin Name: FootNotes
 | 
						|
Version: 0.1
 | 
						|
Plugin URI: http://flatpress.nowhereland.it
 | 
						|
Description: footnotes in your entry 
 | 
						|
Author: NoWhereMan
 | 
						|
Author URI: http://flatpress.nowhereland.it
 | 
						|
*/
 | 
						|
 | 
						|
define('FOOTNOTES_START', '[footnotes]');
 | 
						|
 | 
						|
class footnotes_class {
 | 
						|
 | 
						|
	var $refs = false;
 | 
						|
	var $id = 'noid';
 | 
						|
	
 | 
						|
	function footnotes_class($id) {
 | 
						|
		if ($id)
 | 
						|
			$this->id = $id;
 | 
						|
	}
 | 
						|
	
 | 
						|
	function note($n,$s) {
 | 
						|
		$id=$this->id;
 | 
						|
		$this->refs = true;
 | 
						|
	
 | 
						|
		return
 | 
						|
			'<li>'.trim($s).
 | 
						|
			" <a id=\"$id-fn-{$n}\" href=\"#$id-rel-{$n}\" ".
 | 
						|
			"title=\"Back {$n}\">^top</a>". 
 | 
						|
			'</li>';
 | 
						|
	}
 | 
						|
 | 
						|
	function footnotes($matches) {
 | 
						|
	
 | 
						|
		$str = '<div class="footnotes"><h4>Footnotes</h4><ol>';
 | 
						|
		
 | 
						|
		
 | 
						|
		$lines = preg_split('|\[([0-9]+)\]|', $matches[1], -1, PREG_SPLIT_DELIM_CAPTURE);
 | 
						|
		
 | 
						|
		array_shift($lines);
 | 
						|
		
 | 
						|
		while ((list (,$n) = each($lines)) && (list (,$s) = each($lines)))
 | 
						|
			$str .=$this->note($n, $s);
 | 
						|
		
 | 
						|
		
 | 
						|
		$str .= '</ol></div>';
 | 
						|
		
 | 
						|
		return $str;
 | 
						|
		
 | 
						|
	}
 | 
						|
	
 | 
						|
	function references($matches) {
 | 
						|
	
 | 
						|
		$n = $matches[1];
 | 
						|
		
 | 
						|
		$id = $this->id;
 | 
						|
		
 | 
						|
		$href_rel = "{$id}-rel-{$n}";
 | 
						|
		$href_note = "{$id}-fn-{$n}";
 | 
						|
		
 | 
						|
		return "<sup><a id=\"$href_rel\" href=\"#$href_note\" title=\"note {$n}\">{$n}</a></sup>";
 | 
						|
	}
 | 
						|
	
 | 
						|
	function headings($matches) {
 | 
						|
		$i = 7-strlen($matches[1]);
 | 
						|
		return "<h$i>{$matches[2]}</h$i>";
 | 
						|
		
 | 
						|
	}
 | 
						|
	
 | 
						|
	
 | 
						|
 | 
						|
}
 | 
						|
	
 | 
						|
function plugin_footnotes_filter($text) {
 | 
						|
	
 | 
						|
	
 | 
						|
	global $smarty;
 | 
						|
	
 | 
						|
	$footnotes_obj = new footnotes_class($id = $smarty->get_template_vars('id'));
 | 
						|
		
 | 
						|
	// *STRONG* emphasis
 | 
						|
	$text = preg_replace('|(?<!\S)\*(?=\S) (?! \*) (.+?) (?<=\S) \*(?!>\w)|xs', '<strong>$1</strong>', $text);
 | 
						|
	// _emphasis_ (italic)
 | 
						|
	$text = preg_replace('|(?<!\S)\_(?=\S) (?! \_) (.+?) (?<=\S) \_(?!>\w)|xs', '<em>$1</em>', $text);
 | 
						|
	
 | 
						|
	// heading
 | 
						|
	/*
 | 
						|
	$text = preg_replace_callback(
 | 
						|
					'(?<!\w)=(?=\S) (?! =) (.+?) (?<=\S) =(?!>\w)|xs'
 | 
						|
					//'/\n(#{1,6})([^#]+)# * /', 
 | 
						|
					array(&$footnotes_obj, 'headings'), 
 | 
						|
					$text);
 | 
						|
					
 | 
						|
	*/
 | 
						|
	
 | 
						|
	
 | 
						|
	
 | 
						|
	$text = preg_replace_callback('|\n'. preg_quote(FOOTNOTES_START) .'\s*(.*)|sm', 
 | 
						|
									array(&$footnotes_obj, 'footnotes'), 
 | 
						|
									$text);
 | 
						|
		
 | 
						|
	// no [footnotes] references at the bottom of the page: stops							
 | 
						|
	if (!$footnotes_obj->refs)
 | 
						|
		return $text;
 | 
						|
									
 | 
						|
	$text = preg_replace_callback('|\[([0-9]+)\]|', 
 | 
						|
									array(&$footnotes_obj, 'references'), 
 | 
						|
									$text);
 | 
						|
	
 | 
						|
	
 | 
						|
	return $text;
 | 
						|
	
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
add_filter('the_content', 'plugin_footnotes_filter', 0);
 | 
						|
?>
 |