上一篇讲过用Python实现的Basic脚扫描,这里可以利用它实现语法高亮,其它语言应该也没问题,改下关键字和符号表。
#! /usr/bin/env python
#
# Copyright (C) 2012 xxx(xx) Co., LTD.
# All rights reserved.
#
# Developed by RD BIOS Team.
#
# Authors: perry <perry.peng@cn.xxx.com>
#
#
#
import string
from filescan import *
__version__ = "1.0.0"
if __name__ == "__main__":
infile = 'test.bas'
outfile = infile + '.htm'
reader = BasicReader(infile)
htm = open(outfile, 'w')
htm.write('''
<html>
<head>
</head>
<body>
''')
while reader.next():
if reader.type == BSCTK_ENDL:
htm.write('<br />')
elif reader.type == BSCTK_IDENT:
htm.write('<span style="color:green;">%s</span> ' % reader.name)
elif reader.type == BSCTK_KEYWORD:
htm.write('<span style="color:blue;font-weight:bold;">%s</span> ' % reader.name)
elif reader.type == BSCTK_INTEGER:
htm.write('<span style="color:gray;">%s</span>' % reader.value)
elif reader.type == BSCTK_FLOAT:
htm.write('<span style="color:gray">%s</span>' % reader.value)
elif reader.type == BSCTK_OPERATOR:
operators = {
BSCOP_ADD: '+',
BSCOP_SUB: '-',
BSCOP_MUL: '*',
BSCOP_DIV: '/',
BSCOP_IDIV: '\\',
BSCOP_OP: '(',
BSCOP_CP: ')',
BSCOP_EQUAL: '=',
BSCOP_FIELD: '~',
BSCOP_POWER: '^',
BSCOP_COLON: ':',
BSCOP_LT: '<',
BSCOP_GT: '>',
BSCOP_DOT:'.',
BSCOP_COMMA: ',',
BSCOP_VAR: '%',
BSCOP_AMP: '&',
BSCOP_DBL: '#',
BSCOP_STR: '$',
BSCOP_SIG: '!'}
htm.write('<span style="color:black;">%s</span>' % operators[reader.value])
elif reader.type == BSCTK_STRING:
htm.write('<span style="color:red;">"%s"</span>' % reader.value)
htm.write('''
</body>
</html>
''')
htm.close()
以下是效果:
DIM A(8,9),S1, M2AS BYTE, C1$,C2$,C3%,C4!,C5&,C6#,C8!
DIM CX,AX AS STRING ,U7 ,U9AS DATETIME
DIM BXAS INTEGER ,ALAS LONG ,CLAS DOUBLE ,B1AS LONG ,B2AS BOOLEAN
DIM EAS ERROR ,V1AS VARIANT ,V2AS VARIANT ,ARRAS ARRAY ,FUNAS FUNCTION
DIM F1(30)AS FUNCTION ,FKAS FUNCTION ,FCAS FUNCTION
DIM ARRAY_BIG(1000,1000,1000)AS STRING
S1 =0
M2 =0
GOTO LABEL1
A (S1,M2)=0
WHILE A (S,M2)<8
C1 =1
C6=0
LABEL1:
IF (A(S1,AL)=A(BX,B1))THENB2=0