Здравствуйте.Пытаюсь сделать предосмотр сообщений. Дошёл до момента парсинга bbcode to html.Нашёл скрипт всё работает, но не хватало пару содов.С простыми справился а вот на [code=php] застрял. Престаёт работать при переносе строк.Т.е. так работает (изменил название, а то паррсит)
[codes=php]str str[/codes]
[codes=php]str str[/codes]
а так нет
[codes=php]str
str[/codes]
Помогите поправить. Код
Кликните здесь для просмотра всего текста
Javascript |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
| var BBCodeHTML = function() {
var me = this; // stores the object instance
var token_match = /{[A-Z_]+[0-9]*}/ig;
var tokens = {
'CODE' : '(.*?)'
};
var bbcode_matches = [];
var html_tpls = [];
var html_matches = [];
var bbcode_tpls = [];
var _getRegEx = function(str) {
var matches = str.match(token_match);
var nrmatches = matches.length;
var i = 0;
var replacement = '';
if (nrmatches <= 0) {
return new RegExp(preg_quote(str), 'g');
}
for(; i < nrmatches; i += 1) {
var token = matches[i].replace(/[{}0-9]/g, '');
if (tokens[token]) {
replacement += preg_quote(str.substr(0, str.indexOf(matches[i]))) + tokens[token];
str = str.substr(str.indexOf(matches[i]) + matches[i].length);
}
}
replacement += preg_quote(str);
return new RegExp(replacement, 'gi');
};
var _getTpls = function(str) {
var matches = str.match(token_match);
var nrmatches = matches.length;
var i = 0;
var replacement = '';
var positions = {};
var next_position = 0;
if (nrmatches <= 0) {
return str;
}
for(; i < nrmatches; i += 1) {
// Remove {, } and numbers from the token so it can match the
// keys in tokens
var token = matches[i].replace(/[{}0-9]/g, '');
var position;
// figure out what $# to use ($1, $2)
if (positions[matches[i]]) {
position = positions[matches[i]];
} else {
next_position += 1;
position = next_position;
positions[matches[i]] = position;
}
if (tokens[token]) {
replacement += str.substr(0, str.indexOf(matches[i])) + '$' + position;
str = str.substr(str.indexOf(matches[i]) + matches[i].length);
}
}
replacement += str;
return replacement;
};
me.addBBCode = function(bbcode_match, bbcode_tpl) {
bbcode_matches.push(_getRegEx(bbcode_match));
html_tpls.push(_getTpls(bbcode_tpl));
};
me.bbcodeToHtml = function(str) {
var nrbbcmatches = bbcode_matches.length;
var i = 0;
for(; i < nrbbcmatches; i += 1) {
str = str.replace(bbcode_matches[i], html_tpls[i]);
}
return str;
};
me.htmlToBBCode = function(str) {
var nrhtmlmatches = html_matches.length;
var i = 0;
for(; i < nrhtmlmatches; i += 1) {
str = str.replace(html_matches[i], bbcode_tpls[i]);
}
return str;
}
function preg_quote (str, delimiter) {
return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
}
me.addBBCode('[code=php]{CODE}[/code]', '<pre><code class="php">{CODE}</code></pre>');
};
var bbcodeParser = new BBCodeHTML(); // creates object instance of BBCodeHTML() |
|