--- live-comment-preview.php.save 2005-10-08 05:28:07.018967456 -0400 +++ live-comment-preview.php 2005-10-08 05:35:29.987753325 -0400 @@ -27,51 +27,90 @@ header('Content-type: text/javascript'); ?> -function wptexturize(text) { - text = ' '+text+' '; - var next = true; - var output = ''; - var prev = 0; - var length = text.length; - while ( prev < length ) { - var index = text.indexOf('<', prev); - if ( index > -1 ) { - if ( index == prev ) { - index = text.indexOf('>', prev); - } - index++; - } else { - index = length; +function wptexturize(s) { + var r = s; + // quick tags first + qtags = [['\\*', 'strong'], + ['\\?\\?', 'cite'], + ['\\+', 'ins'], //fixed + ['~', 'sub'], + ['\\^', 'sup'], // me + ['@', 'code']]; + for (var i=0;i'+'$1'+''); + } + // underscores count as part of a word, so do them separately + re = new RegExp('\\b_(.+?)_\\b','g'); + r = r.replace(re,'$1'); + + //jeff: so do dashes + re = new RegExp('[\s\n]-(.+?)-[\s\n]','g'); + r = r.replace(re,'$1'); + + // links + re = new RegExp('"\\b(.+?)\\(\\b(.+?)\\b\\)":([^\\s]+)','g'); + r = r.replace(re,'$1'); + re = new RegExp('"\\b(.+?)\\b":([^\\s]+)','g'); + r = r.replace(re,'$1'); + + // images + re = new RegExp('!\\b(.+?)\\(\\b(.+?)\\b\\)!','g'); + r = r.replace(re,'$2'); + re = new RegExp('!\\b(.+?)\\b!','g'); + r = r.replace(re,''); + + // block level formatting + + // Jeff's hack to show single line breaks as they should. + // insert breaks - but you get some....stupid ones + re = new RegExp('(.*)\n([^#\*\n].*)','g'); + r = r.replace(re,'$1
$2'); + // remove the stupid breaks. + re = new RegExp('\n
','g'); + r = r.replace(re,'\n'); + + lines = r.split('\n'); + nr = ''; + for (var i=0;i')+''; + changed = 1; } - var s = text.substring(prev, index); - prev = index; - if ( s.substr(0,1) != '<' && next == true ) { - s = s.replace(/---/g, '—'); - s = s.replace(/--/g, '–'); - s = s.replace(/\.{3}/g, '…'); - s = s.replace(/``/g, '“'); - s = s.replace(/'s/g, '’s'); - s = s.replace(/'(\d\d(?:’|')?s)/g, '’$1'); - s = s.replace(/([\s"])'/g, '$1‘'); - s = s.replace(/(\d+)"/g, '$1″'); - s = s.replace(/(\d+)'/g, '$1′'); - s = s.replace(/([^\s])'([^'\s])/g, '$1’$2'); - s = s.replace(/(\s)"([^\s])/g, '$1“$2'); - s = s.replace(/"(\s)/g, '”$1'); - s = s.replace(/'(\s|.)/g, '’$1'); - s = s.replace(/\(tm\)/ig, '™'); - s = s.replace(/\(c\)/ig, '©'); - s = s.replace(/\(r\)/ig, '®'); - s = s.replace(/''/g, '”'); - s = s.replace(/(\d+)x(\d+)/g, '$1×$2'); - } else if ( s.substr(0,5) == '$2'); + changed = 1; } - output += s; - } - return output.substr(1, output.length-2); + + if (line.search(/^\s*\*\s+/) != -1) { line = line.replace(/^\s*\*\s+/,'\t') + ''; changed = 1; } // * for bullet list; make up an liu tag to be fixed later + if (line.search(/^\s*#\s+/) != -1) { line = line.replace(/^\s*#\s+/,'\t') + ''; changed = 1; } // # for numeric list; make up an lio tag to be fixed later + if (!changed && (line.replace(/\s/g,'').length > 0)) line = '

'+line+'

'; + lines[i] = line + '\n'; + } + + // Second pass to do lists + inlist = 0; + listtype = ''; + for (var i=0;i AND + r = r.replace(/li[o|u]>/g,'li>'); + + return r; } function wpautop(p) {