Zum Inhalt springen

Typo 3.6 RC1 - Datei Fehlt class.t3lib_syntaxhl.php

Erstellt am 23. Februar 2004 · 4 Antworten · letzte Antwort am 27. Februar 2004

Tags: Frage

CharoGarcia ·

Hallo,

nach einer Typo3 3.6 RC1 Installation und dem durchprobieren des Futuristic Template Building Tutorials stieß ich an einigen stellen auf einen Error:

Fatal error: Failed opening required '/home/1234/htdocs/mag/typo3/t3lib/class.t3lib_syntaxhl.php' (include_path='.:/usr/share/php') in /home/tendance/htdocs/mag/typo3conf/ext/templavoila/cm1/index.php on line 821

Dies passiert wenn man eine Data Structure in einem SysFolder erstellt hat und diese danach per Kontextmenü mit der Funktion TemplaVoila aufrufen will oder wenn man beim erstellen der Template Objects und der Data Structure den Button "Show XML" anclickt!

Erst dachte ich das es die Datei beim Uploaden von Typo3 auf den Server einfach nicht geschafft hat. Aber auch Lokal konnte ich die Datei nicht finden... !?!

Nachdem ich hier im Forum und auf typo3.org nix gefunden hatte habe ich nach der Datei gegoogled, sie gefunden geuploaded und nun funktioniert es halbwegs. Keine fehlermedlung mehr aber das Synthax Highlighting funktioniert nur bedingt.

Naja für jeden dem das passiert hier der Quelltext der Datei. Is wahrscheinlich eh nich der aktuellste aber immerhin 😉

<?php
/***************************************************************
*  Copyright notice
*  
*  (c) 1999-2003 Kasper Skaarhoj (kasper@typo3.com)
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is 
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
* 
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*  A copy is found in the textfile GPL.txt and important notices to the license 
*  from the author is found in LICENSE.txt distributed with these scripts.
*
* 
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/** 
 * Contains a class for various syntax highlighting.
 *
 * $Id: class.t3lib_syntaxhl.php,v 1.2 2004/01/02 12:19:17 typo3 Exp $
 *
 * @author	Kasper Skaarhoj <kasper@typo3.com>
 */
/**
 * [CLASS/FUNCTION INDEX of SCRIPT]
 *
 *
 *
 *   76: class t3lib_syntaxhl 
 *  109:     function highLight_DS($str)	
 *  133:     function getAllTags($str)	
 *  164:     function splitXMLbyTags($tagList,$str)	
 *  192:     function markUpRecursively($struct,$parent='',$app='')	
 *
 * TOTAL FUNCTIONS: 4
 * (This index is automatically created/updated by the extension "extdeveval")
 *
 */

















require_once(PATH_t3lib.'class.t3lib_parsehtml.php');


/**
 * Syntax Highlighting class.
 * 
 * @author	Kasper Skaarhoj <kasper@typo3.com>
 * @package TYPO3
 * @subpackage t3lib
 */
class t3lib_syntaxhl {

		// Internal, dynamic:
	var $htmlParse;			// Parse object.
	
		// External, static:
	var $DS_wrapTags = array(
		'T3DataStructure' => array('<span style="font-weight: bold;">','</span>'),
		'type' => array('<span style="font-weight: bold; color: #000080;">','</span>'),
		'section' => array('<span style="font-weight: bold; color: #000080;">','</span>'),
		'el' => array('<span style="font-weight: bold; color: #800000;">','</span>'),
		'meta' => array('<span style="font-weight: bold; color: #800080;">','</span>'),
		'_unknown' => array('<span style="font-style: italic; color: #666666;">','</span>'),

		'_applicationTag' => array('<span style="font-weight: bold; color: #FF6600;">','</span>'),
		'_applicationContents' => array('<span style="font-style: italic; color: #C29336;">','</span>'),

		'sheets'  => array('<span style="font-weight: bold; color: #008000;">','</span>'),
		'parent:sheets' => array('<span style="color: #008000;">','</span>'),

		'ROOT' => array('<span style="font-weight: bold; color: #008080;">','</span>'),
		'parent:el' => array('<span style="font-weight: bold; color: #008080;">','</span>'),

		'langDisable' => array('<span style="color: #000080;">','</span>'),
		'langChildren' => array('<span style="color: #000080;">','</span>'),
	);

	var $FF_wrapTags = array(
		'T3FlexForms' => array('<span style="font-weight: bold;">','</span>'),
		'meta' => array('<span style="font-weight: bold; color: #800080;">','</span>'),
		'data' => array('<span style="font-weight: bold; color: #800080;">','</span>'),
		'_unknown' => array('<span style="font-style: italic; color: #666666;">','</span>'),
		

		'sDEF'  => array('<span style="font-weight: bold; color: #008000;">','</span>'),
		'level:sheet' => array('<span style="font-weight: bold; color: #008000;">','</span>'),

		'lDEF'  => array('<span style="font-weight: bold; color: #000080;">','</span>'),
		'level:language' => array('<span style="font-weight: bold; color: #000080;">','</span>'),

		'level:fieldname' => array('<span style="font-weight: bold; color: #666666;">','</span>'),

		'vDEF'  => array('<span style="font-weight: bold; color: #800000;">','</span>'),
		'level:value' => array('<span style="font-weight: bold; color: #800000;">','</span>'),

		'currentSheetId' => array('<span style="color: #000080;">','</span>'),
		'currentLangId' => array('<span style="color: #000080;">','</span>'),
	);








	/*************************************
	 *
	 * Markup of Data Structure, <T3DataStructure>
	 *
	 *************************************/	

	/**
	 * Makes syntax highlighting of a Data Structure, <T3DataStructure>
	 * 
	 * @param	string		Data Structure XML, must be valid since it's parsed.
	 * @return	string		HTML code with highlighted content. Must be wrapped in <PRE> tags
	 */
	function highLight_DS($str)	{
		
			// Parse DS to verify that it is valid:
		$DS = t3lib_div::xml2array($str);
		if (is_array($DS))	{
			$completeTagList = array_unique($this->getAllTags($str));	// Complete list of tags in DS
			
				// Highlighting source:
			$this->htmlParse = t3lib_div::makeInstance('t3lib_parsehtml');	// Init parser object
			$struct = $this->splitXMLbyTags(implode(',',$completeTagList),$str);	// Split the XML by the found tags, recursively into LARGE array.
			$markUp = $this->highLight_DS_markUpRecursively($struct);	// Perform color-markup on the parsed content. Markup preserves the LINE formatting of the XML. 

				// Return content:
			return $markUp;
		} else $error = 'ERROR: The input content failed XML parsing: '.$DS;
		return $error;
	}
	
	/**
	 * Making syntax highlighting of the parsed Data Structure XML.
	 * Called recursively.
	 * 
	 * @param	array		The structure, see splitXMLbyTags()
	 * @param	string		Parent tag.
	 * @param	string		"Application" - used to denote if we are 'inside' a section
	 * @return	string		HTML
	 */
	function highLight_DS_markUpRecursively($struct,$parent='',$app='')	{
		$output='';
		foreach($struct as $k => $v)	{
			if ($k%2)	{
				$nextApp = $app;
				$wrap = array('','');
				
				switch($app)	{
					case 'TCEforms':
					case 'tx_templavoila':
						$wrap = $this->DS_wrapTags['_applicationContents'];
					break;
					case 'el':
					default:
						if ($parent=='el')	{
							$wrap = $this->DS_wrapTags['parent:el'];
							$nextApp = 'el';
						} elseif ($parent=='sheets')	{
							$wrap = $this->DS_wrapTags['parent:sheets'];
						} else {
							$wrap = $this->DS_wrapTags[$v['tagName']];
							$nextApp = '';
						}
				
							// If no wrap defined, us "unknown" definition
						if (!is_array($wrap))	{
							$wrap = $this->DS_wrapTags['_unknown'];
						}
						
							// Check for application sections in the XML:
						if ($app=='el' || $parent=='ROOT')	{
							switch($v['tagName'])	{
								case 'TCEforms':
								case 'tx_templavoila':
									$nextApp = $v['tagName'];
									$wrap = $this->DS_wrapTags['_applicationTag'];
								break;
							}
						}
					break;
				}

				$output.=$wrap[0].htmlspecialchars($v['tag']).$wrap[1];
				$output.=$this->highLight_DS_markUpRecursively($v['sub'],$v['tagName'],$nextApp);
				$output.=$wrap[0].htmlspecialchars('</'.$v['tagName'].'>').$wrap[1];
			} else {
				$output.=htmlspecialchars($v);
			}
		}
		
		return $output;
	}





















	/*************************************
	 *
	 * Markup of Data Structure, <T3FlexForms>
	 *
	 *************************************/	

	/**
	 * Makes syntax highlighting of a FlexForm Data, <T3FlexForms>
	 * 
	 * @param	string		Data Structure XML, must be valid since it's parsed.
	 * @return	string		HTML code with highlighted content. Must be wrapped in <PRE> tags
	 */
	function highLight_FF($str)	{
		
			// Parse DS to verify that it is valid:
		$DS = t3lib_div::xml2array($str);
		if (is_array($DS))	{
			$completeTagList = array_unique($this->getAllTags($str));	// Complete list of tags in DS
			
				// Highlighting source:
			$this->htmlParse = t3lib_div::makeInstance('t3lib_parsehtml');	// Init parser object
			$struct = $this->splitXMLbyTags(implode(',',$completeTagList),$str);	// Split the XML by the found tags, recursively into LARGE array.
			$markUp = $this->highLight_FF_markUpRecursively($struct);	// Perform color-markup on the parsed content. Markup preserves the LINE formatting of the XML. 

				// Return content:
			return $markUp;
		} else $error = 'ERROR: The input content failed XML parsing: '.$DS;
		return $error;
	}
	
	/**
	 * Making syntax highlighting of the parsed FlexForm XML.
	 * Called recursively.
	 * 
	 * @param	array		The structure, see splitXMLbyTags()
	 * @param	string		Parent tag.
	 * @param	string		"Application" - used to denote if we are 'inside' a section
	 * @return	string		HTML
	 */
	function highLight_FF_markUpRecursively($struct,$parent='',$app='')	{
		$output='';

			// Setting levels:
		if ($parent=='data')	{
			$app='sheet';
		} elseif($app=='sheet')	{
			$app='language';
		} elseif($app=='language')	{
			$app='fieldname';
		} elseif($app=='fieldname')	{
			$app='value';
		}
		
			// Traverse structure:		
		foreach($struct as $k => $v)	{
			if ($k%2)	{
				$wrap = array('','');

					// Default wrap:				
				$wrap = $this->FF_wrapTags[$v['tagName']];
				
					// If no wrap defined, us "unknown" definition
				if (!is_array($wrap))	{
					switch($app)	{
						case 'sheet':
						case 'language':
						case 'fieldname':
						case 'value':
							$wrap = $this->FF_wrapTags['level:'.$app];
						break;
						default:
							$wrap = $this->FF_wrapTags['_unknown'];
						break;
					}
				}

				$output.=$wrap[0].htmlspecialchars($v['tag']).$wrap[1];
				$output.=$this->highLight_FF_markUpRecursively($v['sub'],$v['tagName'],$app);
				$output.=$wrap[0].htmlspecialchars('</'.$v['tagName'].'>').$wrap[1];
			} else {
				$output.=htmlspecialchars($v);
			}
		}
		
		return $output;
	}





	
	
	
	
	
	

	/*************************************
	 *
	 * Various
	 *
	 *************************************/	
	
	/**
	 * Returning all tag names found in XML/HTML input string
	 * 
	 * @param	string		HTML/XML input
	 * @return	array		Array with all found tags (starttags only)
	 */
	function getAllTags($str)	{
	
			// Init:
		$tags = array();
		$token = md5(microtime());
		
			// Markup all tag names with token.
		$markUpStr = ereg_replace('<([[:alnum:]_]+)[^>]*>',$token.'1'.$token,$str);
		
			// Splitting by token:
		$parts = explode($token,$markUpStr);
		
			// Traversing parts:
		foreach($parts as $k => $v)	{
			if ($k%2)	{
				$tags[]=$v;
			}
		}
		
			// Returning tags:
		return $tags;
	}

	/**
	 * Splitting the input source by the tags listing in $tagList.
	 * Called recursively.
	 * 
	 * @param	string		Commalist of tags to split source by (into blocks, ALL being block-tags!)
	 * @param	string		Input string.
	 * @return	array		Array with the content arranged hierarchically.
	 */
	function splitXMLbyTags($tagList,$str)	{
		$struct = $this->htmlParse->splitIntoBlock($tagList,$str);
		
			// Traverse level:
		foreach($struct as $k => $v)	{
			if ($k%2)	{
				$tag = $this->htmlParse->getFirstTag($v);
				$tagName = $this->htmlParse->getFirstTagName($tag,TRUE);
				$struct[$k] = array(
					'tag' => $tag,
					'tagName' => $tagName,
					'sub' => $this->splitXMLbyTags($tagList,$this->htmlParse->removeFirstAndLastTag($struct[$k]))
				);
			}
		}
		
		return $struct;
	}
}


if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_syntaxhl.php'])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_syntaxhl.php']);
}
?>

Wahrscheinlich wird das im nächsten Release kein Problem mehr sein. Mich interessiert noch ob jemand auch dieses "Problem" hatte etc. Gibt es in eurer Installation diese Datei???

RegardZ 😃

Shinji ·

Hallo !

Laded euch die aktuellsten Sources runter (hier isser). und installiert alle Dateien im tar.gz Archiv über die eurer Installation. Die Datei 'class.t3lib_syntaxhl.php' ist nämlich erst seit Anfang Januar dabei.

Gruß
Thorsten

CharoGarcia ·

Danke,

ansonsten hab ich irgendwo die News verpasst? Wo hastn dat her? Auf der Typo3.org Seite unter den Packages und bei den Sources find ich das nich....
Oder is das son "top secrect" update? 😉

Shinji ·

Das habe ich von Michael Stucki persönlich :-)
Wenn man es weiß kann man hier auch nachsehen:

http://cvs.sourceforge.net/viewcvs.py/typo3/TYPO3core/t3lib/class.t3lib_syntaxhl.php
http://cvs.sourceforge.net/viewcvs.py/typo3/TYPO3core/t3lib/

Fri Jan 2 08:56:02 2004 UTC (7 weeks, 6 days ago) by typo3

Added syntax highlighting class

:-) Aber das habe ich auch von Michael :-)

Ich warte jetzt eigentlich nur noch auf die schon am 23.02 hätte erscheinende 3.6-final und TemplaVoila.....

Gruß
Thorsten

CharoGarcia ·

Dann warte ich mal mit dir...! Ich muss bis nächste Woche Typo3 soweit haben das der Content rein Kann und dass mit ner RC1 o.O
Naja wird schon 😉