Ещё на шаг ближе.:)
С переносом получилось. Но работает только с php и css кодом, c html не хочет.Потому, как в этой части кода var stack = [], j=-1, bound = '==bound=='; str = str.replace(/(\[code(:?=[^\]]+)?\])(.*?)(\[\/code\])/gi, function (s,p1,p2,p3){ stack[++j]=[p1,p2,p3]; return bound+j+bound; }); мне не понятно,что такое s,p1,p2,p3? И не понятен '==bound=='.Что это что с ним делать. |
Цитата:
s - найденная подсрока pn - найденная скобка (по порядковому номеру - три скобки - три параметра |
Цитата:
//После распарса парсером //вставляем назад перепарсенные теги код из стека (ток их надо самому распарсить, заменить начальный тег(p1), к примеру на '<div><pre>', конечный(p3) - на '</pre></div>'; меж ними p2 =>(контент), т.е в каждой ячейке стека должен быть распарсенный тег, вместо массива [p1,p2,p3] //str - строка после парсера, меняем "==bound==NUMstack==bound==", на распарсенный тег из стека str = str.replace(/==bound==(\d+)==bound==/g, function (s,p1){ return stack[+p1]; }); |
Вроде всё получилось. Большое спасибо, теперь попробую самостоятельно с audio и video справиться.:)
|
Вложений: 1
Возник небольшой баг. Если я оборачиваю строку в код, а затем в спойлер, то при сохранении строка в спойлере выглядит как строка, а не код.
Путь для решения ясен. Добавляю к существующей var cod = /(\[code(:?=[^\]]+)?\])(.*?)(\[\/code\])/gi; переменную var sp_cod = /(\[spoiler(:?=[^\]]+)?\]\[code(:?=[^\]]+)?\])(.*?)(\[\/code\]\[\/spoiler\])/gi; для использования в стеке a.mess = (a.mess).replace(sp_cod, function (s,p1,p2,p3){ stack[++j]=[p1,p2,p3]; return bound+j+bound; }); Но не могу сообразить как правильно условие прописать здесь, а затем и в парсере. Если здесь думаю что так if(cod){ var stack = [], j=-1, bound = '==bound=='; a.mess = (a.mess).replace(cod, function (s,p1,p2,p3){ stack[++j]=[p1,p2,p3]; return bound+j+bound; }); } if(sp_cod){ var stack = [], j=-1, bound = '==bound=='; a.mess = (a.mess).replace(sp_cod, function (s,p1,p2,p3){ stack[++j]=[p1,p2,p3]; return bound+j+bound; }); } То в парсере вообще не знаю. Там используется такой метод me.addBBCode('[code=php]{CODE}[/code]', '<code>{CODE}</code>'); Для сойлера соответственно свой, для кода в спойлере я допишу, но как заставить использовать нужный? |
Цитата:
Либо заводить на каждый иной блок код новый массив стека, с иным именем(не вижу в этом смысла) И ставя второй раз stack = [] - вы убили все данные, добавленные в Первом цикле ================ Про спойлер, Есть некий Вариант с прописыванием своих собственных функций обработки http://javascript.ru/forum/misc/2493...tml#post403467 |
Понятно. Спасибо.
|
Часовой пояс GMT +3, время: 12:59. |