2 * This is the orginial function from Stuart Langridge at http://www.kryogenix.org/
6 * This is the update function from Jeff Minard - http://www.jrm.cc/
8 function superTextile(s) {
11 qtags = [['\\*', 'strong'],
13 ['\\+', 'ins'], //fixed
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+'>');
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>');
27 re = new RegExp('[\\s\\n]-(.+?)-[\\s\\n]','g');
28 r = r.replace(re,'<del>$1</del>');
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>');
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">');
42 // block level formatting
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');
52 lines = r.split('\n');
54 for (i=0;i<lines.length;i++) {
55 line = lines[i].replace(/\s*$/,'');
57 if (line.search(/^\s*bq\.\s+/) != -1) {
58 line = line.replace(/^\s*bq\.\s+/,'\t<blockquote>')+'</blockquote>';
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>');
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';
75 // Second pass to do lists
78 for (i=0;i<lines.length;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'; }
88 // jeff added : will correctly replace <li(o|u)> AND </li(o|u)>
89 r = r.replace(/li[o|u]>/g,'li>');
94 exports.encode = superTextile;