From a26d910b0660000c35cd3c8c7e18408c7a6ed39b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Sat, 20 Aug 2016 03:41:51 +0200 Subject: [PATCH] FUEL: font-locking improvments Highlighting of flags{, HEX{ and of array parameters passed to c functions. --- misc/fuel/factor-mode.el | 19 ++++++++++++------- misc/fuel/strange-syntax.factor | 17 +++++++++++++++-- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/misc/fuel/factor-mode.el b/misc/fuel/factor-mode.el index 68f4883c17..75c3112e2d 100644 --- a/misc/fuel/factor-mode.el +++ b/misc/fuel/factor-mode.el @@ -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) diff --git a/misc/fuel/strange-syntax.factor b/misc/fuel/strange-syntax.factor index 21f0cbd3ae..82014c99c5 100644 --- a/misc/fuel/strange-syntax.factor +++ b/misc/fuel/strange-syntax.factor @@ -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 )