Sfoglia il codice sorgente

[bugfix] some token must follow spaces
[wip] tmp highlight

B Thibault 8 anni fa
parent
commit
a3dd59397f
1 ha cambiato i file con 30 aggiunte e 7 eliminazioni
  1. 30 7
      msgFormatter.js

+ 30 - 7
msgFormatter.js

@@ -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) {