qemacs-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemacs-commit] qemacs markdown.c


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs markdown.c
Date: Mon, 15 May 2017 04:00:20 -0400 (EDT)

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        17/05/15 04:00:20

Modified files:
        .              : markdown.c 

Log message:
        markdown: support more syntaxes for verbatim blocks
        - accept :::lang syntax for verbatim block language spec

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/markdown.c?cvsroot=qemacs&r1=1.29&r2=1.30

Patches:
Index: markdown.c
===================================================================
RCS file: /sources/qemacs/qemacs/markdown.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- markdown.c  25 Apr 2017 17:41:27 -0000      1.29
+++ markdown.c  15 May 2017 08:00:20 -0000      1.30
@@ -57,6 +57,7 @@
 };
 
 static ModeDef *mkd_lang_def[MKD_LANG_MAX + 1];
+static char mkd_lang_char[MKD_LANG_MAX + 1];
 
 #define MKD_BULLET_STYLES  4
 static int MkdBulletStyles[MKD_BULLET_STYLES] = {
@@ -90,7 +91,7 @@
     return 0;
 }
 
-static int mkd_add_lang(const char *lang_name) {
+static int mkd_add_lang(const char *lang_name, char c) {
     ModeDef *m;
     int lang = 0;
 
@@ -98,10 +99,12 @@
         for (lang = 1; lang < MKD_LANG_MAX; lang++) {
             if (mkd_lang_def[lang] == NULL)
                 mkd_lang_def[lang] = m;
-            if (mkd_lang_def[lang] == m)
+            if (mkd_lang_def[lang] == m) {
+                mkd_lang_char[lang] = c;
                 break;
         }
     }
+    }
     return lang;
 }
 
@@ -151,15 +154,16 @@
     }
 
     if (colstate & IN_MKD_BLOCK) {
+        int lang = (colstate & IN_MKD_BLOCK) >> MKD_LANG_SHIFT;
+
         /* Should count number of ~ to detect end of block */
         if (ustrstart(str + j, "~~~", NULL)
-        ||  ustrstart(str + j, "```", NULL)) {
+        ||  ustrstart(str + j, "```", NULL)
+        ||  (indent < 4 && mkd_lang_char[lang] == ':')) {
             colstate &= ~IN_MKD_BLOCK;
             i = n;
             SET_COLOR(str, start, i, MKD_STYLE_TILDE);
         } else {
-            int lang = (colstate & IN_MKD_BLOCK) >> MKD_LANG_SHIFT;
-
             if (mkd_lang_def[lang]) {
                 cp->colorize_state = colstate & IN_MKD_LANG_STATE;
                 mkd_lang_def[lang]->colorize_func(cp, str + i, n - i, 
mkd_lang_def[lang]);
@@ -231,7 +235,8 @@
         base_style = MKD_STYLE_TABLE;
     } else
     if (ustrstart(str + j, "~~~", NULL)
-    ||  ustrstart(str + j, "```", NULL)) {
+    ||  ustrstart(str + j, "```", NULL)
+    ||  ustrstart(str + j, ":::", NULL)) {
         /* verbatim block */
         char lang_name[16];
         int lang = syn->colorize_flags, len;  // was MKD_LANG_MAX
@@ -245,7 +250,7 @@
         }
         lang_name[len] = '\0';
         if (len) {
-            lang = mkd_add_lang(lang_name);
+            lang = mkd_add_lang(lang_name, str[j]);
         }
         colstate |= lang << MKD_LANG_SHIFT;
         i = n;
@@ -856,7 +861,7 @@
         s->indent_tabs_mode = 0;
         /* XXX: should come from mode.default_wrap */
         s->wrap = WRAP_WORD;
-        s->mode->colorize_flags = mkd_add_lang("coffee");
+        s->mode->colorize_flags = mkd_add_lang("coffee", 0);
     }
     return 0;
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]