]> gitweb.factorcode.org Git - factor.git/commitdiff
FUEL: font-locking improvments
authorBjörn Lindqvist <bjourne@gmail.com>
Sat, 20 Aug 2016 01:41:51 +0000 (03:41 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Sat, 20 Aug 2016 01:41:51 +0000 (03:41 +0200)
Highlighting of flags{, HEX{ and of array parameters passed to c
functions.

misc/fuel/factor-mode.el
misc/fuel/strange-syntax.factor

index 68f4883c17e3265676109f0ec48ae70a4ea6cca5..75c3112e2d5b6292983e8631dd8eef243bd8ea2f 100644 (file)
@@ -180,6 +180,8 @@ these lines in your .emacs:
 ;; Utility regexp used by other regexps to match a Factor symbol name
 (setq-local symbol-nc "\\(?:\\sw\\|\\s_\\|\"\\|\\s(\\|\\s)\\|\\s\\\\)+")
 (setq-local symbol (format "\\(%s\\)" symbol-nc))
+(setq-local c-symbol-nc "\\(?:\\sw\\|\\s_\\|\\[\\|\\]\\)+")
+(setq-local c-symbol (format "\\(%s\\)" c-symbol-nc))
 (setq-local ws+ "[ \n\t]+")
 (setq-local symbols-to-semicolon "\\([^;\t]*\\)\\(;\\)")
 
@@ -239,7 +241,7 @@ these lines in your .emacs:
   (regexp-opt factor-constant-words 'symbols))
 
 (defconst factor-bracer-words
-  '("B" "BV" "C" "CS" "H" "HS" "S" "T" "V" "W"))
+  '("B" "BV" "C" "CS" "HEX" "H" "HS" "S" "T" "V" "W" "flags"))
 
 (defconst factor-brace-words-regex
   (format "%s{" (regexp-opt factor-bracer-words t)))
@@ -399,6 +401,11 @@ these lines in your .emacs:
           ws+ symbol
           ws+ symbol ws+))
 
+;; Regexp from hell that puts every type name in the first group,
+;; names and brackets in the second and third.
+(defconst factor-function-params-regex
+  (format "\\(?:%s%s\\(%s,?\\(?:%s)\\)?\\)\\|\\([()]\\)\\)" c-symbol ws+ c-symbol-nc ws+))
+
 (defconst factor-function-alias-regex
   (concat (syntax-begin '("FUNCTION-ALIAS"))
           ws+ symbol
@@ -419,7 +426,6 @@ these lines in your .emacs:
 (defun factor-group-name-to-face (group-name)
   (gethash group-name factor-group-name-to-face))
 
-
 (defun factor-groups-to-font-lock (groups)
   (let ((i 0))
     (mapcar (lambda (x)
@@ -452,7 +458,7 @@ these lines in your .emacs:
     ,(factor-syntax (syntax-and-2-symbols '("LOG")) '("P" "W" ""))
     ,(factor-syntax (syntax-and-1-symbol '("ALIEN" "CHAR" "NAN")) '("P" "CT"))
     ,(factor-syntax factor-types-lines-regex '("P" "T"))
-    ,(factor-syntax factor-integer-regex '("N"))
+
     (,factor-float-regex . 'factor-font-lock-number)
     (,factor-ratio-regex . 'factor-font-lock-ratio)
     ,(factor-syntax factor-type-definition-regex '("P" "T"))
@@ -499,9 +505,7 @@ these lines in your .emacs:
      (1 'factor-font-lock-parsing-word)
      (2 'factor-font-lock-type-name)
      (3 'factor-font-lock-word)
-     ;; Regexp from hell that puts every type name in the first group,
-     ;; names and brackets in the second and third.
-     ("\\(?:\\(\\(?:\\sw\\|\\s_\\)+\\)[ \n]+\\(\\(?:\\sw\\|\\s_\\)+,?\\(?:[ \n]+)\\)?\\)\\|\\([()]\\)\\)"
+     (,factor-function-params-regex
       (factor-find-ending-bracket)
       nil
       (1 'factor-font-lock-type-in-stack-effect nil t)
@@ -514,12 +518,13 @@ these lines in your .emacs:
      (2 'factor-font-lock-word)
      (3 'factor-font-lock-type-name)
      (4 'factor-font-lock-word)
-     ("\\(?:\\(\\(?:\\sw\\|\\s_\\)+\\)[ \n]+\\(\\(?:\\sw\\|\\s_\\)+,?\\(?:[ \n]+)\\)?\\)\\|\\([()]\\)\\)"
+     (,factor-function-params-regex
       (factor-find-ending-bracket)
       nil
       (1 'factor-font-lock-type-in-stack-effect nil t)
       (2 'factor-font-lock-stack-effect nil t)
       (3 'factor-font-lock-stack-effect nil t)))
+    ,(factor-syntax factor-integer-regex '("N"))
     (factor-match-brackets . 'factor-font-lock-stack-effect)
     ,(factor-syntax factor-constructor-regex '("CO"))
     (,factor-setter-regex . 'factor-font-lock-setter-word)
index 21f0cbd3ae217c20990e9f5f00d026b101c648e7..82014c99c513069e5c366459cdd5ee597df8afca 100644 (file)
@@ -1,4 +1,5 @@
-USING: accessors ;
+USING: accessors alien.c-types alien.syntax byte-arrays.hex kernel
+literals logging math ;
 IN: strange
 
 ! FUEL Syntax Demo
@@ -36,7 +37,9 @@ TUPLE: tup
 : slash\hack ( m -- y )
     get\it>> dup >>get\it ;
 
-LOG: what ever
+: very-weird[33] ( -- ) ;
+
+LOG: what NOTICE
 
 TUPLE: oh\no { and/again initial: "meh" } ;
 
@@ -77,3 +80,13 @@ ID-SYNTAX ID-SYNTAX
 ! ! Containers
 V{ 1 2 3 } drop
 HS{ 9 8 3 } drop
+
+flags{ 10 20 } drop
+
+! TODO: Highlight contents too.
+HEX{ ab cd ef } drop
+
+! ! Alien functions
+FUNCTION: int futimes ( int id, timeval[2] times )
+FUNCTION: int booyah ( int x )
+FUNCTION-ALIAS: test int bah ( int* ah, int[] eh )