source: trunk/plugins/LocalFilesEditor/editarea/reg_syntax.js @ 5160

Last change on this file since 5160 was 5160, checked in by patdenice, 14 years ago

Editor
Update editarea to 0.8.2.
Remove CSS tab.
Fix jQuery path.

File size: 6.5 KB
Line 
1        EditAreaLoader.prototype.get_regexp= function(text_array){
2                //res="( |=|\\n|\\r|\\[|\\(|µ|)(";
3                res="(\\b)(";
4                for(i=0; i<text_array.length; i++){
5                        if(i>0)
6                                res+="|";
7                        //res+="("+ tab_text[i] +")";
8                        //res+=tab_text[i].replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\{|\})/g, "\\$1");
9                        res+=this.get_escaped_regexp(text_array[i]);
10                }
11                //res+=")( |\\.|:|\\{|\\(|\\)|\\[|\\]|\'|\"|\\r|\\n|\\t|$)";
12                res+=")(\\b)";
13                reg= new RegExp(res);
14               
15                return res;
16        };
17       
18       
19        EditAreaLoader.prototype.get_escaped_regexp= function(str){
20                return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g, "\\$1");
21        };
22       
23        EditAreaLoader.prototype.init_syntax_regexp= function(){
24                var lang_style= {};     
25                for(var lang in this.load_syntax){
26                        if(!this.syntax[lang])  // init the regexp if not already initialized
27                        {
28                                this.syntax[lang]= {};
29                                this.syntax[lang]["keywords_reg_exp"]= {};
30                                this.keywords_reg_exp_nb=0;
31                       
32                                if(this.load_syntax[lang]['KEYWORDS']){
33                                        param="g";
34                                        if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)
35                                                param+="i";
36                                        for(var i in this.load_syntax[lang]['KEYWORDS']){
37                                                if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function") continue;
38                                                this.syntax[lang]["keywords_reg_exp"][i]= new RegExp(this.get_regexp( this.load_syntax[lang]['KEYWORDS'][i] ), param);
39                                                this.keywords_reg_exp_nb++;
40                                        }
41                                }
42                               
43                                if(this.load_syntax[lang]['OPERATORS']){
44                                        var str="";
45                                        var nb=0;
46                                        for(var i in this.load_syntax[lang]['OPERATORS']){
47                                                if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function") continue;
48                                                if(nb>0)
49                                                        str+="|";                               
50                                                str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);
51                                                nb++;
52                                        }
53                                        if(str.length>0)
54                                                this.syntax[lang]["operators_reg_exp"]= new RegExp("("+str+")","g");
55                                }
56                               
57                                if(this.load_syntax[lang]['DELIMITERS']){
58                                        var str="";
59                                        var nb=0;
60                                        for(var i in this.load_syntax[lang]['DELIMITERS']){
61                                                if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function") continue;
62                                                if(nb>0)
63                                                        str+="|";
64                                                str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);
65                                                nb++;
66                                        }
67                                        if(str.length>0)
68                                                this.syntax[lang]["delimiters_reg_exp"]= new RegExp("("+str+")","g");
69                                }
70                               
71                               
72                //              /(("(\\"|[^"])*"?)|('(\\'|[^'])*'?)|(//(.|\r|\t)*\n)|(/\*(.|\n|\r|\t)*\*/)|(<!--(.|\n|\r|\t)*-->))/gi
73                                var syntax_trace=[];
74                               
75                //              /("(?:[^"\\]*(\\\\)*(\\"?)?)*("|$))/g
76                               
77                                this.syntax[lang]["quotes"]={};
78                                var quote_tab= [];
79                                if(this.load_syntax[lang]['QUOTEMARKS']){
80                                        for(var i in this.load_syntax[lang]['QUOTEMARKS']){     
81                                                if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function") continue;                       
82                                                var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);
83                                                this.syntax[lang]["quotes"][x]=x;
84                                                //quote_tab[quote_tab.length]="("+x+"(?:\\\\"+x+"|[^"+x+"])*("+x+"|$))";
85                                                //previous working : quote_tab[quote_tab.length]="("+x+"(?:[^"+x+"\\\\]*(\\\\\\\\)*(\\\\"+x+"?)?)*("+x+"|$))";
86                                                quote_tab[quote_tab.length]="("+ x +"(\\\\.|[^"+ x +"])*(?:"+ x +"|$))";
87                                               
88                                                syntax_trace.push(x);                   
89                                        }                       
90                                }
91                                               
92                                this.syntax[lang]["comments"]={};
93                                if(this.load_syntax[lang]['COMMENT_SINGLE']){
94                                        for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){ 
95                                                if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function") continue;                                           
96                                                var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);
97                                                quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";
98                                                syntax_trace.push(x);
99                                                this.syntax[lang]["comments"][x]="\n";
100                                        }                       
101                                }               
102                                // (/\*(.|[\r\n])*?\*/)
103                                if(this.load_syntax[lang]['COMMENT_MULTI']){
104                                        for(var i in this.load_syntax[lang]['COMMENT_MULTI']){
105                                                if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function") continue;                                                   
106                                                var start=this.get_escaped_regexp(i);
107                                                var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);
108                                                quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";
109                                                syntax_trace.push(start);
110                                                syntax_trace.push(end);
111                                                this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];
112                                        }                       
113                                }               
114                                if(quote_tab.length>0)
115                                        this.syntax[lang]["comment_or_quote_reg_exp"]= new RegExp("("+quote_tab.join("|")+")","gi");
116                               
117                                if(syntax_trace.length>0) //   /((.|\n)*?)(\\*("|'|\/\*|\*\/|\/\/|$))/g
118                                        this.syntax[lang]["syntax_trace_regexp"]= new RegExp("((.|\n)*?)(\\\\*("+ syntax_trace.join("|") +"|$))", "gmi");
119                               
120                                if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){
121                                        this.syntax[lang]["script_delimiters"]= {};
122                                        for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){
123                                                if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function") continue;                                                       
124                                                this.syntax[lang]["script_delimiters"][i]= this.load_syntax[lang]['SCRIPT_DELIMITERS'];
125                                        }                       
126                                }
127                               
128                                this.syntax[lang]["custom_regexp"]= {};
129                                if(this.load_syntax[lang]['REGEXPS']){
130                                        for(var i in this.load_syntax[lang]['REGEXPS']){
131                                                if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function") continue;
132                                                var val= this.load_syntax[lang]['REGEXPS'][i];
133                                                if(!this.syntax[lang]["custom_regexp"][val['execute']])
134                                                        this.syntax[lang]["custom_regexp"][val['execute']]= {};
135                                                this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp' : new RegExp(val['search'], val['modifiers'])
136                                                                                                                                                        , 'class' : val['class']};
137                                        }
138                                }
139                               
140                                if(this.load_syntax[lang]['STYLES']){                                                   
141                                        lang_style[lang]= {};
142                                        for(var i in this.load_syntax[lang]['STYLES']){
143                                                if(typeof(this.load_syntax[lang]['STYLES'][i])=="function") continue;
144                                                if(typeof(this.load_syntax[lang]['STYLES'][i]) != "string"){
145                                                        for(var j in this.load_syntax[lang]['STYLES'][i]){                                                     
146                                                                lang_style[lang][j]= this.load_syntax[lang]['STYLES'][i][j];
147                                                        }
148                                                }else{
149                                                        lang_style[lang][i]= this.load_syntax[lang]['STYLES'][i];
150                                                }
151                                        }
152                                }
153                                // build style string
154                                var style="";           
155                                for(var i in lang_style[lang]){
156                                        if(lang_style[lang][i].length>0){
157                                                style+= "."+ lang +" ."+ i.toLowerCase() +" span{"+lang_style[lang][i]+"}\n";
158                                                style+= "."+ lang +" ."+ i.toLowerCase() +"{"+lang_style[lang][i]+"}\n";                               
159                                        }
160                                }
161                                this.syntax[lang]["styles"]=style;
162                        }
163                }                               
164        };
165       
166        editAreaLoader.waiting_loading["reg_syntax.js"]= "loaded";
Note: See TracBrowser for help on using the repository browser.