Add scripts to create myops-getqueryview:
[myops.git] / web / query / vendor / textile / textile.js
1 /*
2  * This is the orginial function from Stuart Langridge at http://www.kryogenix.org/
3  */
4  
5 /*
6 * This is the update function from Jeff Minard - http://www.jrm.cc/
7 */
8 function superTextile(s) {
9     var r = s;
10     // quick tags first
11     qtags = [['\\*', 'strong'],
12              ['\\?\\?', 'cite'],
13              ['\\+', 'ins'],  //fixed
14              ['~', 'sub'],   
15              ['\\^', 'sup'], // me
16              ['@', 'code']];
17     for (var i=0;i<qtags.length;i++) {
18         ttag = qtags[i][0]; htag = qtags[i][1];
19         re = new RegExp(ttag+'(.+?)'+ttag,'g');
20         r = r.replace(re,'<'+htag+'>'+'$1'+'</'+htag+'>');
21     }
22     // underscores count as part of a word, so do them separately
23     re = new RegExp('\\b_(.+?)_\\b','g');
24     r = r.replace(re,'<em>$1</em>');
25         
26         //jeff: so do dashes
27     re = new RegExp('[\\s\\n]-(.+?)-[\\s\\n]','g');
28     r = r.replace(re,'<del>$1</del>');
29
30     // links
31     re = new RegExp('"\\b(.+?)\\(\\b(.+?)\\b\\)":([^\\s]+)','g');
32     r = r.replace(re,'<a href="$3" title="$2">$1</a>');
33     re = new RegExp('"(.+?)":([^\\s]+)','g');
34     r = r.replace(re,'<a href="$2">$1</a>');
35
36     // images
37     re = new RegExp('!\\b(.+?)\\(\\b(.+?)\\b\\)!','g');
38     r = r.replace(re,'<img src="$1" alt="$2">');
39     re = new RegExp('!\\b(.+?)\\b!','g');
40     r = r.replace(re,'<img src="$1">');
41     
42     // block level formatting
43         
44                 // Jeff's hack to show single line breaks as they should.
45                 // insert breaks - but you get some....stupid ones
46             re = new RegExp('(.*)\\n([^#\\*\\n].*)','g');
47             r = r.replace(re,'$1<br />$2');
48                 // remove the stupid breaks.
49             re = new RegExp('\\n<br />','g');
50             r = r.replace(re,'\n');
51         
52     lines = r.split('\n');
53     nr = '';
54     for (i=0;i<lines.length;i++) {
55         line = lines[i].replace(/\s*$/,'');
56         changed = 0;
57         if (line.search(/^\s*bq\.\s+/) != -1) { 
58                         line = line.replace(/^\s*bq\.\s+/,'\t<blockquote>')+'</blockquote>'; 
59                         changed = 1; 
60                 }
61                 
62                 // jeff adds h#.
63         if (line.search(/^\s*h[1|2|3|4|5|6]\.\s+/) != -1) { 
64                 re = new RegExp('h([1|2|3|4|5|6])\\.(.+)','g');
65                 line = line.replace(re,'<h$1>$2</h$1>');
66                         changed = 1; 
67                 }
68                 
69                 if (line.search(/^\s*\*\s+/) != -1) { line = line.replace(/^\s*\*\s+/,'\t<liu>') + '</liu>'; changed = 1; } // * for bullet list; make up an liu tag to be fixed later
70         if (line.search(/^\s*#\s+/) != -1) { line = line.replace(/^\s*#\s+/,'\t<lio>') + '</lio>'; changed = 1; } // # for numeric list; make up an lio tag to be fixed later
71         if (!changed && (line.replace(/\s/g,'').length > 0)) {line = '<p>'+line+'</p>';}
72         lines[i] = line + '\n';
73     }
74         
75     // Second pass to do lists
76     inlist = 0; 
77         listtype = '';
78     for (i=0;i<lines.length;i++) {
79         line = lines[i];
80         if (inlist && listtype == 'ul' && !line.match(/^\t<liu/)) { line = '</ul>\n' + line; inlist = 0; }
81         if (inlist && listtype == 'ol' && !line.match(/^\t<lio/)) { line = '</ol>\n' + line; inlist = 0; }
82         if (!inlist && line.match(/^\t<liu/)) { line = '<ul>' + line; inlist = 1; listtype = 'ul'; }
83         if (!inlist && line.match(/^\t<lio/)) { line = '<ol>' + line; inlist = 1; listtype = 'ol'; }
84         lines[i] = line;
85     }
86
87     r = lines.join('\n');
88         // jeff added : will correctly replace <li(o|u)> AND </li(o|u)>
89     r = r.replace(/li[o|u]>/g,'li>');
90
91     return r;
92 }
93
94 exports.encode = superTextile;