Word中的代码怎样语法高亮
在平常我们粘贴代码到Word中的时候,经常会遇到代码粘贴到Word中后没有语法高亮,看着很乱很不友好,Word自带的样式---语法使用着也不尽人意,
网上有很多做法可以使得在插入在Word中的代码能够高亮显示,有使用notepad++先编辑再复制到Word中的,
也有使用网上的代码复制到转换网站,然后再复制到Word实现代码高亮,也有使用Word插件的,
但是这些方法个人认为多次转换复制太过麻烦,Word插件用着自己又觉得不太放心,故,这里介绍使用Word宏来实现语法高亮。
此宏的代码一部分来自互联网,原作者不是太清楚,在这里感谢提供基础源码的作者,这里附上链接https://www.xuebuyuan.com/1843358.html
建议把这个宏做成模板,需要使用的时候引入模板即可,此处我做好的模板可以在这里下载 template
Linux 下可用命令的高亮支持这里只做了一部分的命令,如果要支持所有的Linux可用命令,请自行添加。
如果要添加关键字支持Linux下所有命令的高亮显示,请注意:
1、添加命令的关键字在VB集合中时要注意,定义在单个函数中用 :Add "keyword" 添加的关键字不宜过多,否则在执行宏时会报“执行过程过长”的错误
2、解决的办法是用多个函数来定义关键字集合,然后再在高亮显示的执行函数中做处理即可。
为了让代码看起来更加整洁,这里我们将代码写在1 X 1 的表格中,原始效果如图:
接下来使用宏来进行语法着色,效果如下:
以下贴出源代码,供大家参考,此代码一部分来自互联网,原作者不是太清楚,在这里感谢提供基础源码的作者,这里附上链接 https://www.xuebuyuan.com/1843358.html
以下是我个人二次开发的源代码,还有一些不足的地方,甚至一些小BUG(个人对VB不是很了解),只能实现上述一些基本功能,希望大家能够继续改进,讨论交流和评论
有兴趣的也可以进行二次开发,实现自己需要的功能。
1 '宏在2019 年 8 月 2 日创建 2 ' 作者:ZhongYuanMei 3 4 '设置行号 5 Private Sub SetLIneNumber() 6 7 Dim lines As Integer 8 9 lines = Selection.Paragraphs.Count 10 11 Selection.StartOf wdParagraph 12 13 For l = 1 To lines 14 15 lIneNum = l & " " 16 17 If l < 10 Then 18 19 lIneNum = lIneNum & " " 20 21 End If 22 23 Selection.Text = lIneNum 24 25 Selection.Font.Bold = False 26 27 Selection.Font.Color = wdColorAutomatic 28 29 p = Selection.MoveDown(wdLine, 1, wdMove) 30 31 Selection.StartOf wdLine 32 33 Next 34 35 End Sub 36 ' 处理集合 37 Private Function isSpecial(ByVal w As String, ByRef col As Collection) As Boolean 38 39 For Each i In col 40 41 If w = i Then 42 43 isSpecial = True 44 45 Exit Function 46 47 End If 48 49 Next 50 51 isspeical = False 52 53 End Function 54 '其它符号 55 Private Function isOthers(ByVal w As String) As Boolean 56 57 Dim others As New Collection 58 59 With others 60 61 .Add "--": .Add "error": .Add "$": .Add """": .Add "{": .Add "}": .Add "[": .Add "]": .Add "root": .Add "@": .Add "(": .Add ")": .Add "()" 62 63 64 End With 65 66 isOthers = isSpecial(w, others) 67 68 End Function 69 '常见的操作运算符 70 Private Function isOperator(w) As Boolean 71 72 Dim ops As New Collection 73 74 With ops 75 76 .Add "+": .Add "-": .Add "*": .Add "/": .Add "&": .Add "^": .Add ";" 77 78 .Add "%": .Add "!": .Add ":": .Add ",": .Add "." 79 80 .Add "||": .Add "&&": .Add "|": .Add "=": .Add "++": .Add "--" 81 82 .Add "'": .Add """": .Add "===": .Add "==": .Add "**": .Add "+=": .Add "-=": .Add "*=": .Add "/=": .Add "%=" 83 84 85 End With 86 87 isOperator = isSpecial(w, ops) 88 89 End Function 90 91 'C语言关键字 92 Private Function isCLANGKeyword(w) As Boolean 93 94 Dim keys As New Collection 95 96 With keys 97 98 .Add "if": .Add "else": .Add "elseif": .Add "case": .Add "switch": .Add "break" 99 100 .Add "for": .Add "continue": .Add "do": .Add "while": .Add "foreach": .Add "echo" 101 102 .Add "define": .Add "array": .Add "NULL": .Add "function": .Add "include": .Add "return" 103 104 .Add "global": .Add "as": .Add "die": .Add "header": .Add "this": .Add "empty" 105 106 .Add "isset": .Add "mysql_fetch_assoc": .Add "class": .Add "style" 107 108 .Add "name": .Add "value": .Add "type": .Add "width": .Add "_POST": .Add "_GET" 109 110 End With 111 112 isCLANGKeyword = isSpecial(w, keys) 113 114 End Function 115 'MySQL关键字 116 Private Function isMySQLKeyword(w) As Boolean 117 118 Dim keys As New Collection 119 120 With keys 121 .Add "ADD": .Add "ALL": .Add "ALTER": .Add "ANALYZE": .Add "AND": .Add "AS": .Add "ASC": .Add "ASENSITIVE": .Add "BEFORE": .Add "BETWEEN" 122 .Add "BIGINT": .Add "BINARY": .Add "BLOB": .Add "BOTH": .Add "BY": .Add "CALL": .Add "CASCADE": .Add "CASE": .Add "CHANGE" 123 .Add "CHAR": .Add "CHARACTER": .Add "CHECK": .Add "COLLATE": .Add "COLUMN": .Add "CONDITION": .Add "CONNECTION" 124 .Add "CONSTRAINT": .Add "CONTINUE": .Add "CONVERT": .Add "CREATE": .Add "CROSS": .Add "CURRENT_DATE": .Add "CURRENT_TIME" 125 .Add "CURRENT_TIMESTAMP": .Add "CURRENT_USER": .Add "CURSOR": .Add "DATABASE": .Add "DATABASES": .Add "DAY_HOUR" 126 .Add "DAY_MICROSECOND": .Add "DAY_MINUTE": .Add "DAY_SECOND": .Add "DEC": .Add "DECIMAL": .Add "DECLARE": .Add "DEFAULT" 127 .Add "DELAYED": .Add "DELETE": .Add "DESC": .Add "DESCRIBE": .Add "DETERMINISTIC": .Add "DISTINCT": .Add "DISTINCTROW" 128 .Add "DIV": .Add "DOUBLE": .Add "DROP": .Add "DUAL": .Add "EACH": .Add "ELSE": .Add "ELSEIF": .Add "ENCLOSED": .Add "ESCAPED" 129 .Add "EXISTS": .Add "EXIT": .Add "EXPLAIN": .Add "FALSE": .Add "FETCH": .Add "FLOAT": .Add "FLOAT4": .Add "FLOAT8": .Add "FOR" 130 .Add "FORCE": .Add "FOREIGN": .Add "FROM": .Add "FULLTEXT": .Add "GOTO": .Add "GRANT": .Add "GROUP": .Add "HAVING" 131 .Add "HIGH_PRIORITY": .Add "HOUR_MICROSECOND": .Add "HOUR_MINUTE": .Add "HOUR_SECOND": .Add "IF": .Add "IGNORE" 132 .Add "IN": .Add "INDEX": .Add "INFILE": .Add "INNER": .Add "INOUT": .Add "INSENSITIVE": .Add "INSERT": .Add "INT": .Add "INT1" 133 .Add "INT2": .Add "INT3": .Add "INT4": .Add "INT8": .Add "INTEGER": .Add "INTERVAL": .Add "INTO""": .Add "IS": .Add "ITERATE" 134 .Add "JOIN": .Add "KEY": .Add "KEYS": .Add "KILL": .Add "LABEL": .Add "LEADING": .Add "LEAVE": .Add "LEFT": .Add "LIKE" 135 .Add "LIMIT": .Add "LINEAR": .Add "LINES": .Add "LOAD": .Add "LOCALTIME": .Add "LOCALTIMESTAMP": .Add "LOCK": .Add "LONG" 136 .Add "LONGBLOB": .Add "LONGTEXT": .Add "LOOP": .Add "LOW_PRIORITY": .Add "MATCH": .Add "MEDIUMBLOB": .Add "MEDIUMINT" 137 .Add "MEDIUMTEXT": .Add "MIDDLEINT": .Add "MINUTE_MICROSECOND": .Add "MINUTE_SECOND": .Add "MOD": .Add "MODIFIES" 138 .Add "NATURAL": .Add "NOT": .Add "NO_WRITE_TO_BINLOG": .Add "NULL": .Add "NUMERIC": .Add "ON": .Add "OPTIMIZE" 139 .Add "OPTION": .Add "OPTIONALLY": .Add "OR": .Add "ORDER": .Add "OUT": .Add "OUTER": .Add "OUTFILE": .Add "PRECISION" 140 .Add "PRIMARY": .Add "PROCEDURE": .Add "PURGE": .Add "RAID0": .Add "RANGE": .Add "READ": .Add "READS": .Add "REAL" 141 .Add "REFERENCES": .Add "REGEXP": .Add "RELEASE": .Add "RENAME": .Add "REPEAT": .Add "REPLACE": .Add "REQUIRE" 142 .Add "RESTRICT": .Add "RETURN": .Add "REVOKE": .Add "RIGHT": .Add "RLIKE": .Add "SCHEMA": .Add "SCHEMAS" 143 .Add "SECOND_MICROSECOND": .Add "SELECT": .Add "SENSITIVE": .Add "SEPARATOR": .Add "SET": .Add "SHOW": .Add "SMALLINT" 144 .Add "SPATIAL": .Add "SPECIFIC": .Add "SQL": .Add "SQLEXCEPTION": .Add "SQLSTATE": .Add "SQLWARNING": .Add "SQL_BIG_RESULT" 145 .Add "SQL_CALC_FOUND_ROWS": .Add "SQL_SMALL_RESULT": .Add "SSL": .Add "STARTING": .Add "STRAIGHT_JOIN": .Add "TABLE" 146 .Add "TERMINATED": .Add "THEN": .Add "TINYBLOB": .Add "TINYINT": .Add "TINYTEXT": .Add "TO": .Add "TRAILING": .Add "TRIGGER" 147 .Add "TRUE": .Add "UNDO": .Add "UNION": .Add "UNIQUE": .Add "UNLOCK": .Add "UNSIGNED": .Add "UPDATE": .Add "USAGE": .Add "USE" 148 .Add "USING": .Add "UTC_DATE": .Add "UTC_TIME": .Add "UTC_TIMESTAMP": .Add "VALUES": .Add "VARBINARY": .Add "VARCHAR" 149 .Add "VARCHARACTER": .Add "VARYING": .Add "WHEN": .Add "WHERE": .Add "WHILE": .Add "WITH": .Add "WRITE": .Add "X509" 150 .Add "XOR": .Add "YEAR_MONTH": .Add "add": .Add "all": .Add "alter": .Add "analyze": .Add "and": .Add "as": .Add "asc" 151 .Add "asensitive": .Add "before": .Add "between": .Add "bigint": .Add "binary": .Add "blob": .Add "both": .Add "by" 152 .Add "call": .Add "cascade": .Add "case": .Add "change": .Add "char": .Add "character": .Add "check": .Add "collate" 153 .Add "column": .Add "condition": .Add "connection": .Add "constraint": .Add "continue": .Add "convert": .Add "create" 154 .Add "cross": .Add "current_date": .Add "current_time": .Add "current_timestamp": .Add "current_user": .Add "cursor" 155 .Add "database": .Add "databases": .Add "day_hour": .Add "day_microsecond": .Add "day_minute": .Add "day_second" 156 .Add "dec": .Add "decimal": .Add "declare": .Add "default": .Add "delayed": .Add "delete": .Add "desc": .Add "describe" 157 .Add "deterministic": .Add "distinct": .Add "distinctrow": .Add "div": .Add "double": .Add "drop": .Add "dual": .Add "each" 158 .Add "else": .Add "elseif": .Add "enclosed": .Add "escaped": .Add "exists": .Add "exit": .Add "explain": .Add "false" 159 .Add "fetch": .Add "float": .Add "float4": .Add "float8": .Add "for": .Add "force": .Add "foreign": .Add "from" 160 .Add "fulltext": .Add "goto": .Add "grant": .Add "group": .Add "having": .Add "high_priority": .Add "hour_microsecond" 161 .Add "hour_minute": .Add "hour_second": .Add "if": .Add "ignore": .Add "in": .Add "index": .Add "infile": .Add "inner" 162 .Add "inout": .Add "insensitive": .Add "insert": .Add "int": .Add "int1": .Add "int2": .Add "int3": .Add "int4": .Add "int8" 163 .Add "integer": .Add "interval": .Add "into""": .Add "is": .Add "iterate": .Add "join": .Add "key": .Add "keys": .Add "kill" 164 .Add "label": .Add "leading": .Add "leave": .Add "left": .Add "like": .Add "limit": .Add "linear": .Add "lines": .Add "load" 165 .Add "localtime": .Add "localtimestamp": .Add "lock": .Add "long": .Add "longblob": .Add "longtext": .Add "loop" 166 .Add "low_priority": .Add "match": .Add "mediumblob": .Add "mediumint": .Add "mediumtext": .Add "middleint" 167 .Add "minute_microsecond": .Add "minute_second": .Add "mod": .Add "modifies": .Add "natural": .Add "not" 168 .Add "no_write_to_binlog": .Add "null": .Add "numeric": .Add "on": .Add "optimize": .Add "option": .Add "optionally" 169 .Add "or": .Add "order": .Add "out": .Add "outer": .Add "outfile": .Add "precision": .Add "primary": .Add "procedure" 170 .Add "purge": .Add "raid0": .Add "range": .Add "read": .Add "reads": .Add "real": .Add "references": .Add "regexp" 171 .Add "release": .Add "rename": .Add "repeat": .Add "replace": .Add "require": .Add "restrict": .Add "return" 172 .Add "revoke": .Add "right": .Add "rlike": .Add "schema": .Add "schemas": .Add "second_microsecond": .Add "select" 173 .Add "sensitive": .Add "separator": .Add "set": .Add "show": .Add "smallint": .Add "spatial": .Add "specific": .Add "sql" 174 .Add "sqlexception": .Add "sqlstate": .Add "sqlwarning": .Add "sql_big_result": .Add "sql_calc_found_rows" 175 .Add "sql_small_result": .Add "ssl": .Add "starting": .Add "straight_join": .Add "table": .Add "terminated" 176 .Add "then": .Add "tinyblob": .Add "tinyint": .Add "tinytext": .Add "to": .Add "trailing": .Add "trigger": .Add "true" 177 .Add "undo": .Add "union": .Add "unique": .Add "unlock": .Add "unsigned": .Add "update": .Add "usage": .Add "use" 178 .Add "using": .Add "utc_date": .Add "utc_time": .Add "utc_timestamp": .Add "values": .Add "varbinary": .Add "varchar" 179 .Add "varcharacter": .Add "varying": .Add "when": .Add "where": .Add "while": .Add "with": .Add "write": .Add "x509" 180 .Add "xor": .Add "year_month" 181 End With 182 183 isMySQLKeyword = isSpecial(w, keys) 184 185 End Function 186 187 'Python语言的关键字 188 Private Function isPythonLANGKeyword(w) As Boolean 189 190 Dim keys As New Collection 191 192 With keys 193 .Add "False": .Add "def": .Add "if": .Add "raise": .Add "None": .Add "del": .Add "import": .Add "return": .Add "True": .Add "elif": .Add "in" 194 .Add "try": .Add "and": .Add "else": .Add "is": .Add "while": .Add "as": .Add "except": .Add "lambda": .Add "with": .Add "assert": .Add "finally" 195 .Add "nonlocal": .Add "yield": .Add "break": .Add "for": .Add "not": .Add "class": .Add "from": .Add "or": .Add "continue": .Add "global": .Add "pass": .Add "self" 196 197 End With 198 199 isPythonLANGKeyword = isSpecial(w, keys) 200 201 End Function 202 203 'Java语言关键字 204 Private Function isJavaLANGKeyword(w) As Boolean 205 206 Dim keys As New Collection 207 208 With keys 209 .Add "abstract": .Add "asm": .Add "auto": .Add "bool": .Add "boolean": .Add "break": .Add "byte": .Add "case": .Add "cast": .Add "catch": .Add "char" 210 .Add "class": .Add "const": .Add "continue": .Add "default": .Add "delete": .Add "do": .Add "double": .Add "dynamic_case": .Add "else": .Add "enum": .Add "explicit": .Add "export": .Add "extern": .Add "extends": .Add "false": .Add "final" 211 .Add "finally": .Add "friend": .Add "float": .Add "for": .Add "goto": .Add "if": .Add "inline": .Add "implements": .Add "import": .Add "instanceof": .Add "inner": .Add "int" 212 .Add "interface": .Add "long": .Add "native": .Add "new": .Add "null": .Add "operator": .Add "package": .Add "private": .Add "protected": .Add "public": .Add "return" 213 .Add "short": .Add "sigend": .Add "static": .Add "static_cast": .Add "struct": .Add "super": .Add "switch": .Add "synchronized": .Add "template": .Add "this": .Add "throw": .Add "throws": .Add "transient": .Add "true" 214 .Add "try": .Add "typedef": .Add "unsigned": .Add "union": .Add "using": .Add "virtual": .Add "void": .Add "volatile": .Add "while": .Add "include": .Add "std" 215 End With 216 217 isJavaLANGKeyword = isSpecial(w, keys) 218 219 End Function 220 'Java语言系统相关的关键字 221 Private Function isJavaSystemLANGKeyword(w) As Boolean 222 223 Dim keys As New Collection 224 225 With keys 226 227 .Add "System": .Add "String": .Add "StringBuffer": .Add "Runnable": .Add "Thread": .Add "Exception": .Add "IOException": .Add "cout": .Add "cin": .Add "std": .Add "endl": .Add "vector" 228 229 End With 230 231 isJavaSystemLANGKeyword = isSpecial(w, keys) 232 233 End Function 234 235 'RHEL系列的系统常用命令 236 Private Function isRHELLANGKeyword(w) As Boolean 237 238 Dim keys As New Collection 239 240 With keys 241 .Add "cat": .Add "chattr": .Add "chgrp": .Add "chmod": .Add "chown": .Add "cksum": .Add "cmp": .Add "diff": .Add "diffstat" 242 .Add "file": .Add "find": .Add "git": .Add "gitview": .Add "indent": .Add "cut": .Add "ln": .Add "less": .Add "locate" 243 .Add "lsattr": .Add "mattrib": .Add "mc": .Add "mdel": .Add "mdir": .Add "mktemp": .Add "more": .Add "mmove": .Add "mread" 244 .Add "mren": .Add "mtools": .Add "mtoolstest": .Add "mv": .Add "od": .Add "paste": .Add "patch": .Add "rcp": .Add "rm": .Add "slocate" 245 .Add "split": .Add "tee": .Add "tmpwatch": .Add "touch": .Add "umask": .Add "which": .Add "cp": .Add "whereis": .Add "mcopy" 246 .Add "mshowfat": .Add "rhmask": .Add "scp ": .Add "awk": .Add "read": .Add "updatedb": .Add "col": .Add "colrm": .Add "comm" 247 .Add "csplit": .Add "ed": .Add "egrep": .Add "ex": .Add "fgrep": .Add "fmt": .Add "fold": .Add "grep": .Add "ispell": .Add "jed" 248 .Add "joe": .Add "join": .Add "look": .Add "mtype": .Add "pico": .Add "rgrep": .Add "sed": .Add "sort": .Add "spell": .Add "tr" 249 .Add "expr": .Add "uniq": .Add "wc": .Add "let": .Add " ": .Add "lprm": .Add "lpr": .Add "lpq": .Add "lpd": .Add "bye": .Add "ftp" 250 .Add "uuto": .Add "uupick": .Add "uucp": .Add "uucico": .Add "tftp": .Add "ncftp": .Add "ftpshut": .Add "ftpwho": .Add "ftpcount" 251 .Add "cd": .Add "df": .Add "dirs": .Add "du": .Add "edquota": .Add "eject": .Add "mcd": .Add "mdeltree": .Add "mdu": .Add "mkdir" 252 .Add "mlabel": .Add "mmd": .Add "mrd": .Add "mzip": .Add "pwd": .Add "quota": .Add "mount": .Add "mmount": .Add "rmdir": .Add "rmt" 253 .Add "stat": .Add "tree": .Add "umount": .Add "ls": .Add "quotacheck": .Add "quotaoff": .Add "lndir": .Add "repquota" 254 .Add "quotaon": .Add "badblocks": .Add "cfdisk": .Add "dd": .Add "e2fsck": .Add "ext2ed": .Add "fsck": .Add "fsck.minix" 255 .Add "fsconf": .Add "fdformat": .Add "hdparm": .Add "mformat": .Add "mkbootdisk": .Add "mkdosfs": .Add "mke2fs": .Add "mkfs.ext2" 256 .Add "mkfs.msdos": .Add "mkinitrd": .Add "mkisofs": .Add "mkswap": .Add "mpartition": .Add "swapon": .Add "symlinks": .Add "sync" 257 .Add "mbadblocks": .Add "mkfs.minix": .Add "fsck.ext2": .Add "fdisk": .Add "losetup": .Add "mkfs": .Add "sfdisk": .Add "swapoff" 258 .Add "apachectl": .Add "arpwatch": .Add "dip": .Add "getty": .Add "mingetty": .Add "uux": .Add "telnet": .Add "uulog": .Add "uustat" 259 .Add "ppp-off": .Add "netconfig": .Add "nc": .Add "httpd": .Add "ifconfig": .Add "minicom": .Add "mesg": .Add "dnsconf": .Add "wall" 260 .Add "netstat": .Add "ping": .Add "pppstats": .Add "samba": .Add "setserial": .Add "talk": .Add "traceroute": .Add "tty" 261 .Add "newaliases": .Add "uuname": .Add "netconf": .Add "write": .Add "statserial": .Add "efax": .Add "pppsetup": .Add "tcpdump" 262 .Add "ytalk": .Add "cu": .Add "smbd": .Add "testparm": .Add "smbclient": .Add "shapecfg": .Add "adduser": .Add "chfn": .Add "useradd" 263 .Add "date": .Add "exit": .Add "finger": .Add "fwhios": .Add "sleep": .Add "suspend": .Add "groupdel": .Add "groupmod": .Add "halt" 264 .Add "kill": .Add "last": .Add "lastb": .Add "login": .Add "logname": .Add "logout": .Add "ps": .Add "nice": .Add "procinfo" 265 .Add "top": .Add "pstree": .Add "reboot": .Add "rlogin": .Add "rsh": .Add "sliplogin": .Add "screen": .Add "shutdown": .Add "rwho" 266 .Add "sudo": .Add "gitps": .Add "swatch": .Add "tload": .Add "logrotate": .Add "uname": .Add "chsh": .Add "userconf": .Add "userdel" 267 .Add "usermod": .Add "vlock": .Add "who": .Add "whoami": .Add "whois": .Add "newgrp": .Add "renice": .Add "su": .Add "skill": .Add "w" 268 .Add "id": .Add "free": .Add "reset": .Add "clear": .Add "alias": .Add "dircolors": .Add "aumix": .Add "bind": .Add "chroot" 269 .Add "clock": .Add "crontab": .Add "declare": .Add "depmod": .Add "dmesg": .Add "enable": .Add "eval": .Add "export" 270 .Add "pwunconv": .Add "grpconv": .Add "rpm": .Add "insmod": .Add "kbdconfig": .Add "lilo": .Add "liloconfig": .Add "lsmod" 271 .Add "minfo": .Add "set": .Add "modprobe": .Add "ntsysv": .Add "mouseconfig": .Add "passwd": .Add "pwconv": .Add "rdate" 272 .Add "resize": .Add "rmmod": .Add "grpunconv": .Add "modinfo": .Add "time": .Add "setup": .Add "sndconfig": .Add "setenv" 273 .Add "setconsole": .Add "timeconfig": .Add "ulimit": .Add "unset": .Add "chkconfig": .Add "apmd": .Add "hwclock" 274 .Add "mkkickstart": .Add "fbset": .Add "unalias": .Add "SVGATextMode": .Add "ar": .Add "bunzip2": .Add "bzip2": .Add "yum" 275 .Add "bzip2recover": .Add "gunzip": .Add "unarj": .Add "compress": .Add "cpio": .Add "dump": .Add "uuencode": .Add "gzexe" 276 .Add "gzip": .Add "lha": .Add "restore": .Add "tar": .Add "uudecode": .Add "unzip": .Add "zip": .Add "zipinfo": .Add "setleds": .Add "echo" 277 .Add "loadkeys": .Add "rdev": .Add "dumpkeys" 278 End With 279 280 isRHELLANGKeyword = isSpecial(w, keys) 281 282 End Function 283 284 'RHEL syntax hight light 285 Sub RHELForSyntaxHighlight() 286 287 Dim wordCount As Integer 288 289 Dim d As Integer 290 291 ' set the style of selection 292 293 ' Selection.Style = "ccode" 294 295 d = 0 296 297 wordCount = Selection.Words.Count 298 299 Selection.StartOf wdWord 300 301 While d < wordCount 302 303 d = d + Selection.MoveRight(wdWord, 1, wdExtend) 304 305 w = Selection.Text 306 If isRHELLANGKeyword(Trim(w)) = True Then 307 308 Selection.Font.Color = wdColorBlue 309 310 Selection.Font.Bold = True 311 312 End If 313 314 If isRHELLANGKeyword(Trim(w)) = True Then 315 316 Selection.Font.Color = wdColorBlue 317 318 Selection.Font.Bold = True 319 320 321 ElseIf isOperator(Trim(w)) = True Then 322 Selection.Font.Bold = True 323 324 Selection.Font.Color = wdColorBrown 325 326 327 ElseIf isOthers(Trim(w)) = True Then 328 329 Selection.Font.Color = wdColorBrown 330 331 Selection.Font.Bold = True 332 333 Else 334 335 Selection.Font.Bold = True 336 End If 337 338 'move the start of selection to next word 339 340 Selection.MoveStart wdWord 341 342 Wend 343 344 ' prepare For set lIne number 345 346 'Selection.MoveLeft wdWord, wordCount, wdExtend 347 348 'SetLIneNumber 349 350 End Sub 351 ' java syntax hight light 352 Sub JavaLANGSyntaxHighlight() 353 354 Dim wordCount As Integer 355 356 Dim d As Integer 357 358 ' set the style of selection 359 360 ' Selection.Style = "ccode" 361 362 d = 0 363 364 wordCount = Selection.Words.Count 365 366 Selection.StartOf wdWord 367 368 While d < wordCount 369 370 d = d + Selection.MoveRight(wdWord, 1, wdExtend) 371 372 w = Selection.Text 373 If isJavaLANGKeyword(Trim(w)) = True Then 374 375 Selection.Font.Color = wdColorRed 376 377 Selection.Font.Bold = True 378 379 ElseIf isJavaSystemLANGKeyword(Trim(w)) = True Then 380 381 Selection.Font.Color = wdColorRed 382 383 Selection.Font.Bold = True 384 385 386 ElseIf isOperator(Trim(w)) = True Then 387 388 Selection.Font.Color = wdColorBrown 389 390 Selection.Font.Bold = True 391 392 ElseIf isOthers(Trim(w)) = True Then 393 394 Selection.Font.Color = wdColorBrown 395 396 Selection.Font.Bold = True 397 398 399 ElseIf Trim(w) = "//" Then 400 401 'lIne comment 402 403 Selection.MoveEnd wdLine, 1 404 405 commentWords = Selection.Words.Count 406 407 d = d + commentWords 408 409 Selection.Font.Color = wdColorBlack 410 411 Selection.MoveStart wdWord, commentWords 412 413 ElseIf Trim(w) = "/*" Then 414 415 'block comment 416 417 While Selection.Characters.Last <> "/" 418 419 Selection.MoveLeft wdCharacter, 1, wdExtend 420 421 Selection.MoveEndUntil ("*") 422 423 Selection.MoveRight wdCharacter, 2, wdExtend 424 425 Wend 426 427 commentWords = Selection.Words.Count 428 429 d = d + commentWords 430 431 Selection.Font.Color = wdColorBlack 432 433 Selection.MoveStart wdWord, commentWords 434 435 Selection.Font.Bold = True 436 Else 437 438 Selection.Font.Bold = True 439 440 End If 441 442 'move the start of selection to next word 443 444 Selection.MoveStart wdWord 445 446 Wend 447 448 ' prepare For set lIne number 449 450 Selection.MoveLeft wdWord, wordCount, wdExtend 451 452 SetLIneNumber 453 454 End Sub 455 ' python syntax high light 456 Sub PythonLANGSyntaxHighlight() 457 458 Dim wordCount As Integer 459 460 Dim d As Integer 461 462 ' set the style of selection 463 464 ' Selection.Style = "ccode" 465 466 d = 0 467 468 wordCount = Selection.Words.Count 469 470 Selection.StartOf wdWord 471 472 While d < wordCount 473 474 d = d + Selection.MoveRight(wdWord, 1, wdExtend) 475 476 w = Selection.Text 477 If isPythonLANGKeyword(Trim(w)) = True Then 478 479 Selection.Font.Color = wdColorViolet 480 481 Selection.Font.Bold = True 482 483 ElseIf isOperator(Trim(w)) = True Then 484 485 Selection.Font.Color = wdColorBrown 486 487 Selection.Font.Bold = True 488 489 ElseIf isOthers(Trim(w)) = True Then 490 491 Selection.Font.Color = wdColorBrown 492 493 Selection.Font.Bold = True 494 495 Else 496 497 Selection.Font.Bold = True 498 End If 499 500 'move the start of selection to next word 501 502 Selection.MoveStart wdWord 503 504 Wend 505 506 ' prepare For set lIne number 507 508 Selection.MoveLeft wdWord, wordCount, wdExtend 509 510 SetLIneNumber 511 512 End Sub 513 'C syntax hight light 514 Sub CLANGSyntaxHighlight() 515 516 Dim wordCount As Integer 517 518 Dim d As Integer 519 520 ' set the style of selection 521 522 ' Selection.Style = "ccode" 523 524 d = 0 525 526 wordCount = Selection.Words.Count 527 528 Selection.StartOf wdWord 529 530 While d < wordCount 531 532 d = d + Selection.MoveRight(wdWord, 1, wdExtend) 533 534 w = Selection.Text 535 If isCLANGKeyword(Trim(w)) = True Then 536 537 Selection.Font.Color = wdColorBlue 538 539 Selection.Font.Bold = True 540 541 542 ElseIf isOperator(Trim(w)) = True Then 543 544 Selection.Font.Bold = True 545 546 Selection.Font.Color = wdColorBrown 547 548 549 ElseIf isOthers(Trim(w)) = True Then 550 551 Selection.Font.Color = wdColorBrown 552 553 Selection.Font.Bold = True 554 555 556 ElseIf Trim(w) = "//" Then 557 558 'lIne comment 559 560 Selection.MoveEnd wdLine, 1 561 562 commentWords = Selection.Words.Count 563 564 d = d + commentWords 565 566 Selection.Font.Color = wdColorBlack 567 568 Selection.MoveStart wdWord, commentWords 569 570 ElseIf Trim(w) = "/*" Then 571 572 'block comment 573 574 While Selection.Characters.Last <> "/" 575 576 Selection.MoveLeft wdCharacter, 1, wdExtend 577 578 Selection.MoveEndUntil ("*") 579 580 Selection.MoveRight wdCharacter, 2, wdExtend 581 582 Wend 583 584 commentWords = Selection.Words.Count 585 586 d = d + commentWords 587 588 Selection.Font.Color = wdColorBlack 589 590 Selection.MoveStart wdWord, commentWords 591 592 Else 593 594 Selection.Font.Bold = True 595 End If 596 597 'move the start of selection to next word 598 599 Selection.MoveStart wdWord 600 601 Wend 602 603 ' prepare For set lIne number 604 605 Selection.MoveLeft wdWord, wordCount, wdExtend 606 607 SetLIneNumber 608 609 End Sub 610 611 ' MySQL syntax hight light 612 Sub MySQLForSyntaxHighlight() 613 614 Dim wordCount As Integer 615 616 Dim d As Integer 617 618 ' set the style of selection 619 620 ' Selection.Style = "ccode" 621 622 d = 0 623 624 wordCount = Selection.Words.Count 625 626 Selection.StartOf wdWord 627 628 While d < wordCount 629 630 d = d + Selection.MoveRight(wdWord, 1, wdExtend) 631 632 w = Selection.Text 633 634 If isMySQLKeyword(Trim(w)) = True Then 635 636 Selection.Font.Color = wdColorRed 637 638 Selection.Font.Bold = True 639 640 ElseIf isOperator(Trim(w)) = True Then 641 642 Selection.Font.Bold = True 643 644 Selection.Font.Color = wdColorBrown 645 646 647 ElseIf isOthers(Trim(w)) = True Then 648 649 Selection.Font.Color = wdColorBrown 650 651 Selection.Font.Bold = True 652 653 654 ElseIf Trim(w) = "#" Then 655 656 'lIne comment 657 658 Selection.MoveEnd wdLine, 1 659 660 commentWords = Selection.Words.Count 661 662 d = d + commentWords 663 664 Selection.Font.Color = wdColorBlack 665 666 Selection.MoveStart wdWord, commentWords 667 668 Else 669 670 Selection.Font.Bold = True 671 End If 672 673 'move the start of selection to next word 674 675 Selection.MoveStart wdWord 676 677 Wend 678 679 ' prepare For set lIne number 680 681 ' Selection.MoveLeft wdWord, wordCount, wdExtend 682 683 ' SetLIneNumber 684 685 End Sub
以下是来自互联网的源代码,原作者不是太清楚,这里附上链接 https://www.xuebuyuan.com/1843358.html
此处再次感谢提供基础源码的作者。
1 'script to high light code In document 2 3 Private Function isKeyword(w) As Boolean 4 5 Dim keys As New Collection 6 7 With keys 8 9 .Add "if": .Add "else": .Add "elseif": .Add "case": .Add "switch": .Add "break" 10 11 .Add "for": .Add "continue": .Add "do": .Add "while": .Add "foreach": .Add "echo" 12 13 .Add "define": .Add "array": .Add "NULL": .Add "function": .Add "include": .Add "return" 14 15 .Add "global": .Add "as": .Add "die": .Add "header": .Add "this": .Add "empty" 16 17 .Add "isset": .Add "mysql_fetch_assoc": .Add "class": .Add "style" 18 19 .Add "name": .Add "value": .Add "type": .Add "width": .Add "_POST": .Add "_GET" 20 21 End With 22 23 isKeyword = isSpecial(w, keys) 24 25 End Function 26 27 Private Function isSpecial(ByVal w As String, ByRef col As Collection) As Boolean 28 29 For Each i In col 30 31 If w = i Then 32 33 isSpecial = True 34 35 Exit Function 36 37 End If 38 39 Next 40 41 isspeical = False 42 43 End Function 44 45 Private Function isOperator(w) As Boolean 46 47 Dim ops As New Collection 48 49 With ops 50 51 .Add "+": .Add "-": .Add "*": .Add "/": .Add "&": .Add "^": .Add ";" 52 53 .Add "%": .Add "#": .Add "!": .Add ":": .Add ",": .Add "." 54 55 .Add "||": .Add "&&": .Add "|": .Add "=": .Add "++": .Add "--" 56 57 .Add "'": .Add """" 58 59 End With 60 61 isOperator = isSpecial(w, ops) 62 63 End Function 64 65 Private Function isType(ByVal w As String) As Boolean 66 67 Dim types As New Collection 68 69 With types 70 71 .Add "SELECT": .Add "FROM": .Add "WHERE": .Add "INSERT": .Add "INTO": .Add "VALUES": .Add "ORDER" 72 73 .Add "BY": .Add "LIMIT": .Add "ASC": .Add "DESC": .Add "UPDATE": .Add "DELETE": .Add "COUNT" 74 75 .Add "html": .Add "head": .Add "title": .Add "body": .Add "p": .Add "h1": .Add " h2" 76 77 .Add "h3": .Add "center": .Add "ul": .Add "ol": .Add "li": .Add "a" 78 79 .Add "input": .Add "form": .Add "b" 80 81 End With 82 83 isType = isSpecial(w, types) 84 85 End Function 86 87 Sub SyntaxHighlight() 88 89 Dim wordCount As Integer 90 91 Dim d As Integer 92 93 ' set the style of selection 94 95 Selection.Style = "ccode" 96 97 d = 0 98 99 wordCount = Selection.Words.Count 100 101 Selection.StartOf wdWord 102 103 While d < wordCount 104 105 d = d + Selection.MoveRight(wdWord, 1, wdExtend) 106 107 w = Selection.Text 108 109 If isKeyword(Trim(w)) = True Then 110 111 Selection.Font.Color = wdColorBlue 112 113 ElseIf isType(Trim(w)) = True Then 114 115 Selection.Font.Color = wdColorDarkRed 116 117 Selection.Font.Bold = True 118 119 ElseIf isOperator(Trim(w)) = True Then 120 121 Selection.Font.Color = wdColorBrown 122 123 ElseIf Trim(w) = "//" Then 124 125 'lIne comment 126 127 Selection.MoveEnd wdLine, 1 128 129 commentWords = Selection.Words.Count 130 131 d = d + commentWords 132 133 Selection.Font.Color = wdColorGreen 134 135 Selection.MoveStart wdWord, commentWords 136 137 ElseIf Trim(w) = "/*" Then 138 139 'block comment 140 141 While Selection.Characters.Last <> "/" 142 143 Selection.MoveLeft wdCharacter, 1, wdExtend 144 145 Selection.MoveEndUntil ("*") 146 147 Selection.MoveRight wdCharacter, 2, wdExtend 148 149 Wend 150 151 commentWords = Selection.Words.Count 152 153 d = d + commentWords 154 155 Selection.Font.Color = wdColorGreen 156 157 Selection.MoveStart wdWord, commentWords 158 159 End If 160 161 'move the start of selection to next word 162 163 Selection.MoveStart wdWord 164 165 Wend 166 167 ' prepare For set lIne number 168 169 Selection.MoveLeft wdWord, wordCount, wdExtend 170 171 SetLIneNumber 172 173 End Sub 174 175 Private Sub SetLIneNumber() 176 177 Dim lines As Integer 178 179 lines = Selection.Paragraphs.Count 180 181 Selection.StartOf wdParagraph 182 183 For l = 1 To lines 184 185 lIneNum = l & " " 186 187 If l < 10 Then 188 189 lIneNum = lIneNum & " " 190 191 End If 192 193 Selection.Text = lIneNum 194 195 Selection.Font.Bold = False 196 197 Selection.Font.Color = wdColorAutomatic 198 199 p = Selection.MoveDown(wdLine, 1, wdMove) 200 201 Selection.StartOf wdLine 202 203 Next 204 205 End Sub