qemacs-commit
[Top][All Lists]
Advanced

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

[Qemacs-commit] qemacs extra-modes.c


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs extra-modes.c
Date: Tue, 01 Sep 2015 10:14:31 +0000

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        15/09/01 10:14:30

Modified files:
        .              : extra-modes.c 

Log message:
        haskell: colorize compiler directives

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/extra-modes.c?cvsroot=qemacs&r1=1.48&r2=1.49

Patches:
Index: extra-modes.c
===================================================================
RCS file: /sources/qemacs/qemacs/extra-modes.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- extra-modes.c       27 Aug 2015 23:03:40 -0000      1.48
+++ extra-modes.c       1 Sep 2015 10:14:30 -0000       1.49
@@ -2000,14 +2000,9 @@
 };
 
 enum {
-    IN_HASKELL_COMMENT = 0x0F,
-    IN_HASKELL_COMMENT_SHIFT = 0,
-    IN_HASKELL_STRING  = 0x10,
-};
-
-enum {
     HASKELL_STYLE_TEXT =     QE_STYLE_DEFAULT,
     HASKELL_STYLE_COMMENT =  QE_STYLE_COMMENT,
+    HASKELL_STYLE_PP_COMMENT = QE_STYLE_PREPROCESS,
     HASKELL_STYLE_STRING =   QE_STYLE_STRING,
     HASKELL_STYLE_NUMBER =   QE_STYLE_NUMBER,
     HASKELL_STYLE_KEYWORD =  QE_STYLE_KEYWORD,
@@ -2016,6 +2011,13 @@
     HASKELL_STYLE_SYMBOL =   QE_STYLE_NUMBER,
 };
 
+enum {
+    IN_HASKELL_COMMENT = 0x0F,
+    IN_HASKELL_COMMENT_SHIFT = 0,
+    IN_HASKELL_PP_COMMENT  = 0x10,  /* compiler directives {-# ... #-} */
+    IN_HASKELL_STRING  = 0x20,
+};
+
 static inline int haskell_is_symbol(int c)
 {
     return qe_findchar("!#$%&+./<=>address@hidden|-~:", c);
@@ -2057,8 +2059,15 @@
             if (str[i] == '-') {
                 state |= 1 << IN_HASKELL_COMMENT_SHIFT;
                 i++;
+                if (str[i] == '#') {
+                    state |= IN_HASKELL_PP_COMMENT;
+                    i++;
+                }
             parse_comment:
                 level = (state & IN_HASKELL_COMMENT) >> 
IN_HASKELL_COMMENT_SHIFT;
+                style = HASKELL_STYLE_COMMENT;
+                if (state & IN_HASKELL_PP_COMMENT)
+                    style = HASKELL_STYLE_PP_COMMENT;
                 while (i < n) {
                     c = str[i++];
                     if (c == '{' && str[i] == '-') {
@@ -2070,6 +2079,7 @@
                         i++;
                         level--;
                         if (level == 0) {
+                            state &= ~IN_HASKELL_PP_COMMENT;
                             i++;
                             break;
                         }
@@ -2077,7 +2087,6 @@
                 }
                 state &= ~IN_HASKELL_COMMENT;
                 state |= level << IN_HASKELL_COMMENT_SHIFT;
-                style = HASKELL_STYLE_COMMENT;
                 break;
             }
             /* FALL THRU */



reply via email to

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