转载自:http://blog.csdn.net/woohello/article/details/7621651
有时写文档时需要将代码粘贴到word中,但直接粘贴到word中的代码虽能保持换行与缩进等格式,但在一般代码编辑工具中的关键字高亮功能却无法实现,即粘贴到word中的代码不在具有丰富的色彩。使用一款免费软件——notepad++即可实现将关键字高亮的代码粘贴到word中。
首先用notepad++打开源代码文件。notepad++能识别C/C++、Java、matlab等多种语言的源代码。选中要粘贴的代码(如果该代码文件中的所有内容均需要粘贴,则无需选中文字)。然后在选择 插件->NppExport->Copy HTML to clipboard。
然后在word中粘贴即可。
此外,关键字的颜色也可以根据自己的需求在notepad++中进行设置,设置方法:菜单->格式->语言格式设置
--------------------------------
也可以参考侯捷《word排版艺术》中的vba脚本
-------------------------------------
最近我经常在word 里面写东西,发现程序代码拷贝到word 里面就没有了在代码编辑器里面的那种语法高亮的效果,感觉不爽。于是我上网搜了搜,发现目前在word 中实现语法高亮的方法主要是通过安装一个插件。由于我先天的对插件比较反感,所以自己动手,使用word 等office 软件都支持的VBA (Visual BAsic For Application) 写了一个语法高亮的宏。
这个宏的功能比较简单,就是利用得到文档中选中部分的代码,然后分词,判断该词的类别,然后着色。我现在使用的分词方法是VBA 提供的,大部分情况下和我们预期的比较一致。但是在某些情况下,比如连续的分隔符,这种分词方法会和C 语言分析器的分词结果不同的。
这个宏除了可以语法着色,还可以为代码标注行号。(听说侯捷在《word 排版艺术》一书中也有一个为代码添加行号的宏。不知道他的宏和我的宏是否雷同。如有雷同,纯属巧合:)
' script to high light code In document Private Function isKeyword(w) As Boolean Dim keys As New Collection With keys .Add " if " : .Add " else " : .Add " switch " : .Add " case " : .Add " default " : .Add " break " .Add " goto " : .Add " return " : .Add " for " : .Add " while " : .Add " do " : .Add " continue " .Add " typedef " : .Add " sizeof " : .Add " NULL " : .Add " new " : .Add " delete " : .Add " throw " .Add " try " : .Add " catch " : .Add " namespace " : .Add " operator " : .Add " this " : .Add " const_cast " .Add " static_cast " : .Add " dynamic_cast " : .Add " reinterpret_cast " : .Add " true " .Add " false " : .Add " null " : .Add " using " : .Add " typeid " : .Add " and " : .Add " and_eq " .Add " bitand " : .Add " bitor " : .Add " compl " : .Add " not " : .Add " not_eq " : .Add " or " .Add " or_eq " : .Add " xor " : .Add " xor_eq " End With isKeyword = isSpecial(w, keys) End Function Private 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 = False End Function Private 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 Function Private Function isType(ByVal w As String ) As Boolean Dim types As New Collection With types .Add " void " : .Add " struct " : .Add " union " : .Add " enum " : .Add " char " : .Add " short " : .Add " int " .Add " long " : .Add " double " : .Add " float " : .Add " signed " : .Add " unsigned " : .Add " const " : .Add " static " .Add " extern " : .Add " auto " : .Add " register " : .Add " volatile " : .Add " bool " : .Add " class " : .Add " private " .Add " protected " : .Add " public " : .Add " friend " : .Add " inlIne " : .Add " template " : .Add " virtual " .Add " asm " : .Add " explicit " : .Add " typename " End With isType = isSpecial(w, types) End Function Sub 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 SetLIneNumber End Sub Private 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 l End Sub
转载于:https://www.cnblogs.com/jinhong-lu/p/4559526.html
相关资源:JAVA上百实例源码以及开源项目