在word中使用notepad++实现代码的语法高亮

mac2022-06-30  35

转载自: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脚本

由于是代码,所以推荐中文使用宋体(注释中),而英文使用等宽字体(courier new)。

-------------------------------------

最近我经常在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

 

下面是我给出的使用说明,原文没给出使用说明。

使用方法: 1) 首先为当前文档新定义一个样式,命名为"ccode",专门用来对c代码进行格式化。由于是代码,所以推荐中文使用宋体(注释中),而英文使用等宽字体(courier new)。建立样式的步骤:在word2003中,“格式” → “新样式”

2)将上面的vba代码拷贝到文档中,步骤:在word2003中,“工具” → “宏” → ”VB编辑器“ → ”Normal工程“ → ”Microsoft Word 对象“ ,双击 ”thisDocument"对象,将上面的代码拷贝到新开的窗口中。 当然你也可以把ccode样式和highlight脚本保存到normal模板中,这样以后你再写代码的时候就可以直接用了,不用自己再辛苦定义这些了。 3)选定代码文本,然后执行highlight脚本: “格式” → “宏” → “宏”, 选择SyntaxHighlight宏,然后执行就可以了。 如果想定制语法高亮,那么修改上面的脚本就是了。

转载于:https://www.cnblogs.com/jinhong-lu/p/4559526.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)