Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 19.02.2016, 12:09
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Ещё на шаг ближе.
С переносом получилось. Но работает только с 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=='.Что это что с ним делать.
Ответить с цитированием
  #12 (permalink)  
Старый 19.02.2016, 18:39
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от ureech
s,p1,p2,p3?
Ну давал жи ссылку на страницу с регулярками
s - найденная подсрока
pn - найденная скобка (по порядковому номеру - три скобки - три параметра
Ответить с цитированием
  #13 (permalink)  
Старый 19.02.2016, 18:44
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от ureech
И не понятен '==bound=='.Что это что с ним делать.
//После распарса парсером
//вставляем назад перепарсенные теги код из стека (ток их надо самому распарсить, заменить начальный тег(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];
});

Последний раз редактировалось Deff, 19.02.2016 в 22:22.
Ответить с цитированием
  #14 (permalink)  
Старый 19.02.2016, 21:11
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Вроде всё получилось. Большое спасибо, теперь попробую самостоятельно с audio и video справиться.
Ответить с цитированием
  #15 (permalink)  
Старый 20.02.2016, 14:31
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Возник небольшой баг. Если я оборачиваю строку в код, а затем в спойлер, то при сохранении строка в спойлере выглядит как строка, а не код.
Путь для решения ясен.
Добавляю к существующей
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>');

Для сойлера соответственно свой, для кода в спойлере я допишу, но как заставить использовать нужный?
Вложения:
Тип файла: txt bbcode.txt (3.6 Кб, 0 просмотров)

Последний раз редактировалось ureech, 20.02.2016 в 14:39.
Ответить с цитированием
  #16 (permalink)  
Старый 20.02.2016, 15:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Цитата:
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;
});
}
По идее все блоки c кодами нужно складывать в один стек и индекс j продолжать наращивать, а не сбрасывать в -1
Либо заводить на каждый иной блок код новый массив стека, с иным именем(не вижу в этом смысла)
И ставя второй раз stack = [] - вы убили все данные, добавленные в Первом цикле
================
Про спойлер,
Есть некий Вариант с прописыванием своих собственных функций обработки
Парсинг BBcode
Ответить с цитированием
  #17 (permalink)  
Старый 20.02.2016, 16:10
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Понятно. Спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BBCode аля [html] для форумов phpBB pupena_san Javascript под браузер 0 06.07.2014 14:25
После добавления localstorage в backbone модель, POST запрос ничего не возвращает aphex Общие вопросы Javascript 0 03.12.2013 15:26
localstorage internet explorer10 не работает kostant Javascript под браузер 3 28.08.2013 18:15
Обход элементов localStorage berserk10 Events/DOM/Window 8 11.08.2013 14:55
Не сохраняется localStorage после перезагрузки браузера Бобр Firefox/Mozilla 1 20.10.2011 20:31