⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dpsyntaxhighlighter.js

📁 这是YUI的源码及相关示例。里面有很多很炫的Javascript效果。
💻 JS
📖 第 1 页 / 共 2 页
字号:
/** * Code Syntax Highlighter. * Version 1.3.0 * Copyright (C) 2004 Alex Gorbatchev. * http://www.dreamprojections.com/syntaxhighlighter/ *  * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General  * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)  * any later version. * * This library 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 Lesser General Public License for more  * details. * * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  *///// create namespaces//var dp = {	sh :					// dp.sh	{		Utils	: {},		// dp.sh.Utils		Brushes	: {},		// dp.sh.Brushes		Strings : {},		Version : '1.3.0'	}};dp.sh.Strings = {	AboutDialog : '<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter</a></p>&copy;2004-2005 Alex Gorbatchev. All right reserved.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>',		// tools	ExpandCode : '+ expand code',	ViewPlain : 'view plain',	Print : 'print',	CopyToClipboard : 'copy to clipboard',	About : '?',		CopiedToClipboard : 'The code is in your clipboard now.'};dp.SyntaxHighlighter = dp.sh;//// Dialog and toolbar functions//dp.sh.Utils.Expand = function(sender){	var table = sender;	var span = sender;	// find the span in which the text label and pipe contained so we can hide it	while(span != null && span.tagName != 'SPAN')		span = span.parentNode;	// find the table	while(table != null && table.tagName != 'TABLE')		table = table.parentNode;		// remove the 'expand code' button	span.parentNode.removeChild(span);		table.tBodies[0].className = 'show';	table.parentNode.style.height = '100%'; // containing div isn't getting updated properly when the TBODY is shown}// opens a new windows and puts the original unformatted source code inside.dp.sh.Utils.ViewSource = function(sender){	var code = sender.parentNode.originalCode;	var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1');		code = code.replace(/</g, '&lt;');		wnd.document.write('<pre>' + code + '</pre>');	wnd.document.close();}// copies the original source code in to the clipboard (IE only)dp.sh.Utils.ToClipboard = function(sender){	var code = sender.parentNode.originalCode;		// This works only for IE. There's a way to make it work with Mozilla as well,	// but it requires security settings changed on the client, which isn't by	// default, so 99% of users won't have it working anyways.	if(window.clipboardData)	{		window.clipboardData.setData('text', code);				alert(dp.sh.Strings.CopiedToClipboard);	}}// creates an invisible iframe, puts the original source code inside and prints itdp.sh.Utils.PrintSource = function(sender){	var td		= sender.parentNode;	var code	= td.processedCode;	var iframe	= document.createElement('IFRAME');	var doc		= null;	var wnd		= 	// this hides the iframe	iframe.style.cssText = 'position:absolute; width:0px; height:0px; left:-5px; top:-5px;';		td.appendChild(iframe);		doc = iframe.contentWindow.document;	code = code.replace(/</g, '&lt;');		doc.open();	doc.write('<pre>' + code + '</pre>');	doc.close();		iframe.contentWindow.focus();	iframe.contentWindow.print();		td.removeChild(iframe);}dp.sh.Utils.About = function(){	var wnd	= window.open('', '_blank', 'dialog,width=320,height=150,scrollbars=0');	var doc	= wnd.document;		var styles = document.getElementsByTagName('style');	var links = document.getElementsByTagName('link');		doc.write(dp.sh.Strings.AboutDialog.replace('{V}', dp.sh.Version));		// copy over ALL the styles from the parent page	for(var i = 0; i < styles.length; i++)		doc.write('<style>' + styles[i].innerHTML + '</style>');	for(var i = 0; i < links.length; i++)		if(links[i].rel.toLowerCase() == 'stylesheet')			doc.write('<link type="text/css" rel="stylesheet" href="' + links[i].href + '"></link>');		doc.close();	wnd.focus();}//// Match object//dp.sh.Match = function(value, index, css){	this.value		= value;	this.index		= index;	this.length		= value.length;	this.css		= css;}//// Highlighter object//dp.sh.Highlighter = function(){	this.addGutter = true;	this.addControls = true;	this.collapse = false;	this.tabsToSpaces = true;}// static callback for the match sortingdp.sh.Highlighter.SortCallback = function(m1, m2){	// sort matches by index first	if(m1.index < m2.index)		return -1;	else if(m1.index > m2.index)		return 1;	else	{		// if index is the same, sort by length		if(m1.length < m2.length)			return -1;		else if(m1.length > m2.length)			return 1;	}	return 0;}// gets a list of all matches for a given regular expressiondp.sh.Highlighter.prototype.GetMatches = function(regex, css){	var index = 0;	var match = null;	while((match = regex.exec(this.code)) != null)	{		this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css);	}}dp.sh.Highlighter.prototype.AddBit = function(str, css){	var span = document.createElement('span');		str = str.replace(/&/g, '&amp;');	str = str.replace(/ /g, '&nbsp;');	str = str.replace(/</g, '&lt;');	str = str.replace(/\n/gm, '&nbsp;<br>');	// when adding a piece of code, check to see if it has line breaks in it 	// and if it does, wrap individual line breaks with span tags	if(css != null)	{		var regex = new RegExp('<br>', 'gi');				if(regex.test(str))		{			var lines = str.split('&nbsp;<br>');						str = '';						for(var i = 0; i < lines.length; i++)			{				span			= document.createElement('SPAN');				span.className	= css;				span.innerHTML	= lines[i];								this.div.appendChild(span);								// don't add a <BR> for the last line				if(i + 1 < lines.length)					this.div.appendChild(document.createElement('BR'));			}		}		else		{			span.className = css;			span.innerHTML = str;			this.div.appendChild(span);		}	}	else	{		span.innerHTML = str;		this.div.appendChild(span);	}}// checks if one match is inside any other matchdp.sh.Highlighter.prototype.IsInside = function(match){	if(match == null || match.length == 0)		return;		for(var i = 0; i < this.matches.length; i++)	{		var c = this.matches[i];				if(c == null)			continue;				if((match.index > c.index) && (match.index <= c.index + c.length))			return true;	}		return false;}dp.sh.Highlighter.prototype.ProcessRegexList = function(){	for(var i = 0; i < this.regexList.length; i++)		this.GetMatches(this.regexList[i].regex, this.regexList[i].css);}dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code){	var lines	= code.split('\n');	var result	= '';	var tabSize	= 4;	var tab		= '\t';	// This function inserts specified amount of spaces in the string	// where a tab is while removing that given tab. 	function InsertSpaces(line, pos, count)	{		var left	= line.substr(0, pos);		var right	= line.substr(pos + 1, line.length);	// pos + 1 will get rid of the tab		var spaces	= '';				for(var i = 0; i < count; i++)			spaces += ' ';				return left + spaces + right;	}	// This function process one line for 'smart tabs'	function ProcessLine(line, tabSize)	{		if(line.indexOf(tab) == -1)			return line;		var pos = 0;		while((pos = line.indexOf(tab)) != -1)		{			// This is pretty much all there is to the 'smart tabs' logic.			// Based on the position within the line and size of a tab, 			// calculate the amount of spaces we need to insert.			var spaces = tabSize - pos % tabSize;						line = InsertSpaces(line, pos, spaces);		}				return line;	}	// Go through all the lines and do the 'smart tabs' magic.	for(var i = 0; i < lines.length; i++)		result += ProcessLine(lines[i], tabSize) + '\n';		return result;}dp.sh.Highlighter.prototype.SwitchToTable = function(){	// thanks to Lachlan Donald from SitePoint.com for this <br/> tag fix.	var html	= this.div.innerHTML.replace(/<(br)\/?>/gi, '\n');	var lines	= html.split('\n');	var row		= null;	var cell	= null;	var tBody	= null;	var html	= '';	var pipe	= ' | ';	// creates an anchor to a utility	function UtilHref(util, text)	{		return '<a href="#" onclick="dp.sh.Utils.' + util + '(this); return false;">' + text + '</a>';	}		tBody = document.createElement('TBODY');	// can be created and all others go to tBodies collection.	this.table.appendChild(tBody);			if(this.addGutter == true)	{		row = tBody.insertRow(-1);		cell = row.insertCell(-1);		cell.className = 'tools-corner';	}	if(this.addControls == true)	{		var tHead = document.createElement('THEAD');	// controls will be placed in here		this.table.appendChild(tHead);		row = tHead.insertRow(-1);		// add corner if there's a gutter		if(this.addGutter == true)		{			cell = row.insertCell(-1);			cell.className = 'tools-corner';		}				cell = row.insertCell(-1);				// preserve some variables for the controls		cell.originalCode = this.originalCode;		cell.processedCode = this.code;		cell.className = 'tools';				if(this.collapse == true)		{			tBody.className = 'hide';			cell.innerHTML += '<span><b>' + UtilHref('Expand', dp.sh.Strings.ExpandCode) + '</b>' + pipe + '</span>';		}		cell.innerHTML += UtilHref('ViewSource', dp.sh.Strings.ViewPlain) + pipe + UtilHref('PrintSource', dp.sh.Strings.Print);				// IE has this clipboard object which is easy enough to use		if(window.clipboardData)			cell.innerHTML += pipe + UtilHref('ToClipboard', dp.sh.Strings.CopyToClipboard);				cell.innerHTML += pipe + UtilHref('About', dp.sh.Strings.About);	}	for(var i = 0, lineIndex = this.firstLine; i < lines.length - 1; i++, lineIndex++)	{		row = tBody.insertRow(-1);				if(this.addGutter == true)		{			cell = row.insertCell(-1);			cell.className = 'gutter';			cell.innerHTML = lineIndex;		}		cell = row.insertCell(-1);		cell.className = 'line' + (i % 2 + 1);		// uses .line1 and .line2 css styles for alternating lines		cell.innerHTML = lines[i];	}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -