源代码分析:python源程序转换为html页面

#源代码分析:python源程序转换为html页面
#此文件由 limodou 分析,如果转载请保留此信息

"""

    MoinMoin - Python Source Parser

"""

#文档字符串。 每个模块文件都可以有自已的文档字符串



# Imports

import cgi, string, sys, cStringIO

import keyword, token, tokenize





#############################################################################

### Python Source Parser (does Hilighting)

#############################################################################



#token.NT_OFFSET为终结符结束标记,即小于它的都是终结符,

#_KEYWORD,_TEXT不是终结符,故要大于它

_KEYWORD = token.NT_OFFSET + 1

_TEXT    = token.NT_OFFSET + 2



_colors = {

    token.NUMBER:       '#0080C0',     #对分析出的特定单词设定相应的颜色

    token.OP:           '#0000FF',     #NUMBER 数值 OP 操作符 STRING 字符串

    token.STRING:       '#004080',     #COMMENT 注释,在tokenize中才定义了COMMENT

    tokenize.COMMENT:   '#008000',     #NAME 标识符 ERRORTOKEN 错误的单词

    token.NAME:         '#000000',     #_KEYWORD 关键字 _TEXT 文本

    token.ERRORTOKEN:   '#FF8080',

    _KEYWORD:           '#FF0000',

    _TEXT:              '#000000',

}





class Parser:  #定义Parser类

    """ Send colored python source.

    """

    #文档字符串



    def __init__(self, raw, out = sys.stdout):   #初始化函数,输出到标准输出

        """ Store the source text.

        """

        self.raw = string.strip(string.expandtabs(raw))

        #expandtabs意为将raw中的制表符进行扩展,可以带第二个参数,不带表示一个制表符

        #替换成8个空格

        #strip是去掉首尾空白,包括回车,所以文件最后如果有回车符,也会去掉的



        self.out = out    #给实例属性out赋值



    def format(self, formatter, form): #格式化处理函数

        """ Parse and send the colored source.

        """

        # store line offsets in self.lines

        #保存每行的偏移量在实例的lines属性中

        self.lines = [0, 0]  #数据是从0下标开如,而行是从1开始,故放入两个0

        pos = 0

        while 1:

            pos = string.find(self.raw, '\n', pos) + 1

            #find是从行首开始查找指定字符串,此处查找回车符,pos表示起始位置。

            #指定这个参数,可以不从行首开始进行查找

            #如果没有找到则返回-1,加1后,如果没有找到pos值为0

            if not pos: break        #没找到,说明没有回车符了

            self.lines.append(pos)   #找到了,则将此位置追加到lines后

        self.lines.append(len(self.raw))  #将文件最后结束的长度也追加到lines中



        # parse the source and write it

        self.pos = 0  #记录处理的当前位置

        text = cStringIO.StringIO(self.raw)

        #cStringIO是象StringIO一样的类,主要是想提高处理速度,而且处理时,可以象处理

        #文件一样,使用文件处理函数

        self.out.write('

') #输出开始标记

        try:

            tokenize.tokenize(text.readline, self)

            #进行词法分析,第一个参数为一个对象,它是一个象readline一样的函数

            #用来读出一行字符串。在Python中函数也是对象

            #text是一个cStringIO对象,可以象文件一样操作,故有readline函数

            #第二个参数也为一个对象,它是一个有5个元素的函数,因为传入了self,则需要

            #在parser类中定义__call__方法,使self可以象函数一样

        except tokenize.TokenError, ex:  #如果分析出错产生TokenError异常

            msg = ex[0]  #出错消息

            line = ex[1][0]  #出错行

            self.out.write("
ERROR: %s
%s\n" % (  #输出错误信息

                msg, self.raw[self.lines[line]:]))

        self.out.write('

')  #输出结束标记



    def __call__(self, toktype, toktext, (srow,scol), (erow,ecol), line):

        #可以让对象象函数一样被调用,这个函数将用于tokenize中

        #toktype 单词类型

        #toktext 单词内容

        #(srow,scol)开始行列

        #(erow,ecol)结束行列

        #line 找到单词的行

        """ Token handler.

        """

        if 0: print "type", toktype, token.tok_name[toktype], "text", toktext,
"start",\

        srow,scol, "end", erow,ecol, "
"

        #调试语句,输出分析过程



        # calculate new positions

        oldpos = self.pos  #保存旧位置

        newpos = self.lines[srow] + scol  #根据保存的行位置计算新位置

        self.pos = newpos + len(toktext)  #保存下一个要处理的位置



        # handle newlines

        #处理回车

        if toktype in [token.NEWLINE, tokenize.NL]:  #判断单词是否为回车符

            self.out.write('\n')  #输出\n,为了保证原格式不变

            return



        # send the original whitespace, if needed

        # 如果需要输出原始的空白

        if newpos > oldpos:

            self.out.write(self.raw[oldpos:newpos])



        # skip indenting tokens

        # 跳过缩近单词

        if toktype in [token.INDENT, token.DEDENT]:

            self.pos = newpos  #调整处理位置

            return



        # map token type to a color group

        #映射单词类型到相应的颜色

        if token.LPAR <= toktype and toktype <= token.OP:  #确认操作符范围

            toktype = token.OP

        elif toktype == token.NAME and keyword.iskeyword(toktext):  #确认关键字

            toktype = _KEYWORD

        color = _colors.get(toktype, _colors[_TEXT])
#得到颜色,如果不存在,则使用缺省值



        style = ''  #处理样式

        if toktype == token.ERRORTOKEN:

            style = ' style="border: solid 1.5pt #FF0000;"'



        # send text

        self.out.write('' % (color, style))  #输出处理结果

        self.out.write(cgi.escape(toktext))  #escape会将特殊字符转变成html实体

        #其实只转换了&,<,>,如果第二个参数指定了,表示还要转换"

        self.out.write('')





if __name__ == "__main__":

    import os, sys

    if(len(sys.argv)!=3):           #判断参数个数,如果不为3,则读入文件名

        f1=input("inputfilename:")
#输入要处理的.py文件,记住要输入双引号,如:"a.txt"

        f2=input("outputfilename:")

    else:

        f1=sys.argv[1]

        f2=sys.argv[2]



    print "Formatting..."



    #读出要处理的文件内容

    source = open(f1).read()



    #处理第一个文件内容,并写入第二个文件

    Parser(source, open(f2, 'wt')).format(None, None)



    print "Finished"

Edited by limodou on
我也来说两句 查看全部回复

最新回复

  • tuvw073 (2008-5-14 09:49:59)

    支持!!呵呵   

















    致力于北京市快递公司资源整合,联合北京快递公司,就近指派快递北京国际快递
    ,使我们的客户享受真正意义上的快.
  • tuvw073 (2008-5-16 10:09:54)

    支持!!呵呵
       

















    致力于北京市快递公司资源整合,联合北京快递公司,就近指派快递北京国际快递
    ,使我们的客户享受真正意义上的快.
  • tuvw073 (2008-5-19 10:07:06)

    支持!!呵呵  
      











    强弓男性治疗仪是采用美国数字阴茎增大器和日本男性封闭循环式保育器技术,经国家食品药品监督管理局批准生产的一种专门用于治疗由于各种原因引发的阳痿、阴茎增大早泄阴茎延长
    前列腺炎 疾病的国家(准)字号医疗器械。强弓男性治疗仪特有的治疗机理在2007年1月被卫生部编入国家医学教材,是国内唯一可以同时治疗以上四种疾病的国家(准)字号医疗器械,也是国内唯一治疗阴茎短小的国家准字号产品。强弓男性治疗仪先后获得了全国消费者放心品牌和全国消费者知名品牌以及欧盟CE认证等殊荣。
  • tuvw073 (2008-5-21 17:24:03)

    新人报道,前辈多多关照!!!支持!!呵呵
















    北京海明心理咨询诊所服务于白领,提供心理咨询 ,催眠治疗心理诊所,, 心理治疗 ,婚姻咨询亲子教育,儿童及学生咨询,性心理,私人心理医生。侧重家庭治疗婚姻治疗。情绪管理。潜能开发和人格重建。
  • tuvw073 (2008-6-13 09:58:19)

    新人报道,多多关照拉!!!支持!!呵呵

      















    济南金力液压机械有限公司,是国内最大的液压 升降机 ,升降平台
    专业生产厂家之一
  • tuvw073 (2008-6-23 10:13:14)

    新人报道,前辈多多关照!!!支持!!呵呵












    苏州易维试验设备有限公司是一家集科研、设计及制造各类模拟环境试验恒温恒湿试验箱高低温试验箱盐雾试验箱的专业性企业。
  • tuvw073 (2008-7-01 12:22:33)

    新手报道请大家多多包含!!呵呵   希望;论坛越办越好!!!!!





















    nail equipment nail products nail product nail uv lamp nail uv lamp
  • rstu523 (2008-7-11 14:18:09)

    新人报道,前辈多多关照!!!支持!!呵呵











    张家港市泉龙机械有限公司是专业生产绿色环保节能型建材---彩钢复合板、彩钢机械 、彩钢墙面板和C、Z、H型钢等成型设备的企业;公司始终以“质量第一、信誉至上、服务快捷、不断创新”的经营理念,不断采用新技术,研制开发新产品,应用先进科学的管理,努力使产品质量精益求精。主要产品有彩钢设备夹芯板机械
  • tuvw073 (2008-7-17 23:47:48)

    济南华程百超科技有限公司公司是集机械、...纸带过滤机、液压、生产销售于一体的专业生产企业,公司主要生产液压缸
    、液压缸、电气控制及非标专用设备的设计制造,设计生产的液压
    但是,刘某是一名“独行大盗”,从撬车库门锁到偷车,再到销赃,均由他一个人完成。 “打开车库门,将电动车上的卷帘门、龙头锁、大锁锁上,再锁上车库门,车主一般要花 ...
    将花生仁含水量在4.5%-6.5%的花生干果,用花生米脱皮机脱掉外皮,再将花生仁过筛去掉尘土和杂质。 二、包仁。取干净白布若干块,将花生仁放在上面,包成饼状。 三、榨油。 ...
  • dzmms36 (2008-7-18 08:52:53)

    模具被认为是“工业生产的基脉冲除尘器础工艺装备”,国民经济的五大支柱产业:机械、电子模具加工、汽车、石化、建筑都离不开模具工业的同步发展。统计数据显示,“十五”期间,中国模具工业 ...
    公司不仅在国内北京模具 竞争力强大,在国际市场上也有很强竞争力,并在全球化学建材模具市场上占据重要地位。近期该股小幅盘升,但总体涨幅不大,主力压盘吸筹迹象明显,近日收 ...凭北京工业设计着自己活络的经商头脑和对模具的特殊爱好,2002年,周向儒、赵春华夫妇便在四川省都江堰市开办起向华模具材料厂,之后又在广东省东莞市常平北京产品设计镇开起夏华模具材料经营部 ...
  • dzmms36 (2008-7-19 09:09:51)

    婚后杰西卡曾接连7次怀孕,但都流产。2003年2月,当家人为杰西卡庆祝23岁生日那天,母亲黛安·希普称,她愿意充当代孕母亲,帮杰西卡生一个孩子
    美国母亲为女儿代孕生下男孩
    为不孕女"借腹生孙" 母女合生"奇迹孪生子"
    纯铝散热鳍片被用一种比嵌铜更先进的工艺-精密回流焊
    方式和纯铜的散热底座连接在一起,突破了传统铝挤压工艺的对散热鳍片厚度的限制,同样体积内,散热鳍片的数量大大
    专业设计制造SMT系半自动编带机列产品的高科技厂家,拥有先的生产设备及一批优秀的专全自动编带机业技术人才,及时为国内外客户提供各系列编带机
    波峰焊、回流焊、印刷机、涂装线、生产线等设备。 ...
  • dzmms36 (2008-7-20 21:00:03)

    此举不仅意味着由华人自清肺散结丸
    行研究的中国第一个具有自主知识产权的抗癌药物开始走进实际应用,也标志着中国在肿瘤治疗研究领域跨进国际第一方阵。 山东蓝金珍香胶囊
    公司研究的这种 ...在原慈丹胶囊本每天要服用的抗癌药之外,她还要服用两种抗抑郁药物。认知疗法、食物疗法、信仰疗法,都成为李兰妮与抑郁争夺自己清肺散结丸生命的武器。 尽管要忍受癌症和抑郁症
    营养品来看望她,还有的人不留姓名地把钱打进她的卡上,中华慈善总会为她捐出了每瓶二万多元的抗癌药,爱心在这里汇成了温暖的河流,给了这对恋人最大的抗病勇气
    珍香胶囊
  • dzmms36 (2008-7-21 09:05:10)

    该矿于2004年对600吨/制砖机日的一选厂进行二期扩建,先后投入2880万元,购置了选矿设备先进的破碎、球磨等选矿设备。 扩建完成投入运行以后,该厂生产能力迅速提升
    生产5-2000T系调直机列选矿设备,30-2000T系列制砂设备,我公司的产品以质优、价廉,周到的售后服务,赢得了广大用户的信赖和好评。产品销售及售后服务网络遍布全国各地,远 ...
    我们的选矿设备采矫直机用瑞典美卓公司的破碎机、圆锥磨机和中国矿业大学新研制的高效浮选柱设备,不但降低了能耗,也大大提高了自动化水平,同时利用两项已申报专利的新
    选矿摇床是用于选别细粒箍筋机物料的重力选矿设备,广泛应用于锡、钨、金银、铅、锌、钽、铌、铁、锰、钛铁和煤等矿的选矿设备。我厂生产选矿摇床历史悠久,并不断开发创新
  • dzmms36 (2008-7-21 10:43:50)

    在落户于山东省即墨市的青选矿设备岛振邦化纤有限公司公司的办公楼内,一个循环经济的示意图显得特别显眼:废旧塑料瓶经过高温蒸煮清洗、真空干燥后,通过纺丝机的高温融砌块机化制成
    是利用现在的太阳热水器的分体技术设计以太阳能真空管为组件的屋顶和外挂墙壁进行热水供应.二是把太阳能光伏电池选矿设备板设计为窗户和墙体建材提供电力和照明三是 ...
    据现场工作人员介绍,新南站主站房DEL显示屏、自动售票机等设备安装以及客服系统、消防喷淋系统、真空排污系统、环境真空砖机监控(BAS)系统、火灾消防监控(FAS)系统等10余 ...
    在低温贮藏条件下
    加气块,对于不同包装方式,甜玉米的还原糖含量变化趋势相同,均为先上升后下降,但真空包装甜玉米的还原糖在7天后才开始下降。几种包装贮藏过程中,蔗糖和 ...
  • dzmms36 (2008-7-24 09:30:24)

    但在这之前,芊芊跟同学们去了内蒙古旅游
    ,刚回来不久。说到这里,一旁的芊芊忍不住抢过话茬说:“我们7月4日那天去了内蒙古大草原,是学校组织我们去的,老师和学生都
    呼和浩特旅游界近日来到哈尔滨,推介迷人的内蒙古旅游风情,开启了两省区旅游交流合作的新篇章。 据介绍,黑龙江与内蒙古同为中国北方边境省区,都具有地域辽阔、生态
    哈尔滨召开的内蒙古旅行社推介会上获悉,黑龙江省旅游部门将联合内蒙古旅游部门深度开发中国“塞外”黄金旅游线路
    北京装饰公司表示对家装私单表示担忧
    如何选择放心安全的北京装修公司  ?
  • dzmms36 (2008-7-24 19:44:35)

    汇仁在中成药生产中率先运微波干燥用微波隧道干燥、灭菌技术代替蒸汽烘箱和远红外烘箱等干燥灭菌技术。微波干燥灭菌技术减少了能源消耗、缩减了设备所占空间。
    在干燥设备类型上,将以热风加热常压干燥设备、真空干燥设备为主,其他诸如远红外线干燥设备、微波干燥设备等特殊领域的用户也将逐步扩大微波杀菌
    镀锌
    钢格板广泛用于城市道路、广场、园林、码头、机场、停车场、公路、铁路、工业工程等各类工业民用建筑。 产品特点: 1、 二手不绣钢反应釜
    外形美观:线条简捷,银色外表,现代潮流
    应用数量。在食品、药
    胶浆品干燥
  • rstu523 (2008-7-26 11:13:11)

    支持!!呵呵  










    中国seo优化网是seo优化行业的seo优化普及、seo优化采购、seo优化技术、seo优化会展、seo优化招标行业平台是中国最大的seo优化权威网站,并以及时的seo优化新闻、海量的seo优化资讯和独到的seo优化信息分析,为广大seo优化爱好者seo优化订制服务是最权威的seo优化专场会议,seo优化专家为您精选的seo优化产品,迎您来展示您的seo优化产品seo优化发布服务基于seo优化经验丰富的seo优化企划人员和准确的seo优化投放系统,seo优化可以为seo优化客户顾名思义就是忠诚与seo优化的用户,是集seo优化客户,网络seo优化媒体,致力与seo优化厂家为一体seo优化知识应用及傻子产品的价值升华。
  • dzmms36 (2008-7-29 00:38:42)

    搪瓷反应釜坐在反射中子往核心他们可以为一切使用从照耀的硅到做医院的放射性药物重水里面的坦克。 重水由普通的“轻的”水服务一辆更大的坦克,反过来,围拢作为蓄冷剂和辐射盾。

    Early去年,在新的反应釜是宣称的开放的由总理以前,约翰・霍华德,工程师发现微小的泄漏比计划允许“一些满杯轻水每天”渗出入内在坦克,稀释重水,造成它反射少量中子。

    INVAP,负责反应器的设计的阿根廷公司和建筑,提出注射微观铝土微粒入坦克密封泄漏。

    Done,当反应器被关闭了10个月时,固定松开的13个铀板状元件,修理起初看上去成功。 然而,当反应器在5月供给了动力,泄漏再现了。

    "建议使用的电加热反应釜包商真正未运作的技术修理, “卡梅伦博士说,补充说,自从反应器被重新了开始, “泄漏率增加了。 我们必须认为另一个方式做它”。

    With仍然反应器在保单,它之下是由解决问题的INVAP决定。 “它是建筑问题”,卡梅伦博士说。 “我们送了他们亏损通知”。
    被考虑的One可能性是
    搪玻璃反应釜重水第二辆坦克的设施定期地驱赶出来不需要的轻水的。

    He说泄漏是“操作的不便”,但是他知道没有某一早小故障没困扰的其他反应器。

    "他们全都有他们自己的怪癖, “他说。

    He保持确信关于蛋白石的未来。 “我们在世界上希望是名列前茅三个研究用反应器之一”。
  • rstu523 (2008-7-29 14:03:57)

    新人报道,前辈多多关照!!!支持!!呵呵















    600050股票行情分析介绍----北京天威证券投资.
  • dzmms36 (2008-7-30 11:24:13)

    Sucampo配药在唯一中心阶段肝硬化腹水II注册了它的第一名患者试验评估它的临床阶段化合物, cobiprostone,门高血压的治疗的在病人的有肝病。

    The阶段II双重蒙蔽了,随肝硬化治疗机化,安慰剂受控研究将估计在对待门高血压的cobiprostone的安全和效力。 研究计划在得克萨斯大学西南医疗中心注册大约30名患者在达拉斯。

    The主要效力终点是肝癌晚期治疗从基础线的变化在跟随28天研究治疗的肝多血脉性的压力梯度(HVPG)上。

    Secondary终点在肝癌治疗病和患者报告的生活水平其他标志包括在跟随最初药量的HVPG上的深刻变化与cobiprostone,以及改变措施。

    Sucampo cobiprostone也肝硬化在食道溃疡的治疗的临床发展在患者的治疗与处方非类固醇消炎药疗法。 迄今, cobiprostone在两相I试验被评估了在健康志愿者和在三相II证明概念试验。

    Ryuji Ueno、Sucampo的主席和CEO,说: “死亡的大约三分之一在病人的有肝病是由食管variceal出血造成的由于门高血压。 我们相信cobiprostone也许减轻门静脉压力,并且也许减少variceal出血可能”。