上一篇讲过用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