Merge pull request #45 from annando/master
New HTML to BBCode converter, changes to BBCode, nginx support, ...
This commit is contained in:
		
							
								
								
									
										3
									
								
								README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								README
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| This is my personal fork of https://github.com/friendica/friendica | ||||
|  | ||||
| If you want to have a stable version of friendica please look there. | ||||
							
								
								
									
										6
									
								
								boot.php
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								boot.php
									
									
									
									
									
								
							| @@ -309,8 +309,12 @@ class App { | ||||
| 			. 'library/phpsec' . PATH_SEPARATOR  | ||||
| 			. '.' ); | ||||
|  | ||||
| 		if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=") | ||||
| 		if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=") { | ||||
| 			$this->query_string = substr($_SERVER['QUERY_STRING'],2); | ||||
| 			// removing trailing / - maybe a nginx problem | ||||
| 			if (substr($this->query_string, 0, 1) == "/") | ||||
| 				$this->query_string = substr($this->query_string, 1); | ||||
| 		} | ||||
| 		if(x($_GET,'q')) | ||||
| 			$this->cmd = trim($_GET['q'],'/\\'); | ||||
|  | ||||
|   | ||||
| @@ -99,6 +99,10 @@ | ||||
| 	 **************************/ | ||||
| 	function api_call(&$a){ | ||||
| 		GLOBAL $API, $called_api; | ||||
|  | ||||
| 		// preset | ||||
| 		$type="json"; | ||||
|  | ||||
| 		foreach ($API as $p=>$info){ | ||||
| 			if (strpos($a->query_string, $p)===0){ | ||||
| 				$called_api= explode("/",$p); | ||||
| @@ -144,6 +148,7 @@ | ||||
| 				//echo "<pre>"; var_dump($r); die(); | ||||
| 			} | ||||
| 		} | ||||
| 		logger('API call not implemented: '.$a->query_string." - ".print_r($_REQUEST,true)); | ||||
| 		$r = '<status><error>not implemented</error></status>'; | ||||
| 		switch($type){ | ||||
| 			case "xml": | ||||
| @@ -162,7 +167,6 @@ | ||||
| 				header ("Content-Type: application/atom+xml"); | ||||
| 				return '<?xml version="1.0" encoding="UTF-8"?>'."\n".$r; | ||||
| 				break; | ||||
| 				 | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -13,30 +13,49 @@ require_once('include/html2bbcode.php'); | ||||
|  | ||||
| function diaspora2bb($s) { | ||||
|  | ||||
| 	// for testing purposes: Collect raw markdown articles | ||||
| 	$file = tempnam("/tmp/friendica/", "markdown"); | ||||
| 	file_put_contents($file, $s); | ||||
|  | ||||
| 	$s = html_entity_decode($s,ENT_COMPAT,'UTF-8'); | ||||
|     $s = str_replace("\r","\n",$s); | ||||
|  | ||||
| 	// Too many new lines. So deactivated the following line | ||||
| 	// $s = str_replace("\r","\n",$s); | ||||
| 	// Simply remove cr. | ||||
| 	$s = str_replace("\r","",$s); | ||||
|  | ||||
| 	// <br/> is invalid. Replace it with the valid expression | ||||
| 	$s = str_replace("<br/>","<br />",$s); | ||||
|  | ||||
| 	$s = preg_replace('/\@\{(.+?)\; (.+?)\@(.+?)\}/','@[url=https://$3/u/$2]$1[/url]',$s); | ||||
|  | ||||
|     $s = preg_replace('/\#([^\s\#])/','\\#$1',$s); | ||||
| 	// Escaping the hash tags - doesn't always seem to work | ||||
| 	// $s = preg_replace('/\#([^\s\#])/','\\#$1',$s); | ||||
| 	// This seems to work | ||||
| 	$s = preg_replace('/\#([^\s\#])/','#$1',$s); | ||||
|  | ||||
| 	$s = Markdown($s); | ||||
|  | ||||
| 	$s = str_replace('#','#',$s); | ||||
|  | ||||
| 	$s = str_replace("\n",'<br />',$s); | ||||
|  | ||||
| 	$s = html2bbcode($s); | ||||
| //	$s = str_replace('*','*',$s); | ||||
|  | ||||
| 	// Convert everything that looks like a link to a link | ||||
| 	$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3]$2$3[/url]',$s); | ||||
|  | ||||
| 	//$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3$4]$2$3$4[/url]',$s); | ||||
| 	$s = preg_replace("/\[url\=?(.*?)\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/url\]/ism",'[youtube]$2[/youtube]',$s); | ||||
| 	$s = preg_replace("/\[url\=https?:\/\/www.youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism",'[youtube]$1[/youtube]',$s); | ||||
| 	$s = preg_replace("/\[url\=?(.*?)\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/url\]/ism",'[vimeo]$2[/vimeo]',$s); | ||||
| 	$s = preg_replace("/\[url\=https?:\/\/vimeo.com\/([0-9]+)\](.*?)\[\/url\]/ism",'[vimeo]$1[/vimeo]',$s); | ||||
| 	$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url]$2$3$4[/url]',$s); | ||||
| 	// remove duplicate adjacent code tags | ||||
| 	$s = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/ism","[code]$2[/code]", $s); | ||||
| 	$s = scale_diaspora_images($s); | ||||
|  | ||||
| 	// Don't show link to full picture (until it is fixed) | ||||
| 	$s = scale_diaspora_images($s, false); | ||||
|  | ||||
| 	return $s; | ||||
| } | ||||
|   | ||||
| @@ -149,21 +149,20 @@ function bbcode($Text,$preserve_nl = false) { | ||||
| 	$Text = str_replace("[*]", "<li>", $Text); | ||||
| 	$Text = preg_replace("/\[li\](.*?)\[\/li\]/ism", '<li>$1</li>' ,$Text); | ||||
|  | ||||
|  	// handle nested lists | ||||
| 	$endlessloop = 0; | ||||
| 	while (strpos($Text, "[/list]") and strpos($Text, "[list") and (++$endlessloop < 20)) { | ||||
| 		$Text = preg_replace("/\[list\](.*?)\[\/list\]/ism", '<ul class="listbullet" style="list-style-type: circle;">$1</ul>' ,$Text); | ||||
| 	$Text = preg_replace("/\[ul\](.*?)\[\/ul\]/ism", '<ul class="listbullet" style="list-style-type: circle;">$1</ul>'  | ||||
| ,$Text); | ||||
| 		$Text = preg_replace("/\[list=\](.*?)\[\/list\]/ism", '<ul class="listnone" style="list-style-type: none;">$1</ul>' ,$Text); | ||||
| 		$Text = preg_replace("/\[list=1\](.*?)\[\/list\]/ism", '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>' ,$Text); | ||||
| 	$Text = preg_replace("/\[ol\](.*?)\[\/ol\]/ism", '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>'  | ||||
| ,$Text); | ||||
| 	$Text = preg_replace("/\[list=((?-i)i)\](.*?)\[\/list\]/ism",'<ul class="listlowerroman" style="list-style-type:  | ||||
| lower-roman;">$2</ul>' ,$Text); | ||||
| 	$Text = preg_replace("/\[list=((?-i)I)\](.*?)\[\/list\]/ism", '<ul class="listupperroman" style="list-style-type:  | ||||
| upper-roman;">$2</ul>' ,$Text); | ||||
| 	$Text = preg_replace("/\[list=((?-i)a)\](.*?)\[\/list\]/ism", '<ul class="listloweralpha" style="list-style-type:  | ||||
| lower-alpha;">$2</ul>' ,$Text); | ||||
| 	$Text = preg_replace("/\[list=((?-i)A)\](.*?)\[\/list\]/ism", '<ul class="listupperalpha" style="list-style-type:  | ||||
| upper-alpha;">$2</ul>' ,$Text); | ||||
| 		$Text = preg_replace("/\[list=((?-i)i)\](.*?)\[\/list\]/ism",'<ul class="listlowerroman" style="list-style-type: lower-roman;">$2</ul>' ,$Text); | ||||
| 		$Text = preg_replace("/\[list=((?-i)I)\](.*?)\[\/list\]/ism", '<ul class="listupperroman" style="list-style-type: upper-roman;">$2</ul>' ,$Text); | ||||
| 		$Text = preg_replace("/\[list=((?-i)a)\](.*?)\[\/list\]/ism", '<ul class="listloweralpha" style="list-style-type: lower-alpha;">$2</ul>' ,$Text); | ||||
| 		$Text = preg_replace("/\[list=((?-i)A)\](.*?)\[\/list\]/ism", '<ul class="listupperalpha" style="list-style-type: upper-alpha;">$2</ul>' ,$Text); | ||||
| 	} | ||||
|  | ||||
| 	$Text = preg_replace("/\[ul\](.*?)\[\/ul\]/ism", '<ul class="listbullet" style="list-style-type: circle;">$1</ul>' ,$Text); | ||||
| 	$Text = preg_replace("/\[ol\](.*?)\[\/ol\]/ism", '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>' ,$Text); | ||||
|  | ||||
| 	$Text = preg_replace("/\[th\](.*?)\[\/th\]/sm", '<th>$1</th>' ,$Text); | ||||
| 	$Text = preg_replace("/\[td\](.*?)\[\/td\]/sm", '<td>$1</td>' ,$Text); | ||||
| @@ -190,18 +189,21 @@ upper-alpha;">$2</ul>' ,$Text); | ||||
| 	// Check for [code] text | ||||
| 	$Text = preg_replace("/\[code\](.*?)\[\/code\]/ism","$CodeLayout", $Text); | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| 	// Declare the format for [quote] layout | ||||
| 	$QuoteLayout = '<blockquote>$1</blockquote>'; | ||||
| 	// Check for [quote] text | ||||
| 	// handle nested quotes | ||||
| 	$endlessloop = 0; | ||||
| 	while (strpos($Text, "[/quote]") and strpos($Text, "[quote]") and (++$endlessloop < 20)) | ||||
| 		$Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text); | ||||
|  | ||||
| 	// Check for [quote=Author] text | ||||
|  | ||||
| 	$t_wrote = t('$1 wrote:'); | ||||
|  | ||||
| 	// handle nested quotes | ||||
| 	$endlessloop = 0; | ||||
| 	while (strpos($Text, "[/quote]") and strpos($Text, "[quote=") and (++$endlessloop < 20)) | ||||
| 		$Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism", | ||||
|         	                     "<blockquote><strong>" . $t_wrote . "</strong> $2</blockquote>", | ||||
|                 	             $Text); | ||||
|   | ||||
| @@ -1,127 +1,286 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * html2bbcode | ||||
| /* | ||||
| html2bbcode.php | ||||
| Converter for HTML to BBCode | ||||
| Made by: ike@piratenpartei.de | ||||
| Originally made for the syncom project: http://wiki.piratenpartei.de/Syncom | ||||
| 					https://github.com/annando/Syncom | ||||
| */ | ||||
|  | ||||
|  | ||||
| function html2bbcode($s) { | ||||
|  | ||||
|  | ||||
| 	// only keep newlines from source that are within pre tags | ||||
|  | ||||
| 	$s = stripnl_exceptinpre($s); | ||||
|  | ||||
|  | ||||
| 	// Tags to Find | ||||
|  | ||||
| 	$htmltags = array( | ||||
| 		'/\<pre\>(.*?)\<\/pre\>/is', | ||||
| 		'/\<p(.*?)\>/is', | ||||
| 		'/\<\/p\>/is', | ||||
| 		'/\<b\>(.*?)\<\/b\>/is', | ||||
| 		'/\<i\>(.*?)\<\/i\>/is', | ||||
| 		'/\<u\>(.*?)\<\/u\>/is', | ||||
| 		'/\<ul\>(.*?)\<\/ul\>/is', | ||||
| 		'/\<li\>(.*?)\<\/li\>/is', | ||||
| 		'/\<img(.*?)width: *([0-9]+)(.*?)height: *([0-9]+)(.*?)src=\"(.*?)\" (.*?)\>/is', | ||||
| 		'/\<img(.*?)height: *([0-9]+)(.*?)width: *([0-9]+)(.*?)src=\"(.*?)\" (.*?)\>/is', | ||||
| 		'/\<img(.*?)src=\"(.*?)\"(.*?)width: *([0-9]+)(.*?)height: *([0-9]+)(.*?)\>/is', | ||||
| 		'/\<img(.*?)src=\"(.*?)\"(.*?)height: *([0-9]+)(.*?)width: *([0-9]+)(.*?)\>/is', | ||||
| 		'/\<img(.*?) src=\"(.*?)\" (.*?)\>/is', | ||||
| 		'/\<div(.*?)\>(.*?)\<\/div\>/is', | ||||
| 		'/\<br(.*?)\>/is', | ||||
| 		'/\<strong\>(.*?)\<\/strong\>/is', | ||||
| 		'/\<a (.*?)href=\"(.*?)\"(.*?)\>(.*?)\<\/a\>/is', | ||||
| 		'/\<code\>(.*?)\<\/code\>/is', | ||||
| 		'/\<span style=\"color:(.*?)\"\>(.*?)\<\/span\>/is', | ||||
| 		'/\<span style=\"font-size:(.*?)\"\>(.*?)\<\/span\>/is', | ||||
| 		'/\<blockquote\>(.*?)\<\/blockquote\>/is', | ||||
| 		'/\<video(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/video\>/is', | ||||
| 		'/\<audio(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/audio\>/is', | ||||
| 		'/\<iframe(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/iframe\>/is', | ||||
|  | ||||
| 	); | ||||
|  | ||||
| 	// Replace with | ||||
|  | ||||
| 	$bbtags = array( | ||||
| 		'[code]$1[/code]', | ||||
| 		'', | ||||
| 		"\n", | ||||
| 		'[b]$1[/b]', | ||||
| 		'[i]$1[/i]', | ||||
| 		'[u]$1[/u]', | ||||
| 		'[list]$1[/list]', | ||||
| 		'[*]$1', | ||||
| 		'[img=$2x$4]$6[/img]', | ||||
| 		'[img=$4x$2]$6[/img]', | ||||
| 		'[img=$4x$6]$2[/img]', | ||||
| 		'[img=$6x$4]$2[/img]', | ||||
| 		'[img]$2[/img]', | ||||
| 		'$2', | ||||
| 		"\n", | ||||
| 		'[b]$1[/b]', | ||||
| 		'[url=$2]$4[/url]', | ||||
| 		'[code]$1[/code]', | ||||
| 		'[color="$1"]$2[/color]', | ||||
| 		'[size=$1]$2[/size]', | ||||
| 		'[quote]$1[/quote]', | ||||
| 		'[video]$1[/video]', | ||||
| 		'[audio]$1[/audio]', | ||||
| 		'[iframe]$1[/iframe]', | ||||
| 	); | ||||
|  | ||||
| 	// Replace $htmltags in $text with $bbtags | ||||
| 	$text = preg_replace ($htmltags, $bbtags, $s); | ||||
|  | ||||
| 	call_hooks('html2bbcode', $text); | ||||
|  | ||||
| 	// Strip all other HTML tags | ||||
| 	$text = strip_tags($text); | ||||
| 	return $text; | ||||
|  | ||||
| } | ||||
|  | ||||
| function stripnl_exceptinpre($string) | ||||
| function node2bbcode(&$doc, $oldnode, $attributes, $startbb, $endbb) | ||||
| { | ||||
|     // First, check for <pre> tag | ||||
|     if(strpos($string, '<pre>') === false) | ||||
| 	do { | ||||
| 		$done = node2bbcodesub(&$doc, $oldnode, $attributes, $startbb, $endbb); | ||||
| 	} while ($done); | ||||
| } | ||||
|  | ||||
| function node2bbcodesub(&$doc, $oldnode, $attributes, $startbb, $endbb) | ||||
| { | ||||
|         return str_replace("\n","", $string); | ||||
| 	$savestart = str_replace('$', '%', $startbb); | ||||
| 	$replace = false; | ||||
|  | ||||
| 	$xpath = new DomXPath($doc); | ||||
|  | ||||
| 	$list = $xpath->query("//".$oldnode); | ||||
| 	foreach ($list as $oldNode) { | ||||
|  | ||||
| 		$attr = array(); | ||||
| 		if ($oldNode->attributes->length) | ||||
| 			foreach ($oldNode->attributes as $attribute) | ||||
| 				$attr[$attribute->name] = $attribute->value; | ||||
|  | ||||
| 		$replace = true; | ||||
|  | ||||
| 		$startbb = $savestart; | ||||
|  | ||||
| 		$i = 0; | ||||
|  | ||||
| 		foreach ($attributes as $attribute => $value) { | ||||
|  | ||||
| 			$startbb = str_replace('%'.++$i, '$1', $startbb); | ||||
|  | ||||
| 			if (strpos('*'.$startbb, '$1') > 0) { | ||||
|  | ||||
| 				if ($replace and (@$attr[$attribute] != '')) { | ||||
|  | ||||
| 					$startbb = preg_replace($value, $startbb, $attr[$attribute], -1, $count); | ||||
|  | ||||
| 					// If nothing could be changed | ||||
| 					if ($count == 0) | ||||
| 						$replace = false; | ||||
| 				} else | ||||
| 					$replace = false; | ||||
| 			} else { | ||||
| 				if (@$attr[$attribute] != $value) | ||||
| 					$replace = false; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
|     // If there is a <pre>, we have to split by line | ||||
|     // and manually replace the linebreaks | ||||
| 		if ($replace) { | ||||
| 			$StartCode = $oldNode->ownerDocument->createTextNode($startbb); | ||||
| 			$EndCode = $oldNode->ownerDocument->createTextNode($endbb); | ||||
|  | ||||
|     $strArr=explode("\n", $string); | ||||
| 			$oldNode->parentNode->insertBefore($StartCode, $oldNode); | ||||
|  | ||||
|     $output=""; | ||||
|     $preFound=false; | ||||
| 			if ($oldNode->hasChildNodes()) { | ||||
| 				foreach ($oldNode->childNodes as $child) { | ||||
| 					$newNode = $child->cloneNode(true); | ||||
| 					$oldNode->parentNode->insertBefore($newNode, $oldNode); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
|     // Loop over each line | ||||
|     foreach($strArr as $line) | ||||
|     {    // See if the line has a <pre>. If it does, set $preFound to true | ||||
|         if(strpos($line, "<pre>") !== false) | ||||
| 			$oldNode->parentNode->insertBefore($EndCode, $oldNode); | ||||
| 			$oldNode->parentNode->removeChild($oldNode); | ||||
| 		} | ||||
| 	} | ||||
| 	return($replace); | ||||
| } | ||||
|  | ||||
| function deletenode(&$doc, $node) | ||||
| { | ||||
|             $preFound=true; | ||||
|         } | ||||
|         elseif(strpos($line, "</pre>") !== false) | ||||
|         { | ||||
|             $preFound=false; | ||||
| 	$xpath = new DomXPath($doc); | ||||
| 	$list = $xpath->query("//".$node); | ||||
| 	foreach ($list as $child) | ||||
| 		$child->parentNode->removeChild($child); | ||||
| } | ||||
|  | ||||
|         // If we are in a pre tag, add line and also add \n, else add the line without \n | ||||
|         if($preFound) | ||||
| function html2bbcode($message) | ||||
| { | ||||
|             $output .= $line . "\n"; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             $output .= $line ; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return $output; | ||||
| } | ||||
| 	//$file = tempnam("/tmp/", "html"); | ||||
| 	//file_put_contents($file, $message); | ||||
|  | ||||
| 	$message = str_replace("\r", "", $message); | ||||
|  | ||||
| 	$message = str_replace(array( | ||||
| 					"<li><p>", | ||||
| 					"</p></li>"), | ||||
| 				array( | ||||
| 					"<li>", | ||||
| 					"</li>"), | ||||
| 				$message); | ||||
|  | ||||
| 	// remove namespaces | ||||
| 	$message = preg_replace('=<(\w+):(.+?)>=', '<removeme>', $message); | ||||
| 	$message = preg_replace('=</(\w+):(.+?)>=', '</removeme>', $message); | ||||
|  | ||||
| 	$doc = new DOMDocument(); | ||||
| 	$doc->preserveWhiteSpace = false; | ||||
|  | ||||
| 	$message = mb_convert_encoding($message, 'HTML-ENTITIES', "UTF-8"); | ||||
|  | ||||
| 	@$doc->loadHTML($message); | ||||
|  | ||||
| 	deletenode($doc, 'style'); | ||||
| 	deletenode($doc, 'head'); | ||||
| 	deletenode($doc, 'title'); | ||||
| 	deletenode($doc, 'meta'); | ||||
| 	deletenode($doc, 'xml'); | ||||
| 	deletenode($doc, 'removeme'); | ||||
|  | ||||
| 	$xpath = new DomXPath($doc); | ||||
| 	$list = $xpath->query("//pre"); | ||||
| 	foreach ($list as $node) | ||||
| 		$node->nodeValue = str_replace("\n", "\r", $node->nodeValue); | ||||
|  | ||||
| 	$message = $doc->saveHTML(); | ||||
| 	$message = str_replace(array("\n<", ">\n", "\r", "\n", "\xC3\x82\xC2\xA0"), array("<", ">", "<br>", " ", ""), $message); | ||||
| 	$message = preg_replace('= [\s]*=i', " ", $message); | ||||
| 	@$doc->loadHTML($message); | ||||
|  | ||||
| 	node2bbcode($doc, 'html', array(), "", ""); | ||||
| 	node2bbcode($doc, 'body', array(), "", ""); | ||||
|  | ||||
| 	// Outlook-Quote - Variant 1 | ||||
| 	node2bbcode($doc, 'p', array('class'=>'MsoNormal', 'style'=>'margin-left:35.4pt'), '[quote]', '[/quote]'); | ||||
|  | ||||
| 	// Outlook-Quote - Variant 2 | ||||
| 	node2bbcode($doc, 'div', array('style'=>'border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'), '[quote]', '[/quote]'); | ||||
|  | ||||
| 	// MyBB-Stuff | ||||
| 	node2bbcode($doc, 'span', array('style'=>'text-decoration: underline;'), '[u]', '[/u]'); | ||||
| 	node2bbcode($doc, 'span', array('style'=>'font-style: italic;'), '[i]', '[/i]'); | ||||
| 	node2bbcode($doc, 'span', array('style'=>'font-weight: bold;'), '[b]', '[/b]'); | ||||
|  | ||||
| 	node2bbcode($doc, 'font', array('face'=>'/([\w ]+)/', 'size'=>'/(\d+)/', 'color'=>'/(.+)/'), '[font=$1][size=$2][color=$3]', '[/color][/size][/font]'); | ||||
| 	node2bbcode($doc, 'font', array('size'=>'/(\d+)/', 'color'=>'/(.+)/'), '[size=$1][color=$2]', '[/color][/size]'); | ||||
| 	node2bbcode($doc, 'font', array('face'=>'/([\w ]+)/', 'size'=>'/(.+)/'), '[font=$1][size=$2]', '[/size][/font]'); | ||||
| 	node2bbcode($doc, 'font', array('face'=>'/([\w ]+)/', 'color'=>'/(.+)/'), '[font=$1][color=$3]', '[/color][/font]'); | ||||
| 	node2bbcode($doc, 'font', array('face'=>'/([\w ]+)/'), '[font=$1]', '[/font]'); | ||||
| 	node2bbcode($doc, 'font', array('size'=>'/(\d+)/'), '[size=$1]', '[/size]'); | ||||
| 	node2bbcode($doc, 'font', array('color'=>'/(.+)/'), '[color=$1]', '[/color]'); | ||||
|  | ||||
| 	node2bbcode($doc, 'span', array('style'=>'/.*color:\s*(.+?)[,;].*/'), '[color="$1"]', '[/color]'); | ||||
| 	node2bbcode($doc, 'span', array('style'=>'/.*font-size:\s*(\d+)/'), '[size=$1]', '[/size]'); | ||||
|  | ||||
| 	//node2bbcode($doc, 'span', array('style'=>'/.*font-family:\s*(.+?)[,;].*/'), '[font=$1]', '[/font]'); | ||||
| 	//node2bbcode($doc, 'div', array('style'=>'/.*font-family:\s*(.+?)[,;].*font-size:\s*(\d+?)pt.*/'), '[font=$1][size=$2]', '[/size][/font]'); | ||||
| 	//node2bbcode($doc, 'div', array('style'=>'/.*font-family:\s*(.+?)[,;].*font-size:\s*(\d+?)px.*/'), '[font=$1][size=$2]', '[/size][/font]'); | ||||
| 	//node2bbcode($doc, 'div', array('style'=>'/.*font-family:\s*(.+?)[,;].*/'), '[font=$1]', '[/font]'); | ||||
|  | ||||
| 	node2bbcode($doc, 'strong', array(), '[b]', '[/b]'); | ||||
| 	node2bbcode($doc, 'em', array(), '[i]', '[/i]'); | ||||
| 	node2bbcode($doc, 'b', array(), '[b]', '[/b]'); | ||||
| 	node2bbcode($doc, 'i', array(), '[i]', '[/i]'); | ||||
| 	node2bbcode($doc, 'u', array(), '[u]', '[/u]'); | ||||
|  | ||||
| 	node2bbcode($doc, 'big', array(), "[size=large]", "[/size]"); | ||||
| 	node2bbcode($doc, 'small', array(), "[size=small]", "[/size]"); | ||||
|  | ||||
| 	node2bbcode($doc, 'blockquote', array(), '[quote]', '[/quote]'); | ||||
|  | ||||
| 	node2bbcode($doc, 'br', array(), "\n", ''); | ||||
|  | ||||
| 	node2bbcode($doc, 'p', array('class'=>'MsoNormal'), "\n", ""); | ||||
| 	node2bbcode($doc, 'div', array('class'=>'MsoNormal'), "\r", ""); | ||||
|  | ||||
| 	node2bbcode($doc, 'span', array(), "", ""); | ||||
|  | ||||
| 	node2bbcode($doc, 'span', array(), "", ""); | ||||
| 	node2bbcode($doc, 'pre', array(), "", ""); | ||||
| 	node2bbcode($doc, 'div', array(), "\r", "\r"); | ||||
| 	node2bbcode($doc, 'p', array(), "\n", "\n"); | ||||
|  | ||||
| 	node2bbcode($doc, 'ul', array(), "[list]", "[/list]"); | ||||
| 	node2bbcode($doc, 'ol', array(), "[list=1]", "[/list]"); | ||||
| 	node2bbcode($doc, 'li', array(), "[*]", ""); | ||||
|  | ||||
| 	node2bbcode($doc, 'hr', array(), "[hr]", ""); | ||||
|  | ||||
| 	//node2bbcode($doc, 'table', array(), "", ""); | ||||
| 	//node2bbcode($doc, 'tr', array(), "\n", ""); | ||||
| 	//node2bbcode($doc, 'td', array(), "\t", ""); | ||||
| 	node2bbcode($doc, 'table', array(), "[table]", "[/table]"); | ||||
| 	node2bbcode($doc, 'th', array(), "[th]", "[/th]"); | ||||
| 	node2bbcode($doc, 'tr', array(), "[tr]", "[/tr]"); | ||||
| 	node2bbcode($doc, 'td', array(), "[td]", "[/td]"); | ||||
|  | ||||
| 	node2bbcode($doc, 'h1', array(), "\n\n[size=xx-large][b]", "[/b][/size]\n"); | ||||
| 	node2bbcode($doc, 'h2', array(), "\n\n[size=x-large][b]", "[/b][/size]\n"); | ||||
| 	node2bbcode($doc, 'h3', array(), "\n\n[size=large][b]", "[/b][/size]\n"); | ||||
| 	node2bbcode($doc, 'h4', array(), "\n\n[size=medium][b]", "[/b][/size]\n"); | ||||
| 	node2bbcode($doc, 'h5', array(), "\n\n[size=small][b]", "[/b][/size]\n"); | ||||
| 	node2bbcode($doc, 'h6', array(), "\n\n[size=x-small][b]", "[/b][/size]\n"); | ||||
|  | ||||
| 	node2bbcode($doc, 'a', array('href'=>'/(.+)/'), '[url=$1]', '[/url]'); | ||||
|  | ||||
| 	node2bbcode($doc, 'img', array('src'=>'/(.+)/', 'width'=>'/(\d+)/', 'height'=>'/(\d+)/'), '[img$2x$3]$1', '[/img]'); | ||||
| 	node2bbcode($doc, 'img', array('src'=>'/(.+)/'), '[img]$1', '[/img]'); | ||||
|  | ||||
|  | ||||
| 	node2bbcode($doc, 'video', array('src'=>'/(.+)/'), '[video]$1', '[/video]'); | ||||
| 	node2bbcode($doc, 'audio', array('src'=>'/(.+)/'), '[audio]$1', '[/audio]'); | ||||
| 	node2bbcode($doc, 'iframe', array('src'=>'/(.+)/'), '[iframe]$1', '[/iframe]'); | ||||
|  | ||||
| 	node2bbcode($doc, 'code', array(), '[code]$1', '[/code]'); | ||||
|  | ||||
| 	$message = $doc->saveHTML(); | ||||
|  | ||||
| 	// I'm removing something really disturbing | ||||
| 	// Don't know exactly what it is | ||||
| 	$message = str_replace(chr(194).chr(160), ' ', $message); | ||||
|  | ||||
| 	$message = str_replace(" ", " ", $message); | ||||
|  | ||||
| 	// removing multiple DIVs | ||||
| 	$message = preg_replace('=\r *\r=i', "\n", $message); | ||||
| 	$message = str_replace("\r", "\n", $message); | ||||
|  | ||||
| 	call_hooks('html2bbcode', $message); | ||||
|  | ||||
| 	$message = strip_tags($message); | ||||
|  | ||||
| 	$message = html_entity_decode($message, ENT_QUOTES, 'UTF-8'); | ||||
|  | ||||
| 	$message = str_replace(array("<"), array("<"), $message); | ||||
|  | ||||
| 	// remove quotes if they don't make sense | ||||
| 	$message = preg_replace('=\[/quote\][\s]*\[quote\]=i', "\n", $message); | ||||
|  | ||||
| 	$message = preg_replace('=\[quote\]\s*=i', "[quote]", $message); | ||||
| 	$message = preg_replace('=\s*\[/quote\]=i', "[/quote]", $message); | ||||
|  | ||||
| 	do { | ||||
| 		$oldmessage = $message; | ||||
| 		$message = str_replace("\n \n", "\n\n", $message); | ||||
| 	} while ($oldmessage != $message); | ||||
|  | ||||
| 	do { | ||||
| 		$oldmessage = $message; | ||||
| 		$message = str_replace("\n\n\n", "\n\n", $message); | ||||
| 	} while ($oldmessage != $message); | ||||
|  | ||||
| 	do { | ||||
| 		$oldmessage = $message; | ||||
| 		$message = str_replace(array( | ||||
| 					"[/size]\n\n", | ||||
| 					"\n[hr]", | ||||
| 					"[hr]\n", | ||||
| 					"\n[list", | ||||
| 					"[/list]\n", | ||||
| 					"\n[/list]", | ||||
| 					"[list]\n", | ||||
| 					"[list=1]\n", | ||||
| 					"\n[*]"), | ||||
| 				array( | ||||
| 					"[/size]\n", | ||||
| 					"[hr]", | ||||
| 					"[hr]", | ||||
| 					"[list", | ||||
| 					"[/list]", | ||||
| 					"[/list]", | ||||
| 					"[list]", | ||||
| 					"[list=1]", | ||||
| 					"[*]"), | ||||
| 				$message); | ||||
| 	} while ($message != $oldmessage); | ||||
|  | ||||
| 	$message = str_replace(array('[b][b]', '[/b][/b]', '[i][i]', '[/i][/i]'), | ||||
| 		array('[b]', '[/b]', '[i]', '[/i]'), $message); | ||||
|  | ||||
| 	// Handling Yahoo style of mails | ||||
| 	$message = str_replace('[hr][b]From:[/b]', '[quote][b]From:[/b]', $message); | ||||
|  | ||||
| 	return(trim($message)); | ||||
| } | ||||
| ?> | ||||
|   | ||||
| @@ -194,8 +194,8 @@ function poller_run($argv, $argc){ | ||||
| 							$update = true; | ||||
| 						break; | ||||
| 				} | ||||
| 				if((! $update) && (! $force)) | ||||
| 					continue; | ||||
| //				if((! $update) && (! $force)) | ||||
| //					continue; | ||||
| 			} | ||||
|  | ||||
| 			// Check to see if we are running out of memory - if so spawn a new process and kill this one | ||||
| @@ -371,10 +371,14 @@ function poller_run($argv, $argc){ | ||||
| 			} | ||||
| 			elseif($contact['network'] === NETWORK_MAIL || $contact['network'] === NETWORK_MAIL2) { | ||||
|  | ||||
| 				logger("Mail: Fetching"); | ||||
|  | ||||
| 				$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); | ||||
| 				if($mail_disabled) | ||||
| 					continue; | ||||
|  | ||||
| 				logger("Mail: Enabled"); | ||||
|  | ||||
| 				$mbox = null; | ||||
| 				$x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1", | ||||
| 					intval($importer_uid) | ||||
| @@ -388,6 +392,7 @@ function poller_run($argv, $argc){ | ||||
| 					openssl_private_decrypt(hex2bin($mailconf[0]['pass']),$password,$x[0]['prvkey']); | ||||
| 					$mbox = email_connect($mailbox,$mailconf[0]['user'],$password); | ||||
| 					unset($password); | ||||
| 					logger("Mail: Connect"); | ||||
| 					if($mbox) { | ||||
| 						q("UPDATE `mailacct` SET `last_check` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1", | ||||
| 							dbesc(datetime_convert()), | ||||
| @@ -397,11 +402,16 @@ function poller_run($argv, $argc){ | ||||
| 					} | ||||
| 				} | ||||
| 				if($mbox) { | ||||
| 					logger("Mail: mbox"); | ||||
|  | ||||
| 					$msgs = email_poll($mbox,$contact['addr']); | ||||
|  | ||||
| 					if(count($msgs)) { | ||||
| 						logger("Mail: Parsing ".count($msgs)." mails."); | ||||
|  | ||||
| 						foreach($msgs as $msg_uid) { | ||||
| 							logger("Mail: Parsing mail ".$msg_uid); | ||||
|  | ||||
| 							$datarray = array(); | ||||
| 							$meta = email_msg_meta($mbox,$msg_uid); | ||||
| 							$headers = email_msg_headers($mbox,$msg_uid); | ||||
| @@ -436,6 +446,7 @@ function poller_run($argv, $argc){ | ||||
| 							); | ||||
|  | ||||
| 							if(count($r)) { | ||||
| 								logger("Mail: Seen before ".$msg_uid); | ||||
| 								if($meta->deleted && ! $r[0]['deleted']) { | ||||
| 									q("UPDATE `item` SET `deleted` = 1, `changed` = '%s' WHERE `id` = %d LIMIT 1", | ||||
| 										dbesc(datetime_convert()), | ||||
| @@ -448,10 +459,14 @@ function poller_run($argv, $argc){ | ||||
| 							$datarray['created'] = datetime_convert('UTC','UTC',$meta->date); | ||||
|  | ||||
| 							$r = email_get_msg($mbox,$msg_uid); | ||||
| 							if(! $r) | ||||
| 							if(! $r) { | ||||
| 								logger("Mail: can't fetch msg ".$msg_uid); | ||||
| 								continue; | ||||
| 							} | ||||
| 							$datarray['body'] = escape_tags($r['body']); | ||||
|  | ||||
| 							logger("Mail: Importing ".$msg_uid); | ||||
|  | ||||
| 							// some mailing lists have the original author as 'from' - add this sender info to msg body. | ||||
| 							// todo: adding a gravatar for the original author would be cool | ||||
|  | ||||
|   | ||||
							
								
								
									
										318
									
								
								library/markdown.php
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										318
									
								
								library/markdown.php
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -3,8 +3,8 @@ | ||||
| # Markdown Extra  -  A text-to-HTML conversion tool for web writers | ||||
| # | ||||
| # PHP Markdown & Extra | ||||
| # Copyright (c) 2004-2008 Michel Fortin | ||||
| # <http://www.michelf.com/projects/php-markdown/> | ||||
| # Copyright (c) 2004-2012 Michel Fortin   | ||||
| # <http://michelf.com/projects/php-markdown/> | ||||
| # | ||||
| # Original Markdown | ||||
| # Copyright (c) 2004-2006 John Gruber   | ||||
| @@ -12,8 +12,8 @@ | ||||
| # | ||||
|  | ||||
|  | ||||
| define( 'MARKDOWN_VERSION',  "1.0.1m" ); # Sat 21 Jun 2008 | ||||
| define( 'MARKDOWNEXTRA_VERSION',  "1.2.3" ); # Wed 31 Dec 2008 | ||||
| define( 'MARKDOWN_VERSION',  "1.0.1o" ); # Sun 8 Jan 2012 | ||||
| define( 'MARKDOWNEXTRA_VERSION',  "1.2.5" ); # Sun 8 Jan 2012 | ||||
|  | ||||
|  | ||||
| # | ||||
| @@ -34,17 +34,6 @@ define( 'MARKDOWNEXTRA_VERSION',  "1.2.3" ); # Wed 31 Dec 2008 | ||||
| @define( 'MARKDOWN_FN_LINK_CLASS',         "" ); | ||||
| @define( 'MARKDOWN_FN_BACKLINK_CLASS',     "" ); | ||||
|  | ||||
| # Enables special handling for links pointing outside of the current domain. | ||||
| @define( 'MARKDOWN_EL_ENABLE',          true);   # Use this feature at all? | ||||
| @define( 'MARKDOWN_EL_LOCAL_DOMAIN',    null);   # Leave as null to autodetect | ||||
| @define( 'MARKDOWN_EL_NEW_WINDOW',      true);   # Open link in a new browser? | ||||
| @define( 'MARKDOWN_EL_CSS_CLASS', 'external');   # Leave as null for no class | ||||
|  | ||||
| # Enables header auto-self-linking. | ||||
| @define( 'MARKDOWN_HA_ENABLE',             true );   # Use this feature at all? | ||||
| @define( 'MARKDOWN_HA_CLASS', 'hidden-selflink' );   # Leave as null for no class | ||||
| @define( 'MARKDOWN_HA_TEXT',           '←' );   # The text to use as the link | ||||
|  | ||||
|  | ||||
| # | ||||
| # WordPress settings: | ||||
| @@ -80,16 +69,16 @@ function Markdown($text) { | ||||
|  | ||||
| /* | ||||
| Plugin Name: Markdown Extra | ||||
| Plugin URI: http://www.michelf.com/projects/php-markdown/ | ||||
| Description: <a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://www.michelf.com/projects/php-markdown/">More...</a> | ||||
| Version: 1.2.2 | ||||
| Plugin URI: http://michelf.com/projects/php-markdown/ | ||||
| Description: <a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://michelf.com/projects/php-markdown/">More...</a> | ||||
| Version: 1.2.5 | ||||
| Author: Michel Fortin | ||||
| Author URI: http://www.michelf.com/ | ||||
| Author URI: http://michelf.com/ | ||||
| */ | ||||
|  | ||||
| if (isset($wp_version)) { | ||||
| 	# More details about how it works here: | ||||
| 	# <http://www.michelf.com/weblog/2005/wordpress-text-flow-vs-markdown/> | ||||
| 	# <http://michelf.com/weblog/2005/wordpress-text-flow-vs-markdown/> | ||||
| 	 | ||||
| 	# Post content and excerpts | ||||
| 	# - Remove WordPress paragraph generator. | ||||
| @@ -182,7 +171,7 @@ function identify_modifier_markdown() { | ||||
| 		'authors' => 'Michel Fortin and John Gruber', | ||||
| 		'licence' => 'GPL', | ||||
| 		'version' => MARKDOWNEXTRA_VERSION, | ||||
| 		'help' => '<a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://www.michelf.com/projects/php-markdown/">More...</a>', | ||||
| 		'help' => '<a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://michelf.com/projects/php-markdown/">More...</a>', | ||||
| 		); | ||||
| } | ||||
|  | ||||
| @@ -367,14 +356,18 @@ class Markdown_Parser { | ||||
| 							  [ ]* | ||||
| 							  \n?				# maybe *one* newline | ||||
| 							  [ ]* | ||||
| 							<?(\S+?)>?			# url = $2 | ||||
| 							(?: | ||||
| 							  <(.+?)>			# url = $2 | ||||
| 							| | ||||
| 							  (\S+?)			# url = $3 | ||||
| 							) | ||||
| 							  [ ]* | ||||
| 							  \n?				# maybe one newline | ||||
| 							  [ ]* | ||||
| 							(?: | ||||
| 								(?<=\s)			# lookbehind for whitespace | ||||
| 								["(] | ||||
| 								(.*?)			# title = $3 | ||||
| 								(.*?)			# title = $4 | ||||
| 								[")] | ||||
| 								[ ]* | ||||
| 							)?	# title is optional | ||||
| @@ -386,8 +379,9 @@ class Markdown_Parser { | ||||
| 	} | ||||
| 	function _stripLinkDefinitions_callback($matches) { | ||||
| 		$link_id = strtolower($matches[1]); | ||||
| 		$this->urls[$link_id] = $matches[2]; | ||||
| 		$this->titles[$link_id] =& $matches[3]; | ||||
| 		$url = $matches[2] == '' ? $matches[3] : $matches[2]; | ||||
| 		$this->urls[$link_id] = $url; | ||||
| 		$this->titles[$link_id] =& $matches[4]; | ||||
| 		return ''; # String that will replace the block | ||||
| 	} | ||||
|  | ||||
| @@ -412,7 +406,7 @@ class Markdown_Parser { | ||||
| 		# | ||||
| 		$block_tags_a_re = 'ins|del'; | ||||
| 		$block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'. | ||||
| 						   'script|noscript|form|fieldset|iframe|math|textarea'; | ||||
| 						   'script|noscript|form|fieldset|iframe|math'; | ||||
|  | ||||
| 		# Regular expression for the content of a block tag. | ||||
| 		$nested_tags_level = 4; | ||||
| @@ -710,37 +704,37 @@ class Markdown_Parser { | ||||
| 				('.$this->nested_brackets_re.')	# link text = $2 | ||||
| 			  \] | ||||
| 			  \(			# literal paren | ||||
| 				[ ]* | ||||
| 				[ \n]* | ||||
| 				(?: | ||||
| 					<(\S*)>	# href = $3 | ||||
| 					<(.+?)>	# href = $3 | ||||
| 				| | ||||
| 					('.$this->nested_url_parenthesis_re.')	# href = $4 | ||||
| 				) | ||||
| 				[ ]* | ||||
| 				[ \n]* | ||||
| 				(			# $5 | ||||
| 				  ([\'"])	# quote char = $6 | ||||
| 				  (.*?)		# Title = $7 | ||||
| 				  \6		# matching quote | ||||
| 				  [ ]*	# ignore any spaces/tabs between closing quote and ) | ||||
| 				  [ \n]*	# ignore any spaces/tabs between closing quote and ) | ||||
| 				)?			# title is optional | ||||
| 			  \) | ||||
| 			) | ||||
| 			}xs', | ||||
| 			array(&$this, '_DoAnchors_inline_callback'), $text); | ||||
| 			array(&$this, '_doAnchors_inline_callback'), $text); | ||||
|  | ||||
| 		# | ||||
| 		# Last, handle reference-style shortcuts: [link text] | ||||
| 		# These must come last in case you've also got [link test][1] | ||||
| 		# or [link test](/foo) | ||||
| 		# These must come last in case you've also got [link text][1] | ||||
| 		# or [link text](/foo) | ||||
| 		# | ||||
| //		$text = preg_replace_callback('{ | ||||
| //			(					# wrap whole match in $1 | ||||
| //			  \[ | ||||
| //				([^\[\]]+)		# link text = $2; can\'t contain [ or ] | ||||
| //			  \] | ||||
| //			) | ||||
| //			}xs', | ||||
| //			array(&$this, '_doAnchors_reference_callback'), $text); | ||||
| 		$text = preg_replace_callback('{ | ||||
| 			(					# wrap whole match in $1 | ||||
| 			  \[ | ||||
| 				([^\[\]]+)		# link text = $2; can\'t contain [ or ] | ||||
| 			  \] | ||||
| 			) | ||||
| 			}xs', | ||||
| 			array(&$this, '_doAnchors_reference_callback'), $text); | ||||
|  | ||||
| 		$this->in_anchor = false; | ||||
| 		return $text; | ||||
| @@ -835,18 +829,18 @@ class Markdown_Parser { | ||||
| 			  \] | ||||
| 			  \s?			# One optional whitespace character | ||||
| 			  \(			# literal paren | ||||
| 				[ ]* | ||||
| 				[ \n]* | ||||
| 				(?: | ||||
| 					<(\S*)>	# src url = $3 | ||||
| 				| | ||||
| 					('.$this->nested_url_parenthesis_re.')	# src url = $4 | ||||
| 				) | ||||
| 				[ ]* | ||||
| 				[ \n]* | ||||
| 				(			# $5 | ||||
| 				  ([\'"])	# quote char = $6 | ||||
| 				  (.*?)		# title = $7 | ||||
| 				  \6		# matching quote | ||||
| 				  [ ]* | ||||
| 				  [ \n]* | ||||
| 				)?			# title is optional | ||||
| 			  \) | ||||
| 			) | ||||
| @@ -956,22 +950,25 @@ class Markdown_Parser { | ||||
|  | ||||
| 		# Re-usable patterns to match list item bullets and number markers: | ||||
| 		$marker_ul_re  = '[*+-]'; | ||||
| 		$marker_ol_re  = '\d+[.]'; | ||||
| 		$marker_ol_re  = '\d+[\.]'; | ||||
| 		$marker_any_re = "(?:$marker_ul_re|$marker_ol_re)"; | ||||
|  | ||||
| 		$markers_relist = array($marker_ul_re, $marker_ol_re); | ||||
| 		$markers_relist = array( | ||||
| 			$marker_ul_re => $marker_ol_re, | ||||
| 			$marker_ol_re => $marker_ul_re, | ||||
| 			); | ||||
|  | ||||
| 		foreach ($markers_relist as $marker_re) { | ||||
| 		foreach ($markers_relist as $marker_re => $other_marker_re) { | ||||
| 			# Re-usable pattern to match any entirel ul or ol list: | ||||
| 			$whole_list_re = ' | ||||
| 				(								# $1 = whole list | ||||
| 				  (								# $2 | ||||
| 					[ ]{0,'.$less_than_tab.'} | ||||
| 					('.$marker_re.')			# $3 = first list item marker | ||||
| 					([ ]{0,'.$less_than_tab.'})	# $3 = number of spaces | ||||
| 					('.$marker_re.')			# $4 = first list item marker | ||||
| 					[ ]+ | ||||
| 				  ) | ||||
| 				  (?s:.+?) | ||||
| 				  (								# $4 | ||||
| 				  (								# $5 | ||||
| 					  \z | ||||
| 					| | ||||
| 					  \n{2,} | ||||
| @@ -980,6 +977,12 @@ class Markdown_Parser { | ||||
| 						[ ]* | ||||
| 						'.$marker_re.'[ ]+ | ||||
| 					  ) | ||||
| 					| | ||||
| 					  (?=						# Lookahead for another kind of list | ||||
| 					    \n | ||||
| 						\3						# Must have the same indentation | ||||
| 						'.$other_marker_re.'[ ]+ | ||||
| 					  ) | ||||
| 				  ) | ||||
| 				) | ||||
| 			'; // mx | ||||
| @@ -1008,11 +1011,11 @@ class Markdown_Parser { | ||||
| 	function _doLists_callback($matches) { | ||||
| 		# Re-usable patterns to match list item bullets and number markers: | ||||
| 		$marker_ul_re  = '[*+-]'; | ||||
| 		$marker_ol_re  = '\d+[.]'; | ||||
| 		$marker_ol_re  = '\d+[\.]'; | ||||
| 		$marker_any_re = "(?:$marker_ul_re|$marker_ol_re)"; | ||||
| 		 | ||||
| 		$list = $matches[1]; | ||||
| 		$list_type = preg_match("/$marker_ul_re/", $matches[3]) ? "ul" : "ol"; | ||||
| 		$list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol"; | ||||
| 		 | ||||
| 		$marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re ); | ||||
| 		 | ||||
| @@ -1138,25 +1141,25 @@ class Markdown_Parser { | ||||
|  | ||||
|  | ||||
| 	var $em_relist = array( | ||||
| 		''  => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S)(?![.,:;]\s)', | ||||
| 		'*' => '(?<=\S)(?<!\*)\*(?!\*)', | ||||
| 		'_' => '(?<=\S)(?<!_)_(?!_)', | ||||
| 		''  => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![\.,:;]\s)', | ||||
| 		'*' => '(?<=\S|^)(?<!\*)\*(?!\*)', | ||||
| 		'_' => '(?<=\S|^)(?<!_)_(?!_)', | ||||
| 		); | ||||
| 	var $strong_relist = array( | ||||
| 		''   => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S)(?![.,:;]\s)', | ||||
| 		'**' => '(?<=\S)(?<!\*)\*\*(?!\*)', | ||||
| 		'__' => '(?<=\S)(?<!_)__(?!_)', | ||||
| 		''   => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![\.,:;]\s)', | ||||
| 		'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)', | ||||
| 		'__' => '(?<=\S|^)(?<!_)__(?!_)', | ||||
| 		); | ||||
| 	var $em_strong_relist = array( | ||||
| 		''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S)(?![.,:;]\s)', | ||||
| 		'***' => '(?<=\S)(?<!\*)\*\*\*(?!\*)', | ||||
| 		'___' => '(?<=\S)(?<!_)___(?!_)', | ||||
| 		''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![\.,:;]\s)', | ||||
| 		'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)', | ||||
| 		'___' => '(?<=\S|^)(?<!_)___(?!_)', | ||||
| 		); | ||||
| 	var $em_strong_prepared_relist; | ||||
| 	 | ||||
| 	function prepareItalicsAndBold() { | ||||
| 	# | ||||
| 	# Prepare regular expressions for seraching emphasis tokens in any | ||||
| 	# Prepare regular expressions for searching emphasis tokens in any | ||||
| 	# context. | ||||
| 	# | ||||
| 		foreach ($this->em_relist as $em => $em_re) { | ||||
| @@ -1191,7 +1194,7 @@ class Markdown_Parser { | ||||
| 			$token_re = $this->em_strong_prepared_relist["$em$strong"]; | ||||
| 			 | ||||
| 			# | ||||
| 			# Each loop iteration seach for the next emphasis token. | ||||
| 			# Each loop iteration search for the next emphasis token.  | ||||
| 			# Each token is then passed to handleSpanToken. | ||||
| 			# | ||||
| 			$parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE); | ||||
| @@ -1324,7 +1327,7 @@ class Markdown_Parser { | ||||
| 		# These leading spaces cause problem with <pre> content,  | ||||
| 		# so we need to fix that: | ||||
| 		$bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx',  | ||||
| 			array(&$this, '_DoBlockQuotes_callback2'), $bq); | ||||
| 			array(&$this, '_doBlockQuotes_callback2'), $bq); | ||||
|  | ||||
| 		return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n"; | ||||
| 	} | ||||
| @@ -1446,9 +1449,17 @@ class Markdown_Parser { | ||||
| 			< | ||||
| 			(?:mailto:)? | ||||
| 			( | ||||
| 				[-.\w\x80-\xFF]+ | ||||
| 				(?: | ||||
| 					[-!#$%&\'*+/=?^_`.{|}~\w\x80-\xFF]+ | ||||
| 				| | ||||
| 					".*?" | ||||
| 				) | ||||
| 				\@ | ||||
| 				(?: | ||||
| 					[-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+ | ||||
| 				| | ||||
| 					\[[\d.a-fA-F:]+\]	# IPv4 & IPv6 | ||||
| 				) | ||||
| 			) | ||||
| 			> | ||||
| 			}xi', | ||||
| @@ -1676,15 +1687,6 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 	var $fn_link_class = MARKDOWN_FN_LINK_CLASS; | ||||
| 	var $fn_backlink_class = MARKDOWN_FN_BACKLINK_CLASS; | ||||
| 	 | ||||
| 	var $el_enable = MARKDOWN_EL_ENABLE; | ||||
| 	var $el_local_domain = MARKDOWN_EL_LOCAL_DOMAIN; | ||||
| 	var $el_new_window = MARKDOWN_EL_NEW_WINDOW; | ||||
| 	var $el_css_class = MARKDOWN_EL_CSS_CLASS; | ||||
|  | ||||
| 	var $ha_enable = MARKDOWN_HA_ENABLE; | ||||
| 	var $ha_class = MARKDOWN_HA_CLASS; | ||||
| 	var $ha_text = MARKDOWN_HA_TEXT; | ||||
|  | ||||
| 	# Predefined abbreviations. | ||||
| 	var $predef_abbr = array(); | ||||
|  | ||||
| @@ -1697,10 +1699,6 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 		# initialize the table. | ||||
| 		$this->escape_chars .= ':|'; | ||||
| 		 | ||||
| 		if ($this->el_local_domain === null) { | ||||
| 			$this->el_local_domain = $_SERVER['SERVER_NAME']; | ||||
| 		} | ||||
|  | ||||
| 		# Insert extra document, block, and span transformations.  | ||||
| 		# Parent constructor will do the sorting. | ||||
| 		$this->document_gamut += array( | ||||
| @@ -1879,7 +1877,7 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 				'. ( !$span ? ' # If not in span. | ||||
| 				| | ||||
| 					# Indented code block | ||||
| 					(?> ^[ ]*\n? | \n[ ]*\n ) | ||||
| 					(?: ^[ ]*\n | ^ | \n[ ]*\n ) | ||||
| 					[ ]{'.($indent+4).'}[^\n]* \n | ||||
| 					(?> | ||||
| 						(?: [ ]{'.($indent+4).'}[^\n]* | [ ]* ) \n | ||||
| @@ -1887,7 +1885,7 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 				| | ||||
| 					# Fenced code block marker | ||||
| 					(?> ^ | \n ) | ||||
| 					[ ]{'.($indent).'}~~~+[ ]*\n | ||||
| 					[ ]{0,'.($indent).'}~~~+[ ]*\n | ||||
| 				' : '' ). ' # End (if not is span). | ||||
| 				) | ||||
| 			}xs'; | ||||
| @@ -1949,18 +1947,12 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 				} | ||||
| 			} | ||||
| 			# | ||||
| 			# Check for: Indented code block or fenced code block marker. | ||||
| 			# Check for: Fenced code block marker. | ||||
| 			# | ||||
| 			else if ($tag{0} == "\n" || $tag{0} == "~") { | ||||
| 				if ($tag{1} == "\n" || $tag{1} == " ") { | ||||
| 					# Indented code block: pass it unchanged, will be handled | ||||
| 					# later. | ||||
| 					$parsed .= $tag; | ||||
| 				} | ||||
| 				else { | ||||
| 			else if (preg_match('{^\n?[ ]{0,'.($indent+3).'}~}', $tag)) { | ||||
| 				# Fenced code block marker: find matching end marker. | ||||
| 				$tag_re = preg_quote(trim($tag)); | ||||
| 					if (preg_match('{^(?>.*\n)+?'.$tag_re.' *\n}', $text, | ||||
| 				if (preg_match('{^(?>.*\n)+?[ ]{0,'.($indent).'}'.$tag_re.'[ ]*\n}', $text,  | ||||
| 					$matches))  | ||||
| 				{ | ||||
| 					# End marker found: pass text unchanged until marker. | ||||
| @@ -1972,6 +1964,13 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 					$parsed .= $tag; | ||||
| 				} | ||||
| 			} | ||||
| 			# | ||||
| 			# Check for: Indented code block. | ||||
| 			# | ||||
| 			else if ($tag{0} == "\n" || $tag{0} == " ") { | ||||
| 				# Indented code block: pass it unchanged, will be handled  | ||||
| 				# later. | ||||
| 				$parsed .= $tag; | ||||
| 			} | ||||
| 			# | ||||
| 			# Check for: Opening Block level tag or | ||||
| @@ -2220,81 +2219,6 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 		return $this->hashPart($text, 'C'); | ||||
| 	} | ||||
|  | ||||
| 	function _doAnchors_inline_callback($matches) { | ||||
| 		// $whole_match	=  $matches[1]; | ||||
| 		$link_text		=  $this->runSpanGamut($matches[2]); | ||||
| 		$url			=  $matches[3] == '' ? $matches[4] : $matches[3]; | ||||
| 		$title			=& $matches[7]; | ||||
|  | ||||
| 		$url = $this->encodeAttribute($url); | ||||
|  | ||||
| 		$result = "<a href=\"$url\""; | ||||
| 		if (isset($title)) { | ||||
| 			$title = $this->encodeAttribute($title); | ||||
| 			$result .=  " title=\"$title\""; | ||||
| 		} | ||||
|  | ||||
| 		if ($this->el_enable && preg_match('/^https?\:\/\//', $url) && !preg_match('/^https?\:\/\/'.$this->el_local_domain.'/', $url)) { | ||||
| 			if ($this->el_new_window) { | ||||
| 				$result .= ' target="_blank"'; | ||||
| 			} | ||||
|  | ||||
| 			if ($this->el_css_class) { | ||||
| 				$result .= ' class="'.$this->el_css_class.'"'; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		$link_text = $this->runSpanGamut($link_text); | ||||
| 		$result .= ">$link_text</a>"; | ||||
|  | ||||
| 		return $this->hashPart($result); | ||||
| 	} | ||||
|  | ||||
| 	function _doAnchors_reference_callback($matches) { | ||||
| 		$whole_match =  $matches[1]; | ||||
| 		$link_text   =  $matches[2]; | ||||
| 		$link_id     =& $matches[3]; | ||||
| 		$result      =  ''; | ||||
|  | ||||
| 		if ($link_id == "") { | ||||
| 			# for shortcut links like [this][] or [this]. | ||||
| 			$link_id = $link_text; | ||||
| 		} | ||||
|  | ||||
| 		# lower-case and turn embedded newlines into spaces | ||||
| 		$link_id = strtolower($link_id); | ||||
| 		$link_id = preg_replace('{[ ]?\n}', ' ', $link_id); | ||||
|  | ||||
| 		if (isset($this->urls[$link_id])) { | ||||
| 			$url = $this->urls[$link_id]; | ||||
| 			$url = $this->encodeAttribute($url); | ||||
|  | ||||
| 			$result = "<a href=\"$url\""; | ||||
| 			if ( isset( $this->titles[$link_id] ) ) { | ||||
| 				$title = $this->titles[$link_id]; | ||||
| 				$title = $this->encodeAttribute($title); | ||||
| 				$result .=  " title=\"$title\""; | ||||
| 			} | ||||
|  | ||||
| 			if ($this->el_enable && preg_match('/^https?\:\/\//', $url) && !preg_match('/^https?\:\/\/'.$this->el_local_domain.'/', $url)) { | ||||
| 				if ($this->el_new_window) { | ||||
| 					$result .= ' target="_blank"'; | ||||
| 				} | ||||
|  | ||||
| 				if ($this->el_css_class) { | ||||
| 					$result .= ' class="'.$this->el_css_class.'"'; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			$link_text = $this->runSpanGamut($link_text); | ||||
| 			$result .= ">$link_text</a>"; | ||||
| 			$result = $this->hashPart($result); | ||||
| 		} | ||||
| 		else { | ||||
| 			$result = $whole_match; | ||||
| 		} | ||||
| 		return $result; | ||||
| 	} | ||||
|  | ||||
| 	function doHeaders($text) { | ||||
| 	# | ||||
| @@ -2345,36 +2269,15 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 			return $matches[0]; | ||||
| 		$level = $matches[3]{0} == '=' ? 1 : 2; | ||||
| 		$attr  = $this->_doHeaders_attr($id =& $matches[2]); | ||||
| 		$body  = $this->runSpanGamut($matches[1]); | ||||
| 		$body  = $this->_doHeaders_selflink($id, $body); | ||||
|  | ||||
| 		$block = "<h$level$attr>$body</h$level>"; | ||||
| 		$block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>"; | ||||
| 		return "\n" . $this->hashBlock($block) . "\n\n"; | ||||
| 	} | ||||
| 	function _doHeaders_callback_atx($matches) { | ||||
| 		$level = strlen($matches[1]); | ||||
| 		$attr  = $this->_doHeaders_attr($id =& $matches[3]); | ||||
| 		$body  = $this->runSpanGamut($matches[2]); | ||||
| 		$body = $this->_doHeaders_selflink($id, $body); | ||||
|  | ||||
| 		$block = "<h$level$attr>$body</h$level>"; | ||||
| 		$block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>"; | ||||
| 		return "\n" . $this->hashBlock($block) . "\n\n"; | ||||
| 	} | ||||
| 	function _doHeaders_selflink($id, $body) { | ||||
| 		if (!empty($id)) { | ||||
| 			$link = '<a href="#'.$id.'"'; | ||||
|  | ||||
| 			if ($this->ha_class) { | ||||
| 				$link .= ' class="'.$this->ha_class.'"'; | ||||
| 			} | ||||
|  | ||||
| 			$link .= '>'.$this->ha_text.'</a>'; | ||||
|  | ||||
| 			$body .= $link; | ||||
| 		} | ||||
|  | ||||
| 		return $body; | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	function doTables($text) { | ||||
| @@ -2596,7 +2499,7 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 			(?= \n+ 						# stop at next definition mark, | ||||
| 				(?:							# next term or end of text | ||||
| 					[ ]{0,'.$less_than_tab.'} [:][ ]	| | ||||
| 					<dt | \z | ||||
| 					<dt> | \z | ||||
| 				)						 | ||||
| 			)					 | ||||
| 			}xm', | ||||
| @@ -2605,24 +2508,11 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 		return $list_str; | ||||
| 	} | ||||
| 	function _processDefListItems_callback_dt($matches) { | ||||
| 		$anchor_regexp = '/\{\#([-_:a-zA-Z0-9]+)\}/'; | ||||
| 		$terms = explode("\n", trim($matches[1])); | ||||
| 		$text = ''; | ||||
| 		$id = array(); | ||||
|  | ||||
| 		foreach ($terms as $term) { | ||||
| 			$id = ''; | ||||
| 			if (preg_match($anchor_regexp, $term, $id) > 0) { | ||||
| 				$term = preg_replace($anchor_regexp, '', $term); | ||||
| 				$id = ' id="'.trim($id[1]).'"'; | ||||
| 			} | ||||
|  | ||||
| 			if (count($id) === 0) { | ||||
| 				$id = ''; | ||||
| 			} | ||||
|  | ||||
| 			$term = $this->runSpanGamut(trim($term)); | ||||
| 			$text .= "\n<dt$id>" . $term . "</dt>"; | ||||
| 			$text .= "\n<dt>" . $term . "</dt>"; | ||||
| 		} | ||||
| 		return $text . "\n"; | ||||
| 	} | ||||
| @@ -2698,19 +2588,19 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 	# work in the middle of a word. | ||||
| 	# | ||||
| 	var $em_relist = array( | ||||
| 		''  => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S)(?![.,:;]\s)', | ||||
| 		'*' => '(?<=\S)(?<!\*)\*(?!\*)', | ||||
| 		'_' => '(?<=\S)(?<!_)_(?![a-zA-Z0-9_])', | ||||
| 		''  => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S|$)(?![\.,:;]\s)', | ||||
| 		'*' => '(?<=\S|^)(?<!\*)\*(?!\*)', | ||||
| 		'_' => '(?<=\S|^)(?<!_)_(?![a-zA-Z0-9_])', | ||||
| 		); | ||||
| 	var $strong_relist = array( | ||||
| 		''   => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S)(?![.,:;]\s)', | ||||
| 		'**' => '(?<=\S)(?<!\*)\*\*(?!\*)', | ||||
| 		'__' => '(?<=\S)(?<!_)__(?![a-zA-Z0-9_])', | ||||
| 		''   => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S|$)(?![\.,:;]\s)', | ||||
| 		'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)', | ||||
| 		'__' => '(?<=\S|^)(?<!_)__(?![a-zA-Z0-9_])', | ||||
| 		); | ||||
| 	var $em_strong_relist = array( | ||||
| 		''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S)(?![.,:;]\s)', | ||||
| 		'***' => '(?<=\S)(?<!\*)\*\*\*(?!\*)', | ||||
| 		'___' => '(?<=\S)(?<!_)___(?![a-zA-Z0-9_])', | ||||
| 		''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S|$)(?![\.,:;]\s)', | ||||
| 		'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)', | ||||
| 		'___' => '(?<=\S|^)(?<!_)___(?![a-zA-Z0-9_])', | ||||
| 		); | ||||
|  | ||||
|  | ||||
| @@ -2808,7 +2698,7 @@ class MarkdownExtra_Parser extends Markdown_Parser { | ||||
| 		if (!empty($this->footnotes_ordered)) { | ||||
| 			$text .= "\n\n"; | ||||
| 			$text .= "<div class=\"footnotes\">\n"; | ||||
| 			$text .= "<hr". MARKDOWN_EMPTY_ELEMENT_SUFFIX ."\n"; | ||||
| 			$text .= "<hr". $this->empty_element_suffix ."\n"; | ||||
| 			$text .= "<ol>\n\n"; | ||||
| 			 | ||||
| 			$attr = " rev=\"footnote\""; | ||||
| @@ -3002,8 +2892,8 @@ Copyright and License | ||||
| --------------------- | ||||
|  | ||||
| PHP Markdown & Extra   | ||||
| Copyright (c) 2004-2008 Michel Fortin | ||||
| <http://www.michelf.com/> | ||||
| Copyright (c) 2004-2009 Michel Fortin   | ||||
| <http://michelf.com/>   | ||||
| All rights reserved. | ||||
|  | ||||
| Based on Markdown   | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
|  | ||||
| Lieber $username, | ||||
| Liebe/r $username, | ||||
|  | ||||
| großartige Neuigkeiten... '$fn' von '$dfrn_url' hat deine Kontaktaufnahme auf | ||||
| '$sitename' bestätigt. | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
|  | ||||
| Lieber $username, | ||||
| Liebe/r $username, | ||||
|  | ||||
| '$fn' von '$dfrn_url' hat deine Kontaktanfrage auf '$sitename' bestätigt. | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
|  | ||||
| Lieber $username, | ||||
| Liebe/r $username, | ||||
| wir haben gerade eine Anfrage erhalten dein Passwort auf $sitename zu ändern. | ||||
| Um diese Anfrage zu bestätigen folge bitte dem Bestätigungslink oder kopiere | ||||
| ihn in die Adresszeile deines Browsers. | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
|  | ||||
| Lieber $username, | ||||
| Liebe/r $username, | ||||
| dein Passwort wurde wie gewünscht geändert. Bitte hebe diese Informationen | ||||
| für deine Unterlagen auf (oder ändere das Passwort augenblicklich in etwas | ||||
| das du dir merken kannst). | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
|  | ||||
| Lieber $username, | ||||
| Liebe/r $username, | ||||
| danke für die Registrierung bei $sitename. Dein neuer Account wurde angelegt. | ||||
| Die Anmeldedetails sind die Folgenden. | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
|  | ||||
| Lieber $myname, | ||||
| Liebe/r $myname, | ||||
|  | ||||
| du hast gerade eine Kontaktanfrage von '$requestor' auf $sitename erhalten. | ||||
|  | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								view/theme/vier/calendar.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								view/theme/vier/calendar.png
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.7 KiB | 
| @@ -122,6 +122,17 @@ | ||||
| .next           { background-position: -110px -60px;} | ||||
| .tagged     { background-position: -130px -60px;} | ||||
|  | ||||
| .attachtype { | ||||
|         display: block; width: 20px; height: 23px; | ||||
|         background-image: url('../../../images/content-types.png'); | ||||
| } | ||||
|  | ||||
| .type-video { background-position: 0px 0px; } | ||||
| .type-image { background-position: -20px 0px; } | ||||
| .type-audio { background-position: -40px 0px; } | ||||
| .type-text  { background-position: -60px 0px; } | ||||
| .type-unkn  { background-position: -80px 0px; } | ||||
|  | ||||
| .icon.drop, .icon.drophide { | ||||
|  float: left; | ||||
| } | ||||
| @@ -200,9 +211,9 @@ | ||||
| .icon.s16.delete { | ||||
|   background-image: url("../../../images/icons/16/delete.png"); | ||||
| } | ||||
| .icon.s16.edit { | ||||
| /*.icon.s16.edit { | ||||
|   background-image: url("../../../images/icons/16/edit.png"); | ||||
| } | ||||
| }*/ | ||||
| .icon.s16.star { | ||||
|   background-image: url("../../../images/icons/16/star.png"); | ||||
| } | ||||
| @@ -913,7 +924,7 @@ section { | ||||
| } | ||||
| .wall-item-container .wall-item-actions-tools { | ||||
|   float: right; | ||||
|   width: 60px; | ||||
|   width: 80px; | ||||
| } | ||||
| .wall-item-container .wall-item-actions-tools a { | ||||
|   float: right; | ||||
| @@ -1028,7 +1039,13 @@ section { | ||||
| /* contacts menu */ | ||||
| .contact-photo-wrapper { | ||||
|   position: relative; | ||||
|   width: 80px; | ||||
| } | ||||
|  | ||||
| .contact-photo-wrapper.wwto { | ||||
|   width: 25px; | ||||
| } | ||||
|  | ||||
| .contact-photo { | ||||
|   width: 48px; | ||||
|   height: 48px; | ||||
| @@ -1390,9 +1407,34 @@ ul.tabs li .active { | ||||
| .field.radio .field_help { | ||||
|   margin-left: 0px; | ||||
| } | ||||
| #profile-edit-links li { | ||||
|   list-style: none; | ||||
|  | ||||
| #profile-edit-links-end { | ||||
|         clear: both; | ||||
|         margin-bottom: 15px; | ||||
| } | ||||
|  | ||||
| #profile-edit-links ul { margin: 20px; padding-bottom: 20px; list-style: none; } | ||||
|  | ||||
| #profile-edit-links li { | ||||
|   float: left; | ||||
|   list-style: none; | ||||
|   margin-left: 10px; | ||||
| } | ||||
|  | ||||
| .profile-edit-side-div { | ||||
|   display: none; | ||||
| } | ||||
|  | ||||
| #register-form label, | ||||
| #profile-edit-form label { | ||||
|         width: 300px; float: left; | ||||
| } | ||||
|  | ||||
| .required { | ||||
|   display: inline; | ||||
|   color: #B20202; | ||||
| } | ||||
|  | ||||
| /* oauth */ | ||||
| .oauthapp { | ||||
|   height: auto; | ||||
| @@ -1449,3 +1491,433 @@ footer { | ||||
|   height: 100px; | ||||
|   display: table-row; | ||||
| } | ||||
|  | ||||
| blockquote { | ||||
|     border-left: 1px solid #D2D2D2; | ||||
|     padding-left: 9px; | ||||
|     margin: 0 0 0 .8ex; | ||||
| } | ||||
|  | ||||
| /* ================== */ | ||||
| /* = Contacts Block = */ | ||||
| /* ================== */ | ||||
|  | ||||
| .contact-block-img { | ||||
|         width: 42px; | ||||
|         height: 42px; | ||||
|         padding-right: 2px; | ||||
| } | ||||
| .contact-block-div { | ||||
|         float: left; | ||||
| } | ||||
|  | ||||
| .contact-block-textdiv { width: 150px; height: 34px; float: left; } | ||||
| #contact-block-end { clear: both; }  | ||||
|  | ||||
| #group-edit-wrapper { | ||||
|         margin-bottom: 10px; | ||||
| } | ||||
|  | ||||
| #group-members-end { | ||||
|         clear: both; | ||||
| } | ||||
|  | ||||
| /* | ||||
| #group-separator, | ||||
| #prof-separator { display: none;} | ||||
| */ | ||||
|  | ||||
| #prvmail-wrapper, .mail-conv-detail, .mail-list-detail { | ||||
|         position: relative; | ||||
|         width: 500px; | ||||
|         padding: 50px; | ||||
|         margin: 20px auto; | ||||
|         background-color: #fff; | ||||
|         -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); | ||||
|         -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); | ||||
|         box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); | ||||
| } | ||||
|  | ||||
| #prvmail-wrapper:before, #prvmail-wrapper:after, .mail-conv-detail:before, .mail-conv-detail:after, .mail-list-detail:before, .mail-list-detail:after { | ||||
|         position: absolute; | ||||
|         width: 40%; | ||||
|         height: 10px; | ||||
|         content: ' '; | ||||
|         left: 12px; | ||||
|         bottom: 12px; | ||||
|         background: transparent; | ||||
|         -webkit-transform: skew(-5deg) rotate(-5deg); | ||||
|         -moz-transform: skew(-5deg) rotate(-5deg); | ||||
|         -ms-transform: skew(-5deg) rotate(-5deg); | ||||
|         -o-transform: skew(-5deg) rotate(-5deg); | ||||
|         transform: skew(-5deg) rotate(-5deg); | ||||
|         -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); | ||||
|         -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); | ||||
|         box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); | ||||
|         z-index: -1; | ||||
| } | ||||
|  | ||||
| #prvmail-wrapper:after, .mail-conv-detail:after, .mail-list-detail:after { | ||||
|         left: auto; | ||||
|         right: 12px; | ||||
|         -webkit-transform: skew(5deg) rotate(5deg); | ||||
|         -moz-transform: skew(5deg) rotate(5deg); | ||||
|         -ms-transform: skew(5deg) rotate(5deg); | ||||
|         -o-transform: skew(5deg) rotate(5deg); | ||||
|         transform: skew(5deg) rotate(5deg); | ||||
| } | ||||
|  | ||||
| .prvmail-text { | ||||
|         width: 100%; | ||||
| } | ||||
|  | ||||
| .mail-list-outside-wrapper { | ||||
|         margin-top: 20px; | ||||
| } | ||||
|  | ||||
| .mail-list-sender { | ||||
|         float: left; | ||||
|         padding: 5px; | ||||
|         background-color: #efefef; | ||||
|         border: 2px dotted #eeeeee; | ||||
|         -moz-box-shadow: 3px 3px 4px #959494; | ||||
|         -webkit-box-shadow: 3px 3px 4px #959494; | ||||
|         box-shadow: 3px 3px 4px #959494; | ||||
| } | ||||
|  | ||||
| .mail-list-detail { | ||||
|         margin-left: 100px; | ||||
|         width: 300px; | ||||
|         min-height: 70px; | ||||
|         padding: 20px; | ||||
|         padding-top:10px; | ||||
|         border: 1px solid #dddddd; | ||||
|         } | ||||
|          | ||||
| .mail-list-sender-name { | ||||
|         font-size: 1.1em; | ||||
|         display: inline; | ||||
|         font-variant:small-caps; | ||||
| } | ||||
|  | ||||
| .mail-list-date { | ||||
|         float: right; | ||||
|         clear: block; | ||||
|         display: inline; | ||||
|         font-size: 0.9em; | ||||
|         padding-left: 10px; | ||||
|         font-stretch:ultra-condensed; | ||||
|         font-variant:small-caps; | ||||
| } | ||||
|  | ||||
| .mail-list-subject { | ||||
|         clear: block; | ||||
|         font-size: 1.2em; | ||||
|         padding-top: 20px; | ||||
|         padding-right: 50px; | ||||
| } | ||||
|  | ||||
| .mail-list-subject a { | ||||
|         color: #626262; | ||||
| } | ||||
|  | ||||
| .mail-list-delete-wrapper { float: right;} | ||||
| .mail-list-outside-wrapper-end { | ||||
|         clear: both; | ||||
| } | ||||
|  | ||||
| .mail-conv-outside-wrapper { | ||||
|         margin-bottom: 10px; | ||||
| } | ||||
|  | ||||
| .mail-conv-sender {float: left; margin: 0px 5px 5px 0px; } | ||||
| .mail-conv-sender-photo { | ||||
|         width: 64px; | ||||
|         height: 64px; | ||||
| } | ||||
|  | ||||
| .mail-conv-sender-name { float: left; font-variant:small-caps; font-style: bold; } | ||||
| .mail-conv-date { float: right; font-variant:small-caps; } | ||||
| .mail-conv-subject { clear: right; font-weight: bold; font-size: 1.2em } | ||||
| .mail-conv-body { | ||||
|         clear: both; | ||||
| } | ||||
|  | ||||
| .mail-conv-detail { | ||||
|         width: 500px; | ||||
|         padding: 30px; | ||||
|         padding-bottom: 10px; | ||||
|         margin-left: 20px; | ||||
|         margin-bottom: 0px; | ||||
|         vertical-align: middle; | ||||
|         margin: auto; | ||||
|         border: 1px solid #dddddd; | ||||
| } | ||||
| .mail-conv-break { display: none; border: none;} | ||||
| .mail-conv-delete-wrapper { padding-top: 10px; width: 510px; text-align: right; } | ||||
|  | ||||
| /* ========== */ | ||||
| /* = Events = */ | ||||
| /* ========== */ | ||||
|   | ||||
| .clear { clear: both; } | ||||
| .eventcal { | ||||
| 	float: left; | ||||
| 	font-size: 20px; | ||||
| 	padding: 20px; | ||||
| } | ||||
|  | ||||
| .vevent { | ||||
| 	position: relative; | ||||
| 	width: 400px; | ||||
| 	padding: 20px; | ||||
| 	padding-top: 10px; | ||||
| 	margin: 0 0px; | ||||
| 	margin-bottom: 10px; | ||||
| 	background-color: #fff; | ||||
| 	-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); | ||||
| 	-moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); | ||||
| 	box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); | ||||
| } | ||||
|  | ||||
| .vevent:before, .vevent:after { | ||||
| 	position: absolute; | ||||
| 	width: 40%; | ||||
| 	height: 10px; | ||||
| 	content: ' '; | ||||
| 	left: 12px; | ||||
| 	bottom: 12px; | ||||
| 	background: transparent; | ||||
| 	-webkit-transform: skew(-5deg) rotate(-5deg); | ||||
| 	-moz-transform: skew(-5deg) rotate(-5deg); | ||||
| 	-ms-transform: skew(-5deg) rotate(-5deg); | ||||
| 	-o-transform: skew(-5deg) rotate(-5deg); | ||||
| 	transform: skew(-5deg) rotate(-5deg); | ||||
| 	-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); | ||||
| 	-moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); | ||||
| 	box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); | ||||
| 	z-index: -1; | ||||
| } | ||||
|  | ||||
| .vevent:after { | ||||
| 	left: auto; | ||||
| 	right: 12px; | ||||
| 	-webkit-transform: skew(5deg) rotate(5deg); | ||||
| 	-moz-transform: skew(5deg) rotate(5deg); | ||||
| 	-ms-transform: skew(5deg) rotate(5deg); | ||||
| 	-o-transform: skew(5deg) rotate(5deg); | ||||
| 	transform: skew(5deg) rotate(5deg); | ||||
| } | ||||
|  | ||||
| .vevent .event-description { | ||||
| 	margin-left: 10px; | ||||
| 	margin-right: 10px; | ||||
| 	text-align:center; | ||||
| 	font-size: 1.2em; | ||||
| 	font-weight:bolder; | ||||
| } | ||||
|  | ||||
|  .vevent .event-location{ | ||||
| 	margin-left: 10px; | ||||
| 	margin-right: 10px; | ||||
| 	font-size: 1em; | ||||
| 	font-style: oblique; | ||||
| 	text-align: center; | ||||
| 	 | ||||
| } | ||||
|  | ||||
| .vevent .event-start, .vevent .event-end  { | ||||
| 	margin-left: 20px; | ||||
| 	margin-right: 20px; | ||||
| 	margin-bottom: 2px; | ||||
| 	margin-top: 2px; | ||||
| 	font-size: 0.9em; | ||||
| 	font-variant: small-caps; | ||||
| 	text-align: left; | ||||
| } | ||||
|  | ||||
| #new-event-link{ | ||||
| 	width: 130px; | ||||
| 	padding: 7px; | ||||
| 	margin-bottom: 10px; | ||||
| 	margin-left: 170px; ; | ||||
| 	-moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf; | ||||
| 	-webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf; | ||||
| 	box-shadow:inset 0px 1px 0px 0px #cfcfcf; | ||||
| 	background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) ); | ||||
| 	background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% ); | ||||
| 	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2'); | ||||
| 	background-color:#bdbdbd; | ||||
| 	-moz-border-radius:5px; | ||||
| 	-webkit-border-radius:5px; | ||||
| 	border-radius:5px; | ||||
| 	color: #efefef; | ||||
| } | ||||
|  | ||||
| #new-event-link:hover { | ||||
| 	color: #efefef; | ||||
| 	background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) ); | ||||
| 	background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% ); | ||||
| 	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808'); | ||||
| 	background-color:#b20202; | ||||
| } | ||||
|  | ||||
| #new-event-link:active { | ||||
| 	background-color: #b20202; | ||||
| 	position:relative; | ||||
| 	top:1px; | ||||
| } | ||||
|  | ||||
| #new-event-link a { | ||||
| 	color: #efefef; | ||||
| 	text-align: center; | ||||
| } | ||||
|  | ||||
| .edit-event-link, .plink-event-link { | ||||
| 	float: left; | ||||
| 	margin-top: 4px; | ||||
| 	margin-right: 4px; | ||||
| 	margin-bottom: 15px; | ||||
| } | ||||
|  | ||||
| .event-description:before { | ||||
| 	content: url('calendar.png'); | ||||
| 	margin-right: 15px; | ||||
| 	vertical-align: middle; | ||||
| } | ||||
|  | ||||
| .event-start, .event-end { | ||||
| 	margin-left: 10px; | ||||
| 	width: 330px; | ||||
| } | ||||
|  | ||||
| .event-start .dtstart, .event-end .dtend { | ||||
| 	float: right; | ||||
| } | ||||
|  | ||||
| .event-list-date { | ||||
| 	color: #626262; | ||||
| 	margin-bottom: 10px; | ||||
| 	font-variant:small-caps; | ||||
| 	font-stretch:condensed; | ||||
| } | ||||
|  | ||||
| .prevcal, .nextcal { | ||||
| 	float: left; | ||||
| 	margin-left: 32px; | ||||
| 	margin-right: 32px; | ||||
| 	margin-top: 64px; | ||||
| } | ||||
|  | ||||
| .event-calendar-end { | ||||
| 	clear: both; | ||||
| } | ||||
|  | ||||
| .calendar { | ||||
| 	width: 300px; | ||||
| 	font-family: Helvetica, Arial, sans-serif; | ||||
| 	background-color: #f1f1f1; | ||||
| 	border: 1px solid #dedede; | ||||
| 	margin-bottom: 10px; | ||||
| 	-moz-box-shadow: 5px 5px 8px #959494; | ||||
| 	-webkit-box-shadow: 5px 5px 8px #959494; | ||||
| 	box-shadow: 5px 5px 8px #959494;	 | ||||
| } | ||||
|  | ||||
| .calendar caption{ | ||||
| 	background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d60808), color-stop(1, #b20202) ); | ||||
| 	background:-moz-linear-gradient( center top, #d60808 5%, #b20202 100% ); | ||||
| 	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d60808', endColorstr='#b20202'); | ||||
| 	background-color: #b20202; | ||||
| 	padding: 10px 0px 10px 0px; | ||||
| 	width: 300px; | ||||
| 	color: #ffffff; | ||||
| 	font-weight: bold; | ||||
| 	text-align:center; | ||||
| 	font-variant:small-caps; | ||||
| 	-moz-box-shadow: 5px 2px 8px #959494; | ||||
| 	-webkit-box-shadow: 5px 2px 8px #959494; | ||||
| 	box-shadow: 5px 2px 8px #959494; | ||||
| } | ||||
|  | ||||
| tr { | ||||
| 	border: 1px solid #eeeeee; | ||||
| } | ||||
|  | ||||
| .calendar td { | ||||
| 	font-size: 14px; | ||||
| 	text-align: center; | ||||
| 	padding: 3px 0px; | ||||
| } | ||||
|  | ||||
| .calendar td > a { | ||||
| 	background-color: #cdcdcd; | ||||
| 	padding: 2px; | ||||
| 	color: #000; | ||||
| } | ||||
|  | ||||
| .calendar th { | ||||
| 	font-size: 16px;	 | ||||
| } | ||||
|  | ||||
| .today { | ||||
| 	font-weight: bold; | ||||
| 	text-align: center; | ||||
| 	background-color: #b20202; | ||||
| 	color: #fff; | ||||
| } | ||||
|   | ||||
| #event-start-text,  | ||||
| #event-finish-text { | ||||
| 	margin-top: 10px; | ||||
| 	margin-bottom: 5px; | ||||
| } | ||||
|  | ||||
| #event-nofinish-checkbox,  | ||||
| #event-nofinish-text,  | ||||
| #event-adjust-checkbox,  | ||||
| #event-adjust-text, | ||||
| #event-share-checkbox { | ||||
| 	float: left; | ||||
| } | ||||
|  | ||||
| #event-datetime-break { | ||||
| 	margin-bottom: 10px; | ||||
| } | ||||
|  | ||||
| #event-nofinish-break,  | ||||
| #event-adjust-break, | ||||
| #event-share-break { | ||||
| 	clear: both; | ||||
| } | ||||
|  | ||||
| #event-desc-text,  | ||||
| #event-location-text { | ||||
| 	margin-top: 10px; | ||||
| 	margin-bottom: 5px; | ||||
| } | ||||
|  | ||||
| #event-submit { | ||||
| 	margin-top: 10px; | ||||
| } | ||||
|  | ||||
| /* ============= */ | ||||
| /* = Directory = */ | ||||
| /* ============= */ | ||||
|  | ||||
| .directory-item { | ||||
| 	float: left; | ||||
| 	margin: 50px 50px 0px 0px; | ||||
| } | ||||
|  | ||||
| .directory-details { | ||||
| 	font-size: 0.9em; | ||||
| 	font-variant: small-caps; | ||||
| 	width: 160px; | ||||
| } | ||||
|  | ||||
| .directory-name { | ||||
| 	font-size: 1em; | ||||
| 	font-variant: small-caps; | ||||
| 	width: 150px;	 | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user