Word
准备:首先完成当前所有内容,建议把代码放入单独的文本框中,方便处理,也有较好的视觉效果。记得一定要拷贝一份副本!因为很可能因为代码量比较多,处理宏的时候卡死,只能强制退出WORD了。
当前文档新定义一个样式,命名为'code',专门用来对代码进行格式化。由于是代码,所以推荐中文使用黑体(注释等),而英文使用等宽字体(courier new)。步骤如图。
选中代码,单击样式库 ccode,将代码应用该样式
新建宏,步骤如图
将VBA代码(在下一步中)拷贝进去,保存后关闭 (有VBA或相关程序经验者可根据自己需要进行相关修改,如关键词和高亮颜色等)
'script to high light code In documentPrivate Function isKeyword(w) As Boolean Dim keys As New Collection With keys .Add 'if': .Add 'else': .Add 'elseif': .Add 'case': .Add 'switch': .Add 'break' .Add 'for': .Add 'continue': .Add 'do': .Add 'while': .Add 'foreach': .Add 'echo' .Add 'define': .Add 'array': .Add 'NULL': .Add 'function': .Add 'include': .Add 'return' .Add 'global': .Add 'as': .Add 'die': .Add 'header': .Add 'this': .Add 'empty' .Add 'isset': .Add 'mysql_fetch_assoc': .Add 'class': .Add 'style' .Add 'name': .Add 'value': .Add 'type': .Add 'width': .Add '_POST': .Add '_GET' End With isKeyword = isSpecial(w, keys)End FunctionPrivate Function isSpecial(ByVal w As String, ByRef col As Collection) As Boolean For Each i In col If w = i Then isSpecial = True Exit Function End If Next isspeical = FalseEnd FunctionPrivate Function isOperator(w) As Boolean Dim ops As New Collection With ops .Add '+': .Add '-': .Add '*': .Add '/': .Add '&': .Add '^': .Add ';' .Add '%': .Add '#': .Add '!': .Add ':': .Add ',': .Add '.' .Add '||': .Add '&&': .Add '|': .Add '=': .Add '++': .Add '--' .Add ''': .Add '''' End With isOperator = isSpecial(w, ops)End FunctionPrivate Function isType(ByVal w As String) As Boolean Dim types As New Collection With types .Add 'SELECT': .Add 'FROM': .Add 'WHERE': .Add 'INSERT': .Add 'INTO': .Add 'VALUES': .Add 'ORDER' .Add 'BY': .Add 'LIMIT': .Add 'ASC': .Add 'DESC': .Add 'UPDATE': .Add 'DELETE': .Add 'COUNT' .Add 'html': .Add 'head': .Add 'title': .Add 'body': .Add 'p': .Add 'h1': .Add ' h2' .Add 'h3': .Add 'center': .Add 'ul': .Add 'ol': .Add 'li': .Add 'a' .Add 'input': .Add 'form': .Add 'b' End With isType = isSpecial(w, types)End FunctionSub SyntaxHighlight() Dim wordCount As Integer Dim d As Integer ' set the style of selection Selection.Style = 'ccode' d = 0 wordCount = Selection.Words.Count Selection.StartOf wdWord While d < wordCount d = d + Selection.MoveRight(wdWord, 1, wdExtend) w = Selection.Text If isKeyword(Trim(w)) = True Then Selection.Font.Color = wdColorBlue ElseIf isType(Trim(w)) = True Then Selection.Font.Color = wdColorDarkRed Selection.Font.Bold = True ElseIf isOperator(Trim(w)) = True Then Selection.Font.Color = wdColorBrown ElseIf Trim(w) = '//' Then 'lIne comment Selection.MoveEnd wdLine, 1 commentWords = Selection.Words.Count d = d + commentWords Selection.Font.Color = wdColorGreen Selection.MoveStart wdWord, commentWords ElseIf Trim(w) = '/*' Then 'block comment While Selection.Characters.Last <> '/' Selection.MoveLeft wdCharacter, 1, wdExtend Selection.MoveEndUntil ('*') Selection.MoveRight wdCharacter, 2, wdExtend Wend commentWords = Selection.Words.Count d = d + commentWords Selection.Font.Color = wdColorGreen Selection.MoveStart wdWord, commentWords End If 'move the start of selection to next word Selection.MoveStart wdWord Wend ' prepare For set lIne number Selection.MoveLeft wdWord, wordCount, wdExtend SetLIneNumberEnd SubPrivate Sub SetLIneNumber() Dim lines As Integer lines = Selection.Paragraphs.Count Selection.StartOf wdParagraph For l = 1 To lines lIneNum = l & ' ' If l < 10 Then lIneNum = lIneNum & ' ' End If Selection.Text = lIneNum Selection.Font.Bold = False Selection.Font.Color = wdColorAutomatic p = Selection.MoveDown(wdLine, 1, wdMove) Selection.StartOf wdLine Next End Sub
选定代码文本,然后执行highlight脚本: “视图”- “宏”- 选中“SyntaxHighlight”-“运行”,然后执行就可以了。处理较长代码时需要一定时间,请耐心等待。
处理前一定要对原文章进行备份,以免前功尽弃。
处理较长代码时需要一定时间,请耐心等待。