Skip to content

Instantly share code, notes, and snippets.

@intech
Last active December 17, 2015 13:29
Show Gist options
  • Save intech/5617979 to your computer and use it in GitHub Desktop.
Save intech/5617979 to your computer and use it in GitHub Desktop.
function Parser( text ) {
EventEmitter.call(this);
var parent = this;
this.text = text;
// Счётчик выполненных функций
this.done = 0;
// Проверяем все ли функции выполнены для передачи результата
this.on('done', function(where) {
// Если счётчик < 0 то вызываем событие end и отдаём результат
if(!done) emit('end', this.text);
done--;
});
// Ожидаем события для обработки bbcode
this.on('bbcode', function() {
this.done++;
console.log("Парс текста bbcode: %s", this.text);
// Вызываем приватную функцию класса
bbcode();
});
// Ожидаем событие для обработки smile
this.on('smile', function() {
this.done++;
console.log("Парс текста smile: %s", this.text);
// Вызываем приватную функцию класса
smile();
});
// *** Парсинг ББ-кодов *** //
var bbcode = function() {
parent.text = parent.text.replace(/\n/g, "<br>"); // переход на новую строку
parent.text = parent.text.replace(/\[b\](.*?)\[\/b\]/ig, "<b>$1</b>"); // жирный текст
parent.text = parent.text.replace(/\[i\](.*?)\[\/i\]/ig, "<i>$1</i>"); // наклонный текст
parent.text = parent.text.replace(/\[u\](.*?)\[\/u\]/ig, "<u>$1</u>"); // подчёркнутый текст
parent.text = parent.text.replace(/\[to\](.*?)\[\/to\]/ig, "<b>$1</b>"); // обращение
parent.text = parent.text.replace(/\[url\](.*?)\[\/url\]/ig, "<a href=\"$1\" target=\"_blank\">$1</a>"); // ссылка
parent.text = parent.text.replace(/\[url=(.*?)\](.*?)\[\/url\]/ig, "<a href=\"$1\" target=\"_blank\">$2</a>"); // ссылка
// Сообщаем, что всё готово
parent.emit('done', 'bbcode');
};
var smile = function() {
// Сообщаем, что всё готово
parent.emit('done', 'smile');
};
}
util.inherits(Parser, EventEmitter);
Parser.prototype.demo = function(text) {
console.log('Demo prototype function in class: ', text);
};
// Создаём класс и передаём сообщение
var parser = new Parser(msg);
// Сразу обозначаем событие завершения обработки текста
parser.on('end', function(text) {
// Демо-функция прототипирования
parser.demo('test demo');
// Выводим результат
console.log('END!', text);
});
// Теперь запускаем обработчик bbcode
parser.emit('bbcode');
// smile
parser.emit('smile');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment