+ -
当前位置:首页 → 问答吧 → 给语法高亮插件chili加了一个vbscript高亮功能

给语法高亮插件chili加了一个vbscript高亮功能

时间:2010-02-02

来源:互联网

jquery插件chili是一个非常棒的代码语法高亮插件,可以对各种代码进行很好看的语法高亮。它的最新版是2,2版,下载地址:
http://code.google.com/p/jquery-chili-js/downloads/list
但是它有一个缺点,就是无法对vbscript语言进行高亮。这个缺点令我有些愤怒:为什么chili作者偏偏疏省了vbscript呢?
事实上,我记得另一个语法高亮插件SyntaxHighlighter也不能很好地对vbscript进行语法高亮。
幸好,虽然chili的作者没有写vbscript的语法高亮功能,但也难不倒我。我自己动手写了一个vbscript的语法高亮功能,作为对chili的补充。
我写的这个vbscript能对多数vbscript代码进行很好的高亮,颜色看起来已经很像Dreamweaver了。但是,它也不算完美。最突出的一点是:它无法对vbscript的注释语句进行识别加灰。vbscript的注释语句是一个撇号'打头的语句,而且这个撇号不能在字符串中。我怎么改正则表达式都无法很好的匹配到这个条件。希望我的这个帖子能起到抛砖引玉效果,引来高手对它进行更进一步的修改。
废话不说,先上代码:把下面这段代码加到recipes.js的最后面就可以了:
复制代码
  1. ChiliBook.recipes["vbscript.js"]={
  2.       _name: 'vbscript'
  3.     , _case: false
  4.     , _main: {
  5.          string: {
  6.               _match: /(?:\"[^\"\\\n]*(?:\\.[^\"\\\n]*)*\")/
  7.               ,_case: false
  8.             , _style: 'color: green;'
  9.         }
  10.         , num: {
  11.               _match: /\b[+-]?(?:\d*\.?\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?\b/
  12.               ,_case: false
  13.             , _style: 'color: red;'
  14.         }
  15.         , statement: {
  16.               _match: /\b((Case)|(Class)|(Const)|(Dim)|(Do)|(Each)|(Else)|(Elseif)|(Empty)|(End)|(Erase)|(Execute)|(FALSE)|(For)|(Function)|(Get)|(Goto)|(If)|(Let)|(Loop)|(Next)|(Nothing)|(Null)|(On)|(Private)|(Public)|(ReDim)|(Resume\s+Next)|(Select)|(Set)|(Sub)|(Then)|(To)|(True)|(Wend)|(While)|(With))\b/
  17.               ,_case: false
  18.             , _style: 'color: blue; font-weight: bold;'
  19.         }
  20.         , object: {
  21.               _match: /\b((RegExp)|(Array)|(Request\.(TotalBytes|BinaryRead|Form(\.count)?|Querystring(\.count)?|Cookies(\.Attribute)?|ServerVariables|ClientCertificate))|(Response\.(buffer|CatchControl|Charset|ContentType|cookies|Expires|ExpiresAbsolute|IsClientConnected|PICS|Status|AddHeader|AppendTolog|BinaryWrite|Clear|End|Flush|Redirect|Write))|(Application(\.(contents|remove|removeall|lock|unlock))?)|(Session(\.(contents(\.remove|\.removeall)|staticobjects|sessionid|timeout|codepage|lcid|abandon))?)|(Server\.(createobject|execute|getlastError|htmlencode|mappath|transfer|urlencode))|(Error)|(Err(\.(description|helpcontent|helpfile|number|source|clear|Raise))?))\b/
  22.               ,_case: false
  23.             , _style: 'color: #990099;'
  24.         }
  25.         , 'function': {
  26.               _match: /\b((Abs)|(Array)|(Asc)|(Atn)|(CBool)|(CByte)|(CCur)|(CDate)|(CDbl)|(Chr)|(CInt)|(CLng)|(Cos)|(CSng)|(CStr)|(Date)|(DateAdd)|(DateDiff)|(DatePart)|(DateSerial)|(DateValue)|(Day)|(Eval)|(Exp)|(Filter)|(Fix)|(FormatCurrency)|(FormatDateTime)|(FormatNumber)|(FormatPercent)|(GetLocale)|(GetObject)|(GetRef)|(Hex)|(Hour)|(InputBox)|(InStr)|(InStrRev)|(Int)|(IsArray)|(IsDate)|(IsEmpty)|(IsNull)|(IsNumeric)|(IsObject)|(Join)|(LBound)|(LCase)|(Left)|(Len)|(LoadPicture)|(Log)|(LTrim)|(Mid)|(Minute)|(Month)|(MonthName)|(MsgBox)|(Now)|(Oct)|(Replace)|(RGB)|(Right)|(Rnd)|(Round)|(RTrim)|(ScriptEngine)|(ScriptEngineBuildVersion)|(ScriptEngineMajorVersion)|(ScriptEngineMinorVersion)|(Second)|(Sgn)|(Sin)|(Space)|(Split)|(Sqr)|(StrComp)|(StrReverse)|(Tan)|(Time)|(Timer)|(TimeSerial)|(TimeValue)|(Trim)|(TypeName)|(UBound)|(UCase)|(VarType)|(Weekday)|(WeekdayName)|(Year))\b/
  27.               ,_case: false
  28.             , _style: 'color: DarkOrchid;'
  29.         }
  30.         , method : {
  31.       _match: '/\b((AbsolutePage)|(AbsolutePosition)|(ActiveCommand)|(ActiveConnection)|(ActualSize)|(AddNew)|(Append)|(AppendChunk)|(Attributes)|(BeginTrans)|(BeginTransComplete)|(BOF)|(Bookmark)|(CacheSize)|(Cancel)|(CancelBatch)|(CancelUpdate)|(Charset)|(Clear)|(Clone)|(Close)|(CommandText)|(CommandTimeout)|(CommandType)|(CommitTrans)|(CommitTransComplete)|(CompareBookmarks)|(ConnectComplete)|(ConnectionString)|(ConnectionTimeout)|(CopyRecord)|(CopyTo)|(Count)|(CreateParameter)|(CursorLocation)|(CursorType)|(DataMember)|(DataSource)|(DefaultDatabase)|(DefinedSize)|(Delete)|(DeleteRecord)|(Description)|(Direction)|(Disconnect)|(EditMode)|(EndOfRecordset)|(EOF)|(EOS)|(Errors)|(Execute)|(ExecuteComplete)|(FetchComplete)|(FetchProgress)|(FieldChangeComplete)|(Fields)|(Filter)|(Find)|(Flush)|(GetChildren)|(GetChunk)|(GetRows)|(GetString)|(HelpContext)|(HelpFile)|(Index)|(InfoMessage)|(IsolationLevel)|(Item)|(LineSeparator)|(LoadFromFile)|(LockType)|(MarshalOptions)|(MaxRecords)|(Mode)|(Move)|(MoveComplete)|(MoveFirst)|(MoveLast)|(MoveNext)|(MovePrevious)|(MoveRecord)|(Name)|(NativeError)|(NextRecordset)|(Number)|(NumericScale)|(Open)|(OpenSchema)|(OriginalValue)|(PageCount)|(PageSize)|(Parameters)|(ParentURL)|(Position)|(Precision)|(Prepared)|(Properties)|(Provider)|(Read)|(ReadText)|(RecordChangeComplete)|(RecordCount)|(RecordsetChangeComplete)|(RecordType)|(Refresh)|(Requery)|(Resync)|(RollbackTrans)|(RollbackTransComplete)|(Save)|(SaveToFile)|(Seek)|(SetEOS)|(Size)|(SkipLine)|(Sort)|(Source)|(SQLState)|(Stat)|(State)|(Status)|(StayInSync)|(Supports)|(Type)|(UnderlyingValue)|(Update)|(UpdateBatch)|(Value)|(Version)|(WillChangeField)|(WillChangeRecord)|(WillChangeRecordset)|(WillConnect)|(WillExecute)|(WillMove)|(Write)|(WriteText))\b/'
  32.       ,_case: false
  33.       ,_style: 'color: DeepPink;'
  34.         
  35.         }
  36.         , "const" : {
  37.       _match:'/\b(vbArray|vbBinaryCompare|vbBlack|vbBlue|vbBoolean|vbByte|vbCr|vbCrLf|vbCurrency|vbCyan|vbDataObject|vbDate|vbDecimal|vbDouble|vbEmpty|vbError|vbFirstFourDays|vbFirstFullWeek|vbFirstJan1|vbFormFeed|vbFriday|vbGeneralDate|vbGreen|vbInteger|vbLf|vbLong|vbLongDate|vbLongTime|vbMagenta|vbMonday|vbNewLine|vbNull|vbNullChar|vbNullString|vbObject|vbObjectError|vbRed|vbSaturday|vbShortDate|vbShortTime|vbSingle|vbString|vbSunday|vbTab|vbTextCompare|vbThursday|vbTuesday|vbUseSystem|vbUseSystemDayOfWeek|vbVariant|vbVerticalTab|vbWednesday|vbWhite|vbYellow)\b/'
  38.       ,_case: false
  39.       ,_style: 'color:OliveDrab'
  40.         
  41.         }
  42.         , event : {
  43.       _match: '/\b(Initialize|Terminate|application_onstart|application_onend|session_onstart|session_onend)\b/'
  44.       ,_case: false
  45.       ,_style: 'color: blue;'
  46.         }
  47.         , operator: {
  48.               _match: /(\+|-|=|\*|\/|\bmod\b|^|&)/
  49.             , _style: 'color: RoyalBlue; font-weight: bold;'
  50.         }
  51.     }
  52. }

作者: fanxiaojie   发布时间: 2010-02-02

再放一张效果图:

作者: fanxiaojie   发布时间: 2010-02-02

啊啊,为什么我的帖子没人顶?难道是因为我没有设置回复可读的缘故吗?
这下我要设置回复可读了!
下面是我改进并压缩过的Chili-2.2的下载包。
[replyview]
http://fanxiaojie.com/attachments/month_1002/20102314414.rar
[/replyvew]

作者: fanxiaojie   发布时间: 2010-02-03

啊啊,为什么我无法发回复可读帖?[replyview] [/replyview]标记居然原样显示出来了!!

作者: fanxiaojie   发布时间: 2010-02-03