zoukankan      html  css  js  c++  java
  • 代码格式化[转]

     
    使用js正则表达式格式化加亮C#源代码
        很经常,我们可以看到在网页上看到各式各样的代码,比如下面这段CSharp Source Code,通常他们可能是这样的:
    	private DataSet _dsContacts;
                private string _sSort;
                private void Page_Load(object sender, System.EventArgs e)
                {
                //code here
                }
                
    但是,如果他们是这样来显示,我想看起来应该更舒服吧
    	private DataSet _dsContacts;
                private string _sSort;
                private void Page_Load(object sender, System.EventArgs e)
                {
                	  //code here
                	}
                
    一些站点上也有对某种语言的关键字进行加亮显示,比如CodeProject或者dotnetjunkies等,不过他们都是定义了特定的css样式,然后逐一进行样式应用来进行加亮显示,如果这种技术没有后台支持的话,将会有产生相当大的工作量,利用Javascript强大的正则表达式功能,我们可以在没有后台支持的情况下以少量的工作来完成这个功能,String.Replace()将会为我们完成所有核心工作
       //替换关键字
                for (thiskey in CsharpKeyword)
                {
                reg = new RegExp("\\b("+CsharpKeyword[thiskey].toString()+"){1}\\b","g");
                text = text.replace(reg,"<font color=blue>$1</font>");
                }
                //替换"..."字符串中可能被加亮的关键字
                text = text.replace(/\"([^\"]*)\"/g,function($1){return $1.replace(/<\/?font.*?>/gi,"")});
                //.号表示除换行符或其他Unicode中止符之外的所有字符(替换单行注释符)
                text = text.replace(/(\/\/.*)/g,function($1){return "<font color=green>"+$1.replace(/<\/?font.*?>/gi,"")+"</font>"});
                text = text.replace(/(\/\*[\S\s]*\*\/)/g,function($1){return "<font color=green>"+$1.replace(/<\/?font.*?>/gi, "")+"</font>"});//替换多行注释符
                
    基本上,这里替换加亮特殊代码需要按照这样的步骤:替换关键字->替换字符串("")中的关键字(第一个步骤可能将某些字符串中的关键字加亮了,这个步骤需要把它们转回去)->替换//单行注释->替换/**/多行注释,每一个替换都要先擦掉原来的<font>标记,才能解决嵌套的情况,否则有可能//a<font color=red>b</font>c最终显示的是//abc而不是期望中的//a<font color=red>b</font>c;这是最关键的地方.
    需要注意的是,String.Replace(regex,replacement)方法;如果replacement是一个函数的话,必须要Javascript1.2或者Jscript5.5(IE5.5)以上才能实现
    BTW:感谢BLUEIDEA的JS斑竹小狗提供了每次替换重新擦除前一次替换的<font>标签的思路
    完整的源代码可以从下面的连接下载,已经简单的封装成HTC,方便调用
    You can view the demos from here
    FormatCsharpCode.htc
     copyright 2003 by MMKK
     
  • 相关阅读:
    cnblog项目--20190309
    django js引入失效问题
    Python老男孩 day16 函数(六) 匿名函数
    Python老男孩 day16 函数(五) 函数的作用域
    Python老男孩 day15 函数(四) 递归
    Python老男孩 day15 函数(三) 前向引用之'函数即变量'
    Python老男孩 day15 函数(二) 局部变量与全局变量
    Python老男孩 day14 函数(一)
    Python老男孩 day14 字符串格式化
    Python老男孩 day14 集合
  • 原文地址:https://www.cnblogs.com/twh/p/1004789.html
Copyright © 2011-2022 走看看