这类程序在网上很多,但拿来练练“正则表达式”也不错的,所以就随手写了这个,现在只能对代码(函数,关键字,对象,字符串)进行着色,下一步想对函数块加入折叠效果(.NET代码编辑器的效果)。
演示效果代码:(ChangeVBToColor函数即是重点函数) --------------------------------------------------------------------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>无标题文档</title> <style type="text/css"> <!-- body { font-family: "宋体"; font-size: 12px; color: #333333; } .Text { font-family: "宋体"; font-size: 12px; border: 1px solid #333333; } td { font-family: "宋体"; font-size: 12px; } --> </style> </head>
<body> <table width="760" height="399" border="0" cellpadding="0" cellspacing="2"> <tr> <td height="302" valign="top"><form name="form1" method="post" action=""> <div align="center"> <textarea name="Content" cols="120" rows="25" class="Text" id="Content"></textarea> <br> <input name="btnShow" type="button" class="Text" id="btnShow" value="显 示" OnClick="GetHtmlContent()"> </div> </form></td> </tr> <tr> <td height="91"><span id="sHtml"></span></td> </tr> </table> <SCRIPT LANGUAGE="VBScript"> Sub GetHtmlContent 'GGG form1.Content.value document.all.sHtml.innerHTML=ChangeVbToColor(HtmlEncode(form1.Content.value)) End Sub
Function ChangeVbToColor(ByVal sText) Dim re,Matches,i Dim oneReg Set re=new RegExp re.IgnoreCase =true re.Global=true '转换函数块 're.Pattern="Function (\w+)(\([^\)]*\))?([^End Function]*)End Function" 'sText=re.Replace(sText,"<font color=red>$1</font>") 'sText=re.Replace(sText,"<img src=http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif>$3") 'alert sText '转换保留字为[蓝色] re.Pattern="(\bAnd\b|\bByRef\b|\bByVal\b|\bCall\b|\bCase\b|\bClass\b|\bConst\b|\bDim\b|\bDo\b|\bEach\b|\bElse\b|\bElseIf\b|\bEmpty\b|\bEnd\b|\bEqv\b|\bErase\b|\bError\b|\bExit\b|\bExplicit\b|\bFalse\b|\bFor\b|\bFunction\b|\bGet\b|\bIf\b|\bImp\b|\bIn\b|\bIs\b|\bLet\b|\bLoop\b|\bMod\b|\bNext\b|\bNot\b|\bNothing\b|\bNull\b|\bOn\b|\bOption\b|\bOr\b|\bPrivate\b|\bProperty\b|\bPublic\b|\bRandomize\b|\bReDim\b|\bRem\b|\bResume\b|\bSelect\b|\bSet\b|\bStep\b|\bSub\b|\bThen\b|\bTo\b|\bTrue\b|\bUntil\b|\bWend\b|\bWhile\b|\bXor\b)" sText=re.Replace(sText,"<font color=blue>$1</font>") '转换函数和对象为[红色] re.Pattern="(\bAnchor\b|\bArray\b|\bAsc\b|\bAtn\b|\bCBool\b|\bCByte\b|\bCCur\b|\bCDate\b|\bCDbl\b|\bChr\b|\bCInt\b|\bCLng\b|\bCos\b|\bCreateObject\b|\bCSng\b|\bCStr\b|\bDate\b|\bDateAdd\b|\bDateDiff\b|\bDatePart\b|\bDateSerial\b|\bDateValue\b|\bDay\b|\bDictionary\b|\bDocument\b|\bElement\b|\bErr\b|\bExp\b|\bFileSystemObject \b|\bFilter\b|\bFix\b|\bInt\b|\bForm\b|\bFormatCurrency\b|\bFormatDateTime\b|\bFormatNumber\b|\bFormatPercent\b|\bGetObject\b|\bHex\b|\bHistory\b|\bHour\b|\bInputBox\b|\bInStr\b|\bInstrRev\b|\bIsArray\b|\bIsDate\b|\bIsEmpty\b|\bIsNull\b|\bIsNumeric\b|\bIsObject\b|\bJoin\b|\bLBound\b|\bLCase\b|\bLeft\b|\bLen\b|\bLink\b|\bLoadPicture\b|\bLocation\b|\bLog\b|\bLTrim\b|\bRTrim\b|\bTrim\b|\bMid\b|\bMinute\b|\bMonth\b|\bMonthName\b|\bMsgBox\b|\bNavigator\b|\bNow\b|\bOct\b|\bReplace\b|\bRight\b|\bRnd\b|\bRound\b|\bScriptEngine\b|\bScriptEngineBuildVersion\b|\bScriptEngineMajorVersion\b|\bScriptEngineMinorVersion\b|\bSecond\b|\bSgn\b|\bSin\b|\bSpace\b|\bSplit\b|\bSqr\b|\bStrComp\b|\bString\b|\bStrReverse\b|\bTan\b|\bTime\b|\bTextStream\b|\bTimeSerial\b|\bTimeValue\b|\bTypeName\b|\bUBound\b|\bUCase\b|\bVarType\b|\bWeekday\b|\bWeekDayName\b|\bWindow\b|\bYear\b)" sText=re.Replace(sText,"<font color=red>$1</font>") '转换字符串为[紫色] re.Pattern="(""[^""]*"")" sText=re.Replace(sText,"<font color=#FF33FF>$1</font>") sText = Replace(sText, CHR(34), """) sText = Replace(sText, CHR(39), "'") ChangeVbToColor=sText End Function
Function HTMLEncode(fString) If Not isnull(fString) Then fString = replace(fString, "&", "&") fString = replace(fString, ">", ">") fString = replace(fString, "<", "<") fString = replace(fString, CHR(32), " ") fString = replace(fString, CHR(9), " ") fString = Replace(fString, CHR(13), "") fString = Replace(fString, CHR(10) & CHR(10), "</P><P> ") fString = Replace(fString, CHR(10), "<BR> ") HTMLEncode = fString Else HTMLEncode="" End If End Function Function GGG(ByVal sText) dim re,name,strTemplate,Matches,i Dim oneReg set re=new RegExp re.IgnoreCase =true re.Global=true 're.Pattern= "<(.*)>.*<\/\1>" re.Pattern="Function (\w+)(\([^\)]*\))?(.[^(End Function)]*)End Function" Set Matches=re.Execute(sText) alert sText alert Matches.Count For i =0 to Matches.Count-1 alert Matches(i).SubMatches(0)&"<br>" Next End Function </SCRIPT> </body> </html>
|