Last active
December 17, 2015 13:29
-
-
Save intech/5617979 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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