本文主要是介绍linux php 语法加亮,用javascript函数PHP语法加亮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
静坐常思己过,闲谈莫论人非,能受苦乃为志士,肯吃亏不是痴人,敬君子方显有德,怕小人不算无能,退一步天高地阔,让三分心平气和,欲进步需思退步,若着手先虑放手,如得意不宜重往,凡做事应有余步。持黄金为珍贵,知安乐方值千金,事临头三思为妙,怒上心忍让最高。切勿贪意外之财,知足者人心常乐。若能以此去处事,一生安乐任逍遥。
用javascript函数PHP语法加亮
作者:大鹏 发布于:2006-9-25 12:17 Monday
分类:JavaScript与HTML
[code]
//=====================================
// 功能 PHP语法加亮函数
// author:ice_berg16(寻梦的稻草人)
// lastModified:2005-6-29
// copyright(c)2005 ice_berg16@163.com
//=====================================
function highlight_string( str )
{
//add a new prototype function to array
Array.prototype.exist = function(v)
{
for(k=0;k
{
if(this[k].toLowerCase() == v.toLowerCase())
return true;
}
return false;
}
//base variable
var operator = "><=,()[].+-*/!&|^~?{};:";
var keyword = ['and','or','__FILE__','exception','__LINE__','array','as','break','case','class','const',
'continue','declare','default','die','do','echo','else','elseif','empty','enddeclare','endfor',
'endforeach','endif','endswitch','endwhile','eval','exit','extends','for','foreach','function',
'global','if','include','include_once','isset','list','new','old_function','print','require',
'require_once','return', 'static','switch','unset','var','while','__FUNCTION__','__CLASS__',
'__METHOD__','true','false','null'];
var inString = false;
var inSLComment = false; //single line comment
var inMLComment = false; //multiline comment
var delimiter = null;
var startPos = null;
var word = "";
var res = "";
//start to format
for(i=0;i
{
if( inString ) //we are in string
{
//the word cache will be clear
if(word != "") //we check the word cache if it the key word
{
if( keyword.exist(word) ) //its php reversed keyword,rend color
res+= rendColor(word, 'keyword');
else
res+= word;
word = "";
}
//alert('inString,pos is '+ i+',char is '+c );
fromPos = startPos+1;
while(1)
{
//we find the end of current string
p = str.indexOf( delimiter, fromPos );
//we got the end of the code
if( p == -1 )
{
curstr = str.substr( startPos );
res += rendColor( curstr, 'string' );
i = str.length;
break;
}
if( p != -1 && str.charAt(p-1) != "\\" )
{
i = p+1;
curstr = str.substring(startPos, i ); //get the current string
res += rendColor( curstr, 'string' ); //rend color for it and add it to the result
inString = false; //we have go out of the string
startPos = null;
break;
}
else
{
fromPos = p+1;
}
}
}
if( inSLComment ) //we are in Single line comment
{
if(word != "") //we check the word cache if it the key word
{
if( keyword.exist(word) ) //its php reversed keyword,rend color
res+= rendColor(word, 'keyword');
else
res+= word;
word = "";
}
//alert('inSLComment,pos is '+ i+',char is '+c );
p = str.indexOf( "\n", i );
if( p != -1 ) //we find the end of line
{
i = p;
curstr = str.substring( startPos, p );
res += rendColor( curstr, 'comment' );
startPos = null;
inSLComment = false;
}
else
{
curstr = str.substr( startPos );
res += rendColor( curstr, 'comment' );
i = str.length;
}
}
if( inMLComment ) //we are in multiline comment
{
if(word != "") //we check the word cache if it the key word
{
if( keyword.exist(word) ) //its php reversed keyword,rend color
res+= rendColor(word, 'keyword');
else
res+= word;
word = "";
}
//alert('inMLComment,pos is '+ i+',char is '+c );
p = str.indexOf( "*/", startPos+2 );
if( p != -1 ) //we find the end of line
{
i = p+2;
curstr = str.substring(startPos, i );
res += rendColor( curstr, 'comment' );
startPos = null;
inMLComment = false;
}
else
{
curstr = str.substr( startPos );
res += rendColor( curstr, 'comment' );
i = str.length;
}
}
var c = str.charAt(i); //current char
var nc = str.charAt(i+1);//next char
switch( c )
{
case '/':
if( nc == '*' ) // we go into the multiline comment
{
inMLComment = true;
startPos = i;
}
if( nc == "/" ) //we are in single line comment
{
inSLComment = true;
startPos = i;
}
//alert('we are in switch,pos is '+i+', and char is'+ c);
break;
case '#':
inSLComment = true; //we go into the single line comment
startPos = i;
break;
case '"':
inString = true;
delimiter = '"';
startPos = i;
break;
case "'":
inString = true;
delimiter = "'";
startPos = i;
break;
default:
if( /[\w$]/.test(c) ) //the keyword only contains continuous common char
{
word += c; //cache the current char
}
else
{
if(word != "") //we check the word cache if it the key word
{
if( keyword.exist(word) ) //its php reversed keyword,rend color
res+= rendColor(word, 'keyword');
else
res+= word;
word = "";
}
//now the current char is not common char, we process it
if( operator.indexOf(c) != -1 ) // the char is a operator
res += rendColor(c, 'operator' );
else
res += c;
}
break;
}
}
$t = " ";
$b = " ";
res = res.replace(/^( +)/g, function($1){c = $1.length;str="";while(--c>=0)str+=$b;return str});
res = res.replace(/(\t| ){2,}/g, function($0){c=$0.length;str="";while(--c>=0){if($0.charAt(c)=='\t')str+=$t;else str+=$b;}return str;});
res = res.replace(/\t/g,$t);
res = res.replace(/\n/g, "\n
");res = '
- ' + res + '
//alert(res);
return res;
}
//对字符串中的HTML代码编码
function HTMLEncode( str )
{
str = str.replace(/&/g, '&');
str = str.replace(/
str = str.replace(/>/g, '>');
return str;
}
//根据字符串所属类型渲染不同的着色
function rendColor( str, type )
{
var commentColor = "#FF8000";
var stringColor = "#DD0000";
var operatorColor= "#007700";
var keywordColor = "#007700";
var commonColor = "#0000BB";
var useColor = null;
str = HTMLEncode( str );
//we will rend what color?
switch( type )
{
case 'comment':
useColor = commentColor;
break;
case 'string':
useColor = stringColor;
break;
case 'operator':
useColor = operatorColor;
break;
case 'keyword':
useColor = keywordColor;
break;
default:
useColor = commonColor;
break;
}
if( str.indexOf("\n") != -1 ) //there are more than one line
{
arr = str.split("\n");
for(j=0;j
{
arr[j] = ""+ arr[j] + "";
}
return arr.join("\n");
}
else
{
str = ""+ str + "";
return str;
}
}[/code]
et_highlighter
发表评论
昵称
邮箱
网址
干净网络从你做起,切勿黏贴小广告
这篇关于linux php 语法加亮,用javascript函数PHP语法加亮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!