adding internal hashs in the regex

This commit is contained in:
2014-09-14 00:11:48 +02:00
parent 41934fd4ec
commit 14eb026f0c

View File

@@ -273,11 +273,14 @@ class ToolBox
//TODO implement link pattern //TODO implement link pattern
public static function findReplaceLinks($sText, $sLinkPattern='') public static function findReplaceLinks($sText, $sLinkPattern='')
{ {
//Parameters
$sPreChar = '(^|\ |\*|\'|\()';
$sPostChar = '(\ |\.|\:|\)|$)';
$sServerPath = substr(str_replace(array('http://', 'https://'), '', $_GET['serv_name']), 0, -1);
//Fix Carriage Return / Line Feed OS issue //Fix Carriage Return / Line Feed OS issue
$sText = self::fixEOL($sText); $sText = self::fixEOL($sText);
$sServerPath = substr(str_replace(array('http://', 'https://'), '', $_GET['serv_name']), 0, -1);
//building all replacements possibilities //building all replacements possibilities
foreach(Databap::$TYPES as $sType=>$asTypeInfo) foreach(Databap::$TYPES as $sType=>$asTypeInfo)
{ {
@@ -292,22 +295,25 @@ class ToolBox
foreach($asReplacements as $sHash=>$sPage) foreach($asReplacements as $sHash=>$sPage)
{ {
//Type + id //Type + id
$asPatterns['`(^|\ )(https?://|)'.$sServerPath.'/?\#'.$sHash.'\-([\d]+)`mui'] = '$1$4'.$sPage.' $3'; $asPatterns['`'.$sPreChar.'(https?://|)'.$sServerPath.'/?\#'.$sHash.'\-([\d]+)'.$sPostChar.'`mui'] = '$1$4'.$sPage.' $3';
//Type + phrase //Type + phrase
if($sPage=='table') $asPatterns['`(^|\ )(https?://|)'.$sServerPath.'/?\#(?i)'.$sHash.'(?-i)\-([_A-Z0-9]+)`mu'] = '$1$4'.$sPage.' $3'; if($sPage=='table') $asPatterns['`'.$sPreChar.'(https?://|)'.$sServerPath.'/?\#(?i)'.$sHash.'(?-i)\-([_A-Z0-9]+)'.$sPostChar.'`mu'] = '$1$4'.$sPage.' $3';
} }
$sText = preg_replace(array_keys($asPatterns), array_values($asPatterns), $sText); $sText = preg_replace(array_keys($asPatterns), array_values($asPatterns), $sText);
//Phase 2: Identify remaining links (external) //Pahse 2: Replacing directly all remaining links
$asPatterns = array('`((?:https?|ftp)://\S+[[:alnum:]]/?)`mui', '`((?<!//)(www\.\S+[[:alnum:]]/?))`mui'); //Phase 2a: Internal hashes
$asLinks = array('<a href="$1" class="external_link" target="_blank"><i class="fa fa-inline fa-c-share"></i>$1</a> ', '<a href="http://$1" class="external_link" target="_blank"><i class="fa fa-inline fa-c-share"></i>$1</a>'); $asPatterns = array();
$sText = preg_replace($asPatterns, $asLinks, $sText); foreach(Databap::$HASH_TO_PAGE as $sHash=>$sPage) $asPatterns['`'.$sPreChar.'(https?://|)'.$sServerPath.'/?\#(?i)'.$sHash.'(?-i)'.$sPostChar.'`mui'] = '$1<a href="#'.$sPage.'" class="internal_link round"><i class="fa fa-inline fa-c-'.$sPage.'"></i>'.Databap::$PAGE_TITLES[$sPage].'</a>$3';
//Phase 2b: External links
$asPatterns['`((?:https?|ftp)://\S+[[:alnum:]]/?)`mui'] = '<a href="$1" class="external_link" target="_blank"><i class="fa fa-inline fa-c-share"></i>$1</a> ';
$asPatterns['`((?<!//)(www\.\S+[[:alnum:]]/?))`mui'] = '<a href="http://$1" class="external_link" target="_blank"><i class="fa fa-inline fa-c-share"></i>$1</a>';
$sText = preg_replace(array_keys($asPatterns), array_values($asPatterns), $sText);
//Phase 3: Rebuild link //Phase 3: Rebuild link
$asPatterns = array(); $asPatterns = array();
$sPreChar = '(^|\ |\*|\'|\()';
$sPostChar = '(\ |\.|\:|\)|$)';
foreach($asReplacements as $sHash=>$sPage) foreach($asReplacements as $sHash=>$sPage)
{ {
if(mb_strlen($sHash)>1) if(mb_strlen($sHash)>1)