|
|
@@ -234,7 +234,9 @@ var formatText = (function() {
|
|
|
if (this.isCode || this.isEmoji || this.isCodeBlock || this.isLink)
|
|
|
return null;
|
|
|
if (!this.lastNode || this.lastNode.terminated || this.lastNode instanceof MsgTextLeaf) {
|
|
|
- var nextIsAlphadec = isAlphadec(text[i +1]);
|
|
|
+ var prevIsAlphadec = isAlphadec(text[i -1]),
|
|
|
+ nextIsAlphadec = isAlphadec(text[i +1]);
|
|
|
+
|
|
|
if (text.substr(i, 3) === '```')
|
|
|
return '```';
|
|
|
if (isBeginingOfLine()) {
|
|
|
@@ -243,9 +245,13 @@ var formatText = (function() {
|
|
|
if (text[i] === '>')
|
|
|
return text[i];
|
|
|
}
|
|
|
- if (['`', '\n'].indexOf(text[i]) !== -1)
|
|
|
+ if ('`' === text[i] && !prevIsAlphadec)
|
|
|
+ return text[i];
|
|
|
+ if ('\n' === text[i])
|
|
|
return text[i];
|
|
|
- if (['*', '~', '-', '_' ].indexOf(text[i]) !== -1 && (nextIsAlphadec || ['*', '~', '-', '_', '<', '&'].indexOf(text[i+1]) !== -1))
|
|
|
+ if (['*', '~', '-', '_' ].indexOf(text[i]) !== -1 &&
|
|
|
+ (nextIsAlphadec || ['*', '~', '-', '_', '<', '&'].indexOf(text[i+1]) !== -1) &&
|
|
|
+ (prevIsAlphadec || ['*', '~', '-', '_', '<', '&'].indexOf(text[i-1]) !== -1))
|
|
|
return text[i];
|
|
|
if ([':'].indexOf(text[i]) !== -1 && nextIsAlphadec)
|
|
|
return text[i];
|
|
|
@@ -391,8 +397,25 @@ var formatText = (function() {
|
|
|
var formatted = opts.emojiFormatFunction(this.text);
|
|
|
return formatted ? formatted : this.text;
|
|
|
}
|
|
|
- if (this._parent.checkIsCodeBlock())
|
|
|
- return this.text.replace(/\n/g, '<br/>'); // TODO syntax highlight
|
|
|
+ if (this._parent.checkIsCodeBlock()) {
|
|
|
+ if (typeof hljs !== undefined) {
|
|
|
+ var text = this.text,
|
|
|
+ language,
|
|
|
+ availableLanguages = hljs.listLanguages();
|
|
|
+
|
|
|
+ for (var i =0, nbLang = availableLanguages.length; i < nbLang; i++) {
|
|
|
+ var l = availableLanguages[i];
|
|
|
+ if (text.substr(0, l.length) === l && isAlphadec(text[l.length])) {
|
|
|
+ language = l;
|
|
|
+ text = text.substr(l.length);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return hljs.highlight(language, text).value;
|
|
|
+ } else {
|
|
|
+ return this.text.replace(/\n/g, '<br/>'); // TODO syntax highlight https://github.com/isagalaev/highlight.js
|
|
|
+ }
|
|
|
+ }
|
|
|
return opts.textFilter(this.text);
|
|
|
};
|
|
|
|
|
|
@@ -412,8 +435,8 @@ var formatText = (function() {
|
|
|
classList.push('code');
|
|
|
innerHTML = this.innerHTML();
|
|
|
} else {
|
|
|
- if (this._parent.isLink) {
|
|
|
- var link = opts.linkFilter(this.text);
|
|
|
+ var link;
|
|
|
+ if (this._parent.isLink && (link = opts.linkFilter(this.text))) {
|
|
|
tagName = 'a';
|
|
|
params = ' href="' +link.link +'"';
|
|
|
if (link.isExternal) {
|